From 062c1a04fcc129f2ba61edaac2f7b35e07e11e81 Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 14 Aug 2018 14:42:01 -0600 Subject: [PATCH 001/311] Commit JT 081418 - initial commit pppm_spin branch - copied short_range spin files (src/SPIN) - copied/renamed Stan's file (from pppm_dipole branch) --- src/DIPOLE/pair_lj_cut_dipole_long.cpp | 2 +- src/KSPACE/pppm.h | 8 +- src/KSPACE/pppm_spin.cpp | 2559 ++++++++++++++++++++++++ src/KSPACE/pppm_spin.h | 213 ++ src/SPIN/pair_spin_long.cpp | 550 +++++ src/SPIN/pair_spin_long.h | 97 + src/kspace.cpp | 4 +- src/kspace.h | 2 +- 8 files changed, 3427 insertions(+), 8 deletions(-) create mode 100644 src/KSPACE/pppm_spin.cpp create mode 100644 src/KSPACE/pppm_spin.h create mode 100644 src/SPIN/pair_spin_long.cpp create mode 100644 src/SPIN/pair_spin_long.h diff --git a/src/DIPOLE/pair_lj_cut_dipole_long.cpp b/src/DIPOLE/pair_lj_cut_dipole_long.cpp index 817a120e3d..a0e7c1c4ec 100644 --- a/src/DIPOLE/pair_lj_cut_dipole_long.cpp +++ b/src/DIPOLE/pair_lj_cut_dipole_long.cpp @@ -44,7 +44,7 @@ using namespace MathConst; PairLJCutDipoleLong::PairLJCutDipoleLong(LAMMPS *lmp) : Pair(lmp) { single_enable = 0; - ewaldflag = dipoleflag = 1; + ewaldflag = pppmflag = dipoleflag = 1; respa_enable = 0; } diff --git a/src/KSPACE/pppm.h b/src/KSPACE/pppm.h index 9cb6bebb25..c6d463b69c 100644 --- a/src/KSPACE/pppm.h +++ b/src/KSPACE/pppm.h @@ -41,7 +41,7 @@ class PPPM : public KSpace { virtual ~PPPM(); virtual void init(); virtual void setup(); - void setup_grid(); + virtual void setup_grid(); virtual void compute(int, int); virtual int timing_1d(int, double &); virtual int timing_3d(int, double &); @@ -105,10 +105,10 @@ class PPPM : public KSpace { double qdist; // distance from O site to negative charge double alpha; // geometric factor - void set_grid_global(); + virtual void set_grid_global(); void set_grid_local(); void adjust_gewald(); - double newton_raphson_f(); + virtual double newton_raphson_f(); double derivf(); double final_accuracy(); @@ -145,7 +145,7 @@ class PPPM : public KSpace { void compute_drho1d(const FFT_SCALAR &, const FFT_SCALAR &, const FFT_SCALAR &); void compute_rho_coeff(); - void slabcorr(); + virtual void slabcorr(); // grid communication diff --git a/src/KSPACE/pppm_spin.cpp b/src/KSPACE/pppm_spin.cpp new file mode 100644 index 0000000000..32e91cc9b2 --- /dev/null +++ b/src/KSPACE/pppm_spin.cpp @@ -0,0 +1,2559 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + 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: Stan Moore (SNL) +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include +#include "pppm_dipole.h" +#include "atom.h" +#include "comm.h" +#include "gridcomm.h" +#include "neighbor.h" +#include "force.h" +#include "pair.h" +#include "bond.h" +#include "angle.h" +#include "domain.h" +#include "fft3d_wrap.h" +#include "remap_wrap.h" +#include "memory.h" +#include "error.h" +#include "update.h" + +#include "math_const.h" +#include "math_special.h" + +using namespace LAMMPS_NS; +using namespace MathConst; +using namespace MathSpecial; + +#define MAXORDER 7 +#define OFFSET 16384 +#define LARGE 10000.0 +#define SMALL 0.00001 +#define EPS_HOC 1.0e-7 + +enum{REVERSE_MU}; +enum{FORWARD_MU,FORWARD_MU_PERATOM}; + +#ifdef FFT_SINGLE +#define ZEROF 0.0f +#define ONEF 1.0f +#else +#define ZEROF 0.0 +#define ONEF 1.0 +#endif + +/* ---------------------------------------------------------------------- */ + +PPPMDipole::PPPMDipole(LAMMPS *lmp, int narg, char **arg) : PPPM(lmp, narg, arg), + densityx_brick_dipole(NULL), densityy_brick_dipole(NULL), + densityz_brick_dipole(NULL), ux_brick_dipole(NULL), + uy_brick_dipole(NULL), uz_brick_dipole(NULL), vdxx_brick_dipole(NULL), + vdxy_brick_dipole(NULL), vdyy_brick_dipole(NULL), + vdxz_brick_dipole(NULL), vdyz_brick_dipole(NULL), + vdzz_brick_dipole(NULL), v0x_brick_dipole(NULL), v1x_brick_dipole(NULL), + v2x_brick_dipole(NULL), v3x_brick_dipole(NULL), v4x_brick_dipole(NULL), + v5x_brick_dipole(NULL), v0y_brick_dipole(NULL), v1y_brick_dipole(NULL), + v2y_brick_dipole(NULL), v3y_brick_dipole(NULL), v4y_brick_dipole(NULL), + v5y_brick_dipole(NULL), v0z_brick_dipole(NULL), v1z_brick_dipole(NULL), + v2z_brick_dipole(NULL), v3z_brick_dipole(NULL), v4z_brick_dipole(NULL), + v5z_brick_dipole(NULL), work3(NULL), work4(NULL), + densityx_fft_dipole(NULL), densityy_fft_dipole(NULL), + densityz_fft_dipole(NULL) +{ + dipoleflag = 1; + group_group_enable = 0; + + cg_dipole = NULL; + cg_peratom_dipole = NULL; +} + +/* ---------------------------------------------------------------------- + free all memory +------------------------------------------------------------------------- */ + +PPPMDipole::~PPPMDipole() +{ + if (copymode) return; + + deallocate(); + if (peratom_allocate_flag) deallocate_peratom(); + fft1 = NULL; + fft2 = NULL; + remap = NULL; + cg_dipole = NULL; +} + +/* ---------------------------------------------------------------------- + called once before run +------------------------------------------------------------------------- */ + +void PPPMDipole::init() +{ + if (me == 0) { + if (screen) fprintf(screen,"PPPMDipole initialization ...\n"); + if (logfile) fprintf(logfile,"PPPMDipole initialization ...\n"); + } + + // error check + + dipoleflag = atom->mu?1:0; + qsum_qsq(0); + if (dipoleflag && q2) + error->all(FLERR,"Cannot (yet) uses charges with Kspace style PPPMDipole"); + + triclinic_check(); + + if (triclinic != domain->triclinic) + error->all(FLERR,"Must redefine kspace_style after changing to triclinic box"); + + if (domain->dimension == 2) error->all(FLERR, + "Cannot use PPPMDipole with 2d simulation"); + if (comm->style != 0) + error->universe_all(FLERR,"PPPMDipole can only currently be used with " + "comm_style brick"); + + if (!atom->mu) error->all(FLERR,"Kspace style requires atom attribute mu"); + + if (atom->mu && differentiation_flag == 1) error->all(FLERR,"Cannot (yet) use kspace_modify diff" + " ad with dipoles"); + + if (dipoleflag && strcmp(update->unit_style,"electron") == 0) + error->all(FLERR,"Cannot (yet) use 'electron' units with dipoles"); + + if (slabflag == 0 && domain->nonperiodic > 0) + error->all(FLERR,"Cannot use nonperiodic boundaries with PPPMDipole"); + if (slabflag) { + if (domain->xperiodic != 1 || domain->yperiodic != 1 || + domain->boundary[2][0] != 1 || domain->boundary[2][1] != 1) + error->all(FLERR,"Incorrect boundaries with slab PPPMDipole"); + } + + if (order < 2 || order > MAXORDER) { + char str[128]; + sprintf(str,"PPPMDipole order cannot be < 2 or > than %d",MAXORDER); + error->all(FLERR,str); + } + + // extract short-range Coulombic cutoff from pair style + + triclinic = domain->triclinic; + if (triclinic) + error->all(FLERR,"Cannot yet use triclinic cells with PPPMDipole"); + + pair_check(); + + int itmp = 0; + double *p_cutoff = (double *) force->pair->extract("cut_coul",itmp); + if (p_cutoff == NULL) + error->all(FLERR,"KSpace style is incompatible with Pair style"); + cutoff = *p_cutoff; + + // kspace TIP4P not yet supported + + if (tip4pflag) + error->all(FLERR,"Cannot yet use TIP4P with PPPMDipole"); + + // compute qsum & qsqsum and warn if not charge-neutral + + scale = 1.0; + qqrd2e = force->qqrd2e; + musum_musq(); + natoms_original = atom->natoms; + + // set accuracy (force units) from accuracy_relative or accuracy_absolute + + if (accuracy_absolute >= 0.0) accuracy = accuracy_absolute; + else accuracy = accuracy_relative * two_charge_force; + + // free all arrays previously allocated + + deallocate(); + if (peratom_allocate_flag) deallocate_peratom(); + + // setup FFT grid resolution and g_ewald + // normally one iteration thru while loop is all that is required + // if grid stencil does not extend beyond neighbor proc + // or overlap is allowed, then done + // else reduce order and try again + + int (*procneigh)[2] = comm->procneigh; + + GridComm *cgtmp = NULL; + int iteration = 0; + + while (order >= minorder) { + if (iteration && me == 0) + error->warning(FLERR,"Reducing PPPMDipole order b/c stencil extends " + "beyond nearest neighbor processor"); + + compute_gf_denom(); + set_grid_global(); + set_grid_local(); + if (overlap_allowed) break; + + cgtmp = new GridComm(lmp,world,1,1, + nxlo_in,nxhi_in,nylo_in,nyhi_in,nzlo_in,nzhi_in, + nxlo_out,nxhi_out,nylo_out,nyhi_out,nzlo_out,nzhi_out, + procneigh[0][0],procneigh[0][1],procneigh[1][0], + procneigh[1][1],procneigh[2][0],procneigh[2][1]); + cgtmp->ghost_notify(); + if (!cgtmp->ghost_overlap()) break; + delete cgtmp; + + order--; + iteration++; + } + + if (order < minorder) error->all(FLERR,"PPPMDipole order < minimum allowed order"); + if (!overlap_allowed && cgtmp->ghost_overlap()) + error->all(FLERR,"PPPMDipole grid stencil extends " + "beyond nearest neighbor processor"); + if (cgtmp) delete cgtmp; + + // adjust g_ewald + + if (!gewaldflag) adjust_gewald(); + + // calculate the final accuracy + + double estimated_accuracy = final_accuracy_dipole(); + + // print stats + + int ngrid_max,nfft_both_max; + MPI_Allreduce(&ngrid,&ngrid_max,1,MPI_INT,MPI_MAX,world); + MPI_Allreduce(&nfft_both,&nfft_both_max,1,MPI_INT,MPI_MAX,world); + + if (me == 0) { + +#ifdef FFT_SINGLE + const char fft_prec[] = "single"; +#else + const char fft_prec[] = "double"; +#endif + + if (screen) { + fprintf(screen," G vector (1/distance) = %g\n",g_ewald); + fprintf(screen," grid = %d %d %d\n",nx_pppm,ny_pppm,nz_pppm); + fprintf(screen," stencil order = %d\n",order); + fprintf(screen," estimated absolute RMS force accuracy = %g\n", + estimated_accuracy); + fprintf(screen," estimated relative force accuracy = %g\n", + estimated_accuracy/two_charge_force); + fprintf(screen," using %s precision FFTs\n",fft_prec); + fprintf(screen," 3d grid and FFT values/proc = %d %d\n", + ngrid_max,nfft_both_max); + } + if (logfile) { + fprintf(logfile," G vector (1/distance) = %g\n",g_ewald); + fprintf(logfile," grid = %d %d %d\n",nx_pppm,ny_pppm,nz_pppm); + fprintf(logfile," stencil order = %d\n",order); + fprintf(logfile," estimated absolute RMS force accuracy = %g\n", + estimated_accuracy); + fprintf(logfile," estimated relative force accuracy = %g\n", + estimated_accuracy/two_charge_force); + fprintf(logfile," using %s precision FFTs\n",fft_prec); + fprintf(logfile," 3d grid and FFT values/proc = %d %d\n", + ngrid_max,nfft_both_max); + } + } + + // allocate K-space dependent memory + // don't invoke allocate peratom(), will be allocated when needed + + allocate(); + cg_dipole->ghost_notify(); + cg_dipole->setup(); + + // pre-compute Green's function denomiator expansion + // pre-compute 1d charge distribution coefficients + + compute_gf_denom(); + compute_rho_coeff(); +} + +/* ---------------------------------------------------------------------- + adjust PPPMDipole coeffs, called initially and whenever volume has changed +------------------------------------------------------------------------- */ + +void PPPMDipole::setup() +{ + // perform some checks to avoid illegal boundaries with read_data + + if (slabflag == 0 && domain->nonperiodic > 0) + error->all(FLERR,"Cannot use nonperiodic boundaries with PPPMDipole"); + if (slabflag) { + if (domain->xperiodic != 1 || domain->yperiodic != 1 || + domain->boundary[2][0] != 1 || domain->boundary[2][1] != 1) + error->all(FLERR,"Incorrect boundaries with slab PPPMDipole"); + } + + int i,j,k,n; + double *prd; + + // volume-dependent factors + // adjust z dimension for 2d slab PPPMDipole + // z dimension for 3d PPPMDipole is zprd since slab_volfactor = 1.0 + + prd = domain->prd; + double xprd = prd[0]; + double yprd = prd[1]; + double zprd = prd[2]; + double zprd_slab = zprd*slab_volfactor; + volume = xprd * yprd * zprd_slab; + + delxinv = nx_pppm/xprd; + delyinv = ny_pppm/yprd; + delzinv = nz_pppm/zprd_slab; + + delvolinv = delxinv*delyinv*delzinv; + + double unitkx = (MY_2PI/xprd); + double unitky = (MY_2PI/yprd); + double unitkz = (MY_2PI/zprd_slab); + + // fkx,fky,fkz for my FFT grid pts + + double per; + + for (i = nxlo_fft; i <= nxhi_fft; i++) { + per = i - nx_pppm*(2*i/nx_pppm); + fkx[i] = unitkx*per; + } + + for (i = nylo_fft; i <= nyhi_fft; i++) { + per = i - ny_pppm*(2*i/ny_pppm); + fky[i] = unitky*per; + } + + for (i = nzlo_fft; i <= nzhi_fft; i++) { + per = i - nz_pppm*(2*i/nz_pppm); + fkz[i] = unitkz*per; + } + + // virial coefficients + + double sqk,vterm; + + n = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) { + for (j = nylo_fft; j <= nyhi_fft; j++) { + for (i = nxlo_fft; i <= nxhi_fft; i++) { + sqk = fkx[i]*fkx[i] + fky[j]*fky[j] + fkz[k]*fkz[k]; + if (sqk == 0.0) { + vg[n][0] = 0.0; + vg[n][1] = 0.0; + vg[n][2] = 0.0; + vg[n][3] = 0.0; + vg[n][4] = 0.0; + vg[n][5] = 0.0; + } else { + vterm = -2.0 * (1.0/sqk + 0.25/(g_ewald*g_ewald)); + vg[n][0] = 1.0 + vterm*fkx[i]*fkx[i]; + vg[n][1] = 1.0 + vterm*fky[j]*fky[j]; + vg[n][2] = 1.0 + vterm*fkz[k]*fkz[k]; + vg[n][3] = vterm*fkx[i]*fky[j]; + vg[n][4] = vterm*fkx[i]*fkz[k]; + vg[n][5] = vterm*fky[j]*fkz[k]; + } + n++; + } + } + } + + compute_gf_dipole(); +} + +/* ---------------------------------------------------------------------- + reset local grid arrays and communication stencils + called by fix balance b/c it changed sizes of processor sub-domains +------------------------------------------------------------------------- */ + +void PPPMDipole::setup_grid() +{ + // free all arrays previously allocated + + deallocate(); + if (peratom_allocate_flag) deallocate_peratom(); + + // reset portion of global grid that each proc owns + + set_grid_local(); + + // reallocate K-space dependent memory + // check if grid communication is now overlapping if not allowed + // don't invoke allocate peratom(), will be allocated when needed + + allocate(); + + cg_dipole->ghost_notify(); + if (overlap_allowed == 0 && cg_dipole->ghost_overlap()) + error->all(FLERR,"PPPMDipole grid stencil extends " + "beyond nearest neighbor processor"); + cg_dipole->setup(); + + // pre-compute Green's function denomiator expansion + // pre-compute 1d charge distribution coefficients + + compute_gf_denom(); + compute_rho_coeff(); + + // pre-compute volume-dependent coeffs + + setup(); +} + +/* ---------------------------------------------------------------------- + compute the PPPMDipole long-range force, energy, virial +------------------------------------------------------------------------- */ + +void PPPMDipole::compute(int eflag, int vflag) +{ + int i,j; + + // set energy/virial flags + // invoke allocate_peratom() if needed for first time + + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = evflag_atom = eflag_global = vflag_global = + eflag_atom = vflag_atom = 0; + + if (evflag_atom && !peratom_allocate_flag) { + allocate_peratom(); + cg_peratom_dipole->ghost_notify(); + cg_peratom_dipole->setup(); + } + + // if atom count has changed, update qsum and qsqsum + + if (atom->natoms != natoms_original) { + musum_musq(); + natoms_original = atom->natoms; + } + + // return if there are no dipoles + + if (musqsum == 0.0) return; + + // convert atoms from box to lamda coords + + boxlo = domain->boxlo; + + // extend size of per-atom arrays if necessary + + if (atom->nmax > nmax) { + memory->destroy(part2grid); + nmax = atom->nmax; + memory->create(part2grid,nmax,3,"pppm_dipole:part2grid"); + } + + // find grid points for all my particles + // map my particle charge onto my local 3d density grid + + particle_map(); + make_rho_dipole(); + + // all procs communicate density values from their ghost cells + // to fully sum contribution in their 3d bricks + // remap from 3d decomposition to FFT decomposition + + cg_dipole->reverse_comm(this,REVERSE_MU); + brick2fft_dipole(); + + // compute potential gradient on my FFT grid and + // portion of e_long on this proc's FFT grid + // return gradients (electric fields) in 3d brick decomposition + // also performs per-atom calculations via poisson_peratom() + + poisson_ik_dipole(); + + // all procs communicate E-field values + // to fill ghost cells surrounding their 3d bricks + + cg_dipole->forward_comm(this,FORWARD_MU); + + // extra per-atom energy/virial communication + + if (evflag_atom) { + cg_peratom_dipole->forward_comm(this,FORWARD_MU_PERATOM); + } + + // calculate the force on my particles + + fieldforce_ik_dipole(); + + // extra per-atom energy/virial communication + + if (evflag_atom) fieldforce_peratom_dipole(); + + // sum global energy across procs and add in volume-dependent term + + const double qscale = qqrd2e * scale; + const double g3 = g_ewald*g_ewald*g_ewald; + + if (eflag_global) { + double energy_all; + MPI_Allreduce(&energy,&energy_all,1,MPI_DOUBLE,MPI_SUM,world); + energy = energy_all; + + energy *= 0.5*volume; + energy -= musqsum*2.0*g3/3.0/MY_PIS; + energy *= qscale; + } + + // sum global virial across procs + + if (vflag_global) { + double virial_all[6]; + MPI_Allreduce(virial,virial_all,6,MPI_DOUBLE,MPI_SUM,world); + for (i = 0; i < 6; i++) virial[i] = 0.5*qscale*volume*virial_all[i]; + } + + // per-atom energy/virial + // energy includes self-energy correction + + if (evflag_atom) { + double *q = atom->q; + double **mu = atom->mu; + int nlocal = atom->nlocal; + int ntotal = nlocal; + + if (eflag_atom) { + for (i = 0; i < nlocal; i++) { + eatom[i] *= 0.5; + eatom[i] -= (mu[i][0]*mu[i][0] + mu[i][1]*mu[i][1] + mu[i][2]*mu[i][2])*2.0*g3/3.0/MY_PIS; + eatom[i] *= qscale; + } + } + + if (vflag_atom) { + for (i = 0; i < ntotal; i++) + for (j = 0; j < 6; j++) vatom[i][j] *= 0.5*qscale; + } + } + + // 2d slab correction + + if (slabflag == 1) slabcorr(); +} + +/* ---------------------------------------------------------------------- + allocate memory that depends on # of K-vectors and order +------------------------------------------------------------------------- */ + +void PPPMDipole::allocate() +{ + memory->create3d_offset(densityx_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:densityx_brick_dipole"); + memory->create3d_offset(densityy_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:densityy_brick_dipole"); + memory->create3d_offset(densityz_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:densityz_brick_dipole"); + + memory->create(densityx_fft_dipole,nfft_both,"pppm_dipole:densityy_fft_dipole"); + memory->create(densityy_fft_dipole,nfft_both,"pppm_dipole:densityy_fft_dipole"); + memory->create(densityz_fft_dipole,nfft_both,"pppm_dipole:densityz_fft_dipole"); + + memory->create(greensfn,nfft_both,"pppm_dipole:greensfn"); + memory->create(work1,2*nfft_both,"pppm_dipole:work1"); + memory->create(work2,2*nfft_both,"pppm_dipole:work2"); + memory->create(work3,2*nfft_both,"pppm_dipole:work3"); + memory->create(work4,2*nfft_both,"pppm_dipole:work4"); + memory->create(vg,nfft_both,6,"pppm_dipole:vg"); + + memory->create1d_offset(fkx,nxlo_fft,nxhi_fft,"pppm_dipole:fkx"); + memory->create1d_offset(fky,nylo_fft,nyhi_fft,"pppm_dipole:fky"); + memory->create1d_offset(fkz,nzlo_fft,nzhi_fft,"pppm_dipole:fkz"); + + memory->create3d_offset(ux_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:ux_brick_dipole"); + memory->create3d_offset(uy_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:uy_brick_dipole"); + memory->create3d_offset(uz_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:uz_brick_dipole"); + + memory->create3d_offset(vdxx_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:vdxx_brick_dipole"); + memory->create3d_offset(vdxy_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:vdxy_brick_dipole"); + memory->create3d_offset(vdyy_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:vdyy_brick_dipole"); + memory->create3d_offset(vdxz_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:vdxz_brick_dipole"); + memory->create3d_offset(vdyz_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:vdyz_brick_dipole"); + memory->create3d_offset(vdzz_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:vdzz_brick_dipole"); + + // summation coeffs + + order_allocated = order; + memory->create(gf_b,order,"pppm_dipole:gf_b"); + memory->create2d_offset(rho1d,3,-order/2,order/2,"pppm_dipole:rho1d"); + memory->create2d_offset(drho1d,3,-order/2,order/2,"pppm_dipole:drho1d"); + memory->create2d_offset(rho_coeff,order,(1-order)/2,order/2,"pppm_dipole:rho_coeff"); + memory->create2d_offset(drho_coeff,order,(1-order)/2,order/2, + "pppm_dipole:drho_coeff"); + + // create 2 FFTs and a Remap + // 1st FFT keeps data in FFT decompostion + // 2nd FFT returns data in 3d brick decomposition + // remap takes data from 3d brick to FFT decomposition + + int tmp; + + fft1 = new FFT3d(lmp,world,nx_pppm,ny_pppm,nz_pppm, + nxlo_fft,nxhi_fft,nylo_fft,nyhi_fft,nzlo_fft,nzhi_fft, + nxlo_fft,nxhi_fft,nylo_fft,nyhi_fft,nzlo_fft,nzhi_fft, + 0,0,&tmp,collective_flag); + + fft2 = new FFT3d(lmp,world,nx_pppm,ny_pppm,nz_pppm, + nxlo_fft,nxhi_fft,nylo_fft,nyhi_fft,nzlo_fft,nzhi_fft, + nxlo_in,nxhi_in,nylo_in,nyhi_in,nzlo_in,nzhi_in, + 0,0,&tmp,collective_flag); + + remap = new Remap(lmp,world, + nxlo_in,nxhi_in,nylo_in,nyhi_in,nzlo_in,nzhi_in, + nxlo_fft,nxhi_fft,nylo_fft,nyhi_fft,nzlo_fft,nzhi_fft, + 1,0,0,FFT_PRECISION,collective_flag); + + // create ghost grid object for rho and electric field communication + + int (*procneigh)[2] = comm->procneigh; + + cg_dipole = new GridComm(lmp,world,9,3, + nxlo_in,nxhi_in,nylo_in,nyhi_in,nzlo_in,nzhi_in, + nxlo_out,nxhi_out,nylo_out,nyhi_out,nzlo_out,nzhi_out, + procneigh[0][0],procneigh[0][1],procneigh[1][0], + procneigh[1][1],procneigh[2][0],procneigh[2][1]); +} + +/* ---------------------------------------------------------------------- + deallocate memory that depends on # of K-vectors and order +------------------------------------------------------------------------- */ + +void PPPMDipole::deallocate() +{ + memory->destroy3d_offset(densityx_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(densityy_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(densityz_brick_dipole,nzlo_out,nylo_out,nxlo_out); + + memory->destroy3d_offset(ux_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(uy_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(uz_brick_dipole,nzlo_out,nylo_out,nxlo_out); + + memory->destroy3d_offset(vdxx_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(vdxy_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(vdyy_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(vdxz_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(vdyz_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(vdzz_brick_dipole,nzlo_out,nylo_out,nxlo_out); + + memory->destroy(densityx_fft_dipole); + memory->destroy(densityy_fft_dipole); + memory->destroy(densityz_fft_dipole); + + memory->destroy(greensfn); + memory->destroy(work1); + memory->destroy(work2); + memory->destroy(work3); + memory->destroy(work4); + memory->destroy(vg); + + memory->destroy1d_offset(fkx,nxlo_fft); + memory->destroy1d_offset(fky,nylo_fft); + memory->destroy1d_offset(fkz,nzlo_fft); + + memory->destroy(gf_b); + memory->destroy2d_offset(rho1d,-order_allocated/2); + memory->destroy2d_offset(drho1d,-order_allocated/2); + memory->destroy2d_offset(rho_coeff,(1-order_allocated)/2); + memory->destroy2d_offset(drho_coeff,(1-order_allocated)/2); + + delete fft1; + delete fft2; + delete remap; + delete cg_dipole; +} + +/* ---------------------------------------------------------------------- + allocate per-atom memory that depends on # of K-vectors and order +------------------------------------------------------------------------- */ + +void PPPMDipole::allocate_peratom() +{ + peratom_allocate_flag = 1; + + memory->create3d_offset(v0x_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v0x_brick_dipole"); + memory->create3d_offset(v1x_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v1x_brick_dipole"); + memory->create3d_offset(v2x_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v2x_brick_dipole"); + memory->create3d_offset(v3x_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v3x_brick_dipole"); + memory->create3d_offset(v4x_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v4x_brick_dipole"); + memory->create3d_offset(v5x_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v5x_brick_dipole"); + + memory->create3d_offset(v0y_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v0y_brick_dipole"); + memory->create3d_offset(v1y_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v1y_brick_dipole"); + memory->create3d_offset(v2y_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v2y_brick_dipole"); + memory->create3d_offset(v3y_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v3y_brick_dipole"); + memory->create3d_offset(v4y_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v4y_brick_dipole"); + memory->create3d_offset(v5y_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v5y_brick_dipole"); + + memory->create3d_offset(v0z_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v0z_brick_dipole"); + memory->create3d_offset(v1z_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v1z_brick_dipole"); + memory->create3d_offset(v2z_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v2z_brick_dipole"); + memory->create3d_offset(v3z_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v3z_brick_dipole"); + memory->create3d_offset(v4z_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v4z_brick_dipole"); + memory->create3d_offset(v5z_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v5z_brick_dipole"); + + // create ghost grid object for rho and electric field communication + + int (*procneigh)[2] = comm->procneigh; + + cg_peratom_dipole = + new GridComm(lmp,world,18,1, + nxlo_in,nxhi_in,nylo_in,nyhi_in,nzlo_in,nzhi_in, + nxlo_out,nxhi_out,nylo_out,nyhi_out,nzlo_out,nzhi_out, + procneigh[0][0],procneigh[0][1],procneigh[1][0], + procneigh[1][1],procneigh[2][0],procneigh[2][1]); +} + +/* ---------------------------------------------------------------------- + deallocate per-atom memory that depends on # of K-vectors and order +------------------------------------------------------------------------- */ + +void PPPMDipole::deallocate_peratom() +{ + peratom_allocate_flag = 0; + + memory->destroy3d_offset(v0x_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v1x_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v2x_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v3x_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v4x_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v5x_brick_dipole,nzlo_out,nylo_out,nxlo_out); + + memory->destroy3d_offset(v0y_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v1y_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v2y_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v3y_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v4y_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v5y_brick_dipole,nzlo_out,nylo_out,nxlo_out); + + memory->destroy3d_offset(v0z_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v1z_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v2z_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v3z_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v4z_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v5z_brick_dipole,nzlo_out,nylo_out,nxlo_out); + + delete cg_peratom_dipole; +} + +/* ---------------------------------------------------------------------- + set global size of PPPMDipole grid = nx,ny,nz_pppm + used for charge accumulation, FFTs, and electric field interpolation +------------------------------------------------------------------------- */ + +void PPPMDipole::set_grid_global() +{ + // use xprd,yprd,zprd + // adjust z dimension for 2d slab PPPMDipole + // 3d PPPMDipole just uses zprd since slab_volfactor = 1.0 + + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + double zprd_slab = zprd*slab_volfactor; + + // make initial g_ewald estimate + // based on desired accuracy and real space cutoff + // fluid-occupied volume used to estimate real-space error + // zprd used rather than zprd_slab + + double h; + bigint natoms = atom->natoms; + + if (!gewaldflag) { + if (accuracy <= 0.0) + error->all(FLERR,"KSpace accuracy must be > 0"); + if (mu2 == 0.0) + error->all(FLERR,"Must use kspace_modify gewald for systems with no dipoles"); + g_ewald = (1.35 - 0.15*log(accuracy))/cutoff; + //Try Newton Solver + double g_ewald_new = + find_gewald_dipole(g_ewald,cutoff,natoms,xprd*yprd*zprd,mu2); + if (g_ewald_new > 0.0) g_ewald = g_ewald_new; + else error->warning(FLERR,"PPPMDipole dipole Newton solver failed, " + "using old method to estimate g_ewald"); + } + + // set optimal nx_pppm,ny_pppm,nz_pppm based on order and accuracy + // nz_pppm uses extended zprd_slab instead of zprd + // reduce it until accuracy target is met + + if (!gridflag) { + + h = h_x = h_y = h_z = 4.0/g_ewald; + int count = 0; + while (1) { + + // set grid dimension + nx_pppm = static_cast (xprd/h_x); + ny_pppm = static_cast (yprd/h_y); + nz_pppm = static_cast (zprd_slab/h_z); + + if (nx_pppm <= 1) nx_pppm = 2; + if (ny_pppm <= 1) ny_pppm = 2; + if (nz_pppm <= 1) nz_pppm = 2; + + //set local grid dimension + int npey_fft,npez_fft; + if (nz_pppm >= nprocs) { + npey_fft = 1; + npez_fft = nprocs; + } else procs2grid2d(nprocs,ny_pppm,nz_pppm,&npey_fft,&npez_fft); + + int me_y = me % npey_fft; + int me_z = me / npey_fft; + + nxlo_fft = 0; + nxhi_fft = nx_pppm - 1; + nylo_fft = me_y*ny_pppm/npey_fft; + nyhi_fft = (me_y+1)*ny_pppm/npey_fft - 1; + nzlo_fft = me_z*nz_pppm/npez_fft; + nzhi_fft = (me_z+1)*nz_pppm/npez_fft - 1; + + double df_kspace = compute_df_kspace_dipole(); + + count++; + + // break loop if the accuracy has been reached or + // too many loops have been performed + + if (df_kspace <= accuracy) break; + if (count > 500) error->all(FLERR, "Could not compute grid size"); + h *= 0.95; + h_x = h_y = h_z = h; + } + } + + // boost grid size until it is factorable + + while (!factorable(nx_pppm)) nx_pppm++; + while (!factorable(ny_pppm)) ny_pppm++; + while (!factorable(nz_pppm)) nz_pppm++; + + h_x = xprd/nx_pppm; + h_y = yprd/ny_pppm; + h_z = zprd_slab/nz_pppm; + + if (nx_pppm >= OFFSET || ny_pppm >= OFFSET || nz_pppm >= OFFSET) + error->all(FLERR,"PPPMDipole grid is too large"); +} + + +/* ---------------------------------------------------------------------- + compute estimated kspace force error for dipoles +------------------------------------------------------------------------- */ + +double PPPMDipole::compute_df_kspace_dipole() +{ + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + double zprd_slab = zprd*slab_volfactor; + bigint natoms = atom->natoms; + double qopt = compute_qopt_dipole(); + double df_kspace = sqrt(qopt/natoms)*mu2/(3.0*xprd*yprd*zprd_slab); + return df_kspace; +} + +/* ---------------------------------------------------------------------- + compute qopt for dipoles with ik differentiation +------------------------------------------------------------------------- */ + +double PPPMDipole::compute_qopt_dipole() +{ + double qopt = 0.0; + const double * const prd = domain->prd; + + const double xprd = prd[0]; + const double yprd = prd[1]; + const double zprd = prd[2]; + const double zprd_slab = zprd*slab_volfactor; + const double unitkx = (MY_2PI/xprd); + const double unitky = (MY_2PI/yprd); + const double unitkz = (MY_2PI/zprd_slab); + + double snx,sny,snz; + double cnx,cny,cnz; + double argx,argy,argz,wx,wy,wz,sx,sy,sz,qx,qy,qz; + double sum1,sum2,dot1,dot2; + double numerator,denominator; + double u1,u2,u3,sqk; + + int k,l,m,nx,ny,nz,kper,lper,mper; + + const int nbx = 2; + const int nby = 2; + const int nbz = 2; + + const int twoorder = 2*order; + + for (m = nzlo_fft; m <= nzhi_fft; m++) { + mper = m - nz_pppm*(2*m/nz_pppm); + snz = square(sin(0.5*unitkz*mper*zprd_slab/nz_pppm)); + cnz = cos(0.5*unitkz*mper*zprd_slab/nz_pppm); + + for (l = nylo_fft; l <= nyhi_fft; l++) { + lper = l - ny_pppm*(2*l/ny_pppm); + sny = square(sin(0.5*unitky*lper*yprd/ny_pppm)); + cny = cos(0.5*unitky*lper*yprd/ny_pppm); + + for (k = nxlo_fft; k <= nxhi_fft; k++) { + kper = k - nx_pppm*(2*k/nx_pppm); + snx = square(sin(0.5*unitkx*kper*xprd/nx_pppm)); + cnx = cos(0.5*unitkx*kper*xprd/nx_pppm); + + sqk = square(unitkx*kper) + square(unitky*lper) + square(unitkz*mper); + + if (sqk != 0.0) { + numerator = MY_4PI/sqk; + denominator = gf_denom(snx,sny,snz); + sum1 = 0.0; + sum2 = 0.0; + + for (nx = -nbx; nx <= nbx; nx++) { + qx = unitkx*(kper+nx_pppm*nx); + sx = exp(-0.25*square(qx/g_ewald)); + argx = 0.5*qx*xprd/nx_pppm; + wx = powsinxx(argx,twoorder); + + for (ny = -nby; ny <= nby; ny++) { + qy = unitky*(lper+ny_pppm*ny); + sy = exp(-0.25*square(qy/g_ewald)); + argy = 0.5*qy*yprd/ny_pppm; + wy = powsinxx(argy,twoorder); + + for (nz = -nbz; nz <= nbz; nz++) { + qz = unitkz*(mper+nz_pppm*nz); + sz = exp(-0.25*square(qz/g_ewald)); + argz = 0.5*qz*zprd_slab/nz_pppm; + wz = powsinxx(argz,twoorder); + + dot1 = unitkx*kper*qx + unitky*lper*qy + unitkz*mper*qz; + dot2 = qx*qx + qy*qy + qz*qz; + //dot1 = dot1*dot1*dot1; // power of 3 for dipole forces + //dot2 = dot2*dot2*dot2; + u1 = sx*sy*sz; + const double w2 = wx*wy*wz; + const double phi = u1*MY_4PI/dot2; + const double top = dot1*dot1*dot1*w2*phi; + sum1 += phi*phi*dot2*dot2*dot2; + sum2 += top*top/sqk/sqk/sqk; + } + } + } + qopt += sum1 - sum2/denominator; + } + } + } + } + double qopt_all; + MPI_Allreduce(&qopt,&qopt_all,1,MPI_DOUBLE,MPI_SUM,world); + return qopt_all; +} + +/* ---------------------------------------------------------------------- + pre-compute modified (Hockney-Eastwood) Coulomb Green's function +------------------------------------------------------------------------- */ + +void PPPMDipole::compute_gf_dipole() +{ + const double * const prd = domain->prd; + + const double xprd = prd[0]; + const double yprd = prd[1]; + const double zprd = prd[2]; + const double zprd_slab = zprd*slab_volfactor; + const double unitkx = (MY_2PI/xprd); + const double unitky = (MY_2PI/yprd); + const double unitkz = (MY_2PI/zprd_slab); + + double snx,sny,snz; + double cnx,cny,cnz; + double argx,argy,argz,wx,wy,wz,sx,sy,sz,qx,qy,qz; + double sum1,dot1,dot2; + double numerator,denominator; + double sqk; + + int k,l,m,n,nx,ny,nz,kper,lper,mper; + + int nbx = static_cast ((g_ewald*xprd/(MY_PI*nx_pppm)) * + pow(-log(EPS_HOC),0.25)); + int nby = static_cast ((g_ewald*yprd/(MY_PI*ny_pppm)) * + pow(-log(EPS_HOC),0.25)); + int nbz = static_cast ((g_ewald*zprd_slab/(MY_PI*nz_pppm)) * + pow(-log(EPS_HOC),0.25)); + nbx = MAX(nbx,2); + nby = MAX(nby,2); + nbz = MAX(nbz,2); + const int twoorder = 2*order; + + n = 0; + for (m = nzlo_fft; m <= nzhi_fft; m++) { + mper = m - nz_pppm*(2*m/nz_pppm); + snz = square(sin(0.5*unitkz*mper*zprd_slab/nz_pppm)); + cnz = cos(0.5*unitkz*mper*zprd_slab/nz_pppm); + + for (l = nylo_fft; l <= nyhi_fft; l++) { + lper = l - ny_pppm*(2*l/ny_pppm); + sny = square(sin(0.5*unitky*lper*yprd/ny_pppm)); + cny = cos(0.5*unitky*lper*yprd/ny_pppm); + + for (k = nxlo_fft; k <= nxhi_fft; k++) { + kper = k - nx_pppm*(2*k/nx_pppm); + snx = square(sin(0.5*unitkx*kper*xprd/nx_pppm)); + cnx = cos(0.5*unitkx*kper*xprd/nx_pppm); + + sqk = square(unitkx*kper) + square(unitky*lper) + square(unitkz*mper); + + if (sqk != 0.0) { + numerator = MY_4PI/sqk; + denominator = gf_denom(snx,sny,snz); + sum1 = 0.0; + + for (nx = -nbx; nx <= nbx; nx++) { + qx = unitkx*(kper+nx_pppm*nx); + sx = exp(-0.25*square(qx/g_ewald)); + argx = 0.5*qx*xprd/nx_pppm; + wx = powsinxx(argx,twoorder); + + for (ny = -nby; ny <= nby; ny++) { + qy = unitky*(lper+ny_pppm*ny); + sy = exp(-0.25*square(qy/g_ewald)); + argy = 0.5*qy*yprd/ny_pppm; + wy = powsinxx(argy,twoorder); + + for (nz = -nbz; nz <= nbz; nz++) { + qz = unitkz*(mper+nz_pppm*nz); + sz = exp(-0.25*square(qz/g_ewald)); + argz = 0.5*qz*zprd_slab/nz_pppm; + wz = powsinxx(argz,twoorder); + + dot1 = unitkx*kper*qx + unitky*lper*qy + unitkz*mper*qz; + dot2 = qx*qx + qy*qy + qz*qz; + const double u1 = sx*sy*sz; + const double w2 = wx*wy*wz; + const double phi = u1*MY_4PI/dot2; + sum1 += dot1*dot1*dot1*w2*phi/sqk/sqk/sqk; + } + } + } + greensfn[n++] = sum1/denominator; + } else greensfn[n++] = 0.0; + } + } + } +} + +/* ---------------------------------------------------------------------- + calculate f(x) for use in Newton-Raphson solver +------------------------------------------------------------------------- */ + +double PPPMDipole::newton_raphson_f() +{ + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + bigint natoms = atom->natoms; + + double df_rspace,df_kspace; + double vol = xprd*yprd*zprd; + double a = cutoff*g_ewald; + double rg2 = a*a; + double rg4 = rg2*rg2; + double rg6 = rg4*rg2; + double Cc = 4.0*rg4 + 6.0*rg2 + 3.0; + double Dc = 8.0*rg6 + 20.0*rg4 + 30.0*rg2 + 15.0; + df_rspace = (mu2/(sqrt(vol*powint(g_ewald,4)*powint(cutoff,9)*natoms)) * + sqrt(13.0/6.0*Cc*Cc + 2.0/15.0*Dc*Dc - 13.0/15.0*Cc*Dc) * exp(-rg2)); + df_kspace = compute_df_kspace_dipole(); + + return df_rspace - df_kspace; +} + +/* ---------------------------------------------------------------------- + find g_ewald parameter for dipoles based on desired accuracy + using a Newton-Raphson solver +------------------------------------------------------------------------- */ + +double PPPMDipole::find_gewald_dipole(double x, double Rc, + bigint natoms, double vol, double b2) +{ + double dx,tol; + int maxit; + + maxit = 10000; //Maximum number of iterations + tol = 0.00001; //Convergence tolerance + + //Begin algorithm + + for (int i = 0; i < maxit; i++) { + dx = newton_raphson_f_dipole(x,Rc,natoms,vol,b2) / derivf_dipole(x,Rc,natoms,vol,b2); + x = x - dx; //Update x + if (fabs(dx) < tol) return x; + if (x < 0 || x != x) // solver failed + return -1; + } + return -1; +} + +/* ---------------------------------------------------------------------- + calculate f(x) objective function for dipoles + ------------------------------------------------------------------------- */ + +double PPPMDipole::newton_raphson_f_dipole(double x, double Rc, bigint +natoms, double vol, double b2) +{ + double a = Rc*x; + double rg2 = a*a; + double rg4 = rg2*rg2; + double rg6 = rg4*rg2; + double Cc = 4.0*rg4 + 6.0*rg2 + 3.0; + double Dc = 8.0*rg6 + 20.0*rg4 + 30.0*rg2 + 15.0; + double f = (b2/(sqrt(vol*powint(x,4)*powint(Rc,9)*natoms)) * + sqrt(13.0/6.0*Cc*Cc + 2.0/15.0*Dc*Dc - 13.0/15.0*Cc*Dc) * + exp(-rg2)) - accuracy; + + return f; +} + +/* ---------------------------------------------------------------------- + calculate numerical derivative f'(x) of objective function for dipoles + ------------------------------------------------------------------------- */ + +double PPPMDipole::derivf_dipole(double x, double Rc, + bigint natoms, double vol, double b2) +{ + double h = 0.000001; //Derivative step-size + return (newton_raphson_f_dipole(x + h,Rc,natoms,vol,b2) - newton_raphson_f_dipole(x,Rc,natoms,vol,b2)) / h; +} + +/* ---------------------------------------------------------------------- + calculate the final estimate of the accuracy +------------------------------------------------------------------------- */ + +double PPPMDipole::final_accuracy_dipole() +{ + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + double vol = xprd*yprd*zprd; + bigint natoms = atom->natoms; + if (natoms == 0) natoms = 1; // avoid division by zero + + double df_kspace = compute_df_kspace_dipole(); + + double a = cutoff*g_ewald; + double rg2 = a*a; + double rg4 = rg2*rg2; + double rg6 = rg4*rg2; + double Cc = 4.0*rg4 + 6.0*rg2 + 3.0; + double Dc = 8.0*rg6 + 20.0*rg4 + 30.0*rg2 + 15.0; + double df_rspace = (mu2/(sqrt(vol*powint(g_ewald,4)*powint(cutoff,9)*natoms)) * + sqrt(13.0/6.0*Cc*Cc + 2.0/15.0*Dc*Dc - 13.0/15.0*Cc*Dc) * + exp(-rg2)); + + double estimated_accuracy = sqrt(df_kspace*df_kspace + df_rspace*df_rspace); + + return estimated_accuracy; +} + +/* ---------------------------------------------------------------------- + pre-compute Green's function denominator expansion coeffs, Gamma(2n) +------------------------------------------------------------------------- */ + +void PPPMDipole::compute_gf_denom() +{ + if (gf_b) memory->destroy(gf_b); + memory->create(gf_b,order,"pppm_dipole:gf_b"); + + int k,l,m; + + for (l = 1; l < order; l++) gf_b[l] = 0.0; + gf_b[0] = 1.0; + + for (m = 1; m < order; m++) { + for (l = m; l > 0; l--) + gf_b[l] = 4.0 * (gf_b[l]*(l-m)*(l-m-0.5)-gf_b[l-1]*(l-m-1)*(l-m-1)); + gf_b[0] = 4.0 * (gf_b[0]*(l-m)*(l-m-0.5)); + } + + bigint ifact = 1; + for (k = 1; k < 2*order; k++) ifact *= k; + double gaminv = 1.0/ifact; + for (l = 0; l < order; l++) gf_b[l] *= gaminv; +} + +/* ---------------------------------------------------------------------- + create discretized "density" on section of global grid due to my particles + density(x,y,z) = charge "density" at grid points of my 3d brick + (nxlo:nxhi,nylo:nyhi,nzlo:nzhi) is extent of my brick (including ghosts) + in global grid +------------------------------------------------------------------------- */ + +void PPPMDipole::make_rho_dipole() +{ + int l,m,n,nx,ny,nz,mx,my,mz; + FFT_SCALAR dx,dy,dz; + FFT_SCALAR x0,y0,z0; + FFT_SCALAR x1,y1,z1; + FFT_SCALAR x2,y2,z2; + + // clear 3d density array + + memset(&(densityx_brick_dipole[nzlo_out][nylo_out][nxlo_out]),0, + ngrid*sizeof(FFT_SCALAR)); + memset(&(densityy_brick_dipole[nzlo_out][nylo_out][nxlo_out]),0, + ngrid*sizeof(FFT_SCALAR)); + memset(&(densityz_brick_dipole[nzlo_out][nylo_out][nxlo_out]),0, + ngrid*sizeof(FFT_SCALAR)); + + // loop over my charges, add their contribution to nearby grid points + // (nx,ny,nz) = global coords of grid pt to "lower left" of charge + // (dx,dy,dz) = distance to "lower left" grid pt + // (mx,my,mz) = global coords of moving stencil pt + + double **mu = atom->mu; + double **x = atom->x; + int nlocal = atom->nlocal; + + for (int i = 0; i < nlocal; i++) { + + nx = part2grid[i][0]; + ny = part2grid[i][1]; + nz = part2grid[i][2]; + dx = nx+shiftone - (x[i][0]-boxlo[0])*delxinv; + dy = ny+shiftone - (x[i][1]-boxlo[1])*delyinv; + dz = nz+shiftone - (x[i][2]-boxlo[2])*delzinv; + + compute_rho1d(dx,dy,dz); + + z0 = delvolinv * mu[i][0]; + z1 = delvolinv * mu[i][1]; + z2 = delvolinv * mu[i][2]; + for (n = nlower; n <= nupper; n++) { + mz = n+nz; + y0 = z0*rho1d[2][n]; + y1 = z1*rho1d[2][n]; + y2 = z2*rho1d[2][n]; + for (m = nlower; m <= nupper; m++) { + my = m+ny; + x0 = y0*rho1d[1][m]; + x1 = y1*rho1d[1][m]; + x2 = y2*rho1d[1][m]; + for (l = nlower; l <= nupper; l++) { + mx = l+nx; + densityx_brick_dipole[mz][my][mx] += x0*rho1d[0][l]; + densityy_brick_dipole[mz][my][mx] += x1*rho1d[0][l]; + densityz_brick_dipole[mz][my][mx] += x2*rho1d[0][l]; + } + } + } + } +} + +/* ---------------------------------------------------------------------- + remap density from 3d brick decomposition to FFT decomposition +------------------------------------------------------------------------- */ + +void PPPMDipole::brick2fft_dipole() +{ + int n,ix,iy,iz; + + // copy grabs inner portion of density from 3d brick + // remap could be done as pre-stage of FFT, + // but this works optimally on only double values, not complex values + + n = 0; + for (iz = nzlo_in; iz <= nzhi_in; iz++) + for (iy = nylo_in; iy <= nyhi_in; iy++) + for (ix = nxlo_in; ix <= nxhi_in; ix++) { + densityx_fft_dipole[n] = densityx_brick_dipole[iz][iy][ix]; + densityy_fft_dipole[n] = densityy_brick_dipole[iz][iy][ix]; + densityz_fft_dipole[n] = densityz_brick_dipole[iz][iy][ix]; + n++; + } + + remap->perform(densityx_fft_dipole,densityx_fft_dipole,work1); + remap->perform(densityy_fft_dipole,densityy_fft_dipole,work1); + remap->perform(densityz_fft_dipole,densityz_fft_dipole,work1); +} + +/* ---------------------------------------------------------------------- + FFT-based Poisson solver for ik +------------------------------------------------------------------------- */ + +void PPPMDipole::poisson_ik_dipole() +{ + int i,j,k,n,ii; + double eng; + double wreal,wimg; + + // transform dipole density (r -> k) + + n = 0; + for (i = 0; i < nfft; i++) { + work1[n] = densityx_fft_dipole[i]; + work1[n+1] = ZEROF; + work2[n] = densityy_fft_dipole[i]; + work2[n+1] = ZEROF; + work3[n] = densityz_fft_dipole[i]; + work3[n+1] = ZEROF; + n += 2; + } + + fft1->compute(work1,work1,1); + fft1->compute(work2,work2,1); + fft1->compute(work3,work3,1); + + // global energy and virial contribution + + double scaleinv = 1.0/(nx_pppm*ny_pppm*nz_pppm); + double s2 = scaleinv*scaleinv; + + if (eflag_global || vflag_global) { + if (vflag_global) { + n = 0; + ii = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + wreal = (work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]); + wimg = (work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]); + eng = s2 * greensfn[ii] * (wreal*wreal + wimg*wimg); + for (int jj = 0; jj < 6; jj++) virial[jj] += eng*vg[ii][jj]; + virial[0] += 2.0*s2*greensfn[ii]*fkx[i]*(work1[n]*wreal + work1[n+1]*wimg); + virial[1] += 2.0*s2*greensfn[ii]*fky[j]*(work2[n]*wreal + work2[n+1]*wimg); + virial[2] += 2.0*s2*greensfn[ii]*fkz[k]*(work3[n]*wreal + work3[n+1]*wimg); + virial[3] += 2.0*s2*greensfn[ii]*fky[j]*(work1[n]*wreal + work1[n+1]*wimg); + virial[4] += 2.0*s2*greensfn[ii]*fkz[k]*(work1[n]*wreal + work1[n+1]*wimg); + virial[5] += 2.0*s2*greensfn[ii]*fkz[k]*(work2[n]*wreal + work2[n+1]*wimg); + if (eflag_global) energy += eng; + ii++; + n += 2; + } + } else { + n = 0; + ii = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + wreal = (work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]); + wimg = (work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]); + energy += + s2 * greensfn[ii] * (wreal*wreal + wimg*wimg); + ii++; + n += 2; + } + } + } + + // scale by 1/total-grid-pts to get rho(k) + // multiply by Green's function to get V(k) + + n = 0; + for (i = 0; i < nfft; i++) { + work1[n] *= scaleinv * greensfn[i]; + work1[n+1] *= scaleinv * greensfn[i]; + work2[n] *= scaleinv * greensfn[i]; + work2[n+1] *= scaleinv * greensfn[i]; + work3[n] *= scaleinv * greensfn[i]; + work3[n+1] *= scaleinv * greensfn[i]; + n += 2; + } + + // extra FFTs for per-atom energy/virial + + if (vflag_atom) poisson_peratom_dipole(); + + // compute electric potential + // FFT leaves data in 3d brick decomposition + + // Ex + + n = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fkx[i]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]); + work4[n+1] = fkx[i]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]); + n += 2; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + ux_brick_dipole[k][j][i] = work4[n]; + n += 2; + } + + // Ey + + n = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fky[j]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]); + work4[n+1] = fky[j]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]); + n += 2; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + uy_brick_dipole[k][j][i] = work4[n]; + n += 2; + } + + // Ez + + n = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fkz[k]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]); + work4[n+1] = fkz[k]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]); + n += 2; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + uz_brick_dipole[k][j][i] = work4[n]; + n += 2; + } + + // Vxx + + n = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fkx[i]*fkx[i]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]); + work4[n+1] = -fkx[i]*fkx[i]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]); + n += 2; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + vdxx_brick_dipole[k][j][i] = work4[n]; + n += 2; + } + + // Vyy + + n = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fky[j]*fky[j]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]); + work4[n+1] = -fky[j]*fky[j]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]); + n += 2; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + vdyy_brick_dipole[k][j][i] = work4[n]; + n += 2; + } + + // Vzz + + n = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fkz[k]*fkz[k]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]); + work4[n+1] = -fkz[k]*fkz[k]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]); + n += 2; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + vdzz_brick_dipole[k][j][i] = work4[n]; + n += 2; + } + + // Vxy + + n = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fkx[i]*fky[j]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]); + work4[n+1] = -fkx[i]*fky[j]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]); + n += 2; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + vdxy_brick_dipole[k][j][i] = work4[n]; + n += 2; + } + + // Vxz + + n = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fkx[i]*fkz[k]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]); + work4[n+1] = -fkx[i]*fkz[k]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]); + n += 2; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + vdxz_brick_dipole[k][j][i] = work4[n]; + n += 2; + } + + // Vyz + + n = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fky[j]*fkz[k]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]); + work4[n+1] = -fky[j]*fkz[k]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]); + n += 2; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + vdyz_brick_dipole[k][j][i] = work4[n]; + n += 2; + } +} + +/* ---------------------------------------------------------------------- + FFT-based Poisson solver for per-atom energy/virial +------------------------------------------------------------------------- */ + +void PPPMDipole::poisson_peratom_dipole() +{ + int i,ii,j,k,n; + + // 18 components of virial in v0 thru v5 + + if (!vflag_atom) return; + + // V0x + + n = 0; + ii = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fkx[i]*(vg[ii][0]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]) + 2.0*fkx[i]*work1[n]); + work4[n+1] = fkx[i]*(vg[ii][0]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]) + 2.0*fkx[i]*work1[n+1]); + n += 2; + ii++; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + v0x_brick_dipole[k][j][i] = work4[n]; + n += 2; + } + + // V0y + + n = 0; + ii = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fky[j]*(vg[ii][0]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]) + 2.0*fkx[i]*work1[n]); + work4[n+1] = fky[j]*(vg[ii][0]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]) + 2.0*fkx[i]*work1[n+1]); + n += 2; + ii++; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + v0y_brick_dipole[k][j][i] = work4[n]; + n += 2; + } + + // V0z + + n = 0; + ii = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fkz[k]*(vg[ii][0]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]) + 2.0*fkx[i]*work1[n]); + work4[n+1] = fkz[k]*(vg[ii][0]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]) + 2.0*fkx[i]*work1[n+1]); + n += 2; + ii++; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + v0z_brick_dipole[k][j][i] = work4[n]; + n += 2; + } + + // V1x + + n = 0; + ii = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fkx[i]*(vg[ii][1]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]) + 2.0*fky[j]*work2[n]); + work4[n+1] = fkx[i]*(vg[ii][1]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]) + 2.0*fky[j]*work2[n+1]); + n += 2; + ii++; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + v1x_brick_dipole[k][j][i] = work4[n]; + n += 2; + } + + // V1y + + n = 0; + ii = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fky[j]*(vg[ii][1]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]) + 2.0*fky[j]*work2[n]); + work4[n+1] = fky[j]*(vg[ii][1]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]) + 2.0*fky[j]*work2[n+1]); + n += 2; + ii++; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + v1y_brick_dipole[k][j][i] = work4[n]; + n += 2; + } + + // V1z + + n = 0; + ii = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fkz[k]*(vg[ii][1]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]) + 2.0*fky[j]*work2[n]); + work4[n+1] = fkz[k]*(vg[ii][1]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]) + 2.0*fky[j]*work2[n+1]); + n += 2; + ii++; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + v1z_brick_dipole[k][j][i] = work4[n]; + n += 2; + } + + // V2x + + n = 0; + ii = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fkx[i]*(vg[ii][2]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]) + 2.0*fkz[k]*work3[n]); + work4[n+1] = fkx[i]*(vg[ii][2]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]) + 2.0*fkz[k]*work3[n+1]); + n += 2; + ii++; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + v2x_brick_dipole[k][j][i] = work4[n]; + n += 2; + } + + // V2y + + n = 0; + ii = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fky[j]*(vg[ii][2]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]) + 2.0*fkz[k]*work3[n]); + work4[n+1] = fky[j]*(vg[ii][2]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]) + 2.0*fkz[k]*work3[n+1]); + n += 2; + ii++; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + v2y_brick_dipole[k][j][i] = work4[n]; + n += 2; + } + + // V2z + + n = 0; + ii = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fkz[k]*(vg[ii][2]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]) + 2.0*fkz[k]*work3[n]); + work4[n+1] = fkz[k]*(vg[ii][2]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]) + 2.0*fkz[k]*work3[n+1]); + n += 2; + ii++; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + v2z_brick_dipole[k][j][i] = work4[n]; + n += 2; + } + + // V3x + + n = 0; + ii = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fkx[i]*(vg[ii][3]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]) + 2.0*fky[j]*work1[n]); + work4[n+1] = fkx[i]*(vg[ii][3]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]) + 2.0*fky[j]*work1[n+1]); + n += 2; + ii++; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + v3x_brick_dipole[k][j][i] = work4[n]; + n += 2; + } + + // V3y + + n = 0; + ii = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fky[j]*(vg[ii][3]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]) + 2.0*fky[j]*work1[n]); + work4[n+1] = fky[j]*(vg[ii][3]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]) + 2.0*fky[j]*work1[n+1]); + n += 2; + ii++; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + v3y_brick_dipole[k][j][i] = work4[n]; + n += 2; + } + + // V3z + + n = 0; + ii = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fkz[k]*(vg[ii][3]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]) + 2.0*fky[j]*work1[n]); + work4[n+1] = fkz[k]*(vg[ii][3]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]) + 2.0*fky[j]*work1[n+1]); + n += 2; + ii++; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + v3z_brick_dipole[k][j][i] = work4[n]; + n += 2; + } + + // V4x + + n = 0; + ii = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fkx[i]*(vg[ii][4]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]) + 2.0*fkz[k]*work1[n]); + work4[n+1] = fkx[i]*(vg[ii][4]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]) + 2.0*fkz[k]*work1[n+1]); + n += 2; + ii++; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + v4x_brick_dipole[k][j][i] = work4[n]; + n += 2; + } + + // V4y + + n = 0; + ii = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fky[j]*(vg[ii][4]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]) + 2.0*fkz[k]*work1[n]); + work4[n+1] = fky[j]*(vg[ii][4]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]) + 2.0*fkz[k]*work1[n+1]); + n += 2; + ii++; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + v4y_brick_dipole[k][j][i] = work4[n]; + n += 2; + } + + // V4z + + n = 0; + ii = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fkz[k]*(vg[ii][4]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]) + 2.0*fkz[k]*work1[n]); + work4[n+1] = fkz[k]*(vg[ii][4]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]) + 2.0*fkz[k]*work1[n+1]); + n += 2; + ii++; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + v4z_brick_dipole[k][j][i] = work4[n]; + n += 2; + } + + // V5x + + n = 0; + ii = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fkx[i]*(vg[ii][5]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]) + 2.0*fkz[k]*work2[n]); + work4[n+1] = fkx[i]*(vg[ii][5]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]) + 2.0*fkz[k]*work2[n+1]); + n += 2; + ii++; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + v5x_brick_dipole[k][j][i] = work4[n]; + n += 2; + } + + // V5y + + n = 0; + ii = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fky[j]*(vg[ii][5]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]) + 2.0*fkz[k]*work2[n]); + work4[n+1] = fky[j]*(vg[ii][5]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]) + 2.0*fkz[k]*work2[n+1]); + n += 2; + ii++; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + v5y_brick_dipole[k][j][i] = work4[n]; + n += 2; + } + + // V5z + + n = 0; + ii = 0; + for (k = nzlo_fft; k <= nzhi_fft; k++) + for (j = nylo_fft; j <= nyhi_fft; j++) + for (i = nxlo_fft; i <= nxhi_fft; i++) { + work4[n] = fkz[k]*(vg[ii][5]*(work1[n]*fkx[i] + work2[n]*fky[j] + work3[n]*fkz[k]) + 2.0*fkz[k]*work2[n]); + work4[n+1] = fkz[k]*(vg[ii][5]*(work1[n+1]*fkx[i] + work2[n+1]*fky[j] + work3[n+1]*fkz[k]) + 2.0*fkz[k]*work2[n+1]); + n += 2; + ii++; + } + + fft2->compute(work4,work4,-1); + + n = 0; + for (k = nzlo_in; k <= nzhi_in; k++) + for (j = nylo_in; j <= nyhi_in; j++) + for (i = nxlo_in; i <= nxhi_in; i++) { + v5z_brick_dipole[k][j][i] = work4[n]; + n += 2; + } +} + +/* ---------------------------------------------------------------------- + interpolate from grid to get electric field & force on my particles for ik +------------------------------------------------------------------------- */ + +void PPPMDipole::fieldforce_ik_dipole() +{ + int i,l,m,n,nx,ny,nz,mx,my,mz; + FFT_SCALAR dx,dy,dz; + FFT_SCALAR x0,y0,z0; + FFT_SCALAR ex,ey,ez; + FFT_SCALAR vxx,vyy,vzz,vxy,vxz,vyz; + + // loop over my charges, interpolate electric field from nearby grid points + // (nx,ny,nz) = global coords of grid pt to "lower left" of charge + // (dx,dy,dz) = distance to "lower left" grid pt + // (mx,my,mz) = global coords of moving stencil pt + + + double **mu = atom->mu; + double **x = atom->x; + double **f = atom->f; + double **t = atom->torque; + + int nlocal = atom->nlocal; + + for (i = 0; i < nlocal; i++) { + nx = part2grid[i][0]; + ny = part2grid[i][1]; + nz = part2grid[i][2]; + dx = nx+shiftone - (x[i][0]-boxlo[0])*delxinv; + dy = ny+shiftone - (x[i][1]-boxlo[1])*delyinv; + dz = nz+shiftone - (x[i][2]-boxlo[2])*delzinv; + + compute_rho1d(dx,dy,dz); + + ex = ey = ez = ZEROF; + vxx = vyy = vzz = vxy = vxz = vyz = ZEROF; + for (n = nlower; n <= nupper; n++) { + mz = n+nz; + z0 = rho1d[2][n]; + for (m = nlower; m <= nupper; m++) { + my = m+ny; + y0 = z0*rho1d[1][m]; + for (l = nlower; l <= nupper; l++) { + mx = l+nx; + x0 = y0*rho1d[0][l]; + ex -= x0*ux_brick_dipole[mz][my][mx]; + ey -= x0*uy_brick_dipole[mz][my][mx]; + ez -= x0*uz_brick_dipole[mz][my][mx]; + vxx -= x0*vdxx_brick_dipole[mz][my][mx]; + vyy -= x0*vdyy_brick_dipole[mz][my][mx]; + vzz -= x0*vdzz_brick_dipole[mz][my][mx]; + vxy -= x0*vdxy_brick_dipole[mz][my][mx]; + vxz -= x0*vdxz_brick_dipole[mz][my][mx]; + vyz -= x0*vdyz_brick_dipole[mz][my][mx]; + } + } + } + + // convert E-field to torque + + const double mufactor = qqrd2e * scale; + f[i][0] += mufactor*(vxx*mu[i][0] + vxy*mu[i][1] + vxz*mu[i][2]); + f[i][1] += mufactor*(vxy*mu[i][0] + vyy*mu[i][1] + vyz*mu[i][2]); + f[i][2] += mufactor*(vxz*mu[i][0] + vyz*mu[i][1] + vzz*mu[i][2]); + + t[i][0] += mufactor*(mu[i][1]*ez - mu[i][2]*ey); + t[i][1] += mufactor*(mu[i][2]*ex - mu[i][0]*ez); + t[i][2] += mufactor*(mu[i][0]*ey - mu[i][1]*ex); + } +} + +/* ---------------------------------------------------------------------- + interpolate from grid to get per-atom energy/virial +------------------------------------------------------------------------- */ + +void PPPMDipole::fieldforce_peratom_dipole() +{ + int i,l,m,n,nx,ny,nz,mx,my,mz; + FFT_SCALAR dx,dy,dz,x0,y0,z0; + FFT_SCALAR ux,uy,uz; + FFT_SCALAR v0x,v1x,v2x,v3x,v4x,v5x; + FFT_SCALAR v0y,v1y,v2y,v3y,v4y,v5y; + FFT_SCALAR v0z,v1z,v2z,v3z,v4z,v5z; + + // loop over my charges, interpolate from nearby grid points + // (nx,ny,nz) = global coords of grid pt to "lower left" of charge + // (dx,dy,dz) = distance to "lower left" grid pt + // (mx,my,mz) = global coords of moving stencil pt + + double **mu = atom->mu; + double **x = atom->x; + + int nlocal = atom->nlocal; + + for (i = 0; i < nlocal; i++) { + nx = part2grid[i][0]; + ny = part2grid[i][1]; + nz = part2grid[i][2]; + dx = nx+shiftone - (x[i][0]-boxlo[0])*delxinv; + dy = ny+shiftone - (x[i][1]-boxlo[1])*delyinv; + dz = nz+shiftone - (x[i][2]-boxlo[2])*delzinv; + + compute_rho1d(dx,dy,dz); + + ux = uy = uz = ZEROF; + v0x = v1x = v2x = v3x = v4x = v5x = ZEROF; + v0y = v1y = v2y = v3y = v4y = v5y = ZEROF; + v0z = v1z = v2z = v3z = v4z = v5z = ZEROF; + for (n = nlower; n <= nupper; n++) { + mz = n+nz; + z0 = rho1d[2][n]; + for (m = nlower; m <= nupper; m++) { + my = m+ny; + y0 = z0*rho1d[1][m]; + for (l = nlower; l <= nupper; l++) { + mx = l+nx; + x0 = y0*rho1d[0][l]; + if (eflag_atom) { + ux += x0*ux_brick_dipole[mz][my][mx]; + uy += x0*uy_brick_dipole[mz][my][mx]; + uz += x0*uz_brick_dipole[mz][my][mx]; + } + if (vflag_atom) { + v0x += x0*v0x_brick_dipole[mz][my][mx]; + v1x += x0*v1x_brick_dipole[mz][my][mx]; + v2x += x0*v2x_brick_dipole[mz][my][mx]; + v3x += x0*v3x_brick_dipole[mz][my][mx]; + v4x += x0*v4x_brick_dipole[mz][my][mx]; + v5x += x0*v5x_brick_dipole[mz][my][mx]; + v0y += x0*v0y_brick_dipole[mz][my][mx]; + v1y += x0*v1y_brick_dipole[mz][my][mx]; + v2y += x0*v2y_brick_dipole[mz][my][mx]; + v3y += x0*v3y_brick_dipole[mz][my][mx]; + v4y += x0*v4y_brick_dipole[mz][my][mx]; + v5y += x0*v5y_brick_dipole[mz][my][mx]; + v0z += x0*v0z_brick_dipole[mz][my][mx]; + v1z += x0*v1z_brick_dipole[mz][my][mx]; + v2z += x0*v2z_brick_dipole[mz][my][mx]; + v3z += x0*v3z_brick_dipole[mz][my][mx]; + v4z += x0*v4z_brick_dipole[mz][my][mx]; + v5z += x0*v5z_brick_dipole[mz][my][mx]; + } + } + } + } + + if (eflag_atom) eatom[i] += mu[i][0]*ux + mu[i][1]*uy + mu[i][2]*uz; + if (vflag_atom) { + vatom[i][0] += mu[i][0]*v0x + mu[i][1]*v0y + mu[i][2]*v0z; + vatom[i][1] += mu[i][0]*v1x + mu[i][1]*v1y + mu[i][2]*v1z; + vatom[i][2] += mu[i][0]*v2x + mu[i][1]*v2y + mu[i][2]*v2z; + vatom[i][3] += mu[i][0]*v3x + mu[i][1]*v3y + mu[i][2]*v3z; + vatom[i][4] += mu[i][0]*v4x + mu[i][1]*v4y + mu[i][2]*v4z; + vatom[i][5] += mu[i][0]*v5x + mu[i][1]*v5y + mu[i][2]*v5z; + } + } +} + +/* ---------------------------------------------------------------------- + pack own values to buf to send to another proc +------------------------------------------------------------------------- */ + +void PPPMDipole::pack_forward(int flag, FFT_SCALAR *buf, int nlist, int *list) +{ + int n = 0; + + if (flag == FORWARD_MU) { + FFT_SCALAR *src_ux = &ux_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_uy = &uy_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_uz = &uz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_vxx = &vdxx_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_vyy = &vdyy_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_vzz = &vdzz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_vxy = &vdxy_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_vxz = &vdxz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_vyz = &vdyz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + for (int i = 0; i < nlist; i++) { + buf[n++] = src_ux[list[i]]; + buf[n++] = src_uy[list[i]]; + buf[n++] = src_uz[list[i]]; + buf[n++] = src_vxx[list[i]]; + buf[n++] = src_vyy[list[i]]; + buf[n++] = src_vzz[list[i]]; + buf[n++] = src_vxy[list[i]]; + buf[n++] = src_vxz[list[i]]; + buf[n++] = src_vyz[list[i]]; + } + } else if (flag == FORWARD_MU_PERATOM) { + FFT_SCALAR *v0xsrc = &v0x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v1xsrc = &v1x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v2xsrc = &v2x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v3xsrc = &v3x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v4xsrc = &v4x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v5xsrc = &v5x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v0ysrc = &v0y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v1ysrc = &v1y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v2ysrc = &v2y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v3ysrc = &v3y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v4ysrc = &v4y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v5ysrc = &v5y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v0zsrc = &v0z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v1zsrc = &v1z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v2zsrc = &v2z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v3zsrc = &v3z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v4zsrc = &v4z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v5zsrc = &v5z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + for (int i = 0; i < nlist; i++) { + buf[n++] = v0xsrc[list[i]]; + buf[n++] = v1xsrc[list[i]]; + buf[n++] = v2xsrc[list[i]]; + buf[n++] = v3xsrc[list[i]]; + buf[n++] = v4xsrc[list[i]]; + buf[n++] = v5xsrc[list[i]]; + buf[n++] = v0ysrc[list[i]]; + buf[n++] = v1ysrc[list[i]]; + buf[n++] = v2ysrc[list[i]]; + buf[n++] = v3ysrc[list[i]]; + buf[n++] = v4ysrc[list[i]]; + buf[n++] = v5ysrc[list[i]]; + buf[n++] = v0zsrc[list[i]]; + buf[n++] = v1zsrc[list[i]]; + buf[n++] = v2zsrc[list[i]]; + buf[n++] = v3zsrc[list[i]]; + buf[n++] = v4zsrc[list[i]]; + buf[n++] = v5zsrc[list[i]]; + } + } +} + +/* ---------------------------------------------------------------------- + unpack another proc's own values from buf and set own ghost values +------------------------------------------------------------------------- */ + +void PPPMDipole::unpack_forward(int flag, FFT_SCALAR *buf, int nlist, int *list) +{ + int n = 0; + + if (flag == FORWARD_MU) { + FFT_SCALAR *dest_ux = &ux_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_uy = &uy_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_uz = &uz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_vxx = &vdxx_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_vyy = &vdyy_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_vzz = &vdzz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_vxy = &vdxy_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_vxz = &vdxz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_vyz = &vdyz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + for (int i = 0; i < nlist; i++) { + dest_ux[list[i]] = buf[n++]; + dest_uy[list[i]] = buf[n++]; + dest_uz[list[i]] = buf[n++]; + dest_vxx[list[i]] = buf[n++]; + dest_vyy[list[i]] = buf[n++]; + dest_vzz[list[i]] = buf[n++]; + dest_vxy[list[i]] = buf[n++]; + dest_vxz[list[i]] = buf[n++]; + dest_vyz[list[i]] = buf[n++]; + } + } else if (flag == FORWARD_MU_PERATOM) { + FFT_SCALAR *v0xsrc = &v0x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v1xsrc = &v1x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v2xsrc = &v2x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v3xsrc = &v3x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v4xsrc = &v4x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v5xsrc = &v5x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v0ysrc = &v0y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v1ysrc = &v1y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v2ysrc = &v2y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v3ysrc = &v3y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v4ysrc = &v4y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v5ysrc = &v5y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v0zsrc = &v0z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v1zsrc = &v1z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v2zsrc = &v2z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v3zsrc = &v3z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v4zsrc = &v4z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v5zsrc = &v5z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + for (int i = 0; i < nlist; i++) { + v0xsrc[list[i]] = buf[n++]; + v1xsrc[list[i]] = buf[n++]; + v2xsrc[list[i]] = buf[n++]; + v3xsrc[list[i]] = buf[n++]; + v4xsrc[list[i]] = buf[n++]; + v5xsrc[list[i]] = buf[n++]; + v0ysrc[list[i]] = buf[n++]; + v1ysrc[list[i]] = buf[n++]; + v2ysrc[list[i]] = buf[n++]; + v3ysrc[list[i]] = buf[n++]; + v4ysrc[list[i]] = buf[n++]; + v5ysrc[list[i]] = buf[n++]; + v0zsrc[list[i]] = buf[n++]; + v1zsrc[list[i]] = buf[n++]; + v2zsrc[list[i]] = buf[n++]; + v3zsrc[list[i]] = buf[n++]; + v4zsrc[list[i]] = buf[n++]; + v5zsrc[list[i]] = buf[n++]; + } + } +} + +/* ---------------------------------------------------------------------- + pack ghost values into buf to send to another proc +------------------------------------------------------------------------- */ + +void PPPMDipole::pack_reverse(int flag, FFT_SCALAR *buf, int nlist, int *list) +{ + int n = 0; + if (flag == REVERSE_MU) { + FFT_SCALAR *src_dipole0 = &densityx_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_dipole1 = &densityy_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_dipole2 = &densityz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + for (int i = 0; i < nlist; i++) { + buf[n++] = src_dipole0[list[i]]; + buf[n++] = src_dipole1[list[i]]; + buf[n++] = src_dipole2[list[i]]; + } + } +} + +/* ---------------------------------------------------------------------- + unpack another proc's ghost values from buf and add to own values +------------------------------------------------------------------------- */ + +void PPPMDipole::unpack_reverse(int flag, FFT_SCALAR *buf, int nlist, int *list) +{ + int n = 0; + if (flag == REVERSE_MU) { + FFT_SCALAR *dest_dipole0 = &densityx_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_dipole1 = &densityy_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_dipole2 = &densityz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + for (int i = 0; i < nlist; i++) { + dest_dipole0[list[i]] += buf[n++]; + dest_dipole1[list[i]] += buf[n++]; + dest_dipole2[list[i]] += buf[n++]; + } + } +} + +/* ---------------------------------------------------------------------- + Slab-geometry correction term to dampen inter-slab interactions between + periodically repeating slabs. Yields good approximation to 2D Ewald if + adequate empty space is left between repeating slabs (J. Chem. Phys. + 111, 3155). Slabs defined here to be parallel to the xy plane. Also + extended to non-neutral systems (J. Chem. Phys. 131, 094107). +------------------------------------------------------------------------- */ + +void PPPMDipole::slabcorr() +{ + // compute local contribution to global dipole moment + + double **x = atom->x; + double zprd = domain->zprd; + int nlocal = atom->nlocal; + + double dipole = 0.0; + double **mu = atom->mu; + for (int i = 0; i < nlocal; i++) dipole += mu[i][2]; + + // sum local contributions to get global dipole moment + + double dipole_all; + MPI_Allreduce(&dipole,&dipole_all,1,MPI_DOUBLE,MPI_SUM,world); + + // need to make non-neutral systems and/or + // per-atom energy translationally invariant + + if (eflag_atom || fabs(qsum) > SMALL) { + + error->all(FLERR,"Cannot (yet) use kspace slab correction with " + "long-range dipoles and non-neutral systems or per-atom energy"); + } + + // compute corrections + + const double e_slabcorr = MY_2PI*(dipole_all*dipole_all/12.0)/volume; + const double qscale = qqrd2e * scale; + + if (eflag_global) energy += qscale * e_slabcorr; + + // per-atom energy + + if (eflag_atom) { + double efact = qscale * MY_2PI/volume/12.0; + for (int i = 0; i < nlocal; i++) + eatom[i] += efact * mu[i][2]*dipole_all; + } + + // add on torque corrections + + if (atom->torque) { + double ffact = qscale * (-4.0*MY_PI/volume); + double **mu = atom->mu; + double **torque = atom->torque; + for (int i = 0; i < nlocal; i++) { + torque[i][0] += ffact * dipole_all * mu[i][1]; + torque[i][1] += -ffact * dipole_all * mu[i][0]; + } + } +} + +/* ---------------------------------------------------------------------- + perform and time the 1d FFTs required for N timesteps +------------------------------------------------------------------------- */ + +int PPPMDipole::timing_1d(int n, double &time1d) +{ + double time1,time2; + + for (int i = 0; i < 2*nfft_both; i++) work1[i] = ZEROF; + + MPI_Barrier(world); + time1 = MPI_Wtime(); + + for (int i = 0; i < n; i++) { + fft1->timing1d(work1,nfft_both,1); + fft1->timing1d(work1,nfft_both,1); + fft1->timing1d(work1,nfft_both,1); + fft2->timing1d(work1,nfft_both,-1); + fft2->timing1d(work1,nfft_both,-1); + fft2->timing1d(work1,nfft_both,-1); + fft2->timing1d(work1,nfft_both,-1); + fft2->timing1d(work1,nfft_both,-1); + fft2->timing1d(work1,nfft_both,-1); + fft2->timing1d(work1,nfft_both,-1); + fft2->timing1d(work1,nfft_both,-1); + fft2->timing1d(work1,nfft_both,-1); + } + + MPI_Barrier(world); + time2 = MPI_Wtime(); + time1d = time2 - time1; + + return 12; +} + +/* ---------------------------------------------------------------------- + perform and time the 3d FFTs required for N timesteps +------------------------------------------------------------------------- */ + +int PPPMDipole::timing_3d(int n, double &time3d) +{ + double time1,time2; + + for (int i = 0; i < 2*nfft_both; i++) work1[i] = ZEROF; + + MPI_Barrier(world); + time1 = MPI_Wtime(); + + for (int i = 0; i < n; i++) { + fft1->compute(work1,work1,1); + fft1->compute(work1,work1,1); + fft1->compute(work1,work1,1); + fft2->compute(work1,work1,-1); + fft2->compute(work1,work1,-1); + fft2->compute(work1,work1,-1); + fft2->compute(work1,work1,-1); + fft2->compute(work1,work1,-1); + fft2->compute(work1,work1,-1); + fft2->compute(work1,work1,-1); + fft2->compute(work1,work1,-1); + fft2->compute(work1,work1,-1); + } + + MPI_Barrier(world); + time2 = MPI_Wtime(); + time3d = time2 - time1; + + return 12; +} + +/* ---------------------------------------------------------------------- + memory usage of local arrays +------------------------------------------------------------------------- */ + +double PPPMDipole::memory_usage() +{ + double bytes = nmax*3 * sizeof(double); + int nbrick = (nxhi_out-nxlo_out+1) * (nyhi_out-nylo_out+1) * + (nzhi_out-nzlo_out+1); + bytes += 6 * nfft_both * sizeof(double); // vg + bytes += nfft_both * sizeof(double); // greensfn + bytes += nfft_both*5 * sizeof(FFT_SCALAR); // work*2*2 + bytes += 9 * nbrick * sizeof(FFT_SCALAR); // ubrick*3 + vdbrick*6 + bytes += nfft_both*7 * sizeof(FFT_SCALAR); //density_ffx*3 + work*2*2 + + if (peratom_allocate_flag) + bytes += 21 * nbrick * sizeof(FFT_SCALAR); + + if (cg_dipole) bytes += cg_dipole->memory_usage(); + if (cg_peratom_dipole) bytes += cg_peratom_dipole->memory_usage(); + + return bytes; +} + +/* ---------------------------------------------------------------------- + compute musum,musqsum,mu2 + called initially, when particle count changes, when dipoles are changed +------------------------------------------------------------------------- */ + +void PPPMDipole::musum_musq() +{ + const int nlocal = atom->nlocal; + + musum = musqsum = mu2 = 0.0; + if (atom->mu_flag) { + double** mu = atom->mu; + double musum_local(0.0), musqsum_local(0.0); + + for (int i = 0; i < nlocal; i++) { + musum_local += mu[i][0] + mu[i][1] + mu[i][2]; + musqsum_local += mu[i][0]*mu[i][0] + mu[i][1]*mu[i][1] + mu[i][2]*mu[i][2]; + } + + MPI_Allreduce(&musum_local,&musum,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&musqsum_local,&musqsum,1,MPI_DOUBLE,MPI_SUM,world); + + mu2 = musqsum * force->qqrd2e; + } + + if (mu2 == 0 && comm->me == 0) + error->all(FLERR,"Using kspace solver PPPMDipole on system with no dipoles"); +} \ No newline at end of file diff --git a/src/KSPACE/pppm_spin.h b/src/KSPACE/pppm_spin.h new file mode 100644 index 0000000000..4d6906f974 --- /dev/null +++ b/src/KSPACE/pppm_spin.h @@ -0,0 +1,213 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + 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 KSPACE_CLASS + +KSpaceStyle(pppm/dipole,PPPMDipole) + +#else + +#ifndef LMP_PPPM_DIPOLE_H +#define LMP_PPPM_DIPOLE_H + +#include "pppm.h" + +namespace LAMMPS_NS { + +class PPPMDipole : public PPPM { + public: + PPPMDipole(class LAMMPS *, int, char **); + virtual ~PPPMDipole(); + void init(); + void setup(); + void setup_grid(); + void compute(int, int); + int timing_1d(int, double &); + int timing_3d(int, double &); + double memory_usage(); + + protected: + void set_grid_global(); + double newton_raphson_f(); + + void allocate(); + void allocate_peratom(); + void deallocate(); + void deallocate_peratom(); + void compute_gf_denom(); + + void slabcorr(); + + // grid communication + + void pack_forward(int, FFT_SCALAR *, int, int *); + void unpack_forward(int, FFT_SCALAR *, int, int *); + void pack_reverse(int, FFT_SCALAR *, int, int *); + void unpack_reverse(int, FFT_SCALAR *, int, int *); + + // dipole + + FFT_SCALAR ***densityx_brick_dipole,***densityy_brick_dipole,***densityz_brick_dipole; + FFT_SCALAR ***vdxx_brick_dipole,***vdyy_brick_dipole,***vdzz_brick_dipole; + FFT_SCALAR ***vdxy_brick_dipole,***vdxz_brick_dipole,***vdyz_brick_dipole; + FFT_SCALAR ***ux_brick_dipole,***uy_brick_dipole,***uz_brick_dipole; + FFT_SCALAR ***v0x_brick_dipole,***v1x_brick_dipole,***v2x_brick_dipole; + FFT_SCALAR ***v3x_brick_dipole,***v4x_brick_dipole,***v5x_brick_dipole; + FFT_SCALAR ***v0y_brick_dipole,***v1y_brick_dipole,***v2y_brick_dipole; + FFT_SCALAR ***v3y_brick_dipole,***v4y_brick_dipole,***v5y_brick_dipole; + FFT_SCALAR ***v0z_brick_dipole,***v1z_brick_dipole,***v2z_brick_dipole; + FFT_SCALAR ***v3z_brick_dipole,***v4z_brick_dipole,***v5z_brick_dipole; + FFT_SCALAR *work3,*work4; + FFT_SCALAR *densityx_fft_dipole,*densityy_fft_dipole,*densityz_fft_dipole; + class GridComm *cg_dipole; + class GridComm *cg_peratom_dipole; + int only_dipole_flag; + double musum,musqsum,mu2; + double find_gewald_dipole(double, double, bigint, double, double); + double newton_raphson_f_dipole(double, double, bigint, double, double); + double derivf_dipole(double, double, bigint, double, double); + double compute_df_kspace_dipole(); + double compute_qopt_dipole(); + void compute_gf_dipole(); + void make_rho_dipole(); + void brick2fft_dipole(); + void poisson_ik_dipole(); + void poisson_peratom_dipole(); + void fieldforce_ik_dipole(); + void fieldforce_peratom_dipole(); + double final_accuracy_dipole(); + void musum_musq(); + +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Cannot (yet) use charges with Kspace style PPPMDipole + +Charge-dipole interactions are not yet implemented in PPPMDipole so this +feature is not yet supported. + +E: Must redefine kspace_style after changing to triclinic box + +Self-explanatory. + +E: Kspace style requires atom attribute mu + +The atom style defined does not have this attribute. + +E: Cannot (yet) use kspace_modify diff ad with dipoles + +This feature is not yet supported. + +E: Cannot (yet) use 'electron' units with dipoles + +This feature is not yet supported. + +E: Cannot yet use triclinic cells with PPPMDipole + +This feature is not yet supported. + +E: Cannot yet use TIP4P with PPPMDipole + +This feature is not yet supported. + +E: Cannot use nonperiodic boundaries with PPPM + +For kspace style pppm, all 3 dimensions must have periodic boundaries +unless you use the kspace_modify command to define a 2d slab with a +non-periodic z dimension. + +E: Incorrect boundaries with slab PPPM + +Must have periodic x,y dimensions and non-periodic z dimension to use +2d slab option with PPPM. + +E: PPPM order cannot be < 2 or > than %d + +This is a limitation of the PPPM implementation in LAMMPS. + +E: KSpace style is incompatible with Pair style + +Setting a kspace style requires that a pair style with matching +long-range dipole components be used. + +W: Reducing PPPM order b/c stencil extends beyond nearest neighbor processor + +This may lead to a larger grid than desired. See the kspace_modify overlap +command to prevent changing of the PPPM order. + +E: PPPM order < minimum allowed order + +The default minimum order is 2. This can be reset by the +kspace_modify minorder command. + +E: PPPM grid stencil extends beyond nearest neighbor processor + +This is not allowed if the kspace_modify overlap setting is no. + +E: KSpace accuracy must be > 0 + +The kspace accuracy designated in the input must be greater than zero. + +E: Could not compute grid size + +The code is unable to compute a grid size consistent with the desired +accuracy. This error should not occur for typical problems. Please +send an email to the developers. + +E: PPPM grid is too large + +The global PPPM grid is larger than OFFSET in one or more dimensions. +OFFSET is currently set to 4096. You likely need to decrease the +requested accuracy. + +E: Could not compute g_ewald + +The Newton-Raphson solver failed to converge to a good value for +g_ewald. This error should not occur for typical problems. Please +send an email to the developers. + +E: Non-numeric box dimensions - simulation unstable + +The box size has apparently blown up. + +E: Out of range atoms - cannot compute PPPM + +One or more atoms are attempting to map their charge to a PPPM grid +point that is not owned by a processor. This is likely for one of two +reasons, both of them bad. First, it may mean that an atom near the +boundary of a processor's sub-domain has moved more than 1/2 the +"neighbor skin distance"_neighbor.html without neighbor lists being +rebuilt and atoms being migrated to new processors. This also means +you may be missing pairwise interactions that need to be computed. +The solution is to change the re-neighboring criteria via the +"neigh_modify"_neigh_modify command. The safest settings are "delay 0 +every 1 check yes". Second, it may mean that an atom has moved far +outside a processor's sub-domain or even the entire simulation box. +This indicates bad physics, e.g. due to highly overlapping atoms, too +large a timestep, etc. + +E: Using kspace solver PPPMDipole on system with no dipoles + +Must have non-zero dipoles with PPPMDipole. + +E: Must use kspace_modify gewald for system with no dipoles + +Self-explanatory. + +*/ diff --git a/src/SPIN/pair_spin_long.cpp b/src/SPIN/pair_spin_long.cpp new file mode 100644 index 0000000000..66b684ae1d --- /dev/null +++ b/src/SPIN/pair_spin_long.cpp @@ -0,0 +1,550 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + www.cs.sandia.gov/~sjplimp/lammps.html + Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories + + 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 authors: Julien Tranchida (SNL) + Stan Moore (SNL) + + Please cite the related publication: + Tranchida, J., Plimpton, S. J., Thibaudeau, P., & Thompson, A. P. (2018). + Massively parallel symplectic algorithm for coupled magnetic spin dynamics + and molecular dynamics. arXiv preprint arXiv:1801.10233. +------------------------------------------------------------------------- */ + + +#include +#include +#include +#include +#include "pair_spin_long.h" +#include "atom.h" +#include "comm.h" +#include "neighbor.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "fix_nve_spin.h" +#include "force.h" +#include "kspace.h" +#include "math_const.h" +#include "memory.h" +#include "modify.h" +#include "error.h" +#include "update.h" + + +using namespace LAMMPS_NS; +using namespace MathConst; + +#define EWALD_F 1.12837917 +#define EWALD_P 0.3275911 +#define A1 0.254829592 +#define A2 -0.284496736 +#define A3 1.421413741 +#define A4 -1.453152027 +#define A5 1.061405429 + +/* ---------------------------------------------------------------------- */ + +PairSpinLong::PairSpinLong(LAMMPS *lmp) : PairSpin(lmp), +lockfixnvespin(NULL) +{ + single_enable = 0; + ewaldflag = pppmflag = 1; + respa_enable = 0; + no_virial_fdotr_compute = 1; + lattice_flag = 0; + + hbar = force->hplanck/MY_2PI; // eV/(rad.THz) + mub = 5.78901e-5; // in eV/T + mu_0 = 1.2566370614e-6; // in T.m/A + mub2mu0 = mub * mub * mu_0; // in eV + mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz + +} + +/* ---------------------------------------------------------------------- + free all arrays +------------------------------------------------------------------------- */ + +PairSpinLong::~PairSpinLong() +{ + if (allocated) { + memory->destroy(setflag); + memory->destroy(cutsq); + } +} + +/* ---------------------------------------------------------------------- */ + +void PairSpinLong::compute(int eflag, int vflag) +{ + int i,j,ii,jj,inum,jnum,itype,jtype; + double r,rinv,r2inv,rsq; + double grij,expm2,t,erfc; + double bij[4]; + double evdwl,ecoul; + double xi[3],rij[3]; + double spi[4],spj[4],fi[3],fmi[3]; + double pre1,pre2,pre3; + int *ilist,*jlist,*numneigh,**firstneigh; + + evdwl = ecoul = 0.0; + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = vflag_fdotr = 0; + + double **x = atom->x; + double **f = atom->f; + double **fm = atom->fm; + double **sp = atom->sp; + int *type = atom->type; + int nlocal = atom->nlocal; + int newton_pair = force->newton_pair; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + pre1 = 2.0 * g_ewald / MY_PIS; + pre2 = 4.0 * pow(g_ewald,3.0) / MY_PIS; + pre3 = 8.0 * pow(g_ewald,5.0) / MY_PIS; + + // computation of the exchange interaction + // loop over atoms and their neighbors + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + xi[0] = x[i][0]; + xi[1] = x[i][1]; + xi[2] = x[i][2]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + spi[0] = sp[i][0]; + spi[1] = sp[i][1]; + spi[2] = sp[i][2]; + spi[3] = sp[i][3]; + itype = type[i]; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + jtype = type[j]; + + spj[0] = sp[j][0]; + spj[1] = sp[j][1]; + spj[2] = sp[j][2]; + spj[3] = sp[j][3]; + + evdwl = 0.0; + + fi[0] = fi[1] = fi[2] = 0.0; + fmi[0] = fmi[1] = fmi[2] = 0.0; + bij[0] = bij[1] = bij[2] = bij[3] = 0.0; + + rij[0] = x[j][0] - xi[0]; + rij[1] = x[j][1] - xi[1]; + rij[2] = x[j][2] - xi[2]; + rsq = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; + + if (rsq < cutsq[itype][jtype]) { + r2inv = 1.0/rsq; + rinv = sqrt(r2inv); + + if (rsq < cut_spinsq) { + r = sqrt(rsq); + grij = g_ewald * r; + expm2 = exp(-grij*grij); + t = 1.0 / (1.0 + EWALD_P*grij); + erfc = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; + + bij[0] = erfc * rinv; + bij[1] = (bij[0] + pre1*expm2) * r2inv; + bij[2] = (3.0*bij[1] + pre2*expm2) * r2inv; + bij[3] = (5.0*bij[2] + pre3*expm2) * r2inv; + + compute_long(i,j,rij,bij,fmi,spi,spj); + compute_long_mech(i,j,rij,bij,fmi,spi,spj); + + } + } + + // force accumulation + + f[i][0] += fi[0] * mub2mu0; + f[i][1] += fi[1] * mub2mu0; + f[i][2] += fi[2] * mub2mu0; + fm[i][0] += fmi[0] * mub2mu0hbinv; + fm[i][1] += fmi[1] * mub2mu0hbinv; + fm[i][2] += fmi[2] * mub2mu0hbinv; + + if (newton_pair || j < nlocal) { + f[j][0] -= fi[0]; + f[j][1] -= fi[1]; + f[j][2] -= fi[2]; + } + + if (eflag) { + if (rsq <= cut_spinsq) { + evdwl -= spi[0]*fmi[0] + spi[1]*fmi[1] + + spi[2]*fmi[2]; + evdwl *= hbar; + } + } else evdwl = 0.0; + + + if (evflag) ev_tally_xyz(i,j,nlocal,newton_pair, + evdwl,ecoul,fi[0],fi[1],fi[2],rij[0],rij[1],rij[2]); + + } + } +} + +/* ---------------------------------------------------------------------- + update the pair interaction fmi acting on the spin ii +------------------------------------------------------------------------- */ + +void PairSpinLong::compute_single_pair(int ii, double fmi[3]) +{ + int i,j,jj,jnum,itype,jtype; + double r,rinv,r2inv,rsq; + double grij,expm2,t,erfc; + double bij[4],xi[3],rij[3],spi[4],spj[4]; + double pre1,pre2,pre3; + int *ilist,*jlist,*numneigh,**firstneigh; + + double **x = atom->x; + double **sp = atom->sp; + int *type = atom->type; + + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + pre1 = 2.0 * g_ewald / MY_PIS; + pre2 = 4.0 * pow(g_ewald,3.0) / MY_PIS; + pre3 = 8.0 * pow(g_ewald,5.0) / MY_PIS; + + // computation of the exchange interaction + // loop over neighbors of atom i + + i = ilist[ii]; + xi[0] = x[i][0]; + xi[1] = x[i][1]; + xi[2] = x[i][2]; + spi[0] = sp[i][0]; + spi[1] = sp[i][1]; + spi[2] = sp[i][2]; + spi[3] = sp[i][3]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + itype = type[i]; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + jtype = type[j]; + + spj[0] = sp[j][0]; + spj[1] = sp[j][1]; + spj[2] = sp[j][2]; + spj[3] = sp[j][3]; + + fmi[0] = fmi[1] = fmi[2] = 0.0; + bij[0] = bij[1] = bij[2] = bij[3] = 0.0; + + rij[0] = x[j][0] - xi[0]; + rij[1] = x[j][1] - xi[1]; + rij[2] = x[j][2] - xi[2]; + rsq = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; + + if (rsq < cutsq[itype][jtype]) { + r2inv = 1.0/rsq; + rinv = sqrt(r2inv); + + if (rsq < cut_spinsq) { + r = sqrt(rsq); + grij = g_ewald * r; + expm2 = exp(-grij*grij); + t = 1.0 / (1.0 + EWALD_P*grij); + erfc = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; + + bij[0] = erfc * rinv; + bij[1] = (bij[0] + pre1*expm2) * r2inv; + bij[2] = (3.0*bij[1] + pre2*expm2) * r2inv; + bij[3] = (5.0*bij[2] + pre3*expm2) * r2inv; + + compute_long(i,j,rij,bij,fmi,spi,spj); + + } + } + } + + // force accumulation + + fmi[0] *= mub2mu0hbinv; + fmi[1] *= mub2mu0hbinv; + fmi[2] *= mub2mu0hbinv; +} + +/* ---------------------------------------------------------------------- + compute exchange interaction between spins i and j +------------------------------------------------------------------------- */ + +void PairSpinLong::compute_long(int i, int j, double rij[3], + double bij[4], double fmi[3], double spi[4], double spj[4]) +{ + double sjdotr; + double b1,b2,gigj; + + gigj = spi[3] * spj[3]; + sjdotr = spj[0]*rij[0] + spj[1]*rij[1] + spj[2]*rij[2]; + + b1 = bij[1]; + b2 = bij[2]; + + fmi[0] += gigj * (b2 * sjdotr *rij[0] - b1 * spj[0]); + fmi[1] += gigj * (b2 * sjdotr *rij[1] - b1 * spj[1]); + fmi[2] += gigj * (b2 * sjdotr *rij[2] - b1 * spj[2]); +} + +/* ---------------------------------------------------------------------- + compute the mechanical force due to the exchange interaction between atom i and atom j +------------------------------------------------------------------------- */ + +void PairSpinLong::compute_long_mech(int i, int j, double rij[3], + double bij[4], double fi[3], double spi[3], double spj[3]) +{ + double sdots,sidotr,sjdotr,b2,b3; + double g1,g2,g1b2_g2b3,gigj; + + gigj = spi[3] * spj[3]; + sdots = spi[0]*spj[0] + spi[1]*spj[1] + spi[2]*spj[2]; + sidotr = spi[0]*rij[0] + spi[1]*rij[1] + spi[2]*rij[2]; + sjdotr = spj[0]*rij[0] + spj[1]*rij[1] + spj[2]*rij[2]; + + b2 = bij[2]; + b3 = bij[3]; + g1 = sdots; + g2 = -sidotr*sjdotr; + g1b2_g2b3 = g1*b2 + g2*b3; + + fi[0] += gigj * (rij[0] * g1b2_g2b3 + + b2 * (sjdotr*spi[0] + sidotr*spj[0])); + fi[1] += gigj * (rij[1] * g1b2_g2b3 + + b2 * (sjdotr*spi[1] + sidotr*spj[1])); + fi[2] += gigj * (rij[2] * g1b2_g2b3 + + b2 * (sjdotr*spi[2] + sidotr*spj[2])); +} + + +/* ---------------------------------------------------------------------- + allocate all arrays +------------------------------------------------------------------------- */ + +void PairSpinLong::allocate() +{ + allocated = 1; + int n = atom->ntypes; + + memory->create(setflag,n+1,n+1,"pair:setflag"); + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + setflag[i][j] = 0; + + memory->create(cutsq,n+1,n+1,"pair:cutsq"); +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairSpinLong::settings(int narg, char **arg) +{ + if (narg < 1 || narg > 2) + error->all(FLERR,"Incorrect args in pair_style command"); + + if (strcmp(update->unit_style,"metal") != 0) + error->all(FLERR,"Spin simulations require metal unit style"); + + cut_spin = force->numeric(FLERR,arg[0]); + +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more type pairs +------------------------------------------------------------------------- */ + +void PairSpinLong::coeff(int narg, char **arg) +{ + if (narg < 4 || narg > 5) + error->all(FLERR,"Incorrect args for pair coefficients"); + if (!allocated) allocate(); + + // check if args correct + + if (strcmp(arg[2],"long") != 0) + error->all(FLERR,"Incorrect args in pair_style command"); + if (narg != 3) + error->all(FLERR,"Incorrect args in pair_style command"); + + int ilo,ihi,jlo,jhi; + force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); + force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + for (int j = MAX(jlo,i); j <= jhi; j++) { + 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 PairSpinLong::init_one(int i, int j) +{ + if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + + double cut = cut_spin; + return cut; +} + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairSpinLong::init_style() +{ + if (!atom->sp_flag) + error->all(FLERR,"Pair spin requires atom/spin style"); + + // need a full neighbor list + + int irequest = neighbor->request(this,instance_me); + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; + + // checking if nve/spin is a listed fix + + int ifix = 0; + while (ifix < modify->nfix) { + if (strcmp(modify->fix[ifix]->style,"nve/spin") == 0) break; + ifix++; + } + if (ifix == modify->nfix) + error->all(FLERR,"pair/spin style requires nve/spin"); + + // get the lattice_flag from nve/spin + + for (int i = 0; i < modify->nfix; i++) { + if (strcmp(modify->fix[i]->style,"nve/spin") == 0) { + lockfixnvespin = (FixNVESpin *) modify->fix[i]; + lattice_flag = lockfixnvespin->lattice_flag; + } + } + + // insure use of KSpace long-range solver, set g_ewald + + if (force->kspace == NULL) + error->all(FLERR,"Pair style requires a KSpace style"); + + g_ewald = force->kspace->g_ewald; + + cut_spinsq = cut_spin * cut_spin; +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairSpinLong::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); + } +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairSpinLong::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) fread(&setflag[i][j],sizeof(int),1,fp); + MPI_Bcast(&setflag[i][j],1,MPI_INT,0,world); + } +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairSpinLong::write_restart_settings(FILE *fp) +{ + fwrite(&cut_spin,sizeof(double),1,fp); + fwrite(&mix_flag,sizeof(int),1,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairSpinLong::read_restart_settings(FILE *fp) +{ + if (comm->me == 0) { + fread(&cut_spin,sizeof(double),1,fp); + fread(&mix_flag,sizeof(int),1,fp); + } + MPI_Bcast(&cut_spin,1,MPI_DOUBLE,0,world); + MPI_Bcast(&mix_flag,1,MPI_INT,0,world); +} + +/* ---------------------------------------------------------------------- */ + +void *PairSpinLong::extract(const char *str, int &dim) +{ + if (strcmp(str,"cut") == 0) { + dim = 0; + return (void *) &cut_spin; + } else if (strcmp(str,"cut_coul") == 0) { + dim = 0; + return (void *) &cut_spin; + } else if (strcmp(str,"ewald_order") == 0) { + ewald_order = 0; + ewald_order |= 1<<1; + ewald_order |= 1<<3; + dim = 0; + return (void *) &ewald_order; + } else if (strcmp(str,"ewald_mix") == 0) { + dim = 0; + return (void *) &mix_flag; + } + return NULL; +} diff --git a/src/SPIN/pair_spin_long.h b/src/SPIN/pair_spin_long.h new file mode 100644 index 0000000000..867b771f74 --- /dev/null +++ b/src/SPIN/pair_spin_long.h @@ -0,0 +1,97 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + www.cs.sandia.gov/~sjplimp/lammps.html + Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories + + 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 + +PairStyle(spin/long,PairSpinLong) + +#else + +#ifndef LMP_PAIR_SPIN_LONG_H +#define LMP_PAIR_SPIN_LONG_H + +#include "pair_spin.h" + +namespace LAMMPS_NS { + +class PairSpinLong : public PairSpin { + public: + double cut_coul; + double **sigma; + + PairSpinLong(class LAMMPS *); + ~PairSpinLong(); + void settings(int, char **); + void coeff(int, char **); + double init_one(int, int); + void init_style(); + void *extract(const char *, int &); + + void compute(int, int); + void compute_single_pair(int, double *); + + void compute_long(int, int, double *, double *, double *, + double *, double *); + void compute_long_mech(int, int, double *, double *, double *, + double *, double *); + + void write_restart(FILE *); + void read_restart(FILE *); + void write_restart_settings(FILE *); + void read_restart_settings(FILE *); + + protected: + double hbar; // reduced Planck's constant + double mub; // Bohr's magneton + double mu_0; // vacuum permeability + double mub2mu0; // prefactor for mech force + double mub2mu0hbinv; // prefactor for mag force + double cut_spin, cut_spinsq; + + double g_ewald; + int ewald_order; + + int lattice_flag; // flag for mech force computation + class FixNVESpin *lockfixnvespin; // ptr for setups + + void allocate(); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Incorrect args in pair_style command + +Self-explanatory. + +E: Incorrect args for pair coefficients + +Self-explanatory. Check the input script or data file. + +E: Pair dipole/long requires atom attributes q, mu, torque + +The atom style defined does not have these attributes. + +E: Cannot (yet) use 'electron' units with dipoles + +This feature is not yet supported. + +E: Pair style requires a KSpace style + +No kspace style is defined. + +*/ diff --git a/src/kspace.cpp b/src/kspace.cpp index fc8b12288b..da606bbf3d 100644 --- a/src/kspace.cpp +++ b/src/kspace.cpp @@ -268,7 +268,7 @@ void KSpace::ev_setup(int eflag, int vflag, int alloc) called initially, when particle count changes, when charges are changed ------------------------------------------------------------------------- */ -void KSpace::qsum_qsq() +void KSpace::qsum_qsq(int warning_flag) { const double * const q = atom->q; const int nlocal = atom->nlocal; @@ -285,7 +285,7 @@ void KSpace::qsum_qsq() MPI_Allreduce(&qsum_local,&qsum,1,MPI_DOUBLE,MPI_SUM,world); MPI_Allreduce(&qsqsum_local,&qsqsum,1,MPI_DOUBLE,MPI_SUM,world); - if ((qsqsum == 0.0) && (comm->me == 0) && warn_nocharge) { + if ((qsqsum == 0.0) && (comm->me == 0) && warn_nocharge && warning_flag) { error->warning(FLERR,"Using kspace solver on system with no charge"); warn_nocharge = 0; } diff --git a/src/kspace.h b/src/kspace.h index 28c7bcef2a..55ace5aa71 100644 --- a/src/kspace.h +++ b/src/kspace.h @@ -108,7 +108,7 @@ class KSpace : protected Pointers { // public so can be called by commands that change charge - void qsum_qsq(); + void qsum_qsq(int warning_flag = 1); // general child-class methods From e1ab38439b9eae0ced06b796613f0e2b17f1fe1c Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 14 Aug 2018 17:09:44 -0600 Subject: [PATCH 002/311] Commit2 JT 081418 - converted pppm_dipole toward spin quantities - need to check if can handle ferrimagnets --- src/KSPACE/pppm_spin.cpp | 963 ++++++++++++++++++++------------------- src/KSPACE/pppm_spin.h | 84 ++-- 2 files changed, 547 insertions(+), 500 deletions(-) diff --git a/src/KSPACE/pppm_spin.cpp b/src/KSPACE/pppm_spin.cpp index 32e91cc9b2..c51de8d023 100644 --- a/src/KSPACE/pppm_spin.cpp +++ b/src/KSPACE/pppm_spin.cpp @@ -13,6 +13,7 @@ /* ---------------------------------------------------------------------- Contributing author: Stan Moore (SNL) + Julien Tranchida (SNL) ------------------------------------------------------------------------- */ #include @@ -20,7 +21,7 @@ #include #include #include -#include "pppm_dipole.h" +#include "pppm_spin.h" #include "atom.h" #include "comm.h" #include "gridcomm.h" @@ -49,8 +50,8 @@ using namespace MathSpecial; #define SMALL 0.00001 #define EPS_HOC 1.0e-7 -enum{REVERSE_MU}; -enum{FORWARD_MU,FORWARD_MU_PERATOM}; +enum{REVERSE_SP}; +enum{FORWARD_SP,FORWARD_SP_PERATOM}; #ifdef FFT_SINGLE #define ZEROF 0.0f @@ -62,34 +63,34 @@ enum{FORWARD_MU,FORWARD_MU_PERATOM}; /* ---------------------------------------------------------------------- */ -PPPMDipole::PPPMDipole(LAMMPS *lmp, int narg, char **arg) : PPPM(lmp, narg, arg), - densityx_brick_dipole(NULL), densityy_brick_dipole(NULL), - densityz_brick_dipole(NULL), ux_brick_dipole(NULL), - uy_brick_dipole(NULL), uz_brick_dipole(NULL), vdxx_brick_dipole(NULL), - vdxy_brick_dipole(NULL), vdyy_brick_dipole(NULL), - vdxz_brick_dipole(NULL), vdyz_brick_dipole(NULL), - vdzz_brick_dipole(NULL), v0x_brick_dipole(NULL), v1x_brick_dipole(NULL), - v2x_brick_dipole(NULL), v3x_brick_dipole(NULL), v4x_brick_dipole(NULL), - v5x_brick_dipole(NULL), v0y_brick_dipole(NULL), v1y_brick_dipole(NULL), - v2y_brick_dipole(NULL), v3y_brick_dipole(NULL), v4y_brick_dipole(NULL), - v5y_brick_dipole(NULL), v0z_brick_dipole(NULL), v1z_brick_dipole(NULL), - v2z_brick_dipole(NULL), v3z_brick_dipole(NULL), v4z_brick_dipole(NULL), - v5z_brick_dipole(NULL), work3(NULL), work4(NULL), - densityx_fft_dipole(NULL), densityy_fft_dipole(NULL), - densityz_fft_dipole(NULL) +PPPMSpin::PPPMSpin(LAMMPS *lmp, int narg, char **arg) : PPPM(lmp, narg, arg), + densityx_brick_spin(NULL), densityy_brick_spin(NULL), + densityz_brick_spin(NULL), ux_brick_spin(NULL), + uy_brick_spin(NULL), uz_brick_spin(NULL), vdxx_brick_spin(NULL), + vdxy_brick_spin(NULL), vdyy_brick_spin(NULL), + vdxz_brick_spin(NULL), vdyz_brick_spin(NULL), + vdzz_brick_spin(NULL), v0x_brick_spin(NULL), v1x_brick_spin(NULL), + v2x_brick_spin(NULL), v3x_brick_spin(NULL), v4x_brick_spin(NULL), + v5x_brick_spin(NULL), v0y_brick_spin(NULL), v1y_brick_spin(NULL), + v2y_brick_spin(NULL), v3y_brick_spin(NULL), v4y_brick_spin(NULL), + v5y_brick_spin(NULL), v0z_brick_spin(NULL), v1z_brick_spin(NULL), + v2z_brick_spin(NULL), v3z_brick_spin(NULL), v4z_brick_spin(NULL), + v5z_brick_spin(NULL), work3(NULL), work4(NULL), + densityx_fft_spin(NULL), densityy_fft_spin(NULL), + densityz_fft_spin(NULL) { - dipoleflag = 1; + spinflag = 1; group_group_enable = 0; - cg_dipole = NULL; - cg_peratom_dipole = NULL; + cg_spin = NULL; + cg_peratom_spin = NULL; } /* ---------------------------------------------------------------------- free all memory ------------------------------------------------------------------------- */ -PPPMDipole::~PPPMDipole() +PPPMSpin::~PPPMSpin() { if (copymode) return; @@ -98,26 +99,29 @@ PPPMDipole::~PPPMDipole() fft1 = NULL; fft2 = NULL; remap = NULL; - cg_dipole = NULL; + cg_spin = NULL; } /* ---------------------------------------------------------------------- called once before run ------------------------------------------------------------------------- */ -void PPPMDipole::init() +void PPPMSpin::init() { if (me == 0) { - if (screen) fprintf(screen,"PPPMDipole initialization ...\n"); - if (logfile) fprintf(logfile,"PPPMDipole initialization ...\n"); + if (screen) fprintf(screen,"PPPMSpin initialization ...\n"); + if (logfile) fprintf(logfile,"PPPMSpin initialization ...\n"); } // error check - dipoleflag = atom->mu?1:0; - qsum_qsq(0); - if (dipoleflag && q2) - error->all(FLERR,"Cannot (yet) uses charges with Kspace style PPPMDipole"); + //spinflag = atom->mu?1:0; + spinflag = atom->sp?1:0; + // no charges here, charge neutrality + //qsum_qsq(0); + // maybe change this test + if (spinflag && q2) + error->all(FLERR,"Cannot (yet) uses charges with Kspace style PPPMSpin"); triclinic_check(); @@ -125,30 +129,30 @@ void PPPMDipole::init() error->all(FLERR,"Must redefine kspace_style after changing to triclinic box"); if (domain->dimension == 2) error->all(FLERR, - "Cannot use PPPMDipole with 2d simulation"); + "Cannot use PPPMSpin with 2d simulation"); if (comm->style != 0) - error->universe_all(FLERR,"PPPMDipole can only currently be used with " + error->universe_all(FLERR,"PPPMSpin can only currently be used with " "comm_style brick"); - if (!atom->mu) error->all(FLERR,"Kspace style requires atom attribute mu"); + if (!atom->sp) error->all(FLERR,"Kspace style requires atom attribute sp"); - if (atom->mu && differentiation_flag == 1) error->all(FLERR,"Cannot (yet) use kspace_modify diff" - " ad with dipoles"); + if (atom->sp && differentiation_flag == 1) error->all(FLERR,"Cannot (yet) use kspace_modify diff" + " ad with spins"); - if (dipoleflag && strcmp(update->unit_style,"electron") == 0) - error->all(FLERR,"Cannot (yet) use 'electron' units with dipoles"); + if (spinflag && strcmp(update->unit_style,"metal") != 0) + error->all(FLERR,"'metal' units have to be used with spins"); if (slabflag == 0 && domain->nonperiodic > 0) - error->all(FLERR,"Cannot use nonperiodic boundaries with PPPMDipole"); + error->all(FLERR,"Cannot use nonperiodic boundaries with PPPMSpin"); if (slabflag) { if (domain->xperiodic != 1 || domain->yperiodic != 1 || domain->boundary[2][0] != 1 || domain->boundary[2][1] != 1) - error->all(FLERR,"Incorrect boundaries with slab PPPMDipole"); + error->all(FLERR,"Incorrect boundaries with slab PPPMSpin"); } if (order < 2 || order > MAXORDER) { char str[128]; - sprintf(str,"PPPMDipole order cannot be < 2 or > than %d",MAXORDER); + sprintf(str,"PPPMSpin order cannot be < 2 or > than %d",MAXORDER); error->all(FLERR,str); } @@ -156,7 +160,7 @@ void PPPMDipole::init() triclinic = domain->triclinic; if (triclinic) - error->all(FLERR,"Cannot yet use triclinic cells with PPPMDipole"); + error->all(FLERR,"Cannot yet use triclinic cells with PPPMSpin"); pair_check(); @@ -169,17 +173,26 @@ void PPPMDipole::init() // kspace TIP4P not yet supported if (tip4pflag) - error->all(FLERR,"Cannot yet use TIP4P with PPPMDipole"); + error->all(FLERR,"Cannot yet use TIP4P with PPPMSpin"); // compute qsum & qsqsum and warn if not charge-neutral scale = 1.0; - qqrd2e = force->qqrd2e; - musum_musq(); + //qqrd2e = force->qqrd2e; + // need to define mag constants instead + hbar = force->hplanck/MY_2PI; // eV/(rad.THz) + mub = 5.78901e-5; // in eV/T + mu_0 = 1.2566370614e-6; // in T.m/A + mub2mu0 = mub * mub * mu_0; // in eV + mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz + //musum_musq(); + spsum_spsq(); natoms_original = atom->natoms; // set accuracy (force units) from accuracy_relative or accuracy_absolute + // is two_charge_force still relevant for spin systems? + if (accuracy_absolute >= 0.0) accuracy = accuracy_absolute; else accuracy = accuracy_relative * two_charge_force; @@ -201,7 +214,7 @@ void PPPMDipole::init() while (order >= minorder) { if (iteration && me == 0) - error->warning(FLERR,"Reducing PPPMDipole order b/c stencil extends " + error->warning(FLERR,"Reducing PPPMSpin order b/c stencil extends " "beyond nearest neighbor processor"); compute_gf_denom(); @@ -222,9 +235,9 @@ void PPPMDipole::init() iteration++; } - if (order < minorder) error->all(FLERR,"PPPMDipole order < minimum allowed order"); + if (order < minorder) error->all(FLERR,"PPPMSpin order < minimum allowed order"); if (!overlap_allowed && cgtmp->ghost_overlap()) - error->all(FLERR,"PPPMDipole grid stencil extends " + error->all(FLERR,"PPPMSpin grid stencil extends " "beyond nearest neighbor processor"); if (cgtmp) delete cgtmp; @@ -234,7 +247,7 @@ void PPPMDipole::init() // calculate the final accuracy - double estimated_accuracy = final_accuracy_dipole(); + double estimated_accuracy = final_accuracy_spin(); // print stats @@ -280,10 +293,10 @@ void PPPMDipole::init() // don't invoke allocate peratom(), will be allocated when needed allocate(); - cg_dipole->ghost_notify(); - cg_dipole->setup(); + cg_spin->ghost_notify(); + cg_spin->setup(); - // pre-compute Green's function denomiator expansion + // pre-compute Green's function denominator expansion // pre-compute 1d charge distribution coefficients compute_gf_denom(); @@ -291,27 +304,27 @@ void PPPMDipole::init() } /* ---------------------------------------------------------------------- - adjust PPPMDipole coeffs, called initially and whenever volume has changed + adjust PPPMSpin coeffs, called initially and whenever volume has changed ------------------------------------------------------------------------- */ -void PPPMDipole::setup() +void PPPMSpin::setup() { // perform some checks to avoid illegal boundaries with read_data if (slabflag == 0 && domain->nonperiodic > 0) - error->all(FLERR,"Cannot use nonperiodic boundaries with PPPMDipole"); + error->all(FLERR,"Cannot use nonperiodic boundaries with PPPMSpin"); if (slabflag) { if (domain->xperiodic != 1 || domain->yperiodic != 1 || domain->boundary[2][0] != 1 || domain->boundary[2][1] != 1) - error->all(FLERR,"Incorrect boundaries with slab PPPMDipole"); + error->all(FLERR,"Incorrect boundaries with slab PPPMSpin"); } int i,j,k,n; double *prd; // volume-dependent factors - // adjust z dimension for 2d slab PPPMDipole - // z dimension for 3d PPPMDipole is zprd since slab_volfactor = 1.0 + // adjust z dimension for 2d slab PPPMSpin + // z dimension for 3d PPPMSpin is zprd since slab_volfactor = 1.0 prd = domain->prd; double xprd = prd[0]; @@ -379,7 +392,7 @@ void PPPMDipole::setup() } } - compute_gf_dipole(); + compute_gf_spin(); } /* ---------------------------------------------------------------------- @@ -387,7 +400,7 @@ void PPPMDipole::setup() called by fix balance b/c it changed sizes of processor sub-domains ------------------------------------------------------------------------- */ -void PPPMDipole::setup_grid() +void PPPMSpin::setup_grid() { // free all arrays previously allocated @@ -404,11 +417,11 @@ void PPPMDipole::setup_grid() allocate(); - cg_dipole->ghost_notify(); - if (overlap_allowed == 0 && cg_dipole->ghost_overlap()) - error->all(FLERR,"PPPMDipole grid stencil extends " + cg_spin->ghost_notify(); + if (overlap_allowed == 0 && cg_spin->ghost_overlap()) + error->all(FLERR,"PPPMSpin grid stencil extends " "beyond nearest neighbor processor"); - cg_dipole->setup(); + cg_spin->setup(); // pre-compute Green's function denomiator expansion // pre-compute 1d charge distribution coefficients @@ -422,10 +435,10 @@ void PPPMDipole::setup_grid() } /* ---------------------------------------------------------------------- - compute the PPPMDipole long-range force, energy, virial + compute the PPPMSpin long-range force, energy, virial ------------------------------------------------------------------------- */ -void PPPMDipole::compute(int eflag, int vflag) +void PPPMSpin::compute(int eflag, int vflag) { int i,j; @@ -438,20 +451,21 @@ void PPPMDipole::compute(int eflag, int vflag) if (evflag_atom && !peratom_allocate_flag) { allocate_peratom(); - cg_peratom_dipole->ghost_notify(); - cg_peratom_dipole->setup(); + cg_peratom_spin->ghost_notify(); + cg_peratom_spin->setup(); } // if atom count has changed, update qsum and qsqsum if (atom->natoms != natoms_original) { - musum_musq(); + //musum_musq(); + spsum_spsq(); natoms_original = atom->natoms; } - // return if there are no dipoles + // return if there are no spins - if (musqsum == 0.0) return; + if (spsqsum == 0.0) return; // convert atoms from box to lamda coords @@ -462,51 +476,52 @@ void PPPMDipole::compute(int eflag, int vflag) if (atom->nmax > nmax) { memory->destroy(part2grid); nmax = atom->nmax; - memory->create(part2grid,nmax,3,"pppm_dipole:part2grid"); + memory->create(part2grid,nmax,3,"pppm_spin:part2grid"); } // find grid points for all my particles - // map my particle charge onto my local 3d density grid + // map my particle charge onto my local 3d on-grid density particle_map(); - make_rho_dipole(); + make_rho_spin(); // all procs communicate density values from their ghost cells // to fully sum contribution in their 3d bricks // remap from 3d decomposition to FFT decomposition - cg_dipole->reverse_comm(this,REVERSE_MU); - brick2fft_dipole(); + cg_spin->reverse_comm(this,REVERSE_SP); + brick2fft_spin(); // compute potential gradient on my FFT grid and // portion of e_long on this proc's FFT grid // return gradients (electric fields) in 3d brick decomposition // also performs per-atom calculations via poisson_peratom() - poisson_ik_dipole(); + poisson_ik_spin(); // all procs communicate E-field values // to fill ghost cells surrounding their 3d bricks - cg_dipole->forward_comm(this,FORWARD_MU); + cg_spin->forward_comm(this,FORWARD_SP); // extra per-atom energy/virial communication if (evflag_atom) { - cg_peratom_dipole->forward_comm(this,FORWARD_MU_PERATOM); + cg_peratom_spin->forward_comm(this,FORWARD_SP_PERATOM); } // calculate the force on my particles - fieldforce_ik_dipole(); + fieldforce_ik_spin(); // extra per-atom energy/virial communication - if (evflag_atom) fieldforce_peratom_dipole(); + if (evflag_atom) fieldforce_peratom_spin(); // sum global energy across procs and add in volume-dependent term - const double qscale = qqrd2e * scale; + //const double qscale = qqrd2e * scale; + const double spscale = mub2mu0 * scale; const double g3 = g_ewald*g_ewald*g_ewald; if (eflag_global) { @@ -515,7 +530,7 @@ void PPPMDipole::compute(int eflag, int vflag) energy = energy_all; energy *= 0.5*volume; - energy -= musqsum*2.0*g3/3.0/MY_PIS; + energy -= spsqsum*2.0*g3/3.0/MY_PIS; energy *= qscale; } @@ -531,16 +546,19 @@ void PPPMDipole::compute(int eflag, int vflag) // energy includes self-energy correction if (evflag_atom) { - double *q = atom->q; - double **mu = atom->mu; + //double *q = atom->q; + //double **mu = atom->mu; + double **sp = atom->sp; int nlocal = atom->nlocal; int ntotal = nlocal; if (eflag_atom) { for (i = 0; i < nlocal; i++) { eatom[i] *= 0.5; - eatom[i] -= (mu[i][0]*mu[i][0] + mu[i][1]*mu[i][1] + mu[i][2]*mu[i][2])*2.0*g3/3.0/MY_PIS; - eatom[i] *= qscale; + //eatom[i] -= (mu[i][0]*mu[i][0] + mu[i][1]*mu[i][1] + mu[i][2]*mu[i][2])*2.0*g3/3.0/MY_PIS; + eatom[i] -= (sp[i][0]*sp[i][0] + sp[i][1]*sp[i][1] + sp[i][2]*sp[i][2])*2.0*g3/3.0/MY_PIS; + //eatom[i] *= qscale; + eatom[i] *= spscale; } } @@ -559,59 +577,59 @@ void PPPMDipole::compute(int eflag, int vflag) allocate memory that depends on # of K-vectors and order ------------------------------------------------------------------------- */ -void PPPMDipole::allocate() +void PPPMSpin::allocate() { - memory->create3d_offset(densityx_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:densityx_brick_dipole"); - memory->create3d_offset(densityy_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:densityy_brick_dipole"); - memory->create3d_offset(densityz_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:densityz_brick_dipole"); + memory->create3d_offset(densityx_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:densityx_brick_spin"); + memory->create3d_offset(densityy_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:densityy_brick_spin"); + memory->create3d_offset(densityz_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:densityz_brick_spin"); - memory->create(densityx_fft_dipole,nfft_both,"pppm_dipole:densityy_fft_dipole"); - memory->create(densityy_fft_dipole,nfft_both,"pppm_dipole:densityy_fft_dipole"); - memory->create(densityz_fft_dipole,nfft_both,"pppm_dipole:densityz_fft_dipole"); + memory->create(densityx_fft_spin,nfft_both,"pppm_spin:densityy_fft_spin"); + memory->create(densityy_fft_spin,nfft_both,"pppm_spin:densityy_fft_spin"); + memory->create(densityz_fft_spin,nfft_both,"pppm_spin:densityz_fft_spin"); - memory->create(greensfn,nfft_both,"pppm_dipole:greensfn"); - memory->create(work1,2*nfft_both,"pppm_dipole:work1"); - memory->create(work2,2*nfft_both,"pppm_dipole:work2"); - memory->create(work3,2*nfft_both,"pppm_dipole:work3"); - memory->create(work4,2*nfft_both,"pppm_dipole:work4"); - memory->create(vg,nfft_both,6,"pppm_dipole:vg"); + memory->create(greensfn,nfft_both,"pppm_spin:greensfn"); + memory->create(work1,2*nfft_both,"pppm_spin:work1"); + memory->create(work2,2*nfft_both,"pppm_spin:work2"); + memory->create(work3,2*nfft_both,"pppm_spin:work3"); + memory->create(work4,2*nfft_both,"pppm_spin:work4"); + memory->create(vg,nfft_both,6,"pppm_spin:vg"); - memory->create1d_offset(fkx,nxlo_fft,nxhi_fft,"pppm_dipole:fkx"); - memory->create1d_offset(fky,nylo_fft,nyhi_fft,"pppm_dipole:fky"); - memory->create1d_offset(fkz,nzlo_fft,nzhi_fft,"pppm_dipole:fkz"); + memory->create1d_offset(fkx,nxlo_fft,nxhi_fft,"pppm_spin:fkx"); + memory->create1d_offset(fky,nylo_fft,nyhi_fft,"pppm_spin:fky"); + memory->create1d_offset(fkz,nzlo_fft,nzhi_fft,"pppm_spin:fkz"); - memory->create3d_offset(ux_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:ux_brick_dipole"); - memory->create3d_offset(uy_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:uy_brick_dipole"); - memory->create3d_offset(uz_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:uz_brick_dipole"); + memory->create3d_offset(ux_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:ux_brick_spin"); + memory->create3d_offset(uy_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:uy_brick_spin"); + memory->create3d_offset(uz_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:uz_brick_spin"); - memory->create3d_offset(vdxx_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:vdxx_brick_dipole"); - memory->create3d_offset(vdxy_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:vdxy_brick_dipole"); - memory->create3d_offset(vdyy_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:vdyy_brick_dipole"); - memory->create3d_offset(vdxz_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:vdxz_brick_dipole"); - memory->create3d_offset(vdyz_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:vdyz_brick_dipole"); - memory->create3d_offset(vdzz_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:vdzz_brick_dipole"); + memory->create3d_offset(vdxx_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:vdxx_brick_spin"); + memory->create3d_offset(vdxy_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:vdxy_brick_spin"); + memory->create3d_offset(vdyy_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:vdyy_brick_spin"); + memory->create3d_offset(vdxz_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:vdxz_brick_spin"); + memory->create3d_offset(vdyz_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:vdyz_brick_spin"); + memory->create3d_offset(vdzz_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:vdzz_brick_spin"); // summation coeffs order_allocated = order; - memory->create(gf_b,order,"pppm_dipole:gf_b"); - memory->create2d_offset(rho1d,3,-order/2,order/2,"pppm_dipole:rho1d"); - memory->create2d_offset(drho1d,3,-order/2,order/2,"pppm_dipole:drho1d"); - memory->create2d_offset(rho_coeff,order,(1-order)/2,order/2,"pppm_dipole:rho_coeff"); + memory->create(gf_b,order,"pppm_spin:gf_b"); + memory->create2d_offset(rho1d,3,-order/2,order/2,"pppm_spin:rho1d"); + memory->create2d_offset(drho1d,3,-order/2,order/2,"pppm_spin:drho1d"); + memory->create2d_offset(rho_coeff,order,(1-order)/2,order/2,"pppm_spin:rho_coeff"); memory->create2d_offset(drho_coeff,order,(1-order)/2,order/2, - "pppm_dipole:drho_coeff"); + "pppm_spin:drho_coeff"); // create 2 FFTs and a Remap // 1st FFT keeps data in FFT decompostion @@ -639,7 +657,7 @@ void PPPMDipole::allocate() int (*procneigh)[2] = comm->procneigh; - cg_dipole = new GridComm(lmp,world,9,3, + cg_spin = new GridComm(lmp,world,9,3, nxlo_in,nxhi_in,nylo_in,nyhi_in,nzlo_in,nzhi_in, nxlo_out,nxhi_out,nylo_out,nyhi_out,nzlo_out,nzhi_out, procneigh[0][0],procneigh[0][1],procneigh[1][0], @@ -650,26 +668,26 @@ void PPPMDipole::allocate() deallocate memory that depends on # of K-vectors and order ------------------------------------------------------------------------- */ -void PPPMDipole::deallocate() +void PPPMSpin::deallocate() { - memory->destroy3d_offset(densityx_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(densityy_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(densityz_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(densityx_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(densityy_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(densityz_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(ux_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(uy_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(uz_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(ux_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(uy_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(uz_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(vdxx_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(vdxy_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(vdyy_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(vdxz_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(vdyz_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(vdzz_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(vdxx_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(vdxy_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(vdyy_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(vdxz_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(vdyz_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(vdzz_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy(densityx_fft_dipole); - memory->destroy(densityy_fft_dipole); - memory->destroy(densityz_fft_dipole); + memory->destroy(densityx_fft_spin); + memory->destroy(densityy_fft_spin); + memory->destroy(densityz_fft_spin); memory->destroy(greensfn); memory->destroy(work1); @@ -691,61 +709,61 @@ void PPPMDipole::deallocate() delete fft1; delete fft2; delete remap; - delete cg_dipole; + delete cg_spin; } /* ---------------------------------------------------------------------- allocate per-atom memory that depends on # of K-vectors and order ------------------------------------------------------------------------- */ -void PPPMDipole::allocate_peratom() +void PPPMSpin::allocate_peratom() { peratom_allocate_flag = 1; - memory->create3d_offset(v0x_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:v0x_brick_dipole"); - memory->create3d_offset(v1x_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:v1x_brick_dipole"); - memory->create3d_offset(v2x_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:v2x_brick_dipole"); - memory->create3d_offset(v3x_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:v3x_brick_dipole"); - memory->create3d_offset(v4x_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:v4x_brick_dipole"); - memory->create3d_offset(v5x_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:v5x_brick_dipole"); + memory->create3d_offset(v0x_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:v0x_brick_spin"); + memory->create3d_offset(v1x_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:v1x_brick_spin"); + memory->create3d_offset(v2x_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:v2x_brick_spin"); + memory->create3d_offset(v3x_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:v3x_brick_spin"); + memory->create3d_offset(v4x_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:v4x_brick_spin"); + memory->create3d_offset(v5x_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:v5x_brick_spin"); - memory->create3d_offset(v0y_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:v0y_brick_dipole"); - memory->create3d_offset(v1y_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:v1y_brick_dipole"); - memory->create3d_offset(v2y_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:v2y_brick_dipole"); - memory->create3d_offset(v3y_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:v3y_brick_dipole"); - memory->create3d_offset(v4y_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:v4y_brick_dipole"); - memory->create3d_offset(v5y_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:v5y_brick_dipole"); + memory->create3d_offset(v0y_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:v0y_brick_spin"); + memory->create3d_offset(v1y_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:v1y_brick_spin"); + memory->create3d_offset(v2y_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:v2y_brick_spin"); + memory->create3d_offset(v3y_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:v3y_brick_spin"); + memory->create3d_offset(v4y_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:v4y_brick_spin"); + memory->create3d_offset(v5y_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:v5y_brick_spin"); - memory->create3d_offset(v0z_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:v0z_brick_dipole"); - memory->create3d_offset(v1z_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:v1z_brick_dipole"); - memory->create3d_offset(v2z_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:v2z_brick_dipole"); - memory->create3d_offset(v3z_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:v3z_brick_dipole"); - memory->create3d_offset(v4z_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:v4z_brick_dipole"); - memory->create3d_offset(v5z_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_dipole:v5z_brick_dipole"); + memory->create3d_offset(v0z_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:v0z_brick_spin"); + memory->create3d_offset(v1z_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:v1z_brick_spin"); + memory->create3d_offset(v2z_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:v2z_brick_spin"); + memory->create3d_offset(v3z_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:v3z_brick_spin"); + memory->create3d_offset(v4z_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:v4z_brick_spin"); + memory->create3d_offset(v5z_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_spin:v5z_brick_spin"); // create ghost grid object for rho and electric field communication int (*procneigh)[2] = comm->procneigh; - cg_peratom_dipole = + cg_peratom_spin = new GridComm(lmp,world,18,1, nxlo_in,nxhi_in,nylo_in,nyhi_in,nzlo_in,nzhi_in, nxlo_out,nxhi_out,nylo_out,nyhi_out,nzlo_out,nzhi_out, @@ -757,44 +775,44 @@ void PPPMDipole::allocate_peratom() deallocate per-atom memory that depends on # of K-vectors and order ------------------------------------------------------------------------- */ -void PPPMDipole::deallocate_peratom() +void PPPMSpin::deallocate_peratom() { peratom_allocate_flag = 0; - memory->destroy3d_offset(v0x_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v1x_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v2x_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v3x_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v4x_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v5x_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v0x_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v1x_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v2x_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v3x_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v4x_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v5x_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v0y_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v1y_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v2y_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v3y_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v4y_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v5y_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v0y_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v1y_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v2y_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v3y_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v4y_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v5y_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v0z_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v1z_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v2z_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v3z_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v4z_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v5z_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v0z_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v1z_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v2z_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v3z_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v4z_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v5z_brick_spin,nzlo_out,nylo_out,nxlo_out); - delete cg_peratom_dipole; + delete cg_peratom_spin; } /* ---------------------------------------------------------------------- - set global size of PPPMDipole grid = nx,ny,nz_pppm + set global size of PPPMSpin grid = nx,ny,nz_pppm used for charge accumulation, FFTs, and electric field interpolation ------------------------------------------------------------------------- */ -void PPPMDipole::set_grid_global() +void PPPMSpin::set_grid_global() { // use xprd,yprd,zprd - // adjust z dimension for 2d slab PPPMDipole - // 3d PPPMDipole just uses zprd since slab_volfactor = 1.0 + // adjust z dimension for 2d slab PPPMSpin + // 3d PPPMSpin just uses zprd since slab_volfactor = 1.0 double xprd = domain->xprd; double yprd = domain->yprd; @@ -812,14 +830,14 @@ void PPPMDipole::set_grid_global() if (!gewaldflag) { if (accuracy <= 0.0) error->all(FLERR,"KSpace accuracy must be > 0"); - if (mu2 == 0.0) - error->all(FLERR,"Must use kspace_modify gewald for systems with no dipoles"); + if (sp2 == 0.0) + error->all(FLERR,"Must use kspace_modify gewald for systems with no spins"); g_ewald = (1.35 - 0.15*log(accuracy))/cutoff; //Try Newton Solver double g_ewald_new = - find_gewald_dipole(g_ewald,cutoff,natoms,xprd*yprd*zprd,mu2); + find_gewald_spin(g_ewald,cutoff,natoms,xprd*yprd*zprd,sp2); if (g_ewald_new > 0.0) g_ewald = g_ewald_new; - else error->warning(FLERR,"PPPMDipole dipole Newton solver failed, " + else error->warning(FLERR,"PPPMSpin spin Newton solver failed, " "using old method to estimate g_ewald"); } @@ -859,7 +877,7 @@ void PPPMDipole::set_grid_global() nzlo_fft = me_z*nz_pppm/npez_fft; nzhi_fft = (me_z+1)*nz_pppm/npez_fft - 1; - double df_kspace = compute_df_kspace_dipole(); + double df_kspace = compute_df_kspace_spin(); count++; @@ -884,31 +902,32 @@ void PPPMDipole::set_grid_global() h_z = zprd_slab/nz_pppm; if (nx_pppm >= OFFSET || ny_pppm >= OFFSET || nz_pppm >= OFFSET) - error->all(FLERR,"PPPMDipole grid is too large"); + error->all(FLERR,"PPPMSpin grid is too large"); } /* ---------------------------------------------------------------------- - compute estimated kspace force error for dipoles + compute estimated kspace force error for spins ------------------------------------------------------------------------- */ -double PPPMDipole::compute_df_kspace_dipole() +double PPPMSpin::compute_df_kspace_spin() { double xprd = domain->xprd; double yprd = domain->yprd; double zprd = domain->zprd; double zprd_slab = zprd*slab_volfactor; bigint natoms = atom->natoms; - double qopt = compute_qopt_dipole(); - double df_kspace = sqrt(qopt/natoms)*mu2/(3.0*xprd*yprd*zprd_slab); + double qopt = compute_qopt_spin(); + //double df_kspace = sqrt(qopt/natoms)*mu2/(3.0*xprd*yprd*zprd_slab); + double df_kspace = sqrt(qopt/natoms)*sp2/(3.0*xprd*yprd*zprd_slab); return df_kspace; } /* ---------------------------------------------------------------------- - compute qopt for dipoles with ik differentiation + compute qopt for spins with ik differentiation ------------------------------------------------------------------------- */ -double PPPMDipole::compute_qopt_dipole() +double PPPMSpin::compute_qopt_spin() { double qopt = 0.0; const double * const prd = domain->prd; @@ -979,7 +998,7 @@ double PPPMDipole::compute_qopt_dipole() dot1 = unitkx*kper*qx + unitky*lper*qy + unitkz*mper*qz; dot2 = qx*qx + qy*qy + qz*qz; - //dot1 = dot1*dot1*dot1; // power of 3 for dipole forces + //dot1 = dot1*dot1*dot1; // power of 3 for spin forces //dot2 = dot2*dot2*dot2; u1 = sx*sy*sz; const double w2 = wx*wy*wz; @@ -1004,7 +1023,7 @@ double PPPMDipole::compute_qopt_dipole() pre-compute modified (Hockney-Eastwood) Coulomb Green's function ------------------------------------------------------------------------- */ -void PPPMDipole::compute_gf_dipole() +void PPPMSpin::compute_gf_spin() { const double * const prd = domain->prd; @@ -1097,7 +1116,7 @@ void PPPMDipole::compute_gf_dipole() calculate f(x) for use in Newton-Raphson solver ------------------------------------------------------------------------- */ -double PPPMDipole::newton_raphson_f() +double PPPMSpin::newton_raphson_f() { double xprd = domain->xprd; double yprd = domain->yprd; @@ -1112,19 +1131,21 @@ double PPPMDipole::newton_raphson_f() double rg6 = rg4*rg2; double Cc = 4.0*rg4 + 6.0*rg2 + 3.0; double Dc = 8.0*rg6 + 20.0*rg4 + 30.0*rg2 + 15.0; - df_rspace = (mu2/(sqrt(vol*powint(g_ewald,4)*powint(cutoff,9)*natoms)) * + //df_rspace = (mu2/(sqrt(vol*powint(g_ewald,4)*powint(cutoff,9)*natoms)) * + // sqrt(13.0/6.0*Cc*Cc + 2.0/15.0*Dc*Dc - 13.0/15.0*Cc*Dc) * exp(-rg2)); + df_rspace = (sp2/(sqrt(vol*powint(g_ewald,4)*powint(cutoff,9)*natoms)) * sqrt(13.0/6.0*Cc*Cc + 2.0/15.0*Dc*Dc - 13.0/15.0*Cc*Dc) * exp(-rg2)); - df_kspace = compute_df_kspace_dipole(); + df_kspace = compute_df_kspace_spin(); return df_rspace - df_kspace; } /* ---------------------------------------------------------------------- - find g_ewald parameter for dipoles based on desired accuracy + find g_ewald parameter for spins based on desired accuracy using a Newton-Raphson solver ------------------------------------------------------------------------- */ -double PPPMDipole::find_gewald_dipole(double x, double Rc, +double PPPMSpin::find_gewald_spin(double x, double Rc, bigint natoms, double vol, double b2) { double dx,tol; @@ -1136,7 +1157,7 @@ double PPPMDipole::find_gewald_dipole(double x, double Rc, //Begin algorithm for (int i = 0; i < maxit; i++) { - dx = newton_raphson_f_dipole(x,Rc,natoms,vol,b2) / derivf_dipole(x,Rc,natoms,vol,b2); + dx = newton_raphson_f_spin(x,Rc,natoms,vol,b2) / derivf_spin(x,Rc,natoms,vol,b2); x = x - dx; //Update x if (fabs(dx) < tol) return x; if (x < 0 || x != x) // solver failed @@ -1146,10 +1167,10 @@ double PPPMDipole::find_gewald_dipole(double x, double Rc, } /* ---------------------------------------------------------------------- - calculate f(x) objective function for dipoles + calculate f(x) objective function for spins ------------------------------------------------------------------------- */ -double PPPMDipole::newton_raphson_f_dipole(double x, double Rc, bigint +double PPPMSpin::newton_raphson_f_spin(double x, double Rc, bigint natoms, double vol, double b2) { double a = Rc*x; @@ -1166,21 +1187,21 @@ natoms, double vol, double b2) } /* ---------------------------------------------------------------------- - calculate numerical derivative f'(x) of objective function for dipoles + calculate numerical derivative f'(x) of objective function for spins ------------------------------------------------------------------------- */ -double PPPMDipole::derivf_dipole(double x, double Rc, +double PPPMSpin::derivf_spin(double x, double Rc, bigint natoms, double vol, double b2) { double h = 0.000001; //Derivative step-size - return (newton_raphson_f_dipole(x + h,Rc,natoms,vol,b2) - newton_raphson_f_dipole(x,Rc,natoms,vol,b2)) / h; + return (newton_raphson_f_spin(x + h,Rc,natoms,vol,b2) - newton_raphson_f_spin(x,Rc,natoms,vol,b2)) / h; } /* ---------------------------------------------------------------------- calculate the final estimate of the accuracy ------------------------------------------------------------------------- */ -double PPPMDipole::final_accuracy_dipole() +double PPPMSpin::final_accuracy_spin() { double xprd = domain->xprd; double yprd = domain->yprd; @@ -1189,7 +1210,7 @@ double PPPMDipole::final_accuracy_dipole() bigint natoms = atom->natoms; if (natoms == 0) natoms = 1; // avoid division by zero - double df_kspace = compute_df_kspace_dipole(); + double df_kspace = compute_df_kspace_spin(); double a = cutoff*g_ewald; double rg2 = a*a; @@ -1197,7 +1218,10 @@ double PPPMDipole::final_accuracy_dipole() double rg6 = rg4*rg2; double Cc = 4.0*rg4 + 6.0*rg2 + 3.0; double Dc = 8.0*rg6 + 20.0*rg4 + 30.0*rg2 + 15.0; - double df_rspace = (mu2/(sqrt(vol*powint(g_ewald,4)*powint(cutoff,9)*natoms)) * + //double df_rspace = (mu2/(sqrt(vol*powint(g_ewald,4)*powint(cutoff,9)*natoms)) * + // sqrt(13.0/6.0*Cc*Cc + 2.0/15.0*Dc*Dc - 13.0/15.0*Cc*Dc) * + // exp(-rg2)); + double df_rspace = (sp2/(sqrt(vol*powint(g_ewald,4)*powint(cutoff,9)*natoms)) * sqrt(13.0/6.0*Cc*Cc + 2.0/15.0*Dc*Dc - 13.0/15.0*Cc*Dc) * exp(-rg2)); @@ -1210,10 +1234,10 @@ double PPPMDipole::final_accuracy_dipole() pre-compute Green's function denominator expansion coeffs, Gamma(2n) ------------------------------------------------------------------------- */ -void PPPMDipole::compute_gf_denom() +void PPPMSpin::compute_gf_denom() { if (gf_b) memory->destroy(gf_b); - memory->create(gf_b,order,"pppm_dipole:gf_b"); + memory->create(gf_b,order,"pppm_spin:gf_b"); int k,l,m; @@ -1239,7 +1263,7 @@ void PPPMDipole::compute_gf_denom() in global grid ------------------------------------------------------------------------- */ -void PPPMDipole::make_rho_dipole() +void PPPMSpin::make_rho_spin() { int l,m,n,nx,ny,nz,mx,my,mz; FFT_SCALAR dx,dy,dz; @@ -1249,11 +1273,11 @@ void PPPMDipole::make_rho_dipole() // clear 3d density array - memset(&(densityx_brick_dipole[nzlo_out][nylo_out][nxlo_out]),0, + memset(&(densityx_brick_spin[nzlo_out][nylo_out][nxlo_out]),0, ngrid*sizeof(FFT_SCALAR)); - memset(&(densityy_brick_dipole[nzlo_out][nylo_out][nxlo_out]),0, + memset(&(densityy_brick_spin[nzlo_out][nylo_out][nxlo_out]),0, ngrid*sizeof(FFT_SCALAR)); - memset(&(densityz_brick_dipole[nzlo_out][nylo_out][nxlo_out]),0, + memset(&(densityz_brick_spin[nzlo_out][nylo_out][nxlo_out]),0, ngrid*sizeof(FFT_SCALAR)); // loop over my charges, add their contribution to nearby grid points @@ -1261,7 +1285,8 @@ void PPPMDipole::make_rho_dipole() // (dx,dy,dz) = distance to "lower left" grid pt // (mx,my,mz) = global coords of moving stencil pt - double **mu = atom->mu; + //double **mu = atom->mu; + double **sp = atom->sp; double **x = atom->x; int nlocal = atom->nlocal; @@ -1276,9 +1301,9 @@ void PPPMDipole::make_rho_dipole() compute_rho1d(dx,dy,dz); - z0 = delvolinv * mu[i][0]; - z1 = delvolinv * mu[i][1]; - z2 = delvolinv * mu[i][2]; + z0 = delvolinv * sp[i][0]; + z1 = delvolinv * sp[i][1]; + z2 = delvolinv * sp[i][2]; for (n = nlower; n <= nupper; n++) { mz = n+nz; y0 = z0*rho1d[2][n]; @@ -1291,9 +1316,9 @@ void PPPMDipole::make_rho_dipole() x2 = y2*rho1d[1][m]; for (l = nlower; l <= nupper; l++) { mx = l+nx; - densityx_brick_dipole[mz][my][mx] += x0*rho1d[0][l]; - densityy_brick_dipole[mz][my][mx] += x1*rho1d[0][l]; - densityz_brick_dipole[mz][my][mx] += x2*rho1d[0][l]; + densityx_brick_spin[mz][my][mx] += x0*rho1d[0][l]; + densityy_brick_spin[mz][my][mx] += x1*rho1d[0][l]; + densityz_brick_spin[mz][my][mx] += x2*rho1d[0][l]; } } } @@ -1304,7 +1329,7 @@ void PPPMDipole::make_rho_dipole() remap density from 3d brick decomposition to FFT decomposition ------------------------------------------------------------------------- */ -void PPPMDipole::brick2fft_dipole() +void PPPMSpin::brick2fft_spin() { int n,ix,iy,iz; @@ -1316,36 +1341,36 @@ void PPPMDipole::brick2fft_dipole() for (iz = nzlo_in; iz <= nzhi_in; iz++) for (iy = nylo_in; iy <= nyhi_in; iy++) for (ix = nxlo_in; ix <= nxhi_in; ix++) { - densityx_fft_dipole[n] = densityx_brick_dipole[iz][iy][ix]; - densityy_fft_dipole[n] = densityy_brick_dipole[iz][iy][ix]; - densityz_fft_dipole[n] = densityz_brick_dipole[iz][iy][ix]; + densityx_fft_spin[n] = densityx_brick_spin[iz][iy][ix]; + densityy_fft_spin[n] = densityy_brick_spin[iz][iy][ix]; + densityz_fft_spin[n] = densityz_brick_spin[iz][iy][ix]; n++; } - remap->perform(densityx_fft_dipole,densityx_fft_dipole,work1); - remap->perform(densityy_fft_dipole,densityy_fft_dipole,work1); - remap->perform(densityz_fft_dipole,densityz_fft_dipole,work1); + remap->perform(densityx_fft_spin,densityx_fft_spin,work1); + remap->perform(densityy_fft_spin,densityy_fft_spin,work1); + remap->perform(densityz_fft_spin,densityz_fft_spin,work1); } /* ---------------------------------------------------------------------- FFT-based Poisson solver for ik ------------------------------------------------------------------------- */ -void PPPMDipole::poisson_ik_dipole() +void PPPMSpin::poisson_ik_spin() { int i,j,k,n,ii; double eng; double wreal,wimg; - // transform dipole density (r -> k) + // transform spin density (r -> k) n = 0; for (i = 0; i < nfft; i++) { - work1[n] = densityx_fft_dipole[i]; + work1[n] = densityx_fft_spin[i]; work1[n+1] = ZEROF; - work2[n] = densityy_fft_dipole[i]; + work2[n] = densityy_fft_spin[i]; work2[n+1] = ZEROF; - work3[n] = densityz_fft_dipole[i]; + work3[n] = densityz_fft_spin[i]; work3[n+1] = ZEROF; n += 2; } @@ -1412,7 +1437,7 @@ void PPPMDipole::poisson_ik_dipole() // extra FFTs for per-atom energy/virial - if (vflag_atom) poisson_peratom_dipole(); + if (vflag_atom) poisson_peratom_spin(); // compute electric potential // FFT leaves data in 3d brick decomposition @@ -1434,7 +1459,7 @@ void PPPMDipole::poisson_ik_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - ux_brick_dipole[k][j][i] = work4[n]; + ux_brick_spin[k][j][i] = work4[n]; n += 2; } @@ -1455,7 +1480,7 @@ void PPPMDipole::poisson_ik_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - uy_brick_dipole[k][j][i] = work4[n]; + uy_brick_spin[k][j][i] = work4[n]; n += 2; } @@ -1476,7 +1501,7 @@ void PPPMDipole::poisson_ik_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - uz_brick_dipole[k][j][i] = work4[n]; + uz_brick_spin[k][j][i] = work4[n]; n += 2; } @@ -1497,7 +1522,7 @@ void PPPMDipole::poisson_ik_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - vdxx_brick_dipole[k][j][i] = work4[n]; + vdxx_brick_spin[k][j][i] = work4[n]; n += 2; } @@ -1518,7 +1543,7 @@ void PPPMDipole::poisson_ik_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - vdyy_brick_dipole[k][j][i] = work4[n]; + vdyy_brick_spin[k][j][i] = work4[n]; n += 2; } @@ -1539,7 +1564,7 @@ void PPPMDipole::poisson_ik_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - vdzz_brick_dipole[k][j][i] = work4[n]; + vdzz_brick_spin[k][j][i] = work4[n]; n += 2; } @@ -1560,7 +1585,7 @@ void PPPMDipole::poisson_ik_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - vdxy_brick_dipole[k][j][i] = work4[n]; + vdxy_brick_spin[k][j][i] = work4[n]; n += 2; } @@ -1581,7 +1606,7 @@ void PPPMDipole::poisson_ik_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - vdxz_brick_dipole[k][j][i] = work4[n]; + vdxz_brick_spin[k][j][i] = work4[n]; n += 2; } @@ -1602,7 +1627,7 @@ void PPPMDipole::poisson_ik_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - vdyz_brick_dipole[k][j][i] = work4[n]; + vdyz_brick_spin[k][j][i] = work4[n]; n += 2; } } @@ -1611,7 +1636,7 @@ void PPPMDipole::poisson_ik_dipole() FFT-based Poisson solver for per-atom energy/virial ------------------------------------------------------------------------- */ -void PPPMDipole::poisson_peratom_dipole() +void PPPMSpin::poisson_peratom_spin() { int i,ii,j,k,n; @@ -1638,7 +1663,7 @@ void PPPMDipole::poisson_peratom_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v0x_brick_dipole[k][j][i] = work4[n]; + v0x_brick_spin[k][j][i] = work4[n]; n += 2; } @@ -1661,7 +1686,7 @@ void PPPMDipole::poisson_peratom_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v0y_brick_dipole[k][j][i] = work4[n]; + v0y_brick_spin[k][j][i] = work4[n]; n += 2; } @@ -1684,7 +1709,7 @@ void PPPMDipole::poisson_peratom_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v0z_brick_dipole[k][j][i] = work4[n]; + v0z_brick_spin[k][j][i] = work4[n]; n += 2; } @@ -1707,7 +1732,7 @@ void PPPMDipole::poisson_peratom_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v1x_brick_dipole[k][j][i] = work4[n]; + v1x_brick_spin[k][j][i] = work4[n]; n += 2; } @@ -1730,7 +1755,7 @@ void PPPMDipole::poisson_peratom_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v1y_brick_dipole[k][j][i] = work4[n]; + v1y_brick_spin[k][j][i] = work4[n]; n += 2; } @@ -1753,7 +1778,7 @@ void PPPMDipole::poisson_peratom_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v1z_brick_dipole[k][j][i] = work4[n]; + v1z_brick_spin[k][j][i] = work4[n]; n += 2; } @@ -1776,7 +1801,7 @@ void PPPMDipole::poisson_peratom_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v2x_brick_dipole[k][j][i] = work4[n]; + v2x_brick_spin[k][j][i] = work4[n]; n += 2; } @@ -1799,7 +1824,7 @@ void PPPMDipole::poisson_peratom_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v2y_brick_dipole[k][j][i] = work4[n]; + v2y_brick_spin[k][j][i] = work4[n]; n += 2; } @@ -1822,7 +1847,7 @@ void PPPMDipole::poisson_peratom_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v2z_brick_dipole[k][j][i] = work4[n]; + v2z_brick_spin[k][j][i] = work4[n]; n += 2; } @@ -1845,7 +1870,7 @@ void PPPMDipole::poisson_peratom_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v3x_brick_dipole[k][j][i] = work4[n]; + v3x_brick_spin[k][j][i] = work4[n]; n += 2; } @@ -1868,7 +1893,7 @@ void PPPMDipole::poisson_peratom_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v3y_brick_dipole[k][j][i] = work4[n]; + v3y_brick_spin[k][j][i] = work4[n]; n += 2; } @@ -1891,7 +1916,7 @@ void PPPMDipole::poisson_peratom_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v3z_brick_dipole[k][j][i] = work4[n]; + v3z_brick_spin[k][j][i] = work4[n]; n += 2; } @@ -1914,7 +1939,7 @@ void PPPMDipole::poisson_peratom_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v4x_brick_dipole[k][j][i] = work4[n]; + v4x_brick_spin[k][j][i] = work4[n]; n += 2; } @@ -1937,7 +1962,7 @@ void PPPMDipole::poisson_peratom_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v4y_brick_dipole[k][j][i] = work4[n]; + v4y_brick_spin[k][j][i] = work4[n]; n += 2; } @@ -1960,7 +1985,7 @@ void PPPMDipole::poisson_peratom_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v4z_brick_dipole[k][j][i] = work4[n]; + v4z_brick_spin[k][j][i] = work4[n]; n += 2; } @@ -1983,7 +2008,7 @@ void PPPMDipole::poisson_peratom_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v5x_brick_dipole[k][j][i] = work4[n]; + v5x_brick_spin[k][j][i] = work4[n]; n += 2; } @@ -2006,7 +2031,7 @@ void PPPMDipole::poisson_peratom_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v5y_brick_dipole[k][j][i] = work4[n]; + v5y_brick_spin[k][j][i] = work4[n]; n += 2; } @@ -2029,16 +2054,16 @@ void PPPMDipole::poisson_peratom_dipole() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v5z_brick_dipole[k][j][i] = work4[n]; + v5z_brick_spin[k][j][i] = work4[n]; n += 2; } } /* ---------------------------------------------------------------------- - interpolate from grid to get electric field & force on my particles for ik + interpolate from grid to get magnetic field & force on my particles for ik ------------------------------------------------------------------------- */ -void PPPMDipole::fieldforce_ik_dipole() +void PPPMSpin::fieldforce_ik_spin() { int i,l,m,n,nx,ny,nz,mx,my,mz; FFT_SCALAR dx,dy,dz; @@ -2052,9 +2077,11 @@ void PPPMDipole::fieldforce_ik_dipole() // (mx,my,mz) = global coords of moving stencil pt - double **mu = atom->mu; + //double **mu = atom->mu; + double **sp = atom->sp; double **x = atom->x; double **f = atom->f; + double **fm = atom->fm; double **t = atom->torque; int nlocal = atom->nlocal; @@ -2080,29 +2107,37 @@ void PPPMDipole::fieldforce_ik_dipole() for (l = nlower; l <= nupper; l++) { mx = l+nx; x0 = y0*rho1d[0][l]; - ex -= x0*ux_brick_dipole[mz][my][mx]; - ey -= x0*uy_brick_dipole[mz][my][mx]; - ez -= x0*uz_brick_dipole[mz][my][mx]; - vxx -= x0*vdxx_brick_dipole[mz][my][mx]; - vyy -= x0*vdyy_brick_dipole[mz][my][mx]; - vzz -= x0*vdzz_brick_dipole[mz][my][mx]; - vxy -= x0*vdxy_brick_dipole[mz][my][mx]; - vxz -= x0*vdxz_brick_dipole[mz][my][mx]; - vyz -= x0*vdyz_brick_dipole[mz][my][mx]; + ex -= x0*ux_brick_spin[mz][my][mx]; + ey -= x0*uy_brick_spin[mz][my][mx]; + ez -= x0*uz_brick_spin[mz][my][mx]; + vxx -= x0*vdxx_brick_spin[mz][my][mx]; + vyy -= x0*vdyy_brick_spin[mz][my][mx]; + vzz -= x0*vdzz_brick_spin[mz][my][mx]; + vxy -= x0*vdxy_brick_spin[mz][my][mx]; + vxz -= x0*vdxz_brick_spin[mz][my][mx]; + vyz -= x0*vdyz_brick_spin[mz][my][mx]; } } } // convert E-field to torque - const double mufactor = qqrd2e * scale; - f[i][0] += mufactor*(vxx*mu[i][0] + vxy*mu[i][1] + vxz*mu[i][2]); - f[i][1] += mufactor*(vxy*mu[i][0] + vyy*mu[i][1] + vyz*mu[i][2]); - f[i][2] += mufactor*(vxz*mu[i][0] + vyz*mu[i][1] + vzz*mu[i][2]); + //const double mufactor = qqrd2e * scale; + const double spfactor = mub2mu0 * scale; + //f[i][0] += mufactor*(vxx*mu[i][0] + vxy*mu[i][1] + vxz*mu[i][2]); + //f[i][1] += mufactor*(vxy*mu[i][0] + vyy*mu[i][1] + vyz*mu[i][2]); + //f[i][2] += mufactor*(vxz*mu[i][0] + vyz*mu[i][1] + vzz*mu[i][2]); + f[i][0] += spfactor*(vxx*sp[i][0] + vxy*sp[i][1] + vxz*sp[i][2]); + f[i][1] += spfactor*(vxy*sp[i][0] + vyy*sp[i][1] + vyz*sp[i][2]); + f[i][2] += spfactor*(vxz*sp[i][0] + vyz*sp[i][1] + vzz*sp[i][2]); + + const double spfactorh = mub2mu0hbinv * scale; + fm[i][0] += spfactorh*ex; + fm[i][1] += spfactorh*ey; + fm[i][2] += spfactorh*ez; + + // create a new vector (in atom_spin style ?) to store long-range fm tables - t[i][0] += mufactor*(mu[i][1]*ez - mu[i][2]*ey); - t[i][1] += mufactor*(mu[i][2]*ex - mu[i][0]*ez); - t[i][2] += mufactor*(mu[i][0]*ey - mu[i][1]*ex); } } @@ -2110,7 +2145,7 @@ void PPPMDipole::fieldforce_ik_dipole() interpolate from grid to get per-atom energy/virial ------------------------------------------------------------------------- */ -void PPPMDipole::fieldforce_peratom_dipole() +void PPPMSpin::fieldforce_peratom_spin() { int i,l,m,n,nx,ny,nz,mx,my,mz; FFT_SCALAR dx,dy,dz,x0,y0,z0; @@ -2124,7 +2159,8 @@ void PPPMDipole::fieldforce_peratom_dipole() // (dx,dy,dz) = distance to "lower left" grid pt // (mx,my,mz) = global coords of moving stencil pt - double **mu = atom->mu; + //double **mu = atom->mu; + double **sp = atom->sp; double **x = atom->x; int nlocal = atom->nlocal; @@ -2153,42 +2189,42 @@ void PPPMDipole::fieldforce_peratom_dipole() mx = l+nx; x0 = y0*rho1d[0][l]; if (eflag_atom) { - ux += x0*ux_brick_dipole[mz][my][mx]; - uy += x0*uy_brick_dipole[mz][my][mx]; - uz += x0*uz_brick_dipole[mz][my][mx]; + ux += x0*ux_brick_spin[mz][my][mx]; + uy += x0*uy_brick_spin[mz][my][mx]; + uz += x0*uz_brick_spin[mz][my][mx]; } if (vflag_atom) { - v0x += x0*v0x_brick_dipole[mz][my][mx]; - v1x += x0*v1x_brick_dipole[mz][my][mx]; - v2x += x0*v2x_brick_dipole[mz][my][mx]; - v3x += x0*v3x_brick_dipole[mz][my][mx]; - v4x += x0*v4x_brick_dipole[mz][my][mx]; - v5x += x0*v5x_brick_dipole[mz][my][mx]; - v0y += x0*v0y_brick_dipole[mz][my][mx]; - v1y += x0*v1y_brick_dipole[mz][my][mx]; - v2y += x0*v2y_brick_dipole[mz][my][mx]; - v3y += x0*v3y_brick_dipole[mz][my][mx]; - v4y += x0*v4y_brick_dipole[mz][my][mx]; - v5y += x0*v5y_brick_dipole[mz][my][mx]; - v0z += x0*v0z_brick_dipole[mz][my][mx]; - v1z += x0*v1z_brick_dipole[mz][my][mx]; - v2z += x0*v2z_brick_dipole[mz][my][mx]; - v3z += x0*v3z_brick_dipole[mz][my][mx]; - v4z += x0*v4z_brick_dipole[mz][my][mx]; - v5z += x0*v5z_brick_dipole[mz][my][mx]; + v0x += x0*v0x_brick_spin[mz][my][mx]; + v1x += x0*v1x_brick_spin[mz][my][mx]; + v2x += x0*v2x_brick_spin[mz][my][mx]; + v3x += x0*v3x_brick_spin[mz][my][mx]; + v4x += x0*v4x_brick_spin[mz][my][mx]; + v5x += x0*v5x_brick_spin[mz][my][mx]; + v0y += x0*v0y_brick_spin[mz][my][mx]; + v1y += x0*v1y_brick_spin[mz][my][mx]; + v2y += x0*v2y_brick_spin[mz][my][mx]; + v3y += x0*v3y_brick_spin[mz][my][mx]; + v4y += x0*v4y_brick_spin[mz][my][mx]; + v5y += x0*v5y_brick_spin[mz][my][mx]; + v0z += x0*v0z_brick_spin[mz][my][mx]; + v1z += x0*v1z_brick_spin[mz][my][mx]; + v2z += x0*v2z_brick_spin[mz][my][mx]; + v3z += x0*v3z_brick_spin[mz][my][mx]; + v4z += x0*v4z_brick_spin[mz][my][mx]; + v5z += x0*v5z_brick_spin[mz][my][mx]; } } } } - if (eflag_atom) eatom[i] += mu[i][0]*ux + mu[i][1]*uy + mu[i][2]*uz; + if (eflag_atom) eatom[i] += sp[i][0]*ux + sp[i][1]*uy + sp[i][2]*uz; if (vflag_atom) { - vatom[i][0] += mu[i][0]*v0x + mu[i][1]*v0y + mu[i][2]*v0z; - vatom[i][1] += mu[i][0]*v1x + mu[i][1]*v1y + mu[i][2]*v1z; - vatom[i][2] += mu[i][0]*v2x + mu[i][1]*v2y + mu[i][2]*v2z; - vatom[i][3] += mu[i][0]*v3x + mu[i][1]*v3y + mu[i][2]*v3z; - vatom[i][4] += mu[i][0]*v4x + mu[i][1]*v4y + mu[i][2]*v4z; - vatom[i][5] += mu[i][0]*v5x + mu[i][1]*v5y + mu[i][2]*v5z; + vatom[i][0] += sp[i][0]*v0x + sp[i][1]*v0y + sp[i][2]*v0z; + vatom[i][1] += sp[i][0]*v1x + sp[i][1]*v1y + sp[i][2]*v1z; + vatom[i][2] += sp[i][0]*v2x + sp[i][1]*v2y + sp[i][2]*v2z; + vatom[i][3] += sp[i][0]*v3x + sp[i][1]*v3y + sp[i][2]*v3z; + vatom[i][4] += sp[i][0]*v4x + sp[i][1]*v4y + sp[i][2]*v4z; + vatom[i][5] += sp[i][0]*v5x + sp[i][1]*v5y + sp[i][2]*v5z; } } } @@ -2197,20 +2233,20 @@ void PPPMDipole::fieldforce_peratom_dipole() pack own values to buf to send to another proc ------------------------------------------------------------------------- */ -void PPPMDipole::pack_forward(int flag, FFT_SCALAR *buf, int nlist, int *list) +void PPPMSpin::pack_forward(int flag, FFT_SCALAR *buf, int nlist, int *list) { int n = 0; - if (flag == FORWARD_MU) { - FFT_SCALAR *src_ux = &ux_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *src_uy = &uy_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *src_uz = &uz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *src_vxx = &vdxx_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *src_vyy = &vdyy_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *src_vzz = &vdzz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *src_vxy = &vdxy_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *src_vxz = &vdxz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *src_vyz = &vdyz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + if (flag == FORWARD_SP) { + FFT_SCALAR *src_ux = &ux_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_uy = &uy_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_uz = &uz_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_vxx = &vdxx_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_vyy = &vdyy_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_vzz = &vdzz_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_vxy = &vdxy_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_vxz = &vdxz_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_vyz = &vdyz_brick_spin[nzlo_out][nylo_out][nxlo_out]; for (int i = 0; i < nlist; i++) { buf[n++] = src_ux[list[i]]; buf[n++] = src_uy[list[i]]; @@ -2222,25 +2258,25 @@ void PPPMDipole::pack_forward(int flag, FFT_SCALAR *buf, int nlist, int *list) buf[n++] = src_vxz[list[i]]; buf[n++] = src_vyz[list[i]]; } - } else if (flag == FORWARD_MU_PERATOM) { - FFT_SCALAR *v0xsrc = &v0x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v1xsrc = &v1x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v2xsrc = &v2x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v3xsrc = &v3x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v4xsrc = &v4x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v5xsrc = &v5x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v0ysrc = &v0y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v1ysrc = &v1y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v2ysrc = &v2y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v3ysrc = &v3y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v4ysrc = &v4y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v5ysrc = &v5y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v0zsrc = &v0z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v1zsrc = &v1z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v2zsrc = &v2z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v3zsrc = &v3z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v4zsrc = &v4z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v5zsrc = &v5z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + } else if (flag == FORWARD_SP_PERATOM) { + FFT_SCALAR *v0xsrc = &v0x_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v1xsrc = &v1x_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v2xsrc = &v2x_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v3xsrc = &v3x_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v4xsrc = &v4x_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v5xsrc = &v5x_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v0ysrc = &v0y_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v1ysrc = &v1y_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v2ysrc = &v2y_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v3ysrc = &v3y_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v4ysrc = &v4y_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v5ysrc = &v5y_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v0zsrc = &v0z_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v1zsrc = &v1z_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v2zsrc = &v2z_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v3zsrc = &v3z_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v4zsrc = &v4z_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v5zsrc = &v5z_brick_spin[nzlo_out][nylo_out][nxlo_out]; for (int i = 0; i < nlist; i++) { buf[n++] = v0xsrc[list[i]]; buf[n++] = v1xsrc[list[i]]; @@ -2268,20 +2304,20 @@ void PPPMDipole::pack_forward(int flag, FFT_SCALAR *buf, int nlist, int *list) unpack another proc's own values from buf and set own ghost values ------------------------------------------------------------------------- */ -void PPPMDipole::unpack_forward(int flag, FFT_SCALAR *buf, int nlist, int *list) +void PPPMSpin::unpack_forward(int flag, FFT_SCALAR *buf, int nlist, int *list) { int n = 0; - if (flag == FORWARD_MU) { - FFT_SCALAR *dest_ux = &ux_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *dest_uy = &uy_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *dest_uz = &uz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *dest_vxx = &vdxx_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *dest_vyy = &vdyy_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *dest_vzz = &vdzz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *dest_vxy = &vdxy_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *dest_vxz = &vdxz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *dest_vyz = &vdyz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + if (flag == FORWARD_SP) { + FFT_SCALAR *dest_ux = &ux_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_uy = &uy_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_uz = &uz_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_vxx = &vdxx_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_vyy = &vdyy_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_vzz = &vdzz_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_vxy = &vdxy_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_vxz = &vdxz_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_vyz = &vdyz_brick_spin[nzlo_out][nylo_out][nxlo_out]; for (int i = 0; i < nlist; i++) { dest_ux[list[i]] = buf[n++]; dest_uy[list[i]] = buf[n++]; @@ -2293,25 +2329,25 @@ void PPPMDipole::unpack_forward(int flag, FFT_SCALAR *buf, int nlist, int *list) dest_vxz[list[i]] = buf[n++]; dest_vyz[list[i]] = buf[n++]; } - } else if (flag == FORWARD_MU_PERATOM) { - FFT_SCALAR *v0xsrc = &v0x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v1xsrc = &v1x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v2xsrc = &v2x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v3xsrc = &v3x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v4xsrc = &v4x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v5xsrc = &v5x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v0ysrc = &v0y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v1ysrc = &v1y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v2ysrc = &v2y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v3ysrc = &v3y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v4ysrc = &v4y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v5ysrc = &v5y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v0zsrc = &v0z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v1zsrc = &v1z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v2zsrc = &v2z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v3zsrc = &v3z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v4zsrc = &v4z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v5zsrc = &v5z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + } else if (flag == FORWARD_SP_PERATOM) { + FFT_SCALAR *v0xsrc = &v0x_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v1xsrc = &v1x_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v2xsrc = &v2x_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v3xsrc = &v3x_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v4xsrc = &v4x_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v5xsrc = &v5x_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v0ysrc = &v0y_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v1ysrc = &v1y_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v2ysrc = &v2y_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v3ysrc = &v3y_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v4ysrc = &v4y_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v5ysrc = &v5y_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v0zsrc = &v0z_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v1zsrc = &v1z_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v2zsrc = &v2z_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v3zsrc = &v3z_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v4zsrc = &v4z_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v5zsrc = &v5z_brick_spin[nzlo_out][nylo_out][nxlo_out]; for (int i = 0; i < nlist; i++) { v0xsrc[list[i]] = buf[n++]; v1xsrc[list[i]] = buf[n++]; @@ -2339,17 +2375,17 @@ void PPPMDipole::unpack_forward(int flag, FFT_SCALAR *buf, int nlist, int *list) pack ghost values into buf to send to another proc ------------------------------------------------------------------------- */ -void PPPMDipole::pack_reverse(int flag, FFT_SCALAR *buf, int nlist, int *list) +void PPPMSpin::pack_reverse(int flag, FFT_SCALAR *buf, int nlist, int *list) { int n = 0; - if (flag == REVERSE_MU) { - FFT_SCALAR *src_dipole0 = &densityx_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *src_dipole1 = &densityy_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *src_dipole2 = &densityz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + if (flag == REVERSE_SP) { + FFT_SCALAR *src_spin0 = &densityx_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_spin1 = &densityy_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_spin2 = &densityz_brick_spin[nzlo_out][nylo_out][nxlo_out]; for (int i = 0; i < nlist; i++) { - buf[n++] = src_dipole0[list[i]]; - buf[n++] = src_dipole1[list[i]]; - buf[n++] = src_dipole2[list[i]]; + buf[n++] = src_spin0[list[i]]; + buf[n++] = src_spin1[list[i]]; + buf[n++] = src_spin2[list[i]]; } } } @@ -2358,17 +2394,17 @@ void PPPMDipole::pack_reverse(int flag, FFT_SCALAR *buf, int nlist, int *list) unpack another proc's ghost values from buf and add to own values ------------------------------------------------------------------------- */ -void PPPMDipole::unpack_reverse(int flag, FFT_SCALAR *buf, int nlist, int *list) +void PPPMSpin::unpack_reverse(int flag, FFT_SCALAR *buf, int nlist, int *list) { int n = 0; - if (flag == REVERSE_MU) { - FFT_SCALAR *dest_dipole0 = &densityx_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *dest_dipole1 = &densityy_brick_dipole[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *dest_dipole2 = &densityz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + if (flag == REVERSE_SP) { + FFT_SCALAR *dest_spin0 = &densityx_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_spin1 = &densityy_brick_spin[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_spin2 = &densityz_brick_spin[nzlo_out][nylo_out][nxlo_out]; for (int i = 0; i < nlist; i++) { - dest_dipole0[list[i]] += buf[n++]; - dest_dipole1[list[i]] += buf[n++]; - dest_dipole2[list[i]] += buf[n++]; + dest_spin0[list[i]] += buf[n++]; + dest_spin1[list[i]] += buf[n++]; + dest_spin2[list[i]] += buf[n++]; } } } @@ -2381,22 +2417,23 @@ void PPPMDipole::unpack_reverse(int flag, FFT_SCALAR *buf, int nlist, int *list) extended to non-neutral systems (J. Chem. Phys. 131, 094107). ------------------------------------------------------------------------- */ -void PPPMDipole::slabcorr() +void PPPMSpin::slabcorr() { - // compute local contribution to global dipole moment + // compute local contribution to global spin moment double **x = atom->x; double zprd = domain->zprd; int nlocal = atom->nlocal; - double dipole = 0.0; - double **mu = atom->mu; - for (int i = 0; i < nlocal; i++) dipole += mu[i][2]; + double spin = 0.0; + //double **mu = atom->mu; + double **sp = atom->sp; + for (int i = 0; i < nlocal; i++) spin += sp[i][2]; - // sum local contributions to get global dipole moment + // sum local contributions to get global spin moment - double dipole_all; - MPI_Allreduce(&dipole,&dipole_all,1,MPI_DOUBLE,MPI_SUM,world); + double spin_all; + MPI_Allreduce(&spin,&spin_all,1,MPI_DOUBLE,MPI_SUM,world); // need to make non-neutral systems and/or // per-atom energy translationally invariant @@ -2404,42 +2441,48 @@ void PPPMDipole::slabcorr() if (eflag_atom || fabs(qsum) > SMALL) { error->all(FLERR,"Cannot (yet) use kspace slab correction with " - "long-range dipoles and non-neutral systems or per-atom energy"); + "long-range spins and non-neutral systems or per-atom energy"); } // compute corrections - const double e_slabcorr = MY_2PI*(dipole_all*dipole_all/12.0)/volume; - const double qscale = qqrd2e * scale; + const double e_slabcorr = MY_2PI*(spin_all*spin_all/12.0)/volume; + //const double qscale = qqrd2e * scale; + const double spscale = mub2mu0 * scale; - if (eflag_global) energy += qscale * e_slabcorr; + if (eflag_global) energy += spscale * e_slabcorr; // per-atom energy if (eflag_atom) { - double efact = qscale * MY_2PI/volume/12.0; + //double efact = qscale * MY_2PI/volume/12.0; + double efact = spscale * MY_2PI/volume/12.0; for (int i = 0; i < nlocal; i++) - eatom[i] += efact * mu[i][2]*dipole_all; + //eatom[i] += efact * mu[i][2]*spin_all; + eatom[i] += efact * sp[i][2]*spin_all; } // add on torque corrections - if (atom->torque) { - double ffact = qscale * (-4.0*MY_PI/volume); - double **mu = atom->mu; - double **torque = atom->torque; - for (int i = 0; i < nlocal; i++) { - torque[i][0] += ffact * dipole_all * mu[i][1]; - torque[i][1] += -ffact * dipole_all * mu[i][0]; - } - } + // no torque for the spins + // should it be calculated for the magnetic force fm? + + //if (atom->torque) { + // double ffact = qscale * (-4.0*MY_PI/volume); + // double **mu = atom->mu; + // double **torque = atom->torque; + // for (int i = 0; i < nlocal; i++) { + // torque[i][0] += ffact * spin_all * mu[i][1]; + // torque[i][1] += -ffact * spin_all * mu[i][0]; + // } + //} } /* ---------------------------------------------------------------------- perform and time the 1d FFTs required for N timesteps ------------------------------------------------------------------------- */ -int PPPMDipole::timing_1d(int n, double &time1d) +int PPPMSpin::timing_1d(int n, double &time1d) { double time1,time2; @@ -2474,7 +2517,7 @@ int PPPMDipole::timing_1d(int n, double &time1d) perform and time the 3d FFTs required for N timesteps ------------------------------------------------------------------------- */ -int PPPMDipole::timing_3d(int n, double &time3d) +int PPPMSpin::timing_3d(int n, double &time3d) { double time1,time2; @@ -2509,7 +2552,7 @@ int PPPMDipole::timing_3d(int n, double &time3d) memory usage of local arrays ------------------------------------------------------------------------- */ -double PPPMDipole::memory_usage() +double PPPMSpin::memory_usage() { double bytes = nmax*3 * sizeof(double); int nbrick = (nxhi_out-nxlo_out+1) * (nyhi_out-nylo_out+1) * @@ -2523,37 +2566,41 @@ double PPPMDipole::memory_usage() if (peratom_allocate_flag) bytes += 21 * nbrick * sizeof(FFT_SCALAR); - if (cg_dipole) bytes += cg_dipole->memory_usage(); - if (cg_peratom_dipole) bytes += cg_peratom_dipole->memory_usage(); + if (cg_spin) bytes += cg_spin->memory_usage(); + if (cg_peratom_spin) bytes += cg_peratom_spin->memory_usage(); return bytes; } /* ---------------------------------------------------------------------- - compute musum,musqsum,mu2 - called initially, when particle count changes, when dipoles are changed + compute spsum,spsqsum,sp2 + called initially, when particle count changes, when spins are changed ------------------------------------------------------------------------- */ -void PPPMDipole::musum_musq() +void PPPMSpin::spsum_spsq() { const int nlocal = atom->nlocal; - musum = musqsum = mu2 = 0.0; - if (atom->mu_flag) { - double** mu = atom->mu; - double musum_local(0.0), musqsum_local(0.0); + spsum = spsqsum = sp2 = 0.0; + if (atom->sp_flag) { + double **sp = atom->sp; + double spsum_local(0.0), spsqsum_local(0.0); + + // not exactly the good loop: need to add norm of spins for (int i = 0; i < nlocal; i++) { - musum_local += mu[i][0] + mu[i][1] + mu[i][2]; - musqsum_local += mu[i][0]*mu[i][0] + mu[i][1]*mu[i][1] + mu[i][2]*mu[i][2]; + spsum_local += sp[i][0] + sp[i][1] + sp[i][2]; + spsqsum_local += sp[i][0]*sp[i][0] + sp[i][1]*sp[i][1] + sp[i][2]*sp[i][2]; } - MPI_Allreduce(&musum_local,&musum,1,MPI_DOUBLE,MPI_SUM,world); - MPI_Allreduce(&musqsum_local,&musqsum,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&spsum_local,&spsum,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&spsqsum_local,&spsqsum,1,MPI_DOUBLE,MPI_SUM,world); - mu2 = musqsum * force->qqrd2e; + //mu2 = musqsum * force->qqrd2e; + // find correct units + sp2 = spsqsum * mub2mu0; } - if (mu2 == 0 && comm->me == 0) - error->all(FLERR,"Using kspace solver PPPMDipole on system with no dipoles"); -} \ No newline at end of file + if (sp2 == 0 && comm->me == 0) + error->all(FLERR,"Using kspace solver PPPMSpin on system with no spins"); +} diff --git a/src/KSPACE/pppm_spin.h b/src/KSPACE/pppm_spin.h index 4d6906f974..aacda1f0af 100644 --- a/src/KSPACE/pppm_spin.h +++ b/src/KSPACE/pppm_spin.h @@ -13,7 +13,7 @@ #ifdef KSPACE_CLASS -KSpaceStyle(pppm/dipole,PPPMDipole) +KSpaceStyle(pppm/spin,PPPMSpin) #else @@ -24,10 +24,10 @@ KSpaceStyle(pppm/dipole,PPPMDipole) namespace LAMMPS_NS { -class PPPMDipole : public PPPM { +class PPPMSpin : public PPPM { public: - PPPMDipole(class LAMMPS *, int, char **); - virtual ~PPPMDipole(); + PPPMSpin(class LAMMPS *, int, char **); + virtual ~PPPMSpin(); void init(); void setup(); void setup_grid(); @@ -55,37 +55,37 @@ class PPPMDipole : public PPPM { void pack_reverse(int, FFT_SCALAR *, int, int *); void unpack_reverse(int, FFT_SCALAR *, int, int *); - // dipole + // spin - FFT_SCALAR ***densityx_brick_dipole,***densityy_brick_dipole,***densityz_brick_dipole; - FFT_SCALAR ***vdxx_brick_dipole,***vdyy_brick_dipole,***vdzz_brick_dipole; - FFT_SCALAR ***vdxy_brick_dipole,***vdxz_brick_dipole,***vdyz_brick_dipole; - FFT_SCALAR ***ux_brick_dipole,***uy_brick_dipole,***uz_brick_dipole; - FFT_SCALAR ***v0x_brick_dipole,***v1x_brick_dipole,***v2x_brick_dipole; - FFT_SCALAR ***v3x_brick_dipole,***v4x_brick_dipole,***v5x_brick_dipole; - FFT_SCALAR ***v0y_brick_dipole,***v1y_brick_dipole,***v2y_brick_dipole; - FFT_SCALAR ***v3y_brick_dipole,***v4y_brick_dipole,***v5y_brick_dipole; - FFT_SCALAR ***v0z_brick_dipole,***v1z_brick_dipole,***v2z_brick_dipole; - FFT_SCALAR ***v3z_brick_dipole,***v4z_brick_dipole,***v5z_brick_dipole; + FFT_SCALAR ***densityx_brick_spin,***densityy_brick_spin,***densityz_brick_spin; + FFT_SCALAR ***vdxx_brick_spin,***vdyy_brick_spin,***vdzz_brick_spin; + FFT_SCALAR ***vdxy_brick_spin,***vdxz_brick_spin,***vdyz_brick_spin; + FFT_SCALAR ***ux_brick_spin,***uy_brick_spin,***uz_brick_spin; + FFT_SCALAR ***v0x_brick_spin,***v1x_brick_spin,***v2x_brick_spin; + FFT_SCALAR ***v3x_brick_spin,***v4x_brick_spin,***v5x_brick_spin; + FFT_SCALAR ***v0y_brick_spin,***v1y_brick_spin,***v2y_brick_spin; + FFT_SCALAR ***v3y_brick_spin,***v4y_brick_spin,***v5y_brick_spin; + FFT_SCALAR ***v0z_brick_spin,***v1z_brick_spin,***v2z_brick_spin; + FFT_SCALAR ***v3z_brick_spin,***v4z_brick_spin,***v5z_brick_spin; FFT_SCALAR *work3,*work4; - FFT_SCALAR *densityx_fft_dipole,*densityy_fft_dipole,*densityz_fft_dipole; - class GridComm *cg_dipole; - class GridComm *cg_peratom_dipole; - int only_dipole_flag; + FFT_SCALAR *densityx_fft_spin,*densityy_fft_spin,*densityz_fft_spin; + class GridComm *cg_spin; + class GridComm *cg_peratom_spin; + int only_spin_flag; double musum,musqsum,mu2; - double find_gewald_dipole(double, double, bigint, double, double); - double newton_raphson_f_dipole(double, double, bigint, double, double); - double derivf_dipole(double, double, bigint, double, double); - double compute_df_kspace_dipole(); - double compute_qopt_dipole(); - void compute_gf_dipole(); - void make_rho_dipole(); - void brick2fft_dipole(); - void poisson_ik_dipole(); - void poisson_peratom_dipole(); - void fieldforce_ik_dipole(); - void fieldforce_peratom_dipole(); - double final_accuracy_dipole(); + double find_gewald_spin(double, double, bigint, double, double); + double newton_raphson_f_spin(double, double, bigint, double, double); + double derivf_spin(double, double, bigint, double, double); + double compute_df_kspace_spin(); + double compute_qopt_spin(); + void compute_gf_spin(); + void make_rho_spin(); + void brick2fft_spin(); + void poisson_ik_spin(); + void poisson_peratom_spin(); + void fieldforce_ik_spin(); + void fieldforce_peratom_spin(); + double final_accuracy_spin(); void musum_musq(); }; @@ -97,9 +97,9 @@ class PPPMDipole : public PPPM { /* ERROR/WARNING messages: -E: Cannot (yet) use charges with Kspace style PPPMDipole +E: Cannot (yet) use charges with Kspace style PPPMSpin -Charge-dipole interactions are not yet implemented in PPPMDipole so this +Charge-spin interactions are not yet implemented in PPPMSpin so this feature is not yet supported. E: Must redefine kspace_style after changing to triclinic box @@ -110,19 +110,19 @@ E: Kspace style requires atom attribute mu The atom style defined does not have this attribute. -E: Cannot (yet) use kspace_modify diff ad with dipoles +E: Cannot (yet) use kspace_modify diff ad with spins This feature is not yet supported. -E: Cannot (yet) use 'electron' units with dipoles +E: Cannot (yet) use 'electron' units with spins This feature is not yet supported. -E: Cannot yet use triclinic cells with PPPMDipole +E: Cannot yet use triclinic cells with PPPMSpin This feature is not yet supported. -E: Cannot yet use TIP4P with PPPMDipole +E: Cannot yet use TIP4P with PPPMSpin This feature is not yet supported. @@ -144,7 +144,7 @@ This is a limitation of the PPPM implementation in LAMMPS. E: KSpace style is incompatible with Pair style Setting a kspace style requires that a pair style with matching -long-range dipole components be used. +long-range spin components be used. W: Reducing PPPM order b/c stencil extends beyond nearest neighbor processor @@ -202,11 +202,11 @@ outside a processor's sub-domain or even the entire simulation box. This indicates bad physics, e.g. due to highly overlapping atoms, too large a timestep, etc. -E: Using kspace solver PPPMDipole on system with no dipoles +E: Using kspace solver PPPMSpin on system with no spins -Must have non-zero dipoles with PPPMDipole. +Must have non-zero spins with PPPMSpin. -E: Must use kspace_modify gewald for system with no dipoles +E: Must use kspace_modify gewald for system with no spins Self-explanatory. From 5e287033f79e8662a18767239b4c8d2b6eac7308 Mon Sep 17 00:00:00 2001 From: julient31 Date: Thu, 16 Aug 2018 10:13:18 -0600 Subject: [PATCH 003/311] Commit1 JT 081618 - converted pppm_spin for long range spin-spin interactions - modified kspace, pair,and pair_hybrid to add spinflag --- src/KSPACE/pppm_spin.cpp | 138 ++++++++++++++---------------------- src/KSPACE/pppm_spin.h | 9 ++- src/SPIN/pair_spin_long.cpp | 2 +- src/kspace.cpp | 4 +- src/kspace.h | 1 + src/pair.cpp | 2 +- src/pair.h | 1 + src/pair_hybrid.cpp | 1 + 8 files changed, 70 insertions(+), 88 deletions(-) diff --git a/src/KSPACE/pppm_spin.cpp b/src/KSPACE/pppm_spin.cpp index c51de8d023..9b59f9cd7b 100644 --- a/src/KSPACE/pppm_spin.cpp +++ b/src/KSPACE/pppm_spin.cpp @@ -115,13 +115,7 @@ void PPPMSpin::init() // error check - //spinflag = atom->mu?1:0; spinflag = atom->sp?1:0; - // no charges here, charge neutrality - //qsum_qsq(0); - // maybe change this test - if (spinflag && q2) - error->all(FLERR,"Cannot (yet) uses charges with Kspace style PPPMSpin"); triclinic_check(); @@ -175,17 +169,12 @@ void PPPMSpin::init() if (tip4pflag) error->all(FLERR,"Cannot yet use TIP4P with PPPMSpin"); - // compute qsum & qsqsum and warn if not charge-neutral - scale = 1.0; - //qqrd2e = force->qqrd2e; - // need to define mag constants instead hbar = force->hplanck/MY_2PI; // eV/(rad.THz) mub = 5.78901e-5; // in eV/T mu_0 = 1.2566370614e-6; // in T.m/A mub2mu0 = mub * mub * mu_0; // in eV mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz - //musum_musq(); spsum_spsq(); natoms_original = atom->natoms; @@ -458,7 +447,6 @@ void PPPMSpin::compute(int eflag, int vflag) // if atom count has changed, update qsum and qsqsum if (atom->natoms != natoms_original) { - //musum_musq(); spsum_spsq(); natoms_original = atom->natoms; } @@ -520,7 +508,6 @@ void PPPMSpin::compute(int eflag, int vflag) // sum global energy across procs and add in volume-dependent term - //const double qscale = qqrd2e * scale; const double spscale = mub2mu0 * scale; const double g3 = g_ewald*g_ewald*g_ewald; @@ -531,7 +518,7 @@ void PPPMSpin::compute(int eflag, int vflag) energy *= 0.5*volume; energy -= spsqsum*2.0*g3/3.0/MY_PIS; - energy *= qscale; + energy *= spscale; } // sum global virial across procs @@ -539,32 +526,32 @@ void PPPMSpin::compute(int eflag, int vflag) if (vflag_global) { double virial_all[6]; MPI_Allreduce(virial,virial_all,6,MPI_DOUBLE,MPI_SUM,world); - for (i = 0; i < 6; i++) virial[i] = 0.5*qscale*volume*virial_all[i]; + for (i = 0; i < 6; i++) virial[i] = 0.5*spscale*volume*virial_all[i]; } // per-atom energy/virial // energy includes self-energy correction if (evflag_atom) { - //double *q = atom->q; - //double **mu = atom->mu; double **sp = atom->sp; + double spx,spy,spz; int nlocal = atom->nlocal; int ntotal = nlocal; if (eflag_atom) { for (i = 0; i < nlocal; i++) { + spx = sp[i][0]*sp[i][3]; + spy = sp[i][1]*sp[i][3]; + spz = sp[i][2]*sp[i][3]; eatom[i] *= 0.5; - //eatom[i] -= (mu[i][0]*mu[i][0] + mu[i][1]*mu[i][1] + mu[i][2]*mu[i][2])*2.0*g3/3.0/MY_PIS; - eatom[i] -= (sp[i][0]*sp[i][0] + sp[i][1]*sp[i][1] + sp[i][2]*sp[i][2])*2.0*g3/3.0/MY_PIS; - //eatom[i] *= qscale; + eatom[i] -= (spx*spx + spy*spy + spz*spz)*2.0*g3/3.0/MY_PIS; eatom[i] *= spscale; } } if (vflag_atom) { for (i = 0; i < ntotal; i++) - for (j = 0; j < 6; j++) vatom[i][j] *= 0.5*qscale; + for (j = 0; j < 6; j++) vatom[i][j] *= 0.5*spscale; } } @@ -918,7 +905,6 @@ double PPPMSpin::compute_df_kspace_spin() double zprd_slab = zprd*slab_volfactor; bigint natoms = atom->natoms; double qopt = compute_qopt_spin(); - //double df_kspace = sqrt(qopt/natoms)*mu2/(3.0*xprd*yprd*zprd_slab); double df_kspace = sqrt(qopt/natoms)*sp2/(3.0*xprd*yprd*zprd_slab); return df_kspace; } @@ -1131,8 +1117,6 @@ double PPPMSpin::newton_raphson_f() double rg6 = rg4*rg2; double Cc = 4.0*rg4 + 6.0*rg2 + 3.0; double Dc = 8.0*rg6 + 20.0*rg4 + 30.0*rg2 + 15.0; - //df_rspace = (mu2/(sqrt(vol*powint(g_ewald,4)*powint(cutoff,9)*natoms)) * - // sqrt(13.0/6.0*Cc*Cc + 2.0/15.0*Dc*Dc - 13.0/15.0*Cc*Dc) * exp(-rg2)); df_rspace = (sp2/(sqrt(vol*powint(g_ewald,4)*powint(cutoff,9)*natoms)) * sqrt(13.0/6.0*Cc*Cc + 2.0/15.0*Dc*Dc - 13.0/15.0*Cc*Dc) * exp(-rg2)); df_kspace = compute_df_kspace_spin(); @@ -1218,9 +1202,6 @@ double PPPMSpin::final_accuracy_spin() double rg6 = rg4*rg2; double Cc = 4.0*rg4 + 6.0*rg2 + 3.0; double Dc = 8.0*rg6 + 20.0*rg4 + 30.0*rg2 + 15.0; - //double df_rspace = (mu2/(sqrt(vol*powint(g_ewald,4)*powint(cutoff,9)*natoms)) * - // sqrt(13.0/6.0*Cc*Cc + 2.0/15.0*Dc*Dc - 13.0/15.0*Cc*Dc) * - // exp(-rg2)); double df_rspace = (sp2/(sqrt(vol*powint(g_ewald,4)*powint(cutoff,9)*natoms)) * sqrt(13.0/6.0*Cc*Cc + 2.0/15.0*Dc*Dc - 13.0/15.0*Cc*Dc) * exp(-rg2)); @@ -1285,8 +1266,8 @@ void PPPMSpin::make_rho_spin() // (dx,dy,dz) = distance to "lower left" grid pt // (mx,my,mz) = global coords of moving stencil pt - //double **mu = atom->mu; double **sp = atom->sp; + double spx,spy,spz; double **x = atom->x; int nlocal = atom->nlocal; @@ -1301,9 +1282,12 @@ void PPPMSpin::make_rho_spin() compute_rho1d(dx,dy,dz); - z0 = delvolinv * sp[i][0]; - z1 = delvolinv * sp[i][1]; - z2 = delvolinv * sp[i][2]; + spx = sp[i][0]*sp[i][3]; + spy = sp[i][1]*sp[i][3]; + spz = sp[i][2]*sp[i][3]; + z0 = delvolinv * spx; + z1 = delvolinv * spy; + z2 = delvolinv * spz; for (n = nlower; n <= nupper; n++) { mz = n+nz; y0 = z0*rho1d[2][n]; @@ -2076,13 +2060,11 @@ void PPPMSpin::fieldforce_ik_spin() // (dx,dy,dz) = distance to "lower left" grid pt // (mx,my,mz) = global coords of moving stencil pt - - //double **mu = atom->mu; double **sp = atom->sp; + double spx,spy,spz; double **x = atom->x; double **f = atom->f; double **fm = atom->fm; - double **t = atom->torque; int nlocal = atom->nlocal; @@ -2120,16 +2102,15 @@ void PPPMSpin::fieldforce_ik_spin() } } - // convert E-field to torque + // convert M-field to mech. and mag. forces - //const double mufactor = qqrd2e * scale; const double spfactor = mub2mu0 * scale; - //f[i][0] += mufactor*(vxx*mu[i][0] + vxy*mu[i][1] + vxz*mu[i][2]); - //f[i][1] += mufactor*(vxy*mu[i][0] + vyy*mu[i][1] + vyz*mu[i][2]); - //f[i][2] += mufactor*(vxz*mu[i][0] + vyz*mu[i][1] + vzz*mu[i][2]); - f[i][0] += spfactor*(vxx*sp[i][0] + vxy*sp[i][1] + vxz*sp[i][2]); - f[i][1] += spfactor*(vxy*sp[i][0] + vyy*sp[i][1] + vyz*sp[i][2]); - f[i][2] += spfactor*(vxz*sp[i][0] + vyz*sp[i][1] + vzz*sp[i][2]); + spx = sp[i][0]*sp[i][3]; + spy = sp[i][1]*sp[i][3]; + spz = sp[i][2]*sp[i][3]; + f[i][0] += spfactor*(vxx*spx + vxy*spy + vxz*spz); + f[i][1] += spfactor*(vxy*spx + vyy*spy + vyz*spz); + f[i][2] += spfactor*(vxz*spx + vyz*spy + vzz*spz); const double spfactorh = mub2mu0hbinv * scale; fm[i][0] += spfactorh*ex; @@ -2159,8 +2140,8 @@ void PPPMSpin::fieldforce_peratom_spin() // (dx,dy,dz) = distance to "lower left" grid pt // (mx,my,mz) = global coords of moving stencil pt - //double **mu = atom->mu; double **sp = atom->sp; + double spx,spy,spz; double **x = atom->x; int nlocal = atom->nlocal; @@ -2217,14 +2198,17 @@ void PPPMSpin::fieldforce_peratom_spin() } } - if (eflag_atom) eatom[i] += sp[i][0]*ux + sp[i][1]*uy + sp[i][2]*uz; + spx = sp[i][0]*sp[i][3]; + spy = sp[i][1]*sp[i][3]; + spz = sp[i][2]*sp[i][3]; + if (eflag_atom) eatom[i] += spx*ux + spy*uy + spz*uz; if (vflag_atom) { - vatom[i][0] += sp[i][0]*v0x + sp[i][1]*v0y + sp[i][2]*v0z; - vatom[i][1] += sp[i][0]*v1x + sp[i][1]*v1y + sp[i][2]*v1z; - vatom[i][2] += sp[i][0]*v2x + sp[i][1]*v2y + sp[i][2]*v2z; - vatom[i][3] += sp[i][0]*v3x + sp[i][1]*v3y + sp[i][2]*v3z; - vatom[i][4] += sp[i][0]*v4x + sp[i][1]*v4y + sp[i][2]*v4z; - vatom[i][5] += sp[i][0]*v5x + sp[i][1]*v5y + sp[i][2]*v5z; + vatom[i][0] += spx*v0x + spy*v0y + spz*v0z; + vatom[i][1] += spx*v1x + spy*v1y + spz*v1z; + vatom[i][2] += spx*v2x + spy*v2y + spz*v2z; + vatom[i][3] += spx*v3x + spy*v3y + spz*v3z; + vatom[i][4] += spx*v4x + spy*v4y + spz*v4z; + vatom[i][5] += spx*v5x + spy*v5y + spz*v5z; } } } @@ -2426,28 +2410,21 @@ void PPPMSpin::slabcorr() int nlocal = atom->nlocal; double spin = 0.0; - //double **mu = atom->mu; double **sp = atom->sp; - for (int i = 0; i < nlocal; i++) spin += sp[i][2]; + double spx,spy,spz; + for (int i = 0; i < nlocal; i++) { + spz = sp[i][2]*sp[i][3]; + spin += spz; + } // sum local contributions to get global spin moment double spin_all; MPI_Allreduce(&spin,&spin_all,1,MPI_DOUBLE,MPI_SUM,world); - // need to make non-neutral systems and/or - // per-atom energy translationally invariant - - if (eflag_atom || fabs(qsum) > SMALL) { - - error->all(FLERR,"Cannot (yet) use kspace slab correction with " - "long-range spins and non-neutral systems or per-atom energy"); - } - // compute corrections const double e_slabcorr = MY_2PI*(spin_all*spin_all/12.0)/volume; - //const double qscale = qqrd2e * scale; const double spscale = mub2mu0 * scale; if (eflag_global) energy += spscale * e_slabcorr; @@ -2455,27 +2432,20 @@ void PPPMSpin::slabcorr() // per-atom energy if (eflag_atom) { - //double efact = qscale * MY_2PI/volume/12.0; double efact = spscale * MY_2PI/volume/12.0; - for (int i = 0; i < nlocal; i++) - //eatom[i] += efact * mu[i][2]*spin_all; - eatom[i] += efact * sp[i][2]*spin_all; + for (int i = 0; i < nlocal; i++) { + spz = sp[i][2]*sp[i][3]; + eatom[i] += efact * spz * spin_all; + } } - // add on torque corrections + // add on mag. force corrections - // no torque for the spins - // should it be calculated for the magnetic force fm? - - //if (atom->torque) { - // double ffact = qscale * (-4.0*MY_PI/volume); - // double **mu = atom->mu; - // double **torque = atom->torque; - // for (int i = 0; i < nlocal; i++) { - // torque[i][0] += ffact * spin_all * mu[i][1]; - // torque[i][1] += -ffact * spin_all * mu[i][0]; - // } - //} + double ffact = spscale * (-4.0*MY_PI/volume); + double **fm = atom->fm; + for (int i = 0; i < nlocal; i++) { + fm[i][2] += ffact * spin_all; + } } /* ---------------------------------------------------------------------- @@ -2584,20 +2554,22 @@ void PPPMSpin::spsum_spsq() spsum = spsqsum = sp2 = 0.0; if (atom->sp_flag) { double **sp = atom->sp; + double spx, spy, spz; double spsum_local(0.0), spsqsum_local(0.0); // not exactly the good loop: need to add norm of spins for (int i = 0; i < nlocal; i++) { - spsum_local += sp[i][0] + sp[i][1] + sp[i][2]; - spsqsum_local += sp[i][0]*sp[i][0] + sp[i][1]*sp[i][1] + sp[i][2]*sp[i][2]; + spx = sp[i][0]*sp[i][3]; + spy = sp[i][1]*sp[i][3]; + spz = sp[i][2]*sp[i][3]; + spsum_local += spx + spy + spz; + spsqsum_local += spx*spx + spy*spy + spz*spz; } MPI_Allreduce(&spsum_local,&spsum,1,MPI_DOUBLE,MPI_SUM,world); MPI_Allreduce(&spsqsum_local,&spsqsum,1,MPI_DOUBLE,MPI_SUM,world); - //mu2 = musqsum * force->qqrd2e; - // find correct units sp2 = spsqsum * mub2mu0; } diff --git a/src/KSPACE/pppm_spin.h b/src/KSPACE/pppm_spin.h index aacda1f0af..3b4d42d4ea 100644 --- a/src/KSPACE/pppm_spin.h +++ b/src/KSPACE/pppm_spin.h @@ -37,6 +37,11 @@ class PPPMSpin : public PPPM { double memory_usage(); protected: + double hbar; // reduced Planck's constant + double mub; // Bohr's magneton + double mu_0; // vacuum permeability + double mub2mu0; // prefactor for mech force + double mub2mu0hbinv; // prefactor for mag force void set_grid_global(); double newton_raphson_f(); @@ -72,7 +77,7 @@ class PPPMSpin : public PPPM { class GridComm *cg_spin; class GridComm *cg_peratom_spin; int only_spin_flag; - double musum,musqsum,mu2; + double spsum,spsqsum,sp2; double find_gewald_spin(double, double, bigint, double, double); double newton_raphson_f_spin(double, double, bigint, double, double); double derivf_spin(double, double, bigint, double, double); @@ -86,7 +91,7 @@ class PPPMSpin : public PPPM { void fieldforce_ik_spin(); void fieldforce_peratom_spin(); double final_accuracy_spin(); - void musum_musq(); + void spsum_spsq(); }; diff --git a/src/SPIN/pair_spin_long.cpp b/src/SPIN/pair_spin_long.cpp index 66b684ae1d..95c4e6b5a9 100644 --- a/src/SPIN/pair_spin_long.cpp +++ b/src/SPIN/pair_spin_long.cpp @@ -59,7 +59,7 @@ PairSpinLong::PairSpinLong(LAMMPS *lmp) : PairSpin(lmp), lockfixnvespin(NULL) { single_enable = 0; - ewaldflag = pppmflag = 1; + ewaldflag = pppmflag = spinflag = 1; respa_enable = 0; no_virial_fdotr_compute = 1; lattice_flag = 0; diff --git a/src/kspace.cpp b/src/kspace.cpp index da606bbf3d..75b6abf515 100644 --- a/src/kspace.cpp +++ b/src/kspace.cpp @@ -37,7 +37,7 @@ KSpace::KSpace(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) virial[0] = virial[1] = virial[2] = virial[3] = virial[4] = virial[5] = 0.0; triclinic_support = 1; - ewaldflag = pppmflag = msmflag = dispersionflag = tip4pflag = dipoleflag = 0; + ewaldflag = pppmflag = msmflag = dispersionflag = tip4pflag = dipoleflag = spinflag = 0; compute_flag = 1; group_group_enable = 0; stagger_flag = 0; @@ -192,6 +192,8 @@ void KSpace::pair_check() error->all(FLERR,"KSpace style is incompatible with Pair style"); if (dipoleflag && !force->pair->dipoleflag) error->all(FLERR,"KSpace style is incompatible with Pair style"); + if (spinflag && !force->pair->spinflag) + error->all(FLERR,"KSpace style is incompatible with Pair style"); if (tip4pflag && !force->pair->tip4pflag) error->all(FLERR,"KSpace style is incompatible with Pair style"); diff --git a/src/kspace.h b/src/kspace.h index 55ace5aa71..c049ad11f1 100644 --- a/src/kspace.h +++ b/src/kspace.h @@ -44,6 +44,7 @@ class KSpace : protected Pointers { int dispersionflag; // 1 if a LJ/dispersion solver int tip4pflag; // 1 if a TIP4P solver int dipoleflag; // 1 if a dipole solver + int spinflag; // 1 if a spin solver int differentiation_flag; int neighrequest_flag; // used to avoid obsolete construction // of neighbor lists diff --git a/src/pair.cpp b/src/pair.cpp index 5c308cc7ce..88fed646b4 100644 --- a/src/pair.cpp +++ b/src/pair.cpp @@ -72,7 +72,7 @@ Pair::Pair(LAMMPS *lmp) : Pointers(lmp) single_extra = 0; svector = NULL; - ewaldflag = pppmflag = msmflag = dispersionflag = tip4pflag = dipoleflag = 0; + ewaldflag = pppmflag = msmflag = dispersionflag = tip4pflag = dipoleflag = spinflag = 0; reinitflag = 1; // pair_modify settings diff --git a/src/pair.h b/src/pair.h index 844bc0cdc7..f830b7c035 100644 --- a/src/pair.h +++ b/src/pair.h @@ -61,6 +61,7 @@ class Pair : protected Pointers { int dispersionflag; // 1 if compatible with LJ/dispersion solver int tip4pflag; // 1 if compatible with TIP4P solver int dipoleflag; // 1 if compatible with dipole solver + int spinflag; // 1 if compatible with spin long solver int reinitflag; // 1 if compatible with fix adapt and alike int tail_flag; // pair_modify flag for LJ tail correction diff --git a/src/pair_hybrid.cpp b/src/pair_hybrid.cpp index dc74dd040d..34359b8009 100644 --- a/src/pair_hybrid.cpp +++ b/src/pair_hybrid.cpp @@ -352,6 +352,7 @@ void PairHybrid::flags() if (styles[m]->pppmflag) pppmflag = 1; if (styles[m]->msmflag) msmflag = 1; if (styles[m]->dipoleflag) dipoleflag = 1; + if (styles[m]->spinflag) spinflag = 1; if (styles[m]->dispersionflag) dispersionflag = 1; if (styles[m]->tip4pflag) tip4pflag = 1; if (styles[m]->compute_flag) compute_flag = 1; From 8d79db03d38061cf18c12954472ba64a79aa12ad Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 21 Aug 2018 13:47:38 -0600 Subject: [PATCH 004/311] Commit1 JT 082118 - created pppm_dipole_spin.h/cpp (child-class of pppm_dipole) - improved pair_spin_long.h/cpp - created documentation for pair_spin_long - new 3xN fm_long vector in atom_vec_spin (with associated comm) --- doc/src/Eqs/pair_spin_long_range.jpg | Bin 0 -> 11980 bytes doc/src/Eqs/pair_spin_long_range.tex | 20 + doc/src/Eqs/pair_spin_long_range_force.jpg | Bin 0 -> 16016 bytes doc/src/Eqs/pair_spin_long_range_force.tex | 23 + doc/src/Eqs/pair_spin_long_range_magforce.jpg | Bin 0 -> 9440 bytes doc/src/Eqs/pair_spin_long_range_magforce.tex | 17 + doc/src/pair_spin_long.txt | 84 ++ src/KSPACE/{pppm_spin.cpp => pppm_dipole.cpp} | 1012 ++++++++--------- src/KSPACE/pppm_dipole.h | 213 ++++ src/KSPACE/pppm_dipole_spin.cpp | 750 ++++++++++++ .../{pppm_spin.h => pppm_dipole_spin.h} | 71 +- src/SPIN/atom_vec_spin.cpp | 14 +- src/SPIN/atom_vec_spin.h | 8 +- src/SPIN/pair_spin_exchange.cpp | 3 - src/SPIN/pair_spin_long.cpp | 370 +++--- src/SPIN/pair_spin_long.h | 5 +- 16 files changed, 1839 insertions(+), 751 deletions(-) create mode 100644 doc/src/Eqs/pair_spin_long_range.jpg create mode 100644 doc/src/Eqs/pair_spin_long_range.tex create mode 100644 doc/src/Eqs/pair_spin_long_range_force.jpg create mode 100644 doc/src/Eqs/pair_spin_long_range_force.tex create mode 100644 doc/src/Eqs/pair_spin_long_range_magforce.jpg create mode 100644 doc/src/Eqs/pair_spin_long_range_magforce.tex create mode 100644 doc/src/pair_spin_long.txt rename src/KSPACE/{pppm_spin.cpp => pppm_dipole.cpp} (67%) create mode 100644 src/KSPACE/pppm_dipole.h create mode 100644 src/KSPACE/pppm_dipole_spin.cpp rename src/KSPACE/{pppm_spin.h => pppm_dipole_spin.h} (66%) diff --git a/doc/src/Eqs/pair_spin_long_range.jpg b/doc/src/Eqs/pair_spin_long_range.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bc133d10cf0a0a2a07db95afaf64961911f94084 GIT binary patch literal 11980 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 literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/pair_spin_long_range_magforce.tex b/doc/src/Eqs/pair_spin_long_range_magforce.tex new file mode 100644 index 0000000000..ad40cf9d8b --- /dev/null +++ b/doc/src/Eqs/pair_spin_long_range_magforce.tex @@ -0,0 +1,17 @@ +\documentclass[preview]{standalone} +\usepackage{varwidth} +\usepackage[utf8x]{inputenc} +\usepackage{amsmath,amssymb,graphics,bm,setspace} + +\begin{document} +\begin{varwidth}{50in} + \begin{equation} + \bm{\omega}_i = + \frac{\mu_0 (\mu_B)^2}{4\pi\hbar}\sum_{j} + \frac{g_i g_j}{r_{ij}^3} + \, \Big( + 3\,(\bm{e}_{ij}\cdot\bm{s}_{j})\bm{e}_{ij} + -\bm{s}_{j} \Big) \nonumber + \end{equation} +\end{varwidth} +\end{document} diff --git a/doc/src/pair_spin_long.txt b/doc/src/pair_spin_long.txt new file mode 100644 index 0000000000..c5b4a7b33e --- /dev/null +++ b/doc/src/pair_spin_long.txt @@ -0,0 +1,84 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +pair_style spin/long command :h3 + +[Syntax:] + +pair_style spin/long cutoff (cutoff) + +cutoff = global cutoff pair (distance in metal units) :ulb,l +:ule + +[Examples:] + +pair_style spin/long 10.0 +pair_coeff * * long 10.0 +pair_coeff 2 3 long 8.0 :pre + +[Description:] + +Style {pair/spin/long} computes interactions between pairs of particles +that each have a magnetic spin. + +:c,image(Eqs/pair_spin_long_range.jpg) + +where si and sj are two magnetic spins of two particles with Lande factors +gi and gj respectively, eij = (ri - rj)/|ri-rj| is the unit vector between +sites i and j, mu0 the vacuum permeability, muB the Bohr magneton (muB = +5.788 eV/T in metal units). + +Style {pair/spin/long} computes magnetic precession vectors: + +:c,image(Eqs/pair_spin_long_range_magforce.jpg) + +with h the Planck constant (in metal units), and a mechanical force: + +:c,image(Eqs/pair_spin_long_range_force.jpg) + + +The following coefficient must be defined for each pair of atoms +types via the "pair_coeff"_pair_coeff.html command as in the examples +above, or in the data file or restart files read by the +"read_data"_read_data.html or "read_restart"_read_restart.html +commands, or by mixing as described below: + +rc (distance units) :ul + +with rc is the radius cutoff of the short-range component of the +long-range interaction (see "(Cerda)"_#Cerda1 for more +explanation). + +:line + +[Restrictions:] + +The {pair/spin/long} style is part of the SPIN package. It is only +enabled if LAMMPS was built with that package. See the +"Making LAMMPS"_Section_start.html#start_3 section for more info. + +The {pair/spin/long} style computes the short-range component of +the dipole-dipole interaction. The functions evaluating the +long-range component are part of the KSPACE package. +They can be enabled only if LAMMPS was built with that package. + +[Related commands:] + +"atom_style spin"_atom_style.html, "pair_coeff"_pair_coeff.html, + +[Default:] none + +:line + +:link(Tranchida6) +[(Tranchida)] Tranchida, Plimpton, Thibaudeau and Thompson, +Journal of Computational Physics, (2018). + +:link(Cerda1) +[(Cerda)] Cerda, Ballenegger, Lenz, and Holm, J Chem Phys, 129(23), +234104 (2008). diff --git a/src/KSPACE/pppm_spin.cpp b/src/KSPACE/pppm_dipole.cpp similarity index 67% rename from src/KSPACE/pppm_spin.cpp rename to src/KSPACE/pppm_dipole.cpp index 9b59f9cd7b..a03f5b9980 100644 --- a/src/KSPACE/pppm_spin.cpp +++ b/src/KSPACE/pppm_dipole.cpp @@ -21,7 +21,7 @@ #include #include #include -#include "pppm_spin.h" +#include "pppm_dipole.h" #include "atom.h" #include "comm.h" #include "gridcomm.h" @@ -50,8 +50,8 @@ using namespace MathSpecial; #define SMALL 0.00001 #define EPS_HOC 1.0e-7 -enum{REVERSE_SP}; -enum{FORWARD_SP,FORWARD_SP_PERATOM}; +enum{REVERSE_MU}; +enum{FORWARD_MU,FORWARD_MU_PERATOM}; #ifdef FFT_SINGLE #define ZEROF 0.0f @@ -63,34 +63,34 @@ enum{FORWARD_SP,FORWARD_SP_PERATOM}; /* ---------------------------------------------------------------------- */ -PPPMSpin::PPPMSpin(LAMMPS *lmp, int narg, char **arg) : PPPM(lmp, narg, arg), - densityx_brick_spin(NULL), densityy_brick_spin(NULL), - densityz_brick_spin(NULL), ux_brick_spin(NULL), - uy_brick_spin(NULL), uz_brick_spin(NULL), vdxx_brick_spin(NULL), - vdxy_brick_spin(NULL), vdyy_brick_spin(NULL), - vdxz_brick_spin(NULL), vdyz_brick_spin(NULL), - vdzz_brick_spin(NULL), v0x_brick_spin(NULL), v1x_brick_spin(NULL), - v2x_brick_spin(NULL), v3x_brick_spin(NULL), v4x_brick_spin(NULL), - v5x_brick_spin(NULL), v0y_brick_spin(NULL), v1y_brick_spin(NULL), - v2y_brick_spin(NULL), v3y_brick_spin(NULL), v4y_brick_spin(NULL), - v5y_brick_spin(NULL), v0z_brick_spin(NULL), v1z_brick_spin(NULL), - v2z_brick_spin(NULL), v3z_brick_spin(NULL), v4z_brick_spin(NULL), - v5z_brick_spin(NULL), work3(NULL), work4(NULL), - densityx_fft_spin(NULL), densityy_fft_spin(NULL), - densityz_fft_spin(NULL) +PPPMDipole::PPPMDipole(LAMMPS *lmp, int narg, char **arg) : PPPM(lmp, narg, arg), + densityx_brick_dipole(NULL), densityy_brick_dipole(NULL), + densityz_brick_dipole(NULL), ux_brick_dipole(NULL), + uy_brick_dipole(NULL), uz_brick_dipole(NULL), vdxx_brick_dipole(NULL), + vdxy_brick_dipole(NULL), vdyy_brick_dipole(NULL), + vdxz_brick_dipole(NULL), vdyz_brick_dipole(NULL), + vdzz_brick_dipole(NULL), v0x_brick_dipole(NULL), v1x_brick_dipole(NULL), + v2x_brick_dipole(NULL), v3x_brick_dipole(NULL), v4x_brick_dipole(NULL), + v5x_brick_dipole(NULL), v0y_brick_dipole(NULL), v1y_brick_dipole(NULL), + v2y_brick_dipole(NULL), v3y_brick_dipole(NULL), v4y_brick_dipole(NULL), + v5y_brick_dipole(NULL), v0z_brick_dipole(NULL), v1z_brick_dipole(NULL), + v2z_brick_dipole(NULL), v3z_brick_dipole(NULL), v4z_brick_dipole(NULL), + v5z_brick_dipole(NULL), work3(NULL), work4(NULL), + densityx_fft_dipole(NULL), densityy_fft_dipole(NULL), + densityz_fft_dipole(NULL) { - spinflag = 1; + dipoleflag = 1; group_group_enable = 0; - cg_spin = NULL; - cg_peratom_spin = NULL; + cg_dipole = NULL; + cg_peratom_dipole = NULL; } /* ---------------------------------------------------------------------- free all memory ------------------------------------------------------------------------- */ -PPPMSpin::~PPPMSpin() +PPPMDipole::~PPPMDipole() { if (copymode) return; @@ -99,23 +99,26 @@ PPPMSpin::~PPPMSpin() fft1 = NULL; fft2 = NULL; remap = NULL; - cg_spin = NULL; + cg_dipole = NULL; } /* ---------------------------------------------------------------------- called once before run ------------------------------------------------------------------------- */ -void PPPMSpin::init() +void PPPMDipole::init() { if (me == 0) { - if (screen) fprintf(screen,"PPPMSpin initialization ...\n"); - if (logfile) fprintf(logfile,"PPPMSpin initialization ...\n"); + if (screen) fprintf(screen,"PPPMDipole initialization ...\n"); + if (logfile) fprintf(logfile,"PPPMDipole initialization ...\n"); } // error check - spinflag = atom->sp?1:0; + dipoleflag = atom->mu?1:0; + qsum_qsq(0); + if (dipoleflag && q2) + error->all(FLERR,"Cannot (yet) uses charges with Kspace style PPPMDipole"); triclinic_check(); @@ -123,30 +126,30 @@ void PPPMSpin::init() error->all(FLERR,"Must redefine kspace_style after changing to triclinic box"); if (domain->dimension == 2) error->all(FLERR, - "Cannot use PPPMSpin with 2d simulation"); + "Cannot use PPPMDipole with 2d simulation"); if (comm->style != 0) - error->universe_all(FLERR,"PPPMSpin can only currently be used with " + error->universe_all(FLERR,"PPPMDipole can only currently be used with " "comm_style brick"); - if (!atom->sp) error->all(FLERR,"Kspace style requires atom attribute sp"); + if (!atom->mu) error->all(FLERR,"Kspace style requires atom attribute mu"); - if (atom->sp && differentiation_flag == 1) error->all(FLERR,"Cannot (yet) use kspace_modify diff" - " ad with spins"); + if (atom->mu && differentiation_flag == 1) error->all(FLERR,"Cannot (yet) use kspace_modify diff" + " ad with dipoles"); - if (spinflag && strcmp(update->unit_style,"metal") != 0) - error->all(FLERR,"'metal' units have to be used with spins"); + if (dipoleflag && strcmp(update->unit_style,"electron") == 0) + error->all(FLERR,"Cannot (yet) use 'electron' units with dipoles"); if (slabflag == 0 && domain->nonperiodic > 0) - error->all(FLERR,"Cannot use nonperiodic boundaries with PPPMSpin"); + error->all(FLERR,"Cannot use nonperiodic boundaries with PPPMDipole"); if (slabflag) { if (domain->xperiodic != 1 || domain->yperiodic != 1 || domain->boundary[2][0] != 1 || domain->boundary[2][1] != 1) - error->all(FLERR,"Incorrect boundaries with slab PPPMSpin"); + error->all(FLERR,"Incorrect boundaries with slab PPPMDipole"); } if (order < 2 || order > MAXORDER) { char str[128]; - sprintf(str,"PPPMSpin order cannot be < 2 or > than %d",MAXORDER); + sprintf(str,"PPPMDipole order cannot be < 2 or > than %d",MAXORDER); error->all(FLERR,str); } @@ -154,7 +157,7 @@ void PPPMSpin::init() triclinic = domain->triclinic; if (triclinic) - error->all(FLERR,"Cannot yet use triclinic cells with PPPMSpin"); + error->all(FLERR,"Cannot yet use triclinic cells with PPPMDipole"); pair_check(); @@ -167,21 +170,17 @@ void PPPMSpin::init() // kspace TIP4P not yet supported if (tip4pflag) - error->all(FLERR,"Cannot yet use TIP4P with PPPMSpin"); + error->all(FLERR,"Cannot yet use TIP4P with PPPMDipole"); + + // compute qsum & qsqsum and warn if not charge-neutral scale = 1.0; - hbar = force->hplanck/MY_2PI; // eV/(rad.THz) - mub = 5.78901e-5; // in eV/T - mu_0 = 1.2566370614e-6; // in T.m/A - mub2mu0 = mub * mub * mu_0; // in eV - mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz - spsum_spsq(); + qqrd2e = force->qqrd2e; + musum_musq(); natoms_original = atom->natoms; // set accuracy (force units) from accuracy_relative or accuracy_absolute - // is two_charge_force still relevant for spin systems? - if (accuracy_absolute >= 0.0) accuracy = accuracy_absolute; else accuracy = accuracy_relative * two_charge_force; @@ -203,11 +202,11 @@ void PPPMSpin::init() while (order >= minorder) { if (iteration && me == 0) - error->warning(FLERR,"Reducing PPPMSpin order b/c stencil extends " + error->warning(FLERR,"Reducing PPPMDipole order b/c stencil extends " "beyond nearest neighbor processor"); compute_gf_denom(); - set_grid_global(); + set_grid_global(mu2); set_grid_local(); if (overlap_allowed) break; @@ -224,9 +223,9 @@ void PPPMSpin::init() iteration++; } - if (order < minorder) error->all(FLERR,"PPPMSpin order < minimum allowed order"); + if (order < minorder) error->all(FLERR,"PPPMDipole order < minimum allowed order"); if (!overlap_allowed && cgtmp->ghost_overlap()) - error->all(FLERR,"PPPMSpin grid stencil extends " + error->all(FLERR,"PPPMDipole grid stencil extends " "beyond nearest neighbor processor"); if (cgtmp) delete cgtmp; @@ -236,7 +235,7 @@ void PPPMSpin::init() // calculate the final accuracy - double estimated_accuracy = final_accuracy_spin(); + double estimated_accuracy = final_accuracy_dipole(mu2); // print stats @@ -282,10 +281,10 @@ void PPPMSpin::init() // don't invoke allocate peratom(), will be allocated when needed allocate(); - cg_spin->ghost_notify(); - cg_spin->setup(); + cg_dipole->ghost_notify(); + cg_dipole->setup(); - // pre-compute Green's function denominator expansion + // pre-compute Green's function denomiator expansion // pre-compute 1d charge distribution coefficients compute_gf_denom(); @@ -293,27 +292,27 @@ void PPPMSpin::init() } /* ---------------------------------------------------------------------- - adjust PPPMSpin coeffs, called initially and whenever volume has changed + adjust PPPMDipole coeffs, called initially and whenever volume has changed ------------------------------------------------------------------------- */ -void PPPMSpin::setup() +void PPPMDipole::setup() { // perform some checks to avoid illegal boundaries with read_data if (slabflag == 0 && domain->nonperiodic > 0) - error->all(FLERR,"Cannot use nonperiodic boundaries with PPPMSpin"); + error->all(FLERR,"Cannot use nonperiodic boundaries with PPPMDipole"); if (slabflag) { if (domain->xperiodic != 1 || domain->yperiodic != 1 || domain->boundary[2][0] != 1 || domain->boundary[2][1] != 1) - error->all(FLERR,"Incorrect boundaries with slab PPPMSpin"); + error->all(FLERR,"Incorrect boundaries with slab PPPMDipole"); } int i,j,k,n; double *prd; // volume-dependent factors - // adjust z dimension for 2d slab PPPMSpin - // z dimension for 3d PPPMSpin is zprd since slab_volfactor = 1.0 + // adjust z dimension for 2d slab PPPMDipole + // z dimension for 3d PPPMDipole is zprd since slab_volfactor = 1.0 prd = domain->prd; double xprd = prd[0]; @@ -381,7 +380,7 @@ void PPPMSpin::setup() } } - compute_gf_spin(); + compute_gf_dipole(); } /* ---------------------------------------------------------------------- @@ -389,7 +388,7 @@ void PPPMSpin::setup() called by fix balance b/c it changed sizes of processor sub-domains ------------------------------------------------------------------------- */ -void PPPMSpin::setup_grid() +void PPPMDipole::setup_grid() { // free all arrays previously allocated @@ -406,11 +405,11 @@ void PPPMSpin::setup_grid() allocate(); - cg_spin->ghost_notify(); - if (overlap_allowed == 0 && cg_spin->ghost_overlap()) - error->all(FLERR,"PPPMSpin grid stencil extends " + cg_dipole->ghost_notify(); + if (overlap_allowed == 0 && cg_dipole->ghost_overlap()) + error->all(FLERR,"PPPMDipole grid stencil extends " "beyond nearest neighbor processor"); - cg_spin->setup(); + cg_dipole->setup(); // pre-compute Green's function denomiator expansion // pre-compute 1d charge distribution coefficients @@ -424,10 +423,10 @@ void PPPMSpin::setup_grid() } /* ---------------------------------------------------------------------- - compute the PPPMSpin long-range force, energy, virial + compute the PPPMDipole long-range force, energy, virial ------------------------------------------------------------------------- */ -void PPPMSpin::compute(int eflag, int vflag) +void PPPMDipole::compute(int eflag, int vflag) { int i,j; @@ -440,20 +439,20 @@ void PPPMSpin::compute(int eflag, int vflag) if (evflag_atom && !peratom_allocate_flag) { allocate_peratom(); - cg_peratom_spin->ghost_notify(); - cg_peratom_spin->setup(); + cg_peratom_dipole->ghost_notify(); + cg_peratom_dipole->setup(); } // if atom count has changed, update qsum and qsqsum if (atom->natoms != natoms_original) { - spsum_spsq(); + musum_musq(); natoms_original = atom->natoms; } - // return if there are no spins + // return if there are no dipoles - if (spsqsum == 0.0) return; + if (musqsum == 0.0) return; // convert atoms from box to lamda coords @@ -464,51 +463,51 @@ void PPPMSpin::compute(int eflag, int vflag) if (atom->nmax > nmax) { memory->destroy(part2grid); nmax = atom->nmax; - memory->create(part2grid,nmax,3,"pppm_spin:part2grid"); + memory->create(part2grid,nmax,3,"pppm_dipole:part2grid"); } // find grid points for all my particles - // map my particle charge onto my local 3d on-grid density + // map my particle charge onto my local 3d density grid particle_map(); - make_rho_spin(); + make_rho_dipole(); // all procs communicate density values from their ghost cells // to fully sum contribution in their 3d bricks // remap from 3d decomposition to FFT decomposition - cg_spin->reverse_comm(this,REVERSE_SP); - brick2fft_spin(); + cg_dipole->reverse_comm(this,REVERSE_MU); + brick2fft_dipole(); // compute potential gradient on my FFT grid and // portion of e_long on this proc's FFT grid // return gradients (electric fields) in 3d brick decomposition // also performs per-atom calculations via poisson_peratom() - poisson_ik_spin(); + poisson_ik_dipole(); // all procs communicate E-field values // to fill ghost cells surrounding their 3d bricks - cg_spin->forward_comm(this,FORWARD_SP); + cg_dipole->forward_comm(this,FORWARD_MU); // extra per-atom energy/virial communication if (evflag_atom) { - cg_peratom_spin->forward_comm(this,FORWARD_SP_PERATOM); + cg_peratom_dipole->forward_comm(this,FORWARD_MU_PERATOM); } // calculate the force on my particles - fieldforce_ik_spin(); + fieldforce_ik_dipole(); // extra per-atom energy/virial communication - if (evflag_atom) fieldforce_peratom_spin(); + if (evflag_atom) fieldforce_peratom_dipole(); // sum global energy across procs and add in volume-dependent term - const double spscale = mub2mu0 * scale; + const double qscale = qqrd2e * scale; const double g3 = g_ewald*g_ewald*g_ewald; if (eflag_global) { @@ -517,8 +516,8 @@ void PPPMSpin::compute(int eflag, int vflag) energy = energy_all; energy *= 0.5*volume; - energy -= spsqsum*2.0*g3/3.0/MY_PIS; - energy *= spscale; + energy -= musqsum*2.0*g3/3.0/MY_PIS; + energy *= qscale; } // sum global virial across procs @@ -526,32 +525,29 @@ void PPPMSpin::compute(int eflag, int vflag) if (vflag_global) { double virial_all[6]; MPI_Allreduce(virial,virial_all,6,MPI_DOUBLE,MPI_SUM,world); - for (i = 0; i < 6; i++) virial[i] = 0.5*spscale*volume*virial_all[i]; + for (i = 0; i < 6; i++) virial[i] = 0.5*qscale*volume*virial_all[i]; } // per-atom energy/virial // energy includes self-energy correction if (evflag_atom) { - double **sp = atom->sp; - double spx,spy,spz; + double *q = atom->q; + double **mu = atom->mu; int nlocal = atom->nlocal; int ntotal = nlocal; if (eflag_atom) { for (i = 0; i < nlocal; i++) { - spx = sp[i][0]*sp[i][3]; - spy = sp[i][1]*sp[i][3]; - spz = sp[i][2]*sp[i][3]; eatom[i] *= 0.5; - eatom[i] -= (spx*spx + spy*spy + spz*spz)*2.0*g3/3.0/MY_PIS; - eatom[i] *= spscale; + eatom[i] -= (mu[i][0]*mu[i][0] + mu[i][1]*mu[i][1] + mu[i][2]*mu[i][2])*2.0*g3/3.0/MY_PIS; + eatom[i] *= qscale; } } if (vflag_atom) { for (i = 0; i < ntotal; i++) - for (j = 0; j < 6; j++) vatom[i][j] *= 0.5*spscale; + for (j = 0; j < 6; j++) vatom[i][j] *= 0.5*qscale; } } @@ -564,59 +560,59 @@ void PPPMSpin::compute(int eflag, int vflag) allocate memory that depends on # of K-vectors and order ------------------------------------------------------------------------- */ -void PPPMSpin::allocate() +void PPPMDipole::allocate() { - memory->create3d_offset(densityx_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:densityx_brick_spin"); - memory->create3d_offset(densityy_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:densityy_brick_spin"); - memory->create3d_offset(densityz_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:densityz_brick_spin"); + memory->create3d_offset(densityx_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:densityx_brick_dipole"); + memory->create3d_offset(densityy_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:densityy_brick_dipole"); + memory->create3d_offset(densityz_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:densityz_brick_dipole"); - memory->create(densityx_fft_spin,nfft_both,"pppm_spin:densityy_fft_spin"); - memory->create(densityy_fft_spin,nfft_both,"pppm_spin:densityy_fft_spin"); - memory->create(densityz_fft_spin,nfft_both,"pppm_spin:densityz_fft_spin"); + memory->create(densityx_fft_dipole,nfft_both,"pppm_dipole:densityy_fft_dipole"); + memory->create(densityy_fft_dipole,nfft_both,"pppm_dipole:densityy_fft_dipole"); + memory->create(densityz_fft_dipole,nfft_both,"pppm_dipole:densityz_fft_dipole"); - memory->create(greensfn,nfft_both,"pppm_spin:greensfn"); - memory->create(work1,2*nfft_both,"pppm_spin:work1"); - memory->create(work2,2*nfft_both,"pppm_spin:work2"); - memory->create(work3,2*nfft_both,"pppm_spin:work3"); - memory->create(work4,2*nfft_both,"pppm_spin:work4"); - memory->create(vg,nfft_both,6,"pppm_spin:vg"); + memory->create(greensfn,nfft_both,"pppm_dipole:greensfn"); + memory->create(work1,2*nfft_both,"pppm_dipole:work1"); + memory->create(work2,2*nfft_both,"pppm_dipole:work2"); + memory->create(work3,2*nfft_both,"pppm_dipole:work3"); + memory->create(work4,2*nfft_both,"pppm_dipole:work4"); + memory->create(vg,nfft_both,6,"pppm_dipole:vg"); - memory->create1d_offset(fkx,nxlo_fft,nxhi_fft,"pppm_spin:fkx"); - memory->create1d_offset(fky,nylo_fft,nyhi_fft,"pppm_spin:fky"); - memory->create1d_offset(fkz,nzlo_fft,nzhi_fft,"pppm_spin:fkz"); + memory->create1d_offset(fkx,nxlo_fft,nxhi_fft,"pppm_dipole:fkx"); + memory->create1d_offset(fky,nylo_fft,nyhi_fft,"pppm_dipole:fky"); + memory->create1d_offset(fkz,nzlo_fft,nzhi_fft,"pppm_dipole:fkz"); - memory->create3d_offset(ux_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:ux_brick_spin"); - memory->create3d_offset(uy_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:uy_brick_spin"); - memory->create3d_offset(uz_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:uz_brick_spin"); + memory->create3d_offset(ux_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:ux_brick_dipole"); + memory->create3d_offset(uy_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:uy_brick_dipole"); + memory->create3d_offset(uz_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:uz_brick_dipole"); - memory->create3d_offset(vdxx_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:vdxx_brick_spin"); - memory->create3d_offset(vdxy_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:vdxy_brick_spin"); - memory->create3d_offset(vdyy_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:vdyy_brick_spin"); - memory->create3d_offset(vdxz_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:vdxz_brick_spin"); - memory->create3d_offset(vdyz_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:vdyz_brick_spin"); - memory->create3d_offset(vdzz_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:vdzz_brick_spin"); + memory->create3d_offset(vdxx_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:vdxx_brick_dipole"); + memory->create3d_offset(vdxy_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:vdxy_brick_dipole"); + memory->create3d_offset(vdyy_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:vdyy_brick_dipole"); + memory->create3d_offset(vdxz_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:vdxz_brick_dipole"); + memory->create3d_offset(vdyz_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:vdyz_brick_dipole"); + memory->create3d_offset(vdzz_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:vdzz_brick_dipole"); // summation coeffs order_allocated = order; - memory->create(gf_b,order,"pppm_spin:gf_b"); - memory->create2d_offset(rho1d,3,-order/2,order/2,"pppm_spin:rho1d"); - memory->create2d_offset(drho1d,3,-order/2,order/2,"pppm_spin:drho1d"); - memory->create2d_offset(rho_coeff,order,(1-order)/2,order/2,"pppm_spin:rho_coeff"); + memory->create(gf_b,order,"pppm_dipole:gf_b"); + memory->create2d_offset(rho1d,3,-order/2,order/2,"pppm_dipole:rho1d"); + memory->create2d_offset(drho1d,3,-order/2,order/2,"pppm_dipole:drho1d"); + memory->create2d_offset(rho_coeff,order,(1-order)/2,order/2,"pppm_dipole:rho_coeff"); memory->create2d_offset(drho_coeff,order,(1-order)/2,order/2, - "pppm_spin:drho_coeff"); + "pppm_dipole:drho_coeff"); // create 2 FFTs and a Remap // 1st FFT keeps data in FFT decompostion @@ -644,7 +640,7 @@ void PPPMSpin::allocate() int (*procneigh)[2] = comm->procneigh; - cg_spin = new GridComm(lmp,world,9,3, + cg_dipole = new GridComm(lmp,world,9,3, nxlo_in,nxhi_in,nylo_in,nyhi_in,nzlo_in,nzhi_in, nxlo_out,nxhi_out,nylo_out,nyhi_out,nzlo_out,nzhi_out, procneigh[0][0],procneigh[0][1],procneigh[1][0], @@ -655,26 +651,26 @@ void PPPMSpin::allocate() deallocate memory that depends on # of K-vectors and order ------------------------------------------------------------------------- */ -void PPPMSpin::deallocate() +void PPPMDipole::deallocate() { - memory->destroy3d_offset(densityx_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(densityy_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(densityz_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(densityx_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(densityy_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(densityz_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(ux_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(uy_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(uz_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(ux_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(uy_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(uz_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(vdxx_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(vdxy_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(vdyy_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(vdxz_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(vdyz_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(vdzz_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(vdxx_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(vdxy_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(vdyy_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(vdxz_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(vdyz_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(vdzz_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy(densityx_fft_spin); - memory->destroy(densityy_fft_spin); - memory->destroy(densityz_fft_spin); + memory->destroy(densityx_fft_dipole); + memory->destroy(densityy_fft_dipole); + memory->destroy(densityz_fft_dipole); memory->destroy(greensfn); memory->destroy(work1); @@ -696,61 +692,61 @@ void PPPMSpin::deallocate() delete fft1; delete fft2; delete remap; - delete cg_spin; + delete cg_dipole; } /* ---------------------------------------------------------------------- allocate per-atom memory that depends on # of K-vectors and order ------------------------------------------------------------------------- */ -void PPPMSpin::allocate_peratom() +void PPPMDipole::allocate_peratom() { peratom_allocate_flag = 1; - memory->create3d_offset(v0x_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:v0x_brick_spin"); - memory->create3d_offset(v1x_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:v1x_brick_spin"); - memory->create3d_offset(v2x_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:v2x_brick_spin"); - memory->create3d_offset(v3x_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:v3x_brick_spin"); - memory->create3d_offset(v4x_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:v4x_brick_spin"); - memory->create3d_offset(v5x_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:v5x_brick_spin"); + memory->create3d_offset(v0x_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v0x_brick_dipole"); + memory->create3d_offset(v1x_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v1x_brick_dipole"); + memory->create3d_offset(v2x_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v2x_brick_dipole"); + memory->create3d_offset(v3x_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v3x_brick_dipole"); + memory->create3d_offset(v4x_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v4x_brick_dipole"); + memory->create3d_offset(v5x_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v5x_brick_dipole"); - memory->create3d_offset(v0y_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:v0y_brick_spin"); - memory->create3d_offset(v1y_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:v1y_brick_spin"); - memory->create3d_offset(v2y_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:v2y_brick_spin"); - memory->create3d_offset(v3y_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:v3y_brick_spin"); - memory->create3d_offset(v4y_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:v4y_brick_spin"); - memory->create3d_offset(v5y_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:v5y_brick_spin"); + memory->create3d_offset(v0y_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v0y_brick_dipole"); + memory->create3d_offset(v1y_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v1y_brick_dipole"); + memory->create3d_offset(v2y_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v2y_brick_dipole"); + memory->create3d_offset(v3y_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v3y_brick_dipole"); + memory->create3d_offset(v4y_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v4y_brick_dipole"); + memory->create3d_offset(v5y_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v5y_brick_dipole"); - memory->create3d_offset(v0z_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:v0z_brick_spin"); - memory->create3d_offset(v1z_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:v1z_brick_spin"); - memory->create3d_offset(v2z_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:v2z_brick_spin"); - memory->create3d_offset(v3z_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:v3z_brick_spin"); - memory->create3d_offset(v4z_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:v4z_brick_spin"); - memory->create3d_offset(v5z_brick_spin,nzlo_out,nzhi_out,nylo_out,nyhi_out, - nxlo_out,nxhi_out,"pppm_spin:v5z_brick_spin"); + memory->create3d_offset(v0z_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v0z_brick_dipole"); + memory->create3d_offset(v1z_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v1z_brick_dipole"); + memory->create3d_offset(v2z_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v2z_brick_dipole"); + memory->create3d_offset(v3z_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v3z_brick_dipole"); + memory->create3d_offset(v4z_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v4z_brick_dipole"); + memory->create3d_offset(v5z_brick_dipole,nzlo_out,nzhi_out,nylo_out,nyhi_out, + nxlo_out,nxhi_out,"pppm_dipole:v5z_brick_dipole"); // create ghost grid object for rho and electric field communication int (*procneigh)[2] = comm->procneigh; - cg_peratom_spin = + cg_peratom_dipole = new GridComm(lmp,world,18,1, nxlo_in,nxhi_in,nylo_in,nyhi_in,nzlo_in,nzhi_in, nxlo_out,nxhi_out,nylo_out,nyhi_out,nzlo_out,nzhi_out, @@ -762,44 +758,44 @@ void PPPMSpin::allocate_peratom() deallocate per-atom memory that depends on # of K-vectors and order ------------------------------------------------------------------------- */ -void PPPMSpin::deallocate_peratom() +void PPPMDipole::deallocate_peratom() { peratom_allocate_flag = 0; - memory->destroy3d_offset(v0x_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v1x_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v2x_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v3x_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v4x_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v5x_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v0x_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v1x_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v2x_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v3x_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v4x_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v5x_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v0y_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v1y_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v2y_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v3y_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v4y_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v5y_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v0y_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v1y_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v2y_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v3y_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v4y_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v5y_brick_dipole,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v0z_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v1z_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v2z_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v3z_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v4z_brick_spin,nzlo_out,nylo_out,nxlo_out); - memory->destroy3d_offset(v5z_brick_spin,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v0z_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v1z_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v2z_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v3z_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v4z_brick_dipole,nzlo_out,nylo_out,nxlo_out); + memory->destroy3d_offset(v5z_brick_dipole,nzlo_out,nylo_out,nxlo_out); - delete cg_peratom_spin; + delete cg_peratom_dipole; } /* ---------------------------------------------------------------------- - set global size of PPPMSpin grid = nx,ny,nz_pppm + set global size of PPPMDipole grid = nx,ny,nz_pppm used for charge accumulation, FFTs, and electric field interpolation ------------------------------------------------------------------------- */ -void PPPMSpin::set_grid_global() +void PPPMDipole::set_grid_global(double dipole2) { // use xprd,yprd,zprd - // adjust z dimension for 2d slab PPPMSpin - // 3d PPPMSpin just uses zprd since slab_volfactor = 1.0 + // adjust z dimension for 2d slab PPPMDipole + // 3d PPPMDipole just uses zprd since slab_volfactor = 1.0 double xprd = domain->xprd; double yprd = domain->yprd; @@ -817,14 +813,16 @@ void PPPMSpin::set_grid_global() if (!gewaldflag) { if (accuracy <= 0.0) error->all(FLERR,"KSpace accuracy must be > 0"); - if (sp2 == 0.0) - error->all(FLERR,"Must use kspace_modify gewald for systems with no spins"); + //if (mu2 == 0.0) + if (dipole2 == 0.0) + error->all(FLERR,"Must use kspace_modify gewald for systems with no dipoles"); g_ewald = (1.35 - 0.15*log(accuracy))/cutoff; //Try Newton Solver double g_ewald_new = - find_gewald_spin(g_ewald,cutoff,natoms,xprd*yprd*zprd,sp2); + find_gewald_dipole(g_ewald,cutoff,natoms,xprd*yprd*zprd,dipole2); + //find_gewald_dipole(g_ewald,cutoff,natoms,xprd*yprd*zprd,mu2); if (g_ewald_new > 0.0) g_ewald = g_ewald_new; - else error->warning(FLERR,"PPPMSpin spin Newton solver failed, " + else error->warning(FLERR,"PPPMDipole dipole Newton solver failed, " "using old method to estimate g_ewald"); } @@ -864,7 +862,7 @@ void PPPMSpin::set_grid_global() nzlo_fft = me_z*nz_pppm/npez_fft; nzhi_fft = (me_z+1)*nz_pppm/npez_fft - 1; - double df_kspace = compute_df_kspace_spin(); + double df_kspace = compute_df_kspace_dipole(dipole2); count++; @@ -889,31 +887,32 @@ void PPPMSpin::set_grid_global() h_z = zprd_slab/nz_pppm; if (nx_pppm >= OFFSET || ny_pppm >= OFFSET || nz_pppm >= OFFSET) - error->all(FLERR,"PPPMSpin grid is too large"); + error->all(FLERR,"PPPMDipole grid is too large"); } /* ---------------------------------------------------------------------- - compute estimated kspace force error for spins + compute estimated kspace force error for dipoles ------------------------------------------------------------------------- */ -double PPPMSpin::compute_df_kspace_spin() +double PPPMDipole::compute_df_kspace_dipole(double dipole2) { double xprd = domain->xprd; double yprd = domain->yprd; double zprd = domain->zprd; double zprd_slab = zprd*slab_volfactor; bigint natoms = atom->natoms; - double qopt = compute_qopt_spin(); - double df_kspace = sqrt(qopt/natoms)*sp2/(3.0*xprd*yprd*zprd_slab); + double qopt = compute_qopt_dipole(); + //double df_kspace = sqrt(qopt/natoms)*mu2/(3.0*xprd*yprd*zprd_slab); + double df_kspace = sqrt(qopt/natoms)*dipole2/(3.0*xprd*yprd*zprd_slab); return df_kspace; } /* ---------------------------------------------------------------------- - compute qopt for spins with ik differentiation + compute qopt for dipoles with ik differentiation ------------------------------------------------------------------------- */ -double PPPMSpin::compute_qopt_spin() +double PPPMDipole::compute_qopt_dipole() { double qopt = 0.0; const double * const prd = domain->prd; @@ -984,7 +983,7 @@ double PPPMSpin::compute_qopt_spin() dot1 = unitkx*kper*qx + unitky*lper*qy + unitkz*mper*qz; dot2 = qx*qx + qy*qy + qz*qz; - //dot1 = dot1*dot1*dot1; // power of 3 for spin forces + //dot1 = dot1*dot1*dot1; // power of 3 for dipole forces //dot2 = dot2*dot2*dot2; u1 = sx*sy*sz; const double w2 = wx*wy*wz; @@ -1009,7 +1008,7 @@ double PPPMSpin::compute_qopt_spin() pre-compute modified (Hockney-Eastwood) Coulomb Green's function ------------------------------------------------------------------------- */ -void PPPMSpin::compute_gf_spin() +void PPPMDipole::compute_gf_dipole() { const double * const prd = domain->prd; @@ -1102,34 +1101,34 @@ void PPPMSpin::compute_gf_spin() calculate f(x) for use in Newton-Raphson solver ------------------------------------------------------------------------- */ -double PPPMSpin::newton_raphson_f() -{ - double xprd = domain->xprd; - double yprd = domain->yprd; - double zprd = domain->zprd; - bigint natoms = atom->natoms; - - double df_rspace,df_kspace; - double vol = xprd*yprd*zprd; - double a = cutoff*g_ewald; - double rg2 = a*a; - double rg4 = rg2*rg2; - double rg6 = rg4*rg2; - double Cc = 4.0*rg4 + 6.0*rg2 + 3.0; - double Dc = 8.0*rg6 + 20.0*rg4 + 30.0*rg2 + 15.0; - df_rspace = (sp2/(sqrt(vol*powint(g_ewald,4)*powint(cutoff,9)*natoms)) * - sqrt(13.0/6.0*Cc*Cc + 2.0/15.0*Dc*Dc - 13.0/15.0*Cc*Dc) * exp(-rg2)); - df_kspace = compute_df_kspace_spin(); - - return df_rspace - df_kspace; -} +//double PPPMDipole::newton_raphson_f() +//{ +// double xprd = domain->xprd; +// double yprd = domain->yprd; +// double zprd = domain->zprd; +// bigint natoms = atom->natoms; +// +// double df_rspace,df_kspace; +// double vol = xprd*yprd*zprd; +// double a = cutoff*g_ewald; +// double rg2 = a*a; +// double rg4 = rg2*rg2; +// double rg6 = rg4*rg2; +// double Cc = 4.0*rg4 + 6.0*rg2 + 3.0; +// double Dc = 8.0*rg6 + 20.0*rg4 + 30.0*rg2 + 15.0; +// df_rspace = (mu2/(sqrt(vol*powint(g_ewald,4)*powint(cutoff,9)*natoms)) * +// sqrt(13.0/6.0*Cc*Cc + 2.0/15.0*Dc*Dc - 13.0/15.0*Cc*Dc) * exp(-rg2)); +// df_kspace = compute_df_kspace_dipole(); +// +// return df_rspace - df_kspace; +//} /* ---------------------------------------------------------------------- - find g_ewald parameter for spins based on desired accuracy + find g_ewald parameter for dipoles based on desired accuracy using a Newton-Raphson solver ------------------------------------------------------------------------- */ -double PPPMSpin::find_gewald_spin(double x, double Rc, +double PPPMDipole::find_gewald_dipole(double x, double Rc, bigint natoms, double vol, double b2) { double dx,tol; @@ -1141,7 +1140,7 @@ double PPPMSpin::find_gewald_spin(double x, double Rc, //Begin algorithm for (int i = 0; i < maxit; i++) { - dx = newton_raphson_f_spin(x,Rc,natoms,vol,b2) / derivf_spin(x,Rc,natoms,vol,b2); + dx = newton_raphson_f_dipole(x,Rc,natoms,vol,b2) / derivf_dipole(x,Rc,natoms,vol,b2); x = x - dx; //Update x if (fabs(dx) < tol) return x; if (x < 0 || x != x) // solver failed @@ -1151,10 +1150,10 @@ double PPPMSpin::find_gewald_spin(double x, double Rc, } /* ---------------------------------------------------------------------- - calculate f(x) objective function for spins + calculate f(x) objective function for dipoles ------------------------------------------------------------------------- */ -double PPPMSpin::newton_raphson_f_spin(double x, double Rc, bigint +double PPPMDipole::newton_raphson_f_dipole(double x, double Rc, bigint natoms, double vol, double b2) { double a = Rc*x; @@ -1171,21 +1170,21 @@ natoms, double vol, double b2) } /* ---------------------------------------------------------------------- - calculate numerical derivative f'(x) of objective function for spins + calculate numerical derivative f'(x) of objective function for dipoles ------------------------------------------------------------------------- */ -double PPPMSpin::derivf_spin(double x, double Rc, +double PPPMDipole::derivf_dipole(double x, double Rc, bigint natoms, double vol, double b2) { double h = 0.000001; //Derivative step-size - return (newton_raphson_f_spin(x + h,Rc,natoms,vol,b2) - newton_raphson_f_spin(x,Rc,natoms,vol,b2)) / h; + return (newton_raphson_f_dipole(x + h,Rc,natoms,vol,b2) - newton_raphson_f_dipole(x,Rc,natoms,vol,b2)) / h; } /* ---------------------------------------------------------------------- calculate the final estimate of the accuracy ------------------------------------------------------------------------- */ -double PPPMSpin::final_accuracy_spin() +double PPPMDipole::final_accuracy_dipole(double dipole2) { double xprd = domain->xprd; double yprd = domain->yprd; @@ -1194,7 +1193,7 @@ double PPPMSpin::final_accuracy_spin() bigint natoms = atom->natoms; if (natoms == 0) natoms = 1; // avoid division by zero - double df_kspace = compute_df_kspace_spin(); + double df_kspace = compute_df_kspace_dipole(mu2); double a = cutoff*g_ewald; double rg2 = a*a; @@ -1202,7 +1201,10 @@ double PPPMSpin::final_accuracy_spin() double rg6 = rg4*rg2; double Cc = 4.0*rg4 + 6.0*rg2 + 3.0; double Dc = 8.0*rg6 + 20.0*rg4 + 30.0*rg2 + 15.0; - double df_rspace = (sp2/(sqrt(vol*powint(g_ewald,4)*powint(cutoff,9)*natoms)) * + //double df_rspace = (mu2/(sqrt(vol*powint(g_ewald,4)*powint(cutoff,9)*natoms)) * + // sqrt(13.0/6.0*Cc*Cc + 2.0/15.0*Dc*Dc - 13.0/15.0*Cc*Dc) * + // exp(-rg2)); + double df_rspace = (dipole2/(sqrt(vol*powint(g_ewald,4)*powint(cutoff,9)*natoms)) * sqrt(13.0/6.0*Cc*Cc + 2.0/15.0*Dc*Dc - 13.0/15.0*Cc*Dc) * exp(-rg2)); @@ -1215,10 +1217,10 @@ double PPPMSpin::final_accuracy_spin() pre-compute Green's function denominator expansion coeffs, Gamma(2n) ------------------------------------------------------------------------- */ -void PPPMSpin::compute_gf_denom() +void PPPMDipole::compute_gf_denom() { if (gf_b) memory->destroy(gf_b); - memory->create(gf_b,order,"pppm_spin:gf_b"); + memory->create(gf_b,order,"pppm_dipole:gf_b"); int k,l,m; @@ -1244,7 +1246,7 @@ void PPPMSpin::compute_gf_denom() in global grid ------------------------------------------------------------------------- */ -void PPPMSpin::make_rho_spin() +void PPPMDipole::make_rho_dipole() { int l,m,n,nx,ny,nz,mx,my,mz; FFT_SCALAR dx,dy,dz; @@ -1254,11 +1256,11 @@ void PPPMSpin::make_rho_spin() // clear 3d density array - memset(&(densityx_brick_spin[nzlo_out][nylo_out][nxlo_out]),0, + memset(&(densityx_brick_dipole[nzlo_out][nylo_out][nxlo_out]),0, ngrid*sizeof(FFT_SCALAR)); - memset(&(densityy_brick_spin[nzlo_out][nylo_out][nxlo_out]),0, + memset(&(densityy_brick_dipole[nzlo_out][nylo_out][nxlo_out]),0, ngrid*sizeof(FFT_SCALAR)); - memset(&(densityz_brick_spin[nzlo_out][nylo_out][nxlo_out]),0, + memset(&(densityz_brick_dipole[nzlo_out][nylo_out][nxlo_out]),0, ngrid*sizeof(FFT_SCALAR)); // loop over my charges, add their contribution to nearby grid points @@ -1266,8 +1268,7 @@ void PPPMSpin::make_rho_spin() // (dx,dy,dz) = distance to "lower left" grid pt // (mx,my,mz) = global coords of moving stencil pt - double **sp = atom->sp; - double spx,spy,spz; + double **mu = atom->mu; double **x = atom->x; int nlocal = atom->nlocal; @@ -1282,12 +1283,9 @@ void PPPMSpin::make_rho_spin() compute_rho1d(dx,dy,dz); - spx = sp[i][0]*sp[i][3]; - spy = sp[i][1]*sp[i][3]; - spz = sp[i][2]*sp[i][3]; - z0 = delvolinv * spx; - z1 = delvolinv * spy; - z2 = delvolinv * spz; + z0 = delvolinv * mu[i][0]; + z1 = delvolinv * mu[i][1]; + z2 = delvolinv * mu[i][2]; for (n = nlower; n <= nupper; n++) { mz = n+nz; y0 = z0*rho1d[2][n]; @@ -1300,9 +1298,9 @@ void PPPMSpin::make_rho_spin() x2 = y2*rho1d[1][m]; for (l = nlower; l <= nupper; l++) { mx = l+nx; - densityx_brick_spin[mz][my][mx] += x0*rho1d[0][l]; - densityy_brick_spin[mz][my][mx] += x1*rho1d[0][l]; - densityz_brick_spin[mz][my][mx] += x2*rho1d[0][l]; + densityx_brick_dipole[mz][my][mx] += x0*rho1d[0][l]; + densityy_brick_dipole[mz][my][mx] += x1*rho1d[0][l]; + densityz_brick_dipole[mz][my][mx] += x2*rho1d[0][l]; } } } @@ -1313,7 +1311,7 @@ void PPPMSpin::make_rho_spin() remap density from 3d brick decomposition to FFT decomposition ------------------------------------------------------------------------- */ -void PPPMSpin::brick2fft_spin() +void PPPMDipole::brick2fft_dipole() { int n,ix,iy,iz; @@ -1325,36 +1323,36 @@ void PPPMSpin::brick2fft_spin() for (iz = nzlo_in; iz <= nzhi_in; iz++) for (iy = nylo_in; iy <= nyhi_in; iy++) for (ix = nxlo_in; ix <= nxhi_in; ix++) { - densityx_fft_spin[n] = densityx_brick_spin[iz][iy][ix]; - densityy_fft_spin[n] = densityy_brick_spin[iz][iy][ix]; - densityz_fft_spin[n] = densityz_brick_spin[iz][iy][ix]; + densityx_fft_dipole[n] = densityx_brick_dipole[iz][iy][ix]; + densityy_fft_dipole[n] = densityy_brick_dipole[iz][iy][ix]; + densityz_fft_dipole[n] = densityz_brick_dipole[iz][iy][ix]; n++; } - remap->perform(densityx_fft_spin,densityx_fft_spin,work1); - remap->perform(densityy_fft_spin,densityy_fft_spin,work1); - remap->perform(densityz_fft_spin,densityz_fft_spin,work1); + remap->perform(densityx_fft_dipole,densityx_fft_dipole,work1); + remap->perform(densityy_fft_dipole,densityy_fft_dipole,work1); + remap->perform(densityz_fft_dipole,densityz_fft_dipole,work1); } /* ---------------------------------------------------------------------- FFT-based Poisson solver for ik ------------------------------------------------------------------------- */ -void PPPMSpin::poisson_ik_spin() +void PPPMDipole::poisson_ik_dipole() { int i,j,k,n,ii; double eng; double wreal,wimg; - // transform spin density (r -> k) + // transform dipole density (r -> k) n = 0; for (i = 0; i < nfft; i++) { - work1[n] = densityx_fft_spin[i]; + work1[n] = densityx_fft_dipole[i]; work1[n+1] = ZEROF; - work2[n] = densityy_fft_spin[i]; + work2[n] = densityy_fft_dipole[i]; work2[n+1] = ZEROF; - work3[n] = densityz_fft_spin[i]; + work3[n] = densityz_fft_dipole[i]; work3[n+1] = ZEROF; n += 2; } @@ -1421,7 +1419,7 @@ void PPPMSpin::poisson_ik_spin() // extra FFTs for per-atom energy/virial - if (vflag_atom) poisson_peratom_spin(); + if (vflag_atom) poisson_peratom_dipole(); // compute electric potential // FFT leaves data in 3d brick decomposition @@ -1443,7 +1441,7 @@ void PPPMSpin::poisson_ik_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - ux_brick_spin[k][j][i] = work4[n]; + ux_brick_dipole[k][j][i] = work4[n]; n += 2; } @@ -1464,7 +1462,7 @@ void PPPMSpin::poisson_ik_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - uy_brick_spin[k][j][i] = work4[n]; + uy_brick_dipole[k][j][i] = work4[n]; n += 2; } @@ -1485,7 +1483,7 @@ void PPPMSpin::poisson_ik_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - uz_brick_spin[k][j][i] = work4[n]; + uz_brick_dipole[k][j][i] = work4[n]; n += 2; } @@ -1506,7 +1504,7 @@ void PPPMSpin::poisson_ik_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - vdxx_brick_spin[k][j][i] = work4[n]; + vdxx_brick_dipole[k][j][i] = work4[n]; n += 2; } @@ -1527,7 +1525,7 @@ void PPPMSpin::poisson_ik_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - vdyy_brick_spin[k][j][i] = work4[n]; + vdyy_brick_dipole[k][j][i] = work4[n]; n += 2; } @@ -1548,7 +1546,7 @@ void PPPMSpin::poisson_ik_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - vdzz_brick_spin[k][j][i] = work4[n]; + vdzz_brick_dipole[k][j][i] = work4[n]; n += 2; } @@ -1569,7 +1567,7 @@ void PPPMSpin::poisson_ik_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - vdxy_brick_spin[k][j][i] = work4[n]; + vdxy_brick_dipole[k][j][i] = work4[n]; n += 2; } @@ -1590,7 +1588,7 @@ void PPPMSpin::poisson_ik_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - vdxz_brick_spin[k][j][i] = work4[n]; + vdxz_brick_dipole[k][j][i] = work4[n]; n += 2; } @@ -1611,7 +1609,7 @@ void PPPMSpin::poisson_ik_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - vdyz_brick_spin[k][j][i] = work4[n]; + vdyz_brick_dipole[k][j][i] = work4[n]; n += 2; } } @@ -1620,7 +1618,7 @@ void PPPMSpin::poisson_ik_spin() FFT-based Poisson solver for per-atom energy/virial ------------------------------------------------------------------------- */ -void PPPMSpin::poisson_peratom_spin() +void PPPMDipole::poisson_peratom_dipole() { int i,ii,j,k,n; @@ -1647,7 +1645,7 @@ void PPPMSpin::poisson_peratom_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v0x_brick_spin[k][j][i] = work4[n]; + v0x_brick_dipole[k][j][i] = work4[n]; n += 2; } @@ -1670,7 +1668,7 @@ void PPPMSpin::poisson_peratom_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v0y_brick_spin[k][j][i] = work4[n]; + v0y_brick_dipole[k][j][i] = work4[n]; n += 2; } @@ -1693,7 +1691,7 @@ void PPPMSpin::poisson_peratom_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v0z_brick_spin[k][j][i] = work4[n]; + v0z_brick_dipole[k][j][i] = work4[n]; n += 2; } @@ -1716,7 +1714,7 @@ void PPPMSpin::poisson_peratom_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v1x_brick_spin[k][j][i] = work4[n]; + v1x_brick_dipole[k][j][i] = work4[n]; n += 2; } @@ -1739,7 +1737,7 @@ void PPPMSpin::poisson_peratom_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v1y_brick_spin[k][j][i] = work4[n]; + v1y_brick_dipole[k][j][i] = work4[n]; n += 2; } @@ -1762,7 +1760,7 @@ void PPPMSpin::poisson_peratom_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v1z_brick_spin[k][j][i] = work4[n]; + v1z_brick_dipole[k][j][i] = work4[n]; n += 2; } @@ -1785,7 +1783,7 @@ void PPPMSpin::poisson_peratom_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v2x_brick_spin[k][j][i] = work4[n]; + v2x_brick_dipole[k][j][i] = work4[n]; n += 2; } @@ -1808,7 +1806,7 @@ void PPPMSpin::poisson_peratom_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v2y_brick_spin[k][j][i] = work4[n]; + v2y_brick_dipole[k][j][i] = work4[n]; n += 2; } @@ -1831,7 +1829,7 @@ void PPPMSpin::poisson_peratom_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v2z_brick_spin[k][j][i] = work4[n]; + v2z_brick_dipole[k][j][i] = work4[n]; n += 2; } @@ -1854,7 +1852,7 @@ void PPPMSpin::poisson_peratom_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v3x_brick_spin[k][j][i] = work4[n]; + v3x_brick_dipole[k][j][i] = work4[n]; n += 2; } @@ -1877,7 +1875,7 @@ void PPPMSpin::poisson_peratom_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v3y_brick_spin[k][j][i] = work4[n]; + v3y_brick_dipole[k][j][i] = work4[n]; n += 2; } @@ -1900,7 +1898,7 @@ void PPPMSpin::poisson_peratom_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v3z_brick_spin[k][j][i] = work4[n]; + v3z_brick_dipole[k][j][i] = work4[n]; n += 2; } @@ -1923,7 +1921,7 @@ void PPPMSpin::poisson_peratom_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v4x_brick_spin[k][j][i] = work4[n]; + v4x_brick_dipole[k][j][i] = work4[n]; n += 2; } @@ -1946,7 +1944,7 @@ void PPPMSpin::poisson_peratom_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v4y_brick_spin[k][j][i] = work4[n]; + v4y_brick_dipole[k][j][i] = work4[n]; n += 2; } @@ -1969,7 +1967,7 @@ void PPPMSpin::poisson_peratom_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v4z_brick_spin[k][j][i] = work4[n]; + v4z_brick_dipole[k][j][i] = work4[n]; n += 2; } @@ -1992,7 +1990,7 @@ void PPPMSpin::poisson_peratom_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v5x_brick_spin[k][j][i] = work4[n]; + v5x_brick_dipole[k][j][i] = work4[n]; n += 2; } @@ -2015,7 +2013,7 @@ void PPPMSpin::poisson_peratom_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v5y_brick_spin[k][j][i] = work4[n]; + v5y_brick_dipole[k][j][i] = work4[n]; n += 2; } @@ -2038,16 +2036,16 @@ void PPPMSpin::poisson_peratom_spin() for (k = nzlo_in; k <= nzhi_in; k++) for (j = nylo_in; j <= nyhi_in; j++) for (i = nxlo_in; i <= nxhi_in; i++) { - v5z_brick_spin[k][j][i] = work4[n]; + v5z_brick_dipole[k][j][i] = work4[n]; n += 2; } } /* ---------------------------------------------------------------------- - interpolate from grid to get magnetic field & force on my particles for ik + interpolate from grid to get electric field & force on my particles for ik ------------------------------------------------------------------------- */ -void PPPMSpin::fieldforce_ik_spin() +void PPPMDipole::fieldforce_ik_dipole() { int i,l,m,n,nx,ny,nz,mx,my,mz; FFT_SCALAR dx,dy,dz; @@ -2060,11 +2058,11 @@ void PPPMSpin::fieldforce_ik_spin() // (dx,dy,dz) = distance to "lower left" grid pt // (mx,my,mz) = global coords of moving stencil pt - double **sp = atom->sp; - double spx,spy,spz; + + double **mu = atom->mu; double **x = atom->x; double **f = atom->f; - double **fm = atom->fm; + double **t = atom->torque; int nlocal = atom->nlocal; @@ -2089,36 +2087,29 @@ void PPPMSpin::fieldforce_ik_spin() for (l = nlower; l <= nupper; l++) { mx = l+nx; x0 = y0*rho1d[0][l]; - ex -= x0*ux_brick_spin[mz][my][mx]; - ey -= x0*uy_brick_spin[mz][my][mx]; - ez -= x0*uz_brick_spin[mz][my][mx]; - vxx -= x0*vdxx_brick_spin[mz][my][mx]; - vyy -= x0*vdyy_brick_spin[mz][my][mx]; - vzz -= x0*vdzz_brick_spin[mz][my][mx]; - vxy -= x0*vdxy_brick_spin[mz][my][mx]; - vxz -= x0*vdxz_brick_spin[mz][my][mx]; - vyz -= x0*vdyz_brick_spin[mz][my][mx]; + ex -= x0*ux_brick_dipole[mz][my][mx]; + ey -= x0*uy_brick_dipole[mz][my][mx]; + ez -= x0*uz_brick_dipole[mz][my][mx]; + vxx -= x0*vdxx_brick_dipole[mz][my][mx]; + vyy -= x0*vdyy_brick_dipole[mz][my][mx]; + vzz -= x0*vdzz_brick_dipole[mz][my][mx]; + vxy -= x0*vdxy_brick_dipole[mz][my][mx]; + vxz -= x0*vdxz_brick_dipole[mz][my][mx]; + vyz -= x0*vdyz_brick_dipole[mz][my][mx]; } } } - // convert M-field to mech. and mag. forces + // convert E-field to torque - const double spfactor = mub2mu0 * scale; - spx = sp[i][0]*sp[i][3]; - spy = sp[i][1]*sp[i][3]; - spz = sp[i][2]*sp[i][3]; - f[i][0] += spfactor*(vxx*spx + vxy*spy + vxz*spz); - f[i][1] += spfactor*(vxy*spx + vyy*spy + vyz*spz); - f[i][2] += spfactor*(vxz*spx + vyz*spy + vzz*spz); - - const double spfactorh = mub2mu0hbinv * scale; - fm[i][0] += spfactorh*ex; - fm[i][1] += spfactorh*ey; - fm[i][2] += spfactorh*ez; - - // create a new vector (in atom_spin style ?) to store long-range fm tables + const double mufactor = qqrd2e * scale; + f[i][0] += mufactor*(vxx*mu[i][0] + vxy*mu[i][1] + vxz*mu[i][2]); + f[i][1] += mufactor*(vxy*mu[i][0] + vyy*mu[i][1] + vyz*mu[i][2]); + f[i][2] += mufactor*(vxz*mu[i][0] + vyz*mu[i][1] + vzz*mu[i][2]); + t[i][0] += mufactor*(mu[i][1]*ez - mu[i][2]*ey); + t[i][1] += mufactor*(mu[i][2]*ex - mu[i][0]*ez); + t[i][2] += mufactor*(mu[i][0]*ey - mu[i][1]*ex); } } @@ -2126,7 +2117,7 @@ void PPPMSpin::fieldforce_ik_spin() interpolate from grid to get per-atom energy/virial ------------------------------------------------------------------------- */ -void PPPMSpin::fieldforce_peratom_spin() +void PPPMDipole::fieldforce_peratom_dipole() { int i,l,m,n,nx,ny,nz,mx,my,mz; FFT_SCALAR dx,dy,dz,x0,y0,z0; @@ -2140,8 +2131,7 @@ void PPPMSpin::fieldforce_peratom_spin() // (dx,dy,dz) = distance to "lower left" grid pt // (mx,my,mz) = global coords of moving stencil pt - double **sp = atom->sp; - double spx,spy,spz; + double **mu = atom->mu; double **x = atom->x; int nlocal = atom->nlocal; @@ -2170,45 +2160,42 @@ void PPPMSpin::fieldforce_peratom_spin() mx = l+nx; x0 = y0*rho1d[0][l]; if (eflag_atom) { - ux += x0*ux_brick_spin[mz][my][mx]; - uy += x0*uy_brick_spin[mz][my][mx]; - uz += x0*uz_brick_spin[mz][my][mx]; + ux += x0*ux_brick_dipole[mz][my][mx]; + uy += x0*uy_brick_dipole[mz][my][mx]; + uz += x0*uz_brick_dipole[mz][my][mx]; } if (vflag_atom) { - v0x += x0*v0x_brick_spin[mz][my][mx]; - v1x += x0*v1x_brick_spin[mz][my][mx]; - v2x += x0*v2x_brick_spin[mz][my][mx]; - v3x += x0*v3x_brick_spin[mz][my][mx]; - v4x += x0*v4x_brick_spin[mz][my][mx]; - v5x += x0*v5x_brick_spin[mz][my][mx]; - v0y += x0*v0y_brick_spin[mz][my][mx]; - v1y += x0*v1y_brick_spin[mz][my][mx]; - v2y += x0*v2y_brick_spin[mz][my][mx]; - v3y += x0*v3y_brick_spin[mz][my][mx]; - v4y += x0*v4y_brick_spin[mz][my][mx]; - v5y += x0*v5y_brick_spin[mz][my][mx]; - v0z += x0*v0z_brick_spin[mz][my][mx]; - v1z += x0*v1z_brick_spin[mz][my][mx]; - v2z += x0*v2z_brick_spin[mz][my][mx]; - v3z += x0*v3z_brick_spin[mz][my][mx]; - v4z += x0*v4z_brick_spin[mz][my][mx]; - v5z += x0*v5z_brick_spin[mz][my][mx]; + v0x += x0*v0x_brick_dipole[mz][my][mx]; + v1x += x0*v1x_brick_dipole[mz][my][mx]; + v2x += x0*v2x_brick_dipole[mz][my][mx]; + v3x += x0*v3x_brick_dipole[mz][my][mx]; + v4x += x0*v4x_brick_dipole[mz][my][mx]; + v5x += x0*v5x_brick_dipole[mz][my][mx]; + v0y += x0*v0y_brick_dipole[mz][my][mx]; + v1y += x0*v1y_brick_dipole[mz][my][mx]; + v2y += x0*v2y_brick_dipole[mz][my][mx]; + v3y += x0*v3y_brick_dipole[mz][my][mx]; + v4y += x0*v4y_brick_dipole[mz][my][mx]; + v5y += x0*v5y_brick_dipole[mz][my][mx]; + v0z += x0*v0z_brick_dipole[mz][my][mx]; + v1z += x0*v1z_brick_dipole[mz][my][mx]; + v2z += x0*v2z_brick_dipole[mz][my][mx]; + v3z += x0*v3z_brick_dipole[mz][my][mx]; + v4z += x0*v4z_brick_dipole[mz][my][mx]; + v5z += x0*v5z_brick_dipole[mz][my][mx]; } } } } - spx = sp[i][0]*sp[i][3]; - spy = sp[i][1]*sp[i][3]; - spz = sp[i][2]*sp[i][3]; - if (eflag_atom) eatom[i] += spx*ux + spy*uy + spz*uz; + if (eflag_atom) eatom[i] += mu[i][0]*ux + mu[i][1]*uy + mu[i][2]*uz; if (vflag_atom) { - vatom[i][0] += spx*v0x + spy*v0y + spz*v0z; - vatom[i][1] += spx*v1x + spy*v1y + spz*v1z; - vatom[i][2] += spx*v2x + spy*v2y + spz*v2z; - vatom[i][3] += spx*v3x + spy*v3y + spz*v3z; - vatom[i][4] += spx*v4x + spy*v4y + spz*v4z; - vatom[i][5] += spx*v5x + spy*v5y + spz*v5z; + vatom[i][0] += mu[i][0]*v0x + mu[i][1]*v0y + mu[i][2]*v0z; + vatom[i][1] += mu[i][0]*v1x + mu[i][1]*v1y + mu[i][2]*v1z; + vatom[i][2] += mu[i][0]*v2x + mu[i][1]*v2y + mu[i][2]*v2z; + vatom[i][3] += mu[i][0]*v3x + mu[i][1]*v3y + mu[i][2]*v3z; + vatom[i][4] += mu[i][0]*v4x + mu[i][1]*v4y + mu[i][2]*v4z; + vatom[i][5] += mu[i][0]*v5x + mu[i][1]*v5y + mu[i][2]*v5z; } } } @@ -2217,20 +2204,20 @@ void PPPMSpin::fieldforce_peratom_spin() pack own values to buf to send to another proc ------------------------------------------------------------------------- */ -void PPPMSpin::pack_forward(int flag, FFT_SCALAR *buf, int nlist, int *list) +void PPPMDipole::pack_forward(int flag, FFT_SCALAR *buf, int nlist, int *list) { int n = 0; - if (flag == FORWARD_SP) { - FFT_SCALAR *src_ux = &ux_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *src_uy = &uy_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *src_uz = &uz_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *src_vxx = &vdxx_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *src_vyy = &vdyy_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *src_vzz = &vdzz_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *src_vxy = &vdxy_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *src_vxz = &vdxz_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *src_vyz = &vdyz_brick_spin[nzlo_out][nylo_out][nxlo_out]; + if (flag == FORWARD_MU) { + FFT_SCALAR *src_ux = &ux_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_uy = &uy_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_uz = &uz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_vxx = &vdxx_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_vyy = &vdyy_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_vzz = &vdzz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_vxy = &vdxy_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_vxz = &vdxz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_vyz = &vdyz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; for (int i = 0; i < nlist; i++) { buf[n++] = src_ux[list[i]]; buf[n++] = src_uy[list[i]]; @@ -2242,25 +2229,25 @@ void PPPMSpin::pack_forward(int flag, FFT_SCALAR *buf, int nlist, int *list) buf[n++] = src_vxz[list[i]]; buf[n++] = src_vyz[list[i]]; } - } else if (flag == FORWARD_SP_PERATOM) { - FFT_SCALAR *v0xsrc = &v0x_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v1xsrc = &v1x_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v2xsrc = &v2x_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v3xsrc = &v3x_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v4xsrc = &v4x_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v5xsrc = &v5x_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v0ysrc = &v0y_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v1ysrc = &v1y_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v2ysrc = &v2y_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v3ysrc = &v3y_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v4ysrc = &v4y_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v5ysrc = &v5y_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v0zsrc = &v0z_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v1zsrc = &v1z_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v2zsrc = &v2z_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v3zsrc = &v3z_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v4zsrc = &v4z_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v5zsrc = &v5z_brick_spin[nzlo_out][nylo_out][nxlo_out]; + } else if (flag == FORWARD_MU_PERATOM) { + FFT_SCALAR *v0xsrc = &v0x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v1xsrc = &v1x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v2xsrc = &v2x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v3xsrc = &v3x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v4xsrc = &v4x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v5xsrc = &v5x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v0ysrc = &v0y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v1ysrc = &v1y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v2ysrc = &v2y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v3ysrc = &v3y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v4ysrc = &v4y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v5ysrc = &v5y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v0zsrc = &v0z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v1zsrc = &v1z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v2zsrc = &v2z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v3zsrc = &v3z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v4zsrc = &v4z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v5zsrc = &v5z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; for (int i = 0; i < nlist; i++) { buf[n++] = v0xsrc[list[i]]; buf[n++] = v1xsrc[list[i]]; @@ -2288,20 +2275,20 @@ void PPPMSpin::pack_forward(int flag, FFT_SCALAR *buf, int nlist, int *list) unpack another proc's own values from buf and set own ghost values ------------------------------------------------------------------------- */ -void PPPMSpin::unpack_forward(int flag, FFT_SCALAR *buf, int nlist, int *list) +void PPPMDipole::unpack_forward(int flag, FFT_SCALAR *buf, int nlist, int *list) { int n = 0; - if (flag == FORWARD_SP) { - FFT_SCALAR *dest_ux = &ux_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *dest_uy = &uy_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *dest_uz = &uz_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *dest_vxx = &vdxx_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *dest_vyy = &vdyy_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *dest_vzz = &vdzz_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *dest_vxy = &vdxy_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *dest_vxz = &vdxz_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *dest_vyz = &vdyz_brick_spin[nzlo_out][nylo_out][nxlo_out]; + if (flag == FORWARD_MU) { + FFT_SCALAR *dest_ux = &ux_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_uy = &uy_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_uz = &uz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_vxx = &vdxx_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_vyy = &vdyy_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_vzz = &vdzz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_vxy = &vdxy_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_vxz = &vdxz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_vyz = &vdyz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; for (int i = 0; i < nlist; i++) { dest_ux[list[i]] = buf[n++]; dest_uy[list[i]] = buf[n++]; @@ -2313,25 +2300,25 @@ void PPPMSpin::unpack_forward(int flag, FFT_SCALAR *buf, int nlist, int *list) dest_vxz[list[i]] = buf[n++]; dest_vyz[list[i]] = buf[n++]; } - } else if (flag == FORWARD_SP_PERATOM) { - FFT_SCALAR *v0xsrc = &v0x_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v1xsrc = &v1x_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v2xsrc = &v2x_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v3xsrc = &v3x_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v4xsrc = &v4x_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v5xsrc = &v5x_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v0ysrc = &v0y_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v1ysrc = &v1y_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v2ysrc = &v2y_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v3ysrc = &v3y_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v4ysrc = &v4y_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v5ysrc = &v5y_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v0zsrc = &v0z_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v1zsrc = &v1z_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v2zsrc = &v2z_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v3zsrc = &v3z_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v4zsrc = &v4z_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *v5zsrc = &v5z_brick_spin[nzlo_out][nylo_out][nxlo_out]; + } else if (flag == FORWARD_MU_PERATOM) { + FFT_SCALAR *v0xsrc = &v0x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v1xsrc = &v1x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v2xsrc = &v2x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v3xsrc = &v3x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v4xsrc = &v4x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v5xsrc = &v5x_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v0ysrc = &v0y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v1ysrc = &v1y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v2ysrc = &v2y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v3ysrc = &v3y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v4ysrc = &v4y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v5ysrc = &v5y_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v0zsrc = &v0z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v1zsrc = &v1z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v2zsrc = &v2z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v3zsrc = &v3z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v4zsrc = &v4z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *v5zsrc = &v5z_brick_dipole[nzlo_out][nylo_out][nxlo_out]; for (int i = 0; i < nlist; i++) { v0xsrc[list[i]] = buf[n++]; v1xsrc[list[i]] = buf[n++]; @@ -2359,17 +2346,17 @@ void PPPMSpin::unpack_forward(int flag, FFT_SCALAR *buf, int nlist, int *list) pack ghost values into buf to send to another proc ------------------------------------------------------------------------- */ -void PPPMSpin::pack_reverse(int flag, FFT_SCALAR *buf, int nlist, int *list) +void PPPMDipole::pack_reverse(int flag, FFT_SCALAR *buf, int nlist, int *list) { int n = 0; - if (flag == REVERSE_SP) { - FFT_SCALAR *src_spin0 = &densityx_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *src_spin1 = &densityy_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *src_spin2 = &densityz_brick_spin[nzlo_out][nylo_out][nxlo_out]; + if (flag == REVERSE_MU) { + FFT_SCALAR *src_dipole0 = &densityx_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_dipole1 = &densityy_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *src_dipole2 = &densityz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; for (int i = 0; i < nlist; i++) { - buf[n++] = src_spin0[list[i]]; - buf[n++] = src_spin1[list[i]]; - buf[n++] = src_spin2[list[i]]; + buf[n++] = src_dipole0[list[i]]; + buf[n++] = src_dipole1[list[i]]; + buf[n++] = src_dipole2[list[i]]; } } } @@ -2378,17 +2365,17 @@ void PPPMSpin::pack_reverse(int flag, FFT_SCALAR *buf, int nlist, int *list) unpack another proc's ghost values from buf and add to own values ------------------------------------------------------------------------- */ -void PPPMSpin::unpack_reverse(int flag, FFT_SCALAR *buf, int nlist, int *list) +void PPPMDipole::unpack_reverse(int flag, FFT_SCALAR *buf, int nlist, int *list) { int n = 0; - if (flag == REVERSE_SP) { - FFT_SCALAR *dest_spin0 = &densityx_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *dest_spin1 = &densityy_brick_spin[nzlo_out][nylo_out][nxlo_out]; - FFT_SCALAR *dest_spin2 = &densityz_brick_spin[nzlo_out][nylo_out][nxlo_out]; + if (flag == REVERSE_MU) { + FFT_SCALAR *dest_dipole0 = &densityx_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_dipole1 = &densityy_brick_dipole[nzlo_out][nylo_out][nxlo_out]; + FFT_SCALAR *dest_dipole2 = &densityz_brick_dipole[nzlo_out][nylo_out][nxlo_out]; for (int i = 0; i < nlist; i++) { - dest_spin0[list[i]] += buf[n++]; - dest_spin1[list[i]] += buf[n++]; - dest_spin2[list[i]] += buf[n++]; + dest_dipole0[list[i]] += buf[n++]; + dest_dipole1[list[i]] += buf[n++]; + dest_dipole2[list[i]] += buf[n++]; } } } @@ -2401,50 +2388,57 @@ void PPPMSpin::unpack_reverse(int flag, FFT_SCALAR *buf, int nlist, int *list) extended to non-neutral systems (J. Chem. Phys. 131, 094107). ------------------------------------------------------------------------- */ -void PPPMSpin::slabcorr() +void PPPMDipole::slabcorr() { - // compute local contribution to global spin moment + // compute local contribution to global dipole moment double **x = atom->x; double zprd = domain->zprd; int nlocal = atom->nlocal; - double spin = 0.0; - double **sp = atom->sp; - double spx,spy,spz; - for (int i = 0; i < nlocal; i++) { - spz = sp[i][2]*sp[i][3]; - spin += spz; + double dipole = 0.0; + double **mu = atom->mu; + for (int i = 0; i < nlocal; i++) dipole += mu[i][2]; + + // sum local contributions to get global dipole moment + + double dipole_all; + MPI_Allreduce(&dipole,&dipole_all,1,MPI_DOUBLE,MPI_SUM,world); + + // need to make non-neutral systems and/or + // per-atom energy translationally invariant + + if (eflag_atom || fabs(qsum) > SMALL) { + + error->all(FLERR,"Cannot (yet) use kspace slab correction with " + "long-range dipoles and non-neutral systems or per-atom energy"); } - // sum local contributions to get global spin moment - - double spin_all; - MPI_Allreduce(&spin,&spin_all,1,MPI_DOUBLE,MPI_SUM,world); - // compute corrections - const double e_slabcorr = MY_2PI*(spin_all*spin_all/12.0)/volume; - const double spscale = mub2mu0 * scale; + const double e_slabcorr = MY_2PI*(dipole_all*dipole_all/12.0)/volume; + const double qscale = qqrd2e * scale; - if (eflag_global) energy += spscale * e_slabcorr; + if (eflag_global) energy += qscale * e_slabcorr; // per-atom energy if (eflag_atom) { - double efact = spscale * MY_2PI/volume/12.0; - for (int i = 0; i < nlocal; i++) { - spz = sp[i][2]*sp[i][3]; - eatom[i] += efact * spz * spin_all; - } + double efact = qscale * MY_2PI/volume/12.0; + for (int i = 0; i < nlocal; i++) + eatom[i] += efact * mu[i][2]*dipole_all; } - // add on mag. force corrections + // add on torque corrections - double ffact = spscale * (-4.0*MY_PI/volume); - double **fm = atom->fm; - for (int i = 0; i < nlocal; i++) { - fm[i][2] += ffact * spin_all; + if (atom->torque) { + double ffact = qscale * (-4.0*MY_PI/volume); + double **mu = atom->mu; + double **torque = atom->torque; + for (int i = 0; i < nlocal; i++) { + torque[i][0] += ffact * dipole_all * mu[i][1]; + torque[i][1] += -ffact * dipole_all * mu[i][0]; + } } } @@ -2452,7 +2446,7 @@ void PPPMSpin::slabcorr() perform and time the 1d FFTs required for N timesteps ------------------------------------------------------------------------- */ -int PPPMSpin::timing_1d(int n, double &time1d) +int PPPMDipole::timing_1d(int n, double &time1d) { double time1,time2; @@ -2487,7 +2481,7 @@ int PPPMSpin::timing_1d(int n, double &time1d) perform and time the 3d FFTs required for N timesteps ------------------------------------------------------------------------- */ -int PPPMSpin::timing_3d(int n, double &time3d) +int PPPMDipole::timing_3d(int n, double &time3d) { double time1,time2; @@ -2522,7 +2516,7 @@ int PPPMSpin::timing_3d(int n, double &time3d) memory usage of local arrays ------------------------------------------------------------------------- */ -double PPPMSpin::memory_usage() +double PPPMDipole::memory_usage() { double bytes = nmax*3 * sizeof(double); int nbrick = (nxhi_out-nxlo_out+1) * (nyhi_out-nylo_out+1) * @@ -2536,43 +2530,37 @@ double PPPMSpin::memory_usage() if (peratom_allocate_flag) bytes += 21 * nbrick * sizeof(FFT_SCALAR); - if (cg_spin) bytes += cg_spin->memory_usage(); - if (cg_peratom_spin) bytes += cg_peratom_spin->memory_usage(); + if (cg_dipole) bytes += cg_dipole->memory_usage(); + if (cg_peratom_dipole) bytes += cg_peratom_dipole->memory_usage(); return bytes; } /* ---------------------------------------------------------------------- - compute spsum,spsqsum,sp2 - called initially, when particle count changes, when spins are changed + compute musum,musqsum,mu2 + called initially, when particle count changes, when dipoles are changed ------------------------------------------------------------------------- */ -void PPPMSpin::spsum_spsq() +void PPPMDipole::musum_musq() { const int nlocal = atom->nlocal; - spsum = spsqsum = sp2 = 0.0; - if (atom->sp_flag) { - double **sp = atom->sp; - double spx, spy, spz; - double spsum_local(0.0), spsqsum_local(0.0); - - // not exactly the good loop: need to add norm of spins + musum = musqsum = mu2 = 0.0; + if (atom->mu_flag) { + double** mu = atom->mu; + double musum_local(0.0), musqsum_local(0.0); for (int i = 0; i < nlocal; i++) { - spx = sp[i][0]*sp[i][3]; - spy = sp[i][1]*sp[i][3]; - spz = sp[i][2]*sp[i][3]; - spsum_local += spx + spy + spz; - spsqsum_local += spx*spx + spy*spy + spz*spz; + musum_local += mu[i][0] + mu[i][1] + mu[i][2]; + musqsum_local += mu[i][0]*mu[i][0] + mu[i][1]*mu[i][1] + mu[i][2]*mu[i][2]; } - MPI_Allreduce(&spsum_local,&spsum,1,MPI_DOUBLE,MPI_SUM,world); - MPI_Allreduce(&spsqsum_local,&spsqsum,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&musum_local,&musum,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&musqsum_local,&musqsum,1,MPI_DOUBLE,MPI_SUM,world); - sp2 = spsqsum * mub2mu0; + mu2 = musqsum * force->qqrd2e; } - if (sp2 == 0 && comm->me == 0) - error->all(FLERR,"Using kspace solver PPPMSpin on system with no spins"); + if (mu2 == 0 && comm->me == 0) + error->all(FLERR,"Using kspace solver PPPMDipole on system with no dipoles"); } diff --git a/src/KSPACE/pppm_dipole.h b/src/KSPACE/pppm_dipole.h new file mode 100644 index 0000000000..8db28b540a --- /dev/null +++ b/src/KSPACE/pppm_dipole.h @@ -0,0 +1,213 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + 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 KSPACE_CLASS + +KSpaceStyle(pppm/dipole,PPPMDipole) + +#else + +#ifndef LMP_PPPM_DIPOLE_H +#define LMP_PPPM_DIPOLE_H + +#include "pppm.h" + +namespace LAMMPS_NS { + +class PPPMDipole : public PPPM { + public: + PPPMDipole(class LAMMPS *, int, char **); + virtual ~PPPMDipole(); + void init(); + void setup(); + void setup_grid(); + void compute(int, int); + int timing_1d(int, double &); + int timing_3d(int, double &); + double memory_usage(); + + protected: + void set_grid_global(double); + //double newton_raphson_f(); + + void allocate(); + void allocate_peratom(); + void deallocate(); + void deallocate_peratom(); + void compute_gf_denom(); + + void slabcorr(); + + // grid communication + + void pack_forward(int, FFT_SCALAR *, int, int *); + void unpack_forward(int, FFT_SCALAR *, int, int *); + void pack_reverse(int, FFT_SCALAR *, int, int *); + void unpack_reverse(int, FFT_SCALAR *, int, int *); + + // dipole + + FFT_SCALAR ***densityx_brick_dipole,***densityy_brick_dipole,***densityz_brick_dipole; + FFT_SCALAR ***vdxx_brick_dipole,***vdyy_brick_dipole,***vdzz_brick_dipole; + FFT_SCALAR ***vdxy_brick_dipole,***vdxz_brick_dipole,***vdyz_brick_dipole; + FFT_SCALAR ***ux_brick_dipole,***uy_brick_dipole,***uz_brick_dipole; + FFT_SCALAR ***v0x_brick_dipole,***v1x_brick_dipole,***v2x_brick_dipole; + FFT_SCALAR ***v3x_brick_dipole,***v4x_brick_dipole,***v5x_brick_dipole; + FFT_SCALAR ***v0y_brick_dipole,***v1y_brick_dipole,***v2y_brick_dipole; + FFT_SCALAR ***v3y_brick_dipole,***v4y_brick_dipole,***v5y_brick_dipole; + FFT_SCALAR ***v0z_brick_dipole,***v1z_brick_dipole,***v2z_brick_dipole; + FFT_SCALAR ***v3z_brick_dipole,***v4z_brick_dipole,***v5z_brick_dipole; + FFT_SCALAR *work3,*work4; + FFT_SCALAR *densityx_fft_dipole,*densityy_fft_dipole,*densityz_fft_dipole; + class GridComm *cg_dipole; + class GridComm *cg_peratom_dipole; + int only_dipole_flag; + double musum,musqsum,mu2; + double find_gewald_dipole(double, double, bigint, double, double); + double newton_raphson_f_dipole(double, double, bigint, double, double); + double derivf_dipole(double, double, bigint, double, double); + double compute_df_kspace_dipole(double); + double compute_qopt_dipole(); + void compute_gf_dipole(); + void make_rho_dipole(); + void brick2fft_dipole(); + void poisson_ik_dipole(); + void poisson_peratom_dipole(); + void fieldforce_ik_dipole(); + void fieldforce_peratom_dipole(); + double final_accuracy_dipole(double dipole2); + void musum_musq(); + +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Cannot (yet) use charges with Kspace style PPPMDipole + +Charge-dipole interactions are not yet implemented in PPPMDipole so this +feature is not yet supported. + +E: Must redefine kspace_style after changing to triclinic box + +Self-explanatory. + +E: Kspace style requires atom attribute mu + +The atom style defined does not have this attribute. + +E: Cannot (yet) use kspace_modify diff ad with dipoles + +This feature is not yet supported. + +E: Cannot (yet) use 'electron' units with dipoles + +This feature is not yet supported. + +E: Cannot yet use triclinic cells with PPPMDipole + +This feature is not yet supported. + +E: Cannot yet use TIP4P with PPPMDipole + +This feature is not yet supported. + +E: Cannot use nonperiodic boundaries with PPPM + +For kspace style pppm, all 3 dimensions must have periodic boundaries +unless you use the kspace_modify command to define a 2d slab with a +non-periodic z dimension. + +E: Incorrect boundaries with slab PPPM + +Must have periodic x,y dimensions and non-periodic z dimension to use +2d slab option with PPPM. + +E: PPPM order cannot be < 2 or > than %d + +This is a limitation of the PPPM implementation in LAMMPS. + +E: KSpace style is incompatible with Pair style + +Setting a kspace style requires that a pair style with matching +long-range dipole components be used. + +W: Reducing PPPM order b/c stencil extends beyond nearest neighbor processor + +This may lead to a larger grid than desired. See the kspace_modify overlap +command to prevent changing of the PPPM order. + +E: PPPM order < minimum allowed order + +The default minimum order is 2. This can be reset by the +kspace_modify minorder command. + +E: PPPM grid stencil extends beyond nearest neighbor processor + +This is not allowed if the kspace_modify overlap setting is no. + +E: KSpace accuracy must be > 0 + +The kspace accuracy designated in the input must be greater than zero. + +E: Could not compute grid size + +The code is unable to compute a grid size consistent with the desired +accuracy. This error should not occur for typical problems. Please +send an email to the developers. + +E: PPPM grid is too large + +The global PPPM grid is larger than OFFSET in one or more dimensions. +OFFSET is currently set to 4096. You likely need to decrease the +requested accuracy. + +E: Could not compute g_ewald + +The Newton-Raphson solver failed to converge to a good value for +g_ewald. This error should not occur for typical problems. Please +send an email to the developers. + +E: Non-numeric box dimensions - simulation unstable + +The box size has apparently blown up. + +E: Out of range atoms - cannot compute PPPM + +One or more atoms are attempting to map their charge to a PPPM grid +point that is not owned by a processor. This is likely for one of two +reasons, both of them bad. First, it may mean that an atom near the +boundary of a processor's sub-domain has moved more than 1/2 the +"neighbor skin distance"_neighbor.html without neighbor lists being +rebuilt and atoms being migrated to new processors. This also means +you may be missing pairwise interactions that need to be computed. +The solution is to change the re-neighboring criteria via the +"neigh_modify"_neigh_modify command. The safest settings are "delay 0 +every 1 check yes". Second, it may mean that an atom has moved far +outside a processor's sub-domain or even the entire simulation box. +This indicates bad physics, e.g. due to highly overlapping atoms, too +large a timestep, etc. + +E: Using kspace solver PPPMDipole on system with no dipoles + +Must have non-zero dipoles with PPPMDipole. + +E: Must use kspace_modify gewald for system with no dipoles + +Self-explanatory. + +*/ diff --git a/src/KSPACE/pppm_dipole_spin.cpp b/src/KSPACE/pppm_dipole_spin.cpp new file mode 100644 index 0000000000..4fde7ba101 --- /dev/null +++ b/src/KSPACE/pppm_dipole_spin.cpp @@ -0,0 +1,750 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + 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: Stan Moore (SNL) + Julien Tranchida (SNL) +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include +#include "pppm_dipole_spin.h" +#include "atom.h" +#include "comm.h" +#include "gridcomm.h" +#include "neighbor.h" +#include "force.h" +#include "pair.h" +#include "bond.h" +#include "angle.h" +#include "domain.h" +#include "fft3d_wrap.h" +#include "remap_wrap.h" +#include "memory.h" +#include "error.h" +#include "update.h" + +#include "math_const.h" +#include "math_special.h" + +using namespace LAMMPS_NS; +using namespace MathConst; +using namespace MathSpecial; + +#define MAXORDER 7 +#define OFFSET 16384 +#define LARGE 10000.0 +#define SMALL 0.00001 +#define EPS_HOC 1.0e-7 + +enum{REVERSE_SP}; +enum{FORWARD_SP,FORWARD_SP_PERATOM}; + +#ifdef FFT_SINGLE +#define ZEROF 0.0f +#define ONEF 1.0f +#else +#define ZEROF 0.0 +#define ONEF 1.0 +#endif + +/* ---------------------------------------------------------------------- */ + +PPPMDipoleSpin::PPPMDipoleSpin(LAMMPS *lmp, int narg, char **arg) : + PPPMDipole(lmp, narg, arg) +{ + dipoleflag = 0; + spinflag = 1; + group_group_enable = 0; + + cg_dipole = NULL; + cg_peratom_dipole = NULL; +} + +/* ---------------------------------------------------------------------- + free all memory +------------------------------------------------------------------------- */ + +PPPMDipoleSpin::~PPPMDipoleSpin() +{ + if (copymode) return; + + deallocate(); + if (peratom_allocate_flag) deallocate_peratom(); + fft1 = NULL; + fft2 = NULL; + remap = NULL; + cg_dipole = NULL; +} + +/* ---------------------------------------------------------------------- + called once before run +------------------------------------------------------------------------- */ + +void PPPMDipoleSpin::init() +{ + if (me == 0) { + if (screen) fprintf(screen,"PPPMDipoleSpin initialization ...\n"); + if (logfile) fprintf(logfile,"PPPMDipoleSpin initialization ...\n"); + } + + // error check + + spinflag = atom->sp?1:0; + + triclinic_check(); + + if (triclinic != domain->triclinic) + error->all(FLERR,"Must redefine kspace_style after changing to triclinic box"); + + if (domain->dimension == 2) error->all(FLERR, + "Cannot use PPPMDipoleSpin with 2d simulation"); + if (comm->style != 0) + error->universe_all(FLERR,"PPPMDipoleSpin can only currently be used with " + "comm_style brick"); + + if (!atom->sp) error->all(FLERR,"Kspace style requires atom attribute sp"); + + if (atom->sp && differentiation_flag == 1) error->all(FLERR,"Cannot (yet) use kspace_modify diff" + " ad with spins"); + + if (spinflag && strcmp(update->unit_style,"metal") != 0) + error->all(FLERR,"'metal' units have to be used with spins"); + + if (slabflag == 0 && domain->nonperiodic > 0) + error->all(FLERR,"Cannot use nonperiodic boundaries with PPPMDipoleSpin"); + if (slabflag) { + if (domain->xperiodic != 1 || domain->yperiodic != 1 || + domain->boundary[2][0] != 1 || domain->boundary[2][1] != 1) + error->all(FLERR,"Incorrect boundaries with slab PPPMDipoleSpin"); + } + + if (order < 2 || order > MAXORDER) { + char str[128]; + sprintf(str,"PPPMDipoleSpin order cannot be < 2 or > than %d",MAXORDER); + error->all(FLERR,str); + } + + // extract short-range Coulombic cutoff from pair style + + triclinic = domain->triclinic; + if (triclinic) + error->all(FLERR,"Cannot yet use triclinic cells with PPPMDipoleSpin"); + + pair_check(); + + int itmp = 0; + double *p_cutoff = (double *) force->pair->extract("cut_coul",itmp); + if (p_cutoff == NULL) + error->all(FLERR,"KSpace style is incompatible with Pair style"); + cutoff = *p_cutoff; + + // kspace TIP4P not yet supported + + if (tip4pflag) + error->all(FLERR,"Cannot yet use TIP4P with PPPMDipoleSpin"); + + scale = 1.0; + hbar = force->hplanck/MY_2PI; // eV/(rad.THz) + mub = 5.78901e-5; // in eV/T + mu_0 = 1.2566370614e-6; // in T.m/A + mub2mu0 = mub * mub * mu_0; // in eV + mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz + spsum_spsq(); + natoms_original = atom->natoms; + + // set accuracy (force units) from accuracy_relative or accuracy_absolute + + // is two_charge_force still relevant for spin systems? + + if (accuracy_absolute >= 0.0) accuracy = accuracy_absolute; + else accuracy = accuracy_relative * two_charge_force; + + // free all arrays previously allocated + + deallocate(); + if (peratom_allocate_flag) deallocate_peratom(); + + // setup FFT grid resolution and g_ewald + // normally one iteration thru while loop is all that is required + // if grid stencil does not extend beyond neighbor proc + // or overlap is allowed, then done + // else reduce order and try again + + int (*procneigh)[2] = comm->procneigh; + + GridComm *cgtmp = NULL; + int iteration = 0; + + while (order >= minorder) { + if (iteration && me == 0) + error->warning(FLERR,"Reducing PPPMDipoleSpin order b/c stencil extends " + "beyond nearest neighbor processor"); + + compute_gf_denom(); + set_grid_global(sp2); + set_grid_local(); + if (overlap_allowed) break; + + cgtmp = new GridComm(lmp,world,1,1, + nxlo_in,nxhi_in,nylo_in,nyhi_in,nzlo_in,nzhi_in, + nxlo_out,nxhi_out,nylo_out,nyhi_out,nzlo_out,nzhi_out, + procneigh[0][0],procneigh[0][1],procneigh[1][0], + procneigh[1][1],procneigh[2][0],procneigh[2][1]); + cgtmp->ghost_notify(); + if (!cgtmp->ghost_overlap()) break; + delete cgtmp; + + order--; + iteration++; + } + + if (order < minorder) error->all(FLERR,"PPPMDipoleSpin order < minimum allowed order"); + if (!overlap_allowed && cgtmp->ghost_overlap()) + error->all(FLERR,"PPPMDipoleSpin grid stencil extends " + "beyond nearest neighbor processor"); + if (cgtmp) delete cgtmp; + + // adjust g_ewald + + if (!gewaldflag) adjust_gewald(); + + // calculate the final accuracy + + double estimated_accuracy = final_accuracy_dipole(sp2); + + // print stats + + int ngrid_max,nfft_both_max; + MPI_Allreduce(&ngrid,&ngrid_max,1,MPI_INT,MPI_MAX,world); + MPI_Allreduce(&nfft_both,&nfft_both_max,1,MPI_INT,MPI_MAX,world); + + if (me == 0) { + +#ifdef FFT_SINGLE + const char fft_prec[] = "single"; +#else + const char fft_prec[] = "double"; +#endif + + if (screen) { + fprintf(screen," G vector (1/distance) = %g\n",g_ewald); + fprintf(screen," grid = %d %d %d\n",nx_pppm,ny_pppm,nz_pppm); + fprintf(screen," stencil order = %d\n",order); + fprintf(screen," estimated absolute RMS force accuracy = %g\n", + estimated_accuracy); + fprintf(screen," estimated relative force accuracy = %g\n", + estimated_accuracy/two_charge_force); + fprintf(screen," using %s precision FFTs\n",fft_prec); + fprintf(screen," 3d grid and FFT values/proc = %d %d\n", + ngrid_max,nfft_both_max); + } + if (logfile) { + fprintf(logfile," G vector (1/distance) = %g\n",g_ewald); + fprintf(logfile," grid = %d %d %d\n",nx_pppm,ny_pppm,nz_pppm); + fprintf(logfile," stencil order = %d\n",order); + fprintf(logfile," estimated absolute RMS force accuracy = %g\n", + estimated_accuracy); + fprintf(logfile," estimated relative force accuracy = %g\n", + estimated_accuracy/two_charge_force); + fprintf(logfile," using %s precision FFTs\n",fft_prec); + fprintf(logfile," 3d grid and FFT values/proc = %d %d\n", + ngrid_max,nfft_both_max); + } + } + + // allocate K-space dependent memory + // don't invoke allocate peratom(), will be allocated when needed + + allocate(); + cg_dipole->ghost_notify(); + cg_dipole->setup(); + + // pre-compute Green's function denominator expansion + // pre-compute 1d charge distribution coefficients + + compute_gf_denom(); + compute_rho_coeff(); +} + +/* ---------------------------------------------------------------------- + compute the PPPMDipoleSpin long-range force, energy, virial +------------------------------------------------------------------------- */ + +void PPPMDipoleSpin::compute(int eflag, int vflag) +{ + int i,j; + + // set energy/virial flags + // invoke allocate_peratom() if needed for first time + + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = evflag_atom = eflag_global = vflag_global = + eflag_atom = vflag_atom = 0; + + if (evflag_atom && !peratom_allocate_flag) { + allocate_peratom(); + cg_peratom_dipole->ghost_notify(); + cg_peratom_dipole->setup(); + } + + // if atom count has changed, update qsum and qsqsum + + if (atom->natoms != natoms_original) { + spsum_spsq(); + natoms_original = atom->natoms; + } + + // return if there are no spins + + if (spsqsum == 0.0) return; + + // convert atoms from box to lamda coords + + boxlo = domain->boxlo; + + // extend size of per-atom arrays if necessary + + if (atom->nmax > nmax) { + memory->destroy(part2grid); + nmax = atom->nmax; + memory->create(part2grid,nmax,3,"pppm_spin:part2grid"); + } + + // find grid points for all my particles + // map my particle charge onto my local 3d on-grid density + + particle_map(); + make_rho_spin(); + + // all procs communicate density values from their ghost cells + // to fully sum contribution in their 3d bricks + // remap from 3d decomposition to FFT decomposition + + cg_dipole->reverse_comm(this,REVERSE_SP); + brick2fft_dipole(); + + // compute potential gradient on my FFT grid and + // portion of e_long on this proc's FFT grid + // return gradients (electric fields) in 3d brick decomposition + // also performs per-atom calculations via poisson_peratom() + + poisson_ik_dipole(); + + // all procs communicate E-field values + // to fill ghost cells surrounding their 3d bricks + + cg_dipole->forward_comm(this,FORWARD_SP); + + // extra per-atom energy/virial communication + + if (evflag_atom) { + cg_peratom_dipole->forward_comm(this,FORWARD_SP_PERATOM); + } + + // calculate the force on my particles + + fieldforce_ik_spin(); + + // extra per-atom energy/virial communication + + if (evflag_atom) fieldforce_peratom_spin(); + + // sum global energy across procs and add in volume-dependent term + + const double spscale = mub2mu0 * scale; + const double g3 = g_ewald*g_ewald*g_ewald; + + if (eflag_global) { + double energy_all; + MPI_Allreduce(&energy,&energy_all,1,MPI_DOUBLE,MPI_SUM,world); + energy = energy_all; + + energy *= 0.5*volume; + energy -= spsqsum*2.0*g3/3.0/MY_PIS; + energy *= spscale; + } + + // sum global virial across procs + + if (vflag_global) { + double virial_all[6]; + MPI_Allreduce(virial,virial_all,6,MPI_DOUBLE,MPI_SUM,world); + for (i = 0; i < 6; i++) virial[i] = 0.5*spscale*volume*virial_all[i]; + } + + // per-atom energy/virial + // energy includes self-energy correction + + if (evflag_atom) { + double **sp = atom->sp; + double spx,spy,spz; + int nlocal = atom->nlocal; + int ntotal = nlocal; + + if (eflag_atom) { + for (i = 0; i < nlocal; i++) { + spx = sp[i][0]*sp[i][3]; + spy = sp[i][1]*sp[i][3]; + spz = sp[i][2]*sp[i][3]; + eatom[i] *= 0.5; + eatom[i] -= (spx*spx + spy*spy + spz*spz)*2.0*g3/3.0/MY_PIS; + eatom[i] *= spscale; + } + } + + if (vflag_atom) { + for (i = 0; i < ntotal; i++) + for (j = 0; j < 6; j++) vatom[i][j] *= 0.5*spscale; + } + } + + // 2d slab correction + + if (slabflag == 1) slabcorr(); +} + +/* ---------------------------------------------------------------------- + create discretized "density" on section of global grid due to my particles + density(x,y,z) = charge "density" at grid points of my 3d brick + (nxlo:nxhi,nylo:nyhi,nzlo:nzhi) is extent of my brick (including ghosts) + in global grid +------------------------------------------------------------------------- */ + +void PPPMDipoleSpin::make_rho_spin() +{ + int l,m,n,nx,ny,nz,mx,my,mz; + FFT_SCALAR dx,dy,dz; + FFT_SCALAR x0,y0,z0; + FFT_SCALAR x1,y1,z1; + FFT_SCALAR x2,y2,z2; + + // clear 3d density array + + memset(&(densityx_brick_dipole[nzlo_out][nylo_out][nxlo_out]),0, + ngrid*sizeof(FFT_SCALAR)); + memset(&(densityy_brick_dipole[nzlo_out][nylo_out][nxlo_out]),0, + ngrid*sizeof(FFT_SCALAR)); + memset(&(densityz_brick_dipole[nzlo_out][nylo_out][nxlo_out]),0, + ngrid*sizeof(FFT_SCALAR)); + + // loop over my charges, add their contribution to nearby grid points + // (nx,ny,nz) = global coords of grid pt to "lower left" of charge + // (dx,dy,dz) = distance to "lower left" grid pt + // (mx,my,mz) = global coords of moving stencil pt + + double **sp = atom->sp; + double spx,spy,spz; + double **x = atom->x; + int nlocal = atom->nlocal; + + for (int i = 0; i < nlocal; i++) { + + nx = part2grid[i][0]; + ny = part2grid[i][1]; + nz = part2grid[i][2]; + dx = nx+shiftone - (x[i][0]-boxlo[0])*delxinv; + dy = ny+shiftone - (x[i][1]-boxlo[1])*delyinv; + dz = nz+shiftone - (x[i][2]-boxlo[2])*delzinv; + + compute_rho1d(dx,dy,dz); + + spx = sp[i][0]*sp[i][3]; + spy = sp[i][1]*sp[i][3]; + spz = sp[i][2]*sp[i][3]; + z0 = delvolinv * spx; + z1 = delvolinv * spy; + z2 = delvolinv * spz; + for (n = nlower; n <= nupper; n++) { + mz = n+nz; + y0 = z0*rho1d[2][n]; + y1 = z1*rho1d[2][n]; + y2 = z2*rho1d[2][n]; + for (m = nlower; m <= nupper; m++) { + my = m+ny; + x0 = y0*rho1d[1][m]; + x1 = y1*rho1d[1][m]; + x2 = y2*rho1d[1][m]; + for (l = nlower; l <= nupper; l++) { + mx = l+nx; + densityx_brick_dipole[mz][my][mx] += x0*rho1d[0][l]; + densityy_brick_dipole[mz][my][mx] += x1*rho1d[0][l]; + densityz_brick_dipole[mz][my][mx] += x2*rho1d[0][l]; + } + } + } + } +} + +/* ---------------------------------------------------------------------- + interpolate from grid to get magnetic field & force on my particles for ik +------------------------------------------------------------------------- */ + +void PPPMDipoleSpin::fieldforce_ik_spin() +{ + int i,l,m,n,nx,ny,nz,mx,my,mz; + FFT_SCALAR dx,dy,dz; + FFT_SCALAR x0,y0,z0; + FFT_SCALAR ex,ey,ez; + FFT_SCALAR vxx,vyy,vzz,vxy,vxz,vyz; + + // loop over my charges, interpolate electric field from nearby grid points + // (nx,ny,nz) = global coords of grid pt to "lower left" of charge + // (dx,dy,dz) = distance to "lower left" grid pt + // (mx,my,mz) = global coords of moving stencil pt + + double **sp = atom->sp; + double spx,spy,spz; + double **x = atom->x; + double **f = atom->f; + double **fm = atom->fm; + + int nlocal = atom->nlocal; + + for (i = 0; i < nlocal; i++) { + nx = part2grid[i][0]; + ny = part2grid[i][1]; + nz = part2grid[i][2]; + dx = nx+shiftone - (x[i][0]-boxlo[0])*delxinv; + dy = ny+shiftone - (x[i][1]-boxlo[1])*delyinv; + dz = nz+shiftone - (x[i][2]-boxlo[2])*delzinv; + + compute_rho1d(dx,dy,dz); + + ex = ey = ez = ZEROF; + vxx = vyy = vzz = vxy = vxz = vyz = ZEROF; + for (n = nlower; n <= nupper; n++) { + mz = n+nz; + z0 = rho1d[2][n]; + for (m = nlower; m <= nupper; m++) { + my = m+ny; + y0 = z0*rho1d[1][m]; + for (l = nlower; l <= nupper; l++) { + mx = l+nx; + x0 = y0*rho1d[0][l]; + ex -= x0*ux_brick_dipole[mz][my][mx]; + ey -= x0*uy_brick_dipole[mz][my][mx]; + ez -= x0*uz_brick_dipole[mz][my][mx]; + vxx -= x0*vdxx_brick_dipole[mz][my][mx]; + vyy -= x0*vdyy_brick_dipole[mz][my][mx]; + vzz -= x0*vdzz_brick_dipole[mz][my][mx]; + vxy -= x0*vdxy_brick_dipole[mz][my][mx]; + vxz -= x0*vdxz_brick_dipole[mz][my][mx]; + vyz -= x0*vdyz_brick_dipole[mz][my][mx]; + } + } + } + + // convert M-field to mech. and mag. forces + + const double spfactor = mub2mu0 * scale; + spx = sp[i][0]*sp[i][3]; + spy = sp[i][1]*sp[i][3]; + spz = sp[i][2]*sp[i][3]; + f[i][0] += spfactor*(vxx*spx + vxy*spy + vxz*spz); + f[i][1] += spfactor*(vxy*spx + vyy*spy + vyz*spz); + f[i][2] += spfactor*(vxz*spx + vyz*spy + vzz*spz); + + const double spfactorh = mub2mu0hbinv * scale; + fm[i][0] += spfactorh*ex; + fm[i][1] += spfactorh*ey; + fm[i][2] += spfactorh*ez; + + // create a new vector (in atom_spin style ?) to store long-range fm tables + + } +} + +/* ---------------------------------------------------------------------- + interpolate from grid to get per-atom energy/virial +------------------------------------------------------------------------- */ + +void PPPMDipoleSpin::fieldforce_peratom_spin() +{ + int i,l,m,n,nx,ny,nz,mx,my,mz; + FFT_SCALAR dx,dy,dz,x0,y0,z0; + FFT_SCALAR ux,uy,uz; + FFT_SCALAR v0x,v1x,v2x,v3x,v4x,v5x; + FFT_SCALAR v0y,v1y,v2y,v3y,v4y,v5y; + FFT_SCALAR v0z,v1z,v2z,v3z,v4z,v5z; + + // loop over my charges, interpolate from nearby grid points + // (nx,ny,nz) = global coords of grid pt to "lower left" of charge + // (dx,dy,dz) = distance to "lower left" grid pt + // (mx,my,mz) = global coords of moving stencil pt + + double **sp = atom->sp; + double spx,spy,spz; + double **x = atom->x; + + int nlocal = atom->nlocal; + + for (i = 0; i < nlocal; i++) { + nx = part2grid[i][0]; + ny = part2grid[i][1]; + nz = part2grid[i][2]; + dx = nx+shiftone - (x[i][0]-boxlo[0])*delxinv; + dy = ny+shiftone - (x[i][1]-boxlo[1])*delyinv; + dz = nz+shiftone - (x[i][2]-boxlo[2])*delzinv; + + compute_rho1d(dx,dy,dz); + + ux = uy = uz = ZEROF; + v0x = v1x = v2x = v3x = v4x = v5x = ZEROF; + v0y = v1y = v2y = v3y = v4y = v5y = ZEROF; + v0z = v1z = v2z = v3z = v4z = v5z = ZEROF; + for (n = nlower; n <= nupper; n++) { + mz = n+nz; + z0 = rho1d[2][n]; + for (m = nlower; m <= nupper; m++) { + my = m+ny; + y0 = z0*rho1d[1][m]; + for (l = nlower; l <= nupper; l++) { + mx = l+nx; + x0 = y0*rho1d[0][l]; + if (eflag_atom) { + ux += x0*ux_brick_dipole[mz][my][mx]; + uy += x0*uy_brick_dipole[mz][my][mx]; + uz += x0*uz_brick_dipole[mz][my][mx]; + } + if (vflag_atom) { + v0x += x0*v0x_brick_dipole[mz][my][mx]; + v1x += x0*v1x_brick_dipole[mz][my][mx]; + v2x += x0*v2x_brick_dipole[mz][my][mx]; + v3x += x0*v3x_brick_dipole[mz][my][mx]; + v4x += x0*v4x_brick_dipole[mz][my][mx]; + v5x += x0*v5x_brick_dipole[mz][my][mx]; + v0y += x0*v0y_brick_dipole[mz][my][mx]; + v1y += x0*v1y_brick_dipole[mz][my][mx]; + v2y += x0*v2y_brick_dipole[mz][my][mx]; + v3y += x0*v3y_brick_dipole[mz][my][mx]; + v4y += x0*v4y_brick_dipole[mz][my][mx]; + v5y += x0*v5y_brick_dipole[mz][my][mx]; + v0z += x0*v0z_brick_dipole[mz][my][mx]; + v1z += x0*v1z_brick_dipole[mz][my][mx]; + v2z += x0*v2z_brick_dipole[mz][my][mx]; + v3z += x0*v3z_brick_dipole[mz][my][mx]; + v4z += x0*v4z_brick_dipole[mz][my][mx]; + v5z += x0*v5z_brick_dipole[mz][my][mx]; + } + } + } + } + + spx = sp[i][0]*sp[i][3]; + spy = sp[i][1]*sp[i][3]; + spz = sp[i][2]*sp[i][3]; + if (eflag_atom) eatom[i] += spx*ux + spy*uy + spz*uz; + if (vflag_atom) { + vatom[i][0] += spx*v0x + spy*v0y + spz*v0z; + vatom[i][1] += spx*v1x + spy*v1y + spz*v1z; + vatom[i][2] += spx*v2x + spy*v2y + spz*v2z; + vatom[i][3] += spx*v3x + spy*v3y + spz*v3z; + vatom[i][4] += spx*v4x + spy*v4y + spz*v4z; + vatom[i][5] += spx*v5x + spy*v5y + spz*v5z; + } + } +} + +/* ---------------------------------------------------------------------- + Slab-geometry correction term to dampen inter-slab interactions between + periodically repeating slabs. Yields good approximation to 2D Ewald if + adequate empty space is left between repeating slabs (J. Chem. Phys. + 111, 3155). Slabs defined here to be parallel to the xy plane. Also + extended to non-neutral systems (J. Chem. Phys. 131, 094107). +------------------------------------------------------------------------- */ + +void PPPMDipoleSpin::slabcorr() +{ + // compute local contribution to global spin moment + + double **x = atom->x; + double zprd = domain->zprd; + int nlocal = atom->nlocal; + + double spin = 0.0; + double **sp = atom->sp; + double spx,spy,spz; + for (int i = 0; i < nlocal; i++) { + spz = sp[i][2]*sp[i][3]; + spin += spz; + } + + // sum local contributions to get global spin moment + + double spin_all; + MPI_Allreduce(&spin,&spin_all,1,MPI_DOUBLE,MPI_SUM,world); + + // compute corrections + + const double e_slabcorr = MY_2PI*(spin_all*spin_all/12.0)/volume; + const double spscale = mub2mu0 * scale; + + if (eflag_global) energy += spscale * e_slabcorr; + + // per-atom energy + + if (eflag_atom) { + double efact = spscale * MY_2PI/volume/12.0; + for (int i = 0; i < nlocal; i++) { + spz = sp[i][2]*sp[i][3]; + eatom[i] += efact * spz * spin_all; + } + } + + // add on mag. force corrections + + double ffact = spscale * (-4.0*MY_PI/volume); + double **fm = atom->fm; + for (int i = 0; i < nlocal; i++) { + fm[i][2] += ffact * spin_all; + } +} + +/* ---------------------------------------------------------------------- + compute spsum,spsqsum,sp2 + called initially, when particle count changes, when spins are changed +------------------------------------------------------------------------- */ + +void PPPMDipoleSpin::spsum_spsq() +{ + const int nlocal = atom->nlocal; + + spsum = spsqsum = sp2 = 0.0; + if (atom->sp_flag) { + double **sp = atom->sp; + double spx, spy, spz; + double spsum_local(0.0), spsqsum_local(0.0); + + // not exactly the good loop: need to add norm of spins + + for (int i = 0; i < nlocal; i++) { + spx = sp[i][0]*sp[i][3]; + spy = sp[i][1]*sp[i][3]; + spz = sp[i][2]*sp[i][3]; + spsum_local += spx + spy + spz; + spsqsum_local += spx*spx + spy*spy + spz*spz; + } + + MPI_Allreduce(&spsum_local,&spsum,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&spsqsum_local,&spsqsum,1,MPI_DOUBLE,MPI_SUM,world); + + sp2 = spsqsum * mub2mu0; + } + + if (sp2 == 0 && comm->me == 0) + error->all(FLERR,"Using kspace solver PPPMDipoleSpin on system with no spins"); +} diff --git a/src/KSPACE/pppm_spin.h b/src/KSPACE/pppm_dipole_spin.h similarity index 66% rename from src/KSPACE/pppm_spin.h rename to src/KSPACE/pppm_dipole_spin.h index 3b4d42d4ea..347006e586 100644 --- a/src/KSPACE/pppm_spin.h +++ b/src/KSPACE/pppm_dipole_spin.h @@ -13,28 +13,23 @@ #ifdef KSPACE_CLASS -KSpaceStyle(pppm/spin,PPPMSpin) +KSpaceStyle(pppm/dipole/spin,PPPMDipoleSpin) #else -#ifndef LMP_PPPM_DIPOLE_H -#define LMP_PPPM_DIPOLE_H +#ifndef LMP_PPPM_DIPOLE_SPIN_H +#define LMP_PPPM_DIPOLE_SPIN_H -#include "pppm.h" +#include "pppm_dipole.h" namespace LAMMPS_NS { -class PPPMSpin : public PPPM { +class PPPMDipoleSpin : public PPPMDipole { public: - PPPMSpin(class LAMMPS *, int, char **); - virtual ~PPPMSpin(); + PPPMDipoleSpin(class LAMMPS *, int, char **); + virtual ~PPPMDipoleSpin(); void init(); - void setup(); - void setup_grid(); void compute(int, int); - int timing_1d(int, double &); - int timing_3d(int, double &); - double memory_usage(); protected: double hbar; // reduced Planck's constant @@ -42,55 +37,15 @@ class PPPMSpin : public PPPM { double mu_0; // vacuum permeability double mub2mu0; // prefactor for mech force double mub2mu0hbinv; // prefactor for mag force - void set_grid_global(); - double newton_raphson_f(); - - void allocate(); - void allocate_peratom(); - void deallocate(); - void deallocate_peratom(); - void compute_gf_denom(); void slabcorr(); - // grid communication - - void pack_forward(int, FFT_SCALAR *, int, int *); - void unpack_forward(int, FFT_SCALAR *, int, int *); - void pack_reverse(int, FFT_SCALAR *, int, int *); - void unpack_reverse(int, FFT_SCALAR *, int, int *); - // spin - FFT_SCALAR ***densityx_brick_spin,***densityy_brick_spin,***densityz_brick_spin; - FFT_SCALAR ***vdxx_brick_spin,***vdyy_brick_spin,***vdzz_brick_spin; - FFT_SCALAR ***vdxy_brick_spin,***vdxz_brick_spin,***vdyz_brick_spin; - FFT_SCALAR ***ux_brick_spin,***uy_brick_spin,***uz_brick_spin; - FFT_SCALAR ***v0x_brick_spin,***v1x_brick_spin,***v2x_brick_spin; - FFT_SCALAR ***v3x_brick_spin,***v4x_brick_spin,***v5x_brick_spin; - FFT_SCALAR ***v0y_brick_spin,***v1y_brick_spin,***v2y_brick_spin; - FFT_SCALAR ***v3y_brick_spin,***v4y_brick_spin,***v5y_brick_spin; - FFT_SCALAR ***v0z_brick_spin,***v1z_brick_spin,***v2z_brick_spin; - FFT_SCALAR ***v3z_brick_spin,***v4z_brick_spin,***v5z_brick_spin; - FFT_SCALAR *work3,*work4; - FFT_SCALAR *densityx_fft_spin,*densityy_fft_spin,*densityz_fft_spin; - class GridComm *cg_spin; - class GridComm *cg_peratom_spin; - int only_spin_flag; double spsum,spsqsum,sp2; - double find_gewald_spin(double, double, bigint, double, double); - double newton_raphson_f_spin(double, double, bigint, double, double); - double derivf_spin(double, double, bigint, double, double); - double compute_df_kspace_spin(); - double compute_qopt_spin(); - void compute_gf_spin(); void make_rho_spin(); - void brick2fft_spin(); - void poisson_ik_spin(); - void poisson_peratom_spin(); void fieldforce_ik_spin(); void fieldforce_peratom_spin(); - double final_accuracy_spin(); void spsum_spsq(); }; @@ -102,9 +57,9 @@ class PPPMSpin : public PPPM { /* ERROR/WARNING messages: -E: Cannot (yet) use charges with Kspace style PPPMSpin +E: Cannot (yet) use charges with Kspace style PPPMDipoleSpin -Charge-spin interactions are not yet implemented in PPPMSpin so this +Charge-spin interactions are not yet implemented in PPPMDipoleSpin so this feature is not yet supported. E: Must redefine kspace_style after changing to triclinic box @@ -123,11 +78,11 @@ E: Cannot (yet) use 'electron' units with spins This feature is not yet supported. -E: Cannot yet use triclinic cells with PPPMSpin +E: Cannot yet use triclinic cells with PPPMDipoleSpin This feature is not yet supported. -E: Cannot yet use TIP4P with PPPMSpin +E: Cannot yet use TIP4P with PPPMDipoleSpin This feature is not yet supported. @@ -207,9 +162,9 @@ outside a processor's sub-domain or even the entire simulation box. This indicates bad physics, e.g. due to highly overlapping atoms, too large a timestep, etc. -E: Using kspace solver PPPMSpin on system with no spins +E: Using kspace solver PPPMDipoleSpin on system with no spins -Must have non-zero spins with PPPMSpin. +Must have non-zero spins with PPPMDipoleSpin. E: Must use kspace_modify gewald for system with no spins diff --git a/src/SPIN/atom_vec_spin.cpp b/src/SPIN/atom_vec_spin.cpp index 6460a6185f..fb2b6dd797 100644 --- a/src/SPIN/atom_vec_spin.cpp +++ b/src/SPIN/atom_vec_spin.cpp @@ -48,7 +48,7 @@ AtomVecSpin::AtomVecSpin(LAMMPS *lmp) : AtomVec(lmp) comm_x_only = 0; comm_f_only = 0; size_forward = 7; - size_reverse = 6; + size_reverse = 9; size_border = 10; size_velocity = 3; size_data_atom = 9; @@ -58,7 +58,6 @@ AtomVecSpin::AtomVecSpin(LAMMPS *lmp) : AtomVec(lmp) atom->sp_flag = 1; } - /* ---------------------------------------------------------------------- grow atom arrays n = 0 grows arrays by a chunk @@ -88,6 +87,7 @@ void AtomVecSpin::grow(int n) sp = memory->grow(atom->sp,nmax,4,"atom:sp"); fm = memory->grow(atom->fm,nmax*comm->nthreads,3,"atom:fm"); + fm_long = memory->grow(atom->fm_long,nmax*comm->nthreads,3,"atom:fm_long"); if (atom->nextra_grow) for (int iextra = 0; iextra < atom->nextra_grow; iextra++) @@ -103,7 +103,7 @@ void AtomVecSpin::grow_reset() tag = atom->tag; type = atom->type; mask = atom->mask; image = atom->image; x = atom->x; v = atom->v; f = atom->f; - sp = atom->sp; fm = atom->fm; + sp = atom->sp; fm = atom->fm; fm_long = atom->fm_long; } @@ -342,6 +342,9 @@ int AtomVecSpin::pack_reverse(int n, int first, double *buf) buf[m++] = fm[i][0]; buf[m++] = fm[i][1]; buf[m++] = fm[i][2]; + buf[m++] = fm_long[i][0]; + buf[m++] = fm_long[i][1]; + buf[m++] = fm_long[i][2]; } return m; @@ -361,6 +364,9 @@ void AtomVecSpin::unpack_reverse(int n, int *list, double *buf) fm[j][0] += buf[m++]; fm[j][1] += buf[m++]; fm[j][2] += buf[m++]; + fm_long[j][0] += buf[m++]; + fm_long[j][1] += buf[m++]; + fm_long[j][2] += buf[m++]; } } @@ -939,6 +945,7 @@ bigint AtomVecSpin::memory_usage() if (atom->memcheck("sp")) bytes += memory->usage(sp,nmax,4); if (atom->memcheck("fm")) bytes += memory->usage(fm,nmax*comm->nthreads,3); + if (atom->memcheck("fm_long")) bytes += memory->usage(fm_long,nmax*comm->nthreads,3); return bytes; } @@ -947,6 +954,7 @@ void AtomVecSpin::force_clear(int n, size_t nbytes) { memset(&atom->f[0][0],0,3*nbytes); memset(&atom->fm[0][0],0,3*nbytes); + memset(&atom->fm_long[0][0],0,3*nbytes); } diff --git a/src/SPIN/atom_vec_spin.h b/src/SPIN/atom_vec_spin.h index 34bc55b99f..1f1c34df52 100644 --- a/src/SPIN/atom_vec_spin.h +++ b/src/SPIN/atom_vec_spin.h @@ -68,10 +68,12 @@ class AtomVecSpin : public AtomVec { int *type,*mask; imageint *image; double **x,**v,**f; // lattice quantities - double **sp,**fm; // spin quantities - // sp[i][0-2] direction of the spin i + + // spin quantities + double **sp; // sp[i][0-2] direction of the spin i // sp[i][3] atomic magnetic moment of the spin i - + double **fm; // fm[i][0-2] direction of magnetic precession + double **fm_long; // storage of long-range spin prec. components }; } diff --git a/src/SPIN/pair_spin_exchange.cpp b/src/SPIN/pair_spin_exchange.cpp index cc074bb97d..74570afbce 100644 --- a/src/SPIN/pair_spin_exchange.cpp +++ b/src/SPIN/pair_spin_exchange.cpp @@ -441,8 +441,6 @@ void PairSpinExchange::allocate() memory->create(cutsq,n+1,n+1,"pair:cutsq"); } - - /* ---------------------------------------------------------------------- proc 0 writes to restart file ------------------------------------------------------------------------- */ @@ -527,4 +525,3 @@ void PairSpinExchange::read_restart_settings(FILE *fp) MPI_Bcast(&offset_flag,1,MPI_INT,0,world); MPI_Bcast(&mix_flag,1,MPI_INT,0,world); } - diff --git a/src/SPIN/pair_spin_long.cpp b/src/SPIN/pair_spin_long.cpp index 95c4e6b5a9..ca4f3d5e24 100644 --- a/src/SPIN/pair_spin_long.cpp +++ b/src/SPIN/pair_spin_long.cpp @@ -13,19 +13,19 @@ /* ------------------------------------------------------------------------ Contributing authors: Julien Tranchida (SNL) - Stan Moore (SNL) - - Please cite the related publication: - Tranchida, J., Plimpton, S. J., Thibaudeau, P., & Thompson, A. P. (2018). - Massively parallel symplectic algorithm for coupled magnetic spin dynamics - and molecular dynamics. arXiv preprint arXiv:1801.10233. -------------------------------------------------------------------------- */ + Aidan Thompson (SNL) + Please cite the related publication: + Tranchida, J., Plimpton, S. J., Thibaudeau, P., & Thompson, A. P. (2018). + Massively parallel symplectic algorithm for coupled magnetic spin dynamics + and molecular dynamics. Journal of Computational Physics. +------------------------------------------------------------------------- */ #include #include #include #include + #include "pair_spin_long.h" #include "atom.h" #include "comm.h" @@ -80,10 +80,154 @@ PairSpinLong::~PairSpinLong() { if (allocated) { memory->destroy(setflag); - memory->destroy(cutsq); + memory->destroy(cut_spin_long); } } +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairSpinLong::settings(int narg, char **arg) +{ + if (narg < 1 || narg > 2) + error->all(FLERR,"Incorrect args in pair_style command"); + + if (strcmp(update->unit_style,"metal") != 0) + error->all(FLERR,"Spin simulations require metal unit style"); + + cut_spin_long_global = force->numeric(FLERR,arg[0]); + //cut_spin = force->numeric(FLERR,arg[0]); + + // reset cutoffs that have been explicitly set + + if (allocated) { + int i,j; + for (i = 1; i <= atom->ntypes; i++) { + for (j = i+1; j <= atom->ntypes; j++) { + if (setflag[i][j]) { + cut_spin_long[i][j] = cut_spin_long_global; + } + } + } + } + +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more type pairs +------------------------------------------------------------------------- */ + +void PairSpinLong::coeff(int narg, char **arg) +{ + if (!allocated) allocate(); + + // check if args correct + + if (strcmp(arg[2],"long") != 0) + error->all(FLERR,"Incorrect args in pair_style command"); + if (narg != 3) + error->all(FLERR,"Incorrect args in pair_style command"); + + int ilo,ihi,jlo,jhi; + force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); + force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); + + double spin_long_cut_one = force->numeric(FLERR,arg[3]); + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + for (int j = MAX(jlo,i); j <= jhi; j++) { + setflag[i][j] = 1; + cut_spin_long[i][j] = spin_long_cut_one; + count++; + } + } + + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); +} + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairSpinLong::init_style() +{ + if (!atom->sp_flag) + error->all(FLERR,"Pair spin requires atom/spin style"); + + // need a full neighbor list + + int irequest = neighbor->request(this,instance_me); + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; + + // checking if nve/spin is a listed fix + + int ifix = 0; + while (ifix < modify->nfix) { + if (strcmp(modify->fix[ifix]->style,"nve/spin") == 0) break; + ifix++; + } + if (ifix == modify->nfix) + error->all(FLERR,"pair/spin style requires nve/spin"); + + // get the lattice_flag from nve/spin + + for (int i = 0; i < modify->nfix; i++) { + if (strcmp(modify->fix[i]->style,"nve/spin") == 0) { + lockfixnvespin = (FixNVESpin *) modify->fix[i]; + lattice_flag = lockfixnvespin->lattice_flag; + } + } + + // insure use of KSpace long-range solver, set g_ewald + + if (force->kspace == NULL) + error->all(FLERR,"Pair style requires a KSpace style"); + + g_ewald = force->kspace->g_ewald; + +} + +/* ---------------------------------------------------------------------- + init for one type pair i,j and corresponding j,i +------------------------------------------------------------------------- */ + +double PairSpinLong::init_one(int i, int j) +{ + if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + + cut_spin_long[j][i] = cut_spin_long[i][j]; + + return cut_spin_long_global; +} + +/* ---------------------------------------------------------------------- + extract the larger cutoff if "cut" or "cut_coul" +------------------------------------------------------------------------- */ + +void *PairSpinLong::extract(const char *str, int &dim) +{ + if (strcmp(str,"cut") == 0) { + dim = 0; + return (void *) &cut_spin_long_global; + } else if (strcmp(str,"cut_coul") == 0) { + dim = 0; + return (void *) &cut_spin_long_global; + } else if (strcmp(str,"ewald_order") == 0) { + ewald_order = 0; + ewald_order |= 1<<1; + ewald_order |= 1<<3; + dim = 0; + return (void *) &ewald_order; + } else if (strcmp(str,"ewald_mix") == 0) { + dim = 0; + return (void *) &mix_flag; + } + return NULL; +} + /* ---------------------------------------------------------------------- */ void PairSpinLong::compute(int eflag, int vflag) @@ -95,6 +239,7 @@ void PairSpinLong::compute(int eflag, int vflag) double evdwl,ecoul; double xi[3],rij[3]; double spi[4],spj[4],fi[3],fmi[3]; + double local_cut2; double pre1,pre2,pre3; int *ilist,*jlist,*numneigh,**firstneigh; @@ -156,26 +301,25 @@ void PairSpinLong::compute(int eflag, int vflag) rij[2] = x[j][2] - xi[2]; rsq = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; - if (rsq < cutsq[itype][jtype]) { + local_cut2 = cut_spin_long[itype][jtype]*cut_spin_long[itype][jtype]; + + if (rsq < local_cut2) { r2inv = 1.0/rsq; rinv = sqrt(r2inv); - if (rsq < cut_spinsq) { - r = sqrt(rsq); - grij = g_ewald * r; - expm2 = exp(-grij*grij); - t = 1.0 / (1.0 + EWALD_P*grij); - erfc = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; + r = sqrt(rsq); + grij = g_ewald * r; + expm2 = exp(-grij*grij); + t = 1.0 / (1.0 + EWALD_P*grij); + erfc = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; - bij[0] = erfc * rinv; - bij[1] = (bij[0] + pre1*expm2) * r2inv; - bij[2] = (3.0*bij[1] + pre2*expm2) * r2inv; - bij[3] = (5.0*bij[2] + pre3*expm2) * r2inv; + bij[0] = erfc * rinv; + bij[1] = (bij[0] + pre1*expm2) * r2inv; + bij[2] = (3.0*bij[1] + pre2*expm2) * r2inv; + bij[3] = (5.0*bij[2] + pre3*expm2) * r2inv; - compute_long(i,j,rij,bij,fmi,spi,spj); - compute_long_mech(i,j,rij,bij,fmi,spi,spj); - - } + compute_long(i,j,rij,bij,fmi,spi,spj); + compute_long_mech(i,j,rij,bij,fmi,spi,spj); } // force accumulation @@ -194,7 +338,7 @@ void PairSpinLong::compute(int eflag, int vflag) } if (eflag) { - if (rsq <= cut_spinsq) { + if (rsq <= local_cut2) { evdwl -= spi[0]*fmi[0] + spi[1]*fmi[1] + spi[2]*fmi[2]; evdwl *= hbar; @@ -219,6 +363,7 @@ void PairSpinLong::compute_single_pair(int ii, double fmi[3]) double r,rinv,r2inv,rsq; double grij,expm2,t,erfc; double bij[4],xi[3],rij[3],spi[4],spj[4]; + double local_cut2; double pre1,pre2,pre3; int *ilist,*jlist,*numneigh,**firstneigh; @@ -267,25 +412,24 @@ void PairSpinLong::compute_single_pair(int ii, double fmi[3]) rij[2] = x[j][2] - xi[2]; rsq = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; - if (rsq < cutsq[itype][jtype]) { + local_cut2 = cut_spin_long[itype][jtype]*cut_spin_long[itype][jtype]; + + if (rsq < local_cut2) { r2inv = 1.0/rsq; rinv = sqrt(r2inv); - if (rsq < cut_spinsq) { - r = sqrt(rsq); - grij = g_ewald * r; - expm2 = exp(-grij*grij); - t = 1.0 / (1.0 + EWALD_P*grij); - erfc = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; + r = sqrt(rsq); + grij = g_ewald * r; + expm2 = exp(-grij*grij); + t = 1.0 / (1.0 + EWALD_P*grij); + erfc = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; - bij[0] = erfc * rinv; - bij[1] = (bij[0] + pre1*expm2) * r2inv; - bij[2] = (3.0*bij[1] + pre2*expm2) * r2inv; - bij[3] = (5.0*bij[2] + pre3*expm2) * r2inv; + bij[0] = erfc * rinv; + bij[1] = (bij[0] + pre1*expm2) * r2inv; + bij[2] = (3.0*bij[1] + pre2*expm2) * r2inv; + bij[3] = (5.0*bij[2] + pre3*expm2) * r2inv; - compute_long(i,j,rij,bij,fmi,spi,spj); - - } + compute_long(i,j,rij,bij,fmi,spi,spj); } } @@ -361,111 +505,7 @@ void PairSpinLong::allocate() for (int j = i; j <= n; j++) setflag[i][j] = 0; - memory->create(cutsq,n+1,n+1,"pair:cutsq"); -} - -/* ---------------------------------------------------------------------- - global settings -------------------------------------------------------------------------- */ - -void PairSpinLong::settings(int narg, char **arg) -{ - if (narg < 1 || narg > 2) - error->all(FLERR,"Incorrect args in pair_style command"); - - if (strcmp(update->unit_style,"metal") != 0) - error->all(FLERR,"Spin simulations require metal unit style"); - - cut_spin = force->numeric(FLERR,arg[0]); - -} - -/* ---------------------------------------------------------------------- - set coeffs for one or more type pairs -------------------------------------------------------------------------- */ - -void PairSpinLong::coeff(int narg, char **arg) -{ - if (narg < 4 || narg > 5) - error->all(FLERR,"Incorrect args for pair coefficients"); - if (!allocated) allocate(); - - // check if args correct - - if (strcmp(arg[2],"long") != 0) - error->all(FLERR,"Incorrect args in pair_style command"); - if (narg != 3) - error->all(FLERR,"Incorrect args in pair_style command"); - - int ilo,ihi,jlo,jhi; - force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); - force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); - - int count = 0; - for (int i = ilo; i <= ihi; i++) { - for (int j = MAX(jlo,i); j <= jhi; j++) { - 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 PairSpinLong::init_one(int i, int j) -{ - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); - - double cut = cut_spin; - return cut; -} - -/* ---------------------------------------------------------------------- - init specific to this pair style -------------------------------------------------------------------------- */ - -void PairSpinLong::init_style() -{ - if (!atom->sp_flag) - error->all(FLERR,"Pair spin requires atom/spin style"); - - // need a full neighbor list - - int irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->full = 1; - - // checking if nve/spin is a listed fix - - int ifix = 0; - while (ifix < modify->nfix) { - if (strcmp(modify->fix[ifix]->style,"nve/spin") == 0) break; - ifix++; - } - if (ifix == modify->nfix) - error->all(FLERR,"pair/spin style requires nve/spin"); - - // get the lattice_flag from nve/spin - - for (int i = 0; i < modify->nfix; i++) { - if (strcmp(modify->fix[i]->style,"nve/spin") == 0) { - lockfixnvespin = (FixNVESpin *) modify->fix[i]; - lattice_flag = lockfixnvespin->lattice_flag; - } - } - - // insure use of KSpace long-range solver, set g_ewald - - if (force->kspace == NULL) - error->all(FLERR,"Pair style requires a KSpace style"); - - g_ewald = force->kspace->g_ewald; - - cut_spinsq = cut_spin * cut_spin; + memory->create(cut_spin_long,n+1,n+1,"pair:cut_spin_long"); } /* ---------------------------------------------------------------------- @@ -477,10 +517,14 @@ void PairSpinLong::write_restart(FILE *fp) write_restart_settings(fp); int i,j; - for (i = 1; i <= atom->ntypes; i++) + 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(&cut_spin_long[i][j],sizeof(int),1,fp); + } } + } } /* ---------------------------------------------------------------------- @@ -495,11 +539,18 @@ void PairSpinLong::read_restart(FILE *fp) int i,j; int me = comm->me; - for (i = 1; i <= atom->ntypes; i++) + for (i = 1; i <= atom->ntypes; i++) { for (j = i; j <= atom->ntypes; j++) { if (me == 0) fread(&setflag[i][j],sizeof(int),1,fp); MPI_Bcast(&setflag[i][j],1,MPI_INT,0,world); + if (setflag[i][j]) { + if (me == 0) { + fread(&cut_spin_long[i][j],sizeof(int),1,fp); + } + MPI_Bcast(&cut_spin_long[i][j],1,MPI_INT,0,world); + } } + } } /* ---------------------------------------------------------------------- @@ -508,7 +559,7 @@ void PairSpinLong::read_restart(FILE *fp) void PairSpinLong::write_restart_settings(FILE *fp) { - fwrite(&cut_spin,sizeof(double),1,fp); + fwrite(&cut_spin_long_global,sizeof(double),1,fp); fwrite(&mix_flag,sizeof(int),1,fp); } @@ -519,32 +570,9 @@ void PairSpinLong::write_restart_settings(FILE *fp) void PairSpinLong::read_restart_settings(FILE *fp) { if (comm->me == 0) { - fread(&cut_spin,sizeof(double),1,fp); + fread(&cut_spin_long_global,sizeof(double),1,fp); fread(&mix_flag,sizeof(int),1,fp); } - MPI_Bcast(&cut_spin,1,MPI_DOUBLE,0,world); + MPI_Bcast(&cut_spin_long_global,1,MPI_DOUBLE,0,world); MPI_Bcast(&mix_flag,1,MPI_INT,0,world); } - -/* ---------------------------------------------------------------------- */ - -void *PairSpinLong::extract(const char *str, int &dim) -{ - if (strcmp(str,"cut") == 0) { - dim = 0; - return (void *) &cut_spin; - } else if (strcmp(str,"cut_coul") == 0) { - dim = 0; - return (void *) &cut_spin; - } else if (strcmp(str,"ewald_order") == 0) { - ewald_order = 0; - ewald_order |= 1<<1; - ewald_order |= 1<<3; - dim = 0; - return (void *) &ewald_order; - } else if (strcmp(str,"ewald_mix") == 0) { - dim = 0; - return (void *) &mix_flag; - } - return NULL; -} diff --git a/src/SPIN/pair_spin_long.h b/src/SPIN/pair_spin_long.h index 867b771f74..0cdf6d2b80 100644 --- a/src/SPIN/pair_spin_long.h +++ b/src/SPIN/pair_spin_long.h @@ -49,6 +49,8 @@ class PairSpinLong : public PairSpin { void read_restart(FILE *); void write_restart_settings(FILE *); void read_restart_settings(FILE *); + + double cut_spin_long_global; // global long cutoff distance protected: double hbar; // reduced Planck's constant @@ -56,7 +58,8 @@ class PairSpinLong : public PairSpin { double mu_0; // vacuum permeability double mub2mu0; // prefactor for mech force double mub2mu0hbinv; // prefactor for mag force - double cut_spin, cut_spinsq; + + double **cut_spin_long; // cutoff distance long double g_ewald; int ewald_order; From cf1d421e10cf384098210c32cf3ea2374baf55e9 Mon Sep 17 00:00:00 2001 From: julient31 Date: Thu, 23 Aug 2018 15:18:30 -0600 Subject: [PATCH 005/311] Commit JT 082318 - corrected memory errors in pppm_dipole and pppm_dipole_spin - created fm_long in atom_vec_spin - fm_long added to fm in initial_integrate (in ComputeInteractionsSpin) --- .../SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy | 1 + .../exchange_fit_hcp_co/exchange_fit.py | 32 +++++++ .../exchange_fit_hcp_co/exchange_hcp_co.dat | 9 ++ examples/SPIN/pppm_spin/in.dipole.pppm_dipole | 55 +++++++++++ examples/SPIN/pppm_spin/in.spin.pppm_spin | 61 ++++++++++++ src/KSPACE/pppm.cpp | 6 +- src/KSPACE/pppm_dipole.cpp | 93 +++++++++---------- src/KSPACE/pppm_dipole.h | 8 +- src/KSPACE/pppm_dipole_spin.cpp | 84 +++++++++-------- src/KSPACE/pppm_dipole_spin.h | 1 - src/SPIN/atom_vec_spin.cpp | 1 - src/SPIN/fix_nve_spin.cpp | 18 ++++ src/SPIN/fix_nve_spin.h | 3 +- src/SPIN/pair_spin_long.cpp | 11 ++- src/atom.cpp | 3 +- src/atom.h | 1 + src/pair.h | 2 +- 17 files changed, 288 insertions(+), 101 deletions(-) create mode 120000 examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy create mode 100644 examples/SPIN/pppm_spin/exchange_fit_hcp_co/exchange_fit.py create mode 100644 examples/SPIN/pppm_spin/exchange_fit_hcp_co/exchange_hcp_co.dat create mode 100644 examples/SPIN/pppm_spin/in.dipole.pppm_dipole create mode 100644 examples/SPIN/pppm_spin/in.spin.pppm_spin diff --git a/examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy b/examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy new file mode 120000 index 0000000000..6a47c9eebe --- /dev/null +++ b/examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy @@ -0,0 +1 @@ +../cobalt_fcc/Co_PurjaPun_2012.eam.alloy \ No newline at end of file diff --git a/examples/SPIN/pppm_spin/exchange_fit_hcp_co/exchange_fit.py b/examples/SPIN/pppm_spin/exchange_fit_hcp_co/exchange_fit.py new file mode 100644 index 0000000000..fa7dba417e --- /dev/null +++ b/examples/SPIN/pppm_spin/exchange_fit_hcp_co/exchange_fit.py @@ -0,0 +1,32 @@ +#Program fitting the exchange interaction +#Model curve: Bethe-Slater function +import numpy as np, pylab, tkinter +import matplotlib.pyplot as plt +from scipy.optimize import curve_fit +from decimal import * + +print("Loop begin") + +#Definition of the Bethe-Slater function +def func(x,a,b,c): + return 4*a*((x/c)**2)*(1-b*(x/c)**2)*np.exp(-(x/c)**2) + +#Exchange coeff table (data to fit) +rdata, Jdata = np.loadtxt('exchange_hcp_co.dat', usecols=(0,1), unpack=True) +plt.plot(rdata, Jdata, 'b-', label='data') + +#Perform the fit +popt, pcov = curve_fit(func, rdata, Jdata, bounds=(0, [500.,5.,5.])) +plt.plot(rdata, func(rdata, *popt), 'r--', label='fit') + +#Print the fitted params +print("Parameters: a={:.10} (in meV), b={:.10} (adim), c={:.10} (in Ang)".format(*popt)) + +#Ploting the result +plt.xlabel('r_ij') +pylab.xlim([0,6.5]) +plt.ylabel('J_ij') +plt.legend() +plt.show() + +print("Loop end") diff --git a/examples/SPIN/pppm_spin/exchange_fit_hcp_co/exchange_hcp_co.dat b/examples/SPIN/pppm_spin/exchange_fit_hcp_co/exchange_hcp_co.dat new file mode 100644 index 0000000000..0968fa3edb --- /dev/null +++ b/examples/SPIN/pppm_spin/exchange_fit_hcp_co/exchange_hcp_co.dat @@ -0,0 +1,9 @@ +2.25569176882662 73.37931034482759 +2.3817863397548162 47.99999999999999 +2.4518388791593697 34.39080459770115 +2.507880910683012 31.816091954022987 +2.5359019264448337 28.137931034482747 +2.5779334500875657 25.011494252873554 +2.6339754816112086 19.126436781609186 +2.760070052539404 13.241379310344826 +3.5446584938704033 6.068965517241367 diff --git a/examples/SPIN/pppm_spin/in.dipole.pppm_dipole b/examples/SPIN/pppm_spin/in.dipole.pppm_dipole new file mode 100644 index 0000000000..804ddad1e2 --- /dev/null +++ b/examples/SPIN/pppm_spin/in.dipole.pppm_dipole @@ -0,0 +1,55 @@ +# 3d Lennard-Jones melt + +units lj +#atom_style charge +atom_style hybrid sphere dipole +processors * 1 1 + +lattice fcc 0.8442 +#region box block 0 10 0 10 0 10 +region box block 0 5 0 5 0 5 +create_box 3 box +create_atoms 1 box +mass * 1.0 + +region long block 3 6 0 10 0 10 +set region long type 2 +set group all dipole/random 98934 0.75 +#set type 1:2 charge 0.0 + +velocity all create 1.0 87287 + +#pair_style lj/long/coul/long long off 2.5 +#pair_coeff * * 1.0 1.0 2.5 +#pair_coeff * 2 1.0 1.0 5.0 +pair_style lj/cut/dipole/long 3.0 +pair_coeff * * 1.0 1.0 + +#kspace_style pppm/disp 1.0e-4 +kspace_style pppm/dipole 1.0e-4 +kspace_modify gewald/disp 0.1 + +neighbor 0.3 bin +neigh_modify every 2 delay 4 check yes + +group fast type 1 +group slow type 2 +fix 0 all balance 20 1.0 shift x 5 1.0 & + weight group 2 fast 1.0 slow 2.0 weight time 0.66 + +fix 1 all nve + +#dump id all atom 50 dump.melt + +#dump 2 all image 25 image.*.jpg type type & +# axes yes 0.8 0.02 view 60 -30 +#dump_modify 2 pad 3 + +#dump 3 all movie 25 movie.mpg type type & +# axes yes 0.8 0.02 view 60 -30 +#dump_modify 3 pad 3 + +#thermo 50 +thermo 1 +#run 500 +run 5 diff --git a/examples/SPIN/pppm_spin/in.spin.pppm_spin b/examples/SPIN/pppm_spin/in.spin.pppm_spin new file mode 100644 index 0000000000..87d18f4d16 --- /dev/null +++ b/examples/SPIN/pppm_spin/in.spin.pppm_spin @@ -0,0 +1,61 @@ +# hcp cobalt in a 3d periodic box + +clear +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice hcp 2.5071 +region box block 0.0 20.0 0.0 20.0 0.0 8.0 +create_box 1 box +create_atoms 1 box + +# setting mass, mag. moments, and interactions for hcp cobalt + +mass 1 58.93 + +#set group all spin/random 31 1.72 +set group all spin 1.72 0.0 0.0 1.0 +velocity all create 100 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/long 8.0 +#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 +pair_coeff * * eam/alloy ../examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy Co +pair_coeff * * spin/exchange exchange 4.0 0.3593 1.135028015e-05 1.064568567 +pair_coeff * * spin/long long 8.0 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +kspace_style pppm/dipole/spin 1.0e-4 + +#fix 1 all precession/spin zeeman 1.0 0.0 0.0 1.0 +fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 +fix 2 all langevin/spin 0.0 0.0 21 +fix 3 all nve/spin lattice yes + +timestep 0.0001 + + +compute out_mag all compute/spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magnorm v_emag temp etotal +thermo 10 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 100 all custom 1 dump_cobalt_hcp.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +run 20000 diff --git a/src/KSPACE/pppm.cpp b/src/KSPACE/pppm.cpp index 132389b7d6..8eec8e2542 100644 --- a/src/KSPACE/pppm.cpp +++ b/src/KSPACE/pppm.cpp @@ -100,6 +100,9 @@ PPPM::PPPM(LAMMPS *lmp, int narg, char **arg) : KSpace(lmp, narg, arg), nyhi_in = nylo_in = nyhi_out = nylo_out = 0; nzhi_in = nzlo_in = nzhi_out = nzlo_out = 0; + // test + nlower = nupper = 0; + density_brick = vdx_brick = vdy_brick = vdz_brick = NULL; density_fft = NULL; u_brick = NULL; @@ -1428,12 +1431,13 @@ void PPPM::set_grid_local() double zprd = prd[2]; double zprd_slab = zprd*slab_volfactor; - double dist[3]; + double dist[3] = {0.0,0.0,0.0}; double cuthalf = 0.5*neighbor->skin + qdist; if (triclinic == 0) dist[0] = dist[1] = dist[2] = cuthalf; else kspacebbox(cuthalf,&dist[0]); int nlo,nhi; + nlo = nhi = 0; nlo = static_cast ((sublo[0]-dist[0]-boxlo[0]) * nx_pppm/xprd + shift) - OFFSET; diff --git a/src/KSPACE/pppm_dipole.cpp b/src/KSPACE/pppm_dipole.cpp index a03f5b9980..4d2b594af8 100644 --- a/src/KSPACE/pppm_dipole.cpp +++ b/src/KSPACE/pppm_dipole.cpp @@ -116,9 +116,10 @@ void PPPMDipole::init() // error check dipoleflag = atom->mu?1:0; - qsum_qsq(0); + qsum_qsq(0); // q[i] might not be declared ? + if (dipoleflag && q2) - error->all(FLERR,"Cannot (yet) uses charges with Kspace style PPPMDipole"); + error->all(FLERR,"Cannot (yet) use charges with Kspace style PPPMDipole"); triclinic_check(); @@ -168,7 +169,9 @@ void PPPMDipole::init() cutoff = *p_cutoff; // kspace TIP4P not yet supported + // qdist = offset only for TIP4P fictitious charge + qdist = 0.0; if (tip4pflag) error->all(FLERR,"Cannot yet use TIP4P with PPPMDipole"); @@ -206,7 +209,7 @@ void PPPMDipole::init() "beyond nearest neighbor processor"); compute_gf_denom(); - set_grid_global(mu2); + set_grid_global(); set_grid_local(); if (overlap_allowed) break; @@ -235,7 +238,7 @@ void PPPMDipole::init() // calculate the final accuracy - double estimated_accuracy = final_accuracy_dipole(mu2); + double estimated_accuracy = final_accuracy_dipole(); // print stats @@ -607,7 +610,7 @@ void PPPMDipole::allocate() // summation coeffs order_allocated = order; - memory->create(gf_b,order,"pppm_dipole:gf_b"); + if (!gf_b) memory->create(gf_b,order,"pppm_dipole:gf_b"); memory->create2d_offset(rho1d,3,-order/2,order/2,"pppm_dipole:rho1d"); memory->create2d_offset(drho1d,3,-order/2,order/2,"pppm_dipole:drho1d"); memory->create2d_offset(rho_coeff,order,(1-order)/2,order/2,"pppm_dipole:rho_coeff"); @@ -791,7 +794,8 @@ void PPPMDipole::deallocate_peratom() used for charge accumulation, FFTs, and electric field interpolation ------------------------------------------------------------------------- */ -void PPPMDipole::set_grid_global(double dipole2) +//void PPPMDipole::set_grid_global(double dipole2) +void PPPMDipole::set_grid_global() { // use xprd,yprd,zprd // adjust z dimension for 2d slab PPPMDipole @@ -813,14 +817,11 @@ void PPPMDipole::set_grid_global(double dipole2) if (!gewaldflag) { if (accuracy <= 0.0) error->all(FLERR,"KSpace accuracy must be > 0"); - //if (mu2 == 0.0) - if (dipole2 == 0.0) + if (mu2 == 0.0) error->all(FLERR,"Must use kspace_modify gewald for systems with no dipoles"); g_ewald = (1.35 - 0.15*log(accuracy))/cutoff; - //Try Newton Solver double g_ewald_new = - find_gewald_dipole(g_ewald,cutoff,natoms,xprd*yprd*zprd,dipole2); - //find_gewald_dipole(g_ewald,cutoff,natoms,xprd*yprd*zprd,mu2); + find_gewald_dipole(g_ewald,cutoff,natoms,xprd*yprd*zprd,mu2); if (g_ewald_new > 0.0) g_ewald = g_ewald_new; else error->warning(FLERR,"PPPMDipole dipole Newton solver failed, " "using old method to estimate g_ewald"); @@ -837,6 +838,7 @@ void PPPMDipole::set_grid_global(double dipole2) while (1) { // set grid dimension + nx_pppm = static_cast (xprd/h_x); ny_pppm = static_cast (yprd/h_y); nz_pppm = static_cast (zprd_slab/h_z); @@ -845,7 +847,8 @@ void PPPMDipole::set_grid_global(double dipole2) if (ny_pppm <= 1) ny_pppm = 2; if (nz_pppm <= 1) nz_pppm = 2; - //set local grid dimension + // set local grid dimension + int npey_fft,npez_fft; if (nz_pppm >= nprocs) { npey_fft = 1; @@ -862,7 +865,7 @@ void PPPMDipole::set_grid_global(double dipole2) nzlo_fft = me_z*nz_pppm/npez_fft; nzhi_fft = (me_z+1)*nz_pppm/npez_fft - 1; - double df_kspace = compute_df_kspace_dipole(dipole2); + double df_kspace = compute_df_kspace_dipole(); count++; @@ -895,7 +898,7 @@ void PPPMDipole::set_grid_global(double dipole2) compute estimated kspace force error for dipoles ------------------------------------------------------------------------- */ -double PPPMDipole::compute_df_kspace_dipole(double dipole2) +double PPPMDipole::compute_df_kspace_dipole() { double xprd = domain->xprd; double yprd = domain->yprd; @@ -903,8 +906,7 @@ double PPPMDipole::compute_df_kspace_dipole(double dipole2) double zprd_slab = zprd*slab_volfactor; bigint natoms = atom->natoms; double qopt = compute_qopt_dipole(); - //double df_kspace = sqrt(qopt/natoms)*mu2/(3.0*xprd*yprd*zprd_slab); - double df_kspace = sqrt(qopt/natoms)*dipole2/(3.0*xprd*yprd*zprd_slab); + double df_kspace = sqrt(qopt/natoms)*mu2/(3.0*xprd*yprd*zprd_slab); return df_kspace; } @@ -1101,27 +1103,27 @@ void PPPMDipole::compute_gf_dipole() calculate f(x) for use in Newton-Raphson solver ------------------------------------------------------------------------- */ -//double PPPMDipole::newton_raphson_f() -//{ -// double xprd = domain->xprd; -// double yprd = domain->yprd; -// double zprd = domain->zprd; -// bigint natoms = atom->natoms; -// -// double df_rspace,df_kspace; -// double vol = xprd*yprd*zprd; -// double a = cutoff*g_ewald; -// double rg2 = a*a; -// double rg4 = rg2*rg2; -// double rg6 = rg4*rg2; -// double Cc = 4.0*rg4 + 6.0*rg2 + 3.0; -// double Dc = 8.0*rg6 + 20.0*rg4 + 30.0*rg2 + 15.0; -// df_rspace = (mu2/(sqrt(vol*powint(g_ewald,4)*powint(cutoff,9)*natoms)) * -// sqrt(13.0/6.0*Cc*Cc + 2.0/15.0*Dc*Dc - 13.0/15.0*Cc*Dc) * exp(-rg2)); -// df_kspace = compute_df_kspace_dipole(); -// -// return df_rspace - df_kspace; -//} +double PPPMDipole::newton_raphson_f() +{ + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + bigint natoms = atom->natoms; + + double df_rspace,df_kspace; + double vol = xprd*yprd*zprd; + double a = cutoff*g_ewald; + double rg2 = a*a; + double rg4 = rg2*rg2; + double rg6 = rg4*rg2; + double Cc = 4.0*rg4 + 6.0*rg2 + 3.0; + double Dc = 8.0*rg6 + 20.0*rg4 + 30.0*rg2 + 15.0; + df_rspace = (mu2/(sqrt(vol*powint(g_ewald,4)*powint(cutoff,9)*natoms)) * + sqrt(13.0/6.0*Cc*Cc + 2.0/15.0*Dc*Dc - 13.0/15.0*Cc*Dc) * exp(-rg2)); + df_kspace = compute_df_kspace_dipole(); + + return df_rspace - df_kspace; +} /* ---------------------------------------------------------------------- find g_ewald parameter for dipoles based on desired accuracy @@ -1184,7 +1186,7 @@ double PPPMDipole::derivf_dipole(double x, double Rc, calculate the final estimate of the accuracy ------------------------------------------------------------------------- */ -double PPPMDipole::final_accuracy_dipole(double dipole2) +double PPPMDipole::final_accuracy_dipole() { double xprd = domain->xprd; double yprd = domain->yprd; @@ -1193,7 +1195,7 @@ double PPPMDipole::final_accuracy_dipole(double dipole2) bigint natoms = atom->natoms; if (natoms == 0) natoms = 1; // avoid division by zero - double df_kspace = compute_df_kspace_dipole(mu2); + double df_kspace = compute_df_kspace_dipole(); double a = cutoff*g_ewald; double rg2 = a*a; @@ -1201,10 +1203,7 @@ double PPPMDipole::final_accuracy_dipole(double dipole2) double rg6 = rg4*rg2; double Cc = 4.0*rg4 + 6.0*rg2 + 3.0; double Dc = 8.0*rg6 + 20.0*rg4 + 30.0*rg2 + 15.0; - //double df_rspace = (mu2/(sqrt(vol*powint(g_ewald,4)*powint(cutoff,9)*natoms)) * - // sqrt(13.0/6.0*Cc*Cc + 2.0/15.0*Dc*Dc - 13.0/15.0*Cc*Dc) * - // exp(-rg2)); - double df_rspace = (dipole2/(sqrt(vol*powint(g_ewald,4)*powint(cutoff,9)*natoms)) * + double df_rspace = (mu2/(sqrt(vol*powint(g_ewald,4)*powint(cutoff,9)*natoms)) * sqrt(13.0/6.0*Cc*Cc + 2.0/15.0*Dc*Dc - 13.0/15.0*Cc*Dc) * exp(-rg2)); @@ -2521,11 +2520,11 @@ double PPPMDipole::memory_usage() double bytes = nmax*3 * sizeof(double); int nbrick = (nxhi_out-nxlo_out+1) * (nyhi_out-nylo_out+1) * (nzhi_out-nzlo_out+1); - bytes += 6 * nfft_both * sizeof(double); // vg - bytes += nfft_both * sizeof(double); // greensfn + bytes += 6 * nfft_both * sizeof(double); // vg + bytes += nfft_both * sizeof(double); // greensfn bytes += nfft_both*5 * sizeof(FFT_SCALAR); // work*2*2 - bytes += 9 * nbrick * sizeof(FFT_SCALAR); // ubrick*3 + vdbrick*6 - bytes += nfft_both*7 * sizeof(FFT_SCALAR); //density_ffx*3 + work*2*2 + bytes += 9 * nbrick * sizeof(FFT_SCALAR); // ubrick*3 + vdbrick*6 + bytes += nfft_both*7 * sizeof(FFT_SCALAR); // density_ffx*3 + work*2*2 if (peratom_allocate_flag) bytes += 21 * nbrick * sizeof(FFT_SCALAR); diff --git a/src/KSPACE/pppm_dipole.h b/src/KSPACE/pppm_dipole.h index 8db28b540a..52bd2e5a9d 100644 --- a/src/KSPACE/pppm_dipole.h +++ b/src/KSPACE/pppm_dipole.h @@ -37,8 +37,8 @@ class PPPMDipole : public PPPM { double memory_usage(); protected: - void set_grid_global(double); - //double newton_raphson_f(); + void set_grid_global(); + double newton_raphson_f(); void allocate(); void allocate_peratom(); @@ -76,7 +76,7 @@ class PPPMDipole : public PPPM { double find_gewald_dipole(double, double, bigint, double, double); double newton_raphson_f_dipole(double, double, bigint, double, double); double derivf_dipole(double, double, bigint, double, double); - double compute_df_kspace_dipole(double); + double compute_df_kspace_dipole(); double compute_qopt_dipole(); void compute_gf_dipole(); void make_rho_dipole(); @@ -85,7 +85,7 @@ class PPPMDipole : public PPPM { void poisson_peratom_dipole(); void fieldforce_ik_dipole(); void fieldforce_peratom_dipole(); - double final_accuracy_dipole(double dipole2); + double final_accuracy_dipole(); void musum_musq(); }; diff --git a/src/KSPACE/pppm_dipole_spin.cpp b/src/KSPACE/pppm_dipole_spin.cpp index 4fde7ba101..a5aee7150c 100644 --- a/src/KSPACE/pppm_dipole_spin.cpp +++ b/src/KSPACE/pppm_dipole_spin.cpp @@ -50,8 +50,8 @@ using namespace MathSpecial; #define SMALL 0.00001 #define EPS_HOC 1.0e-7 -enum{REVERSE_SP}; -enum{FORWARD_SP,FORWARD_SP_PERATOM}; +enum{REVERSE_MU}; +enum{FORWARD_MU,FORWARD_MU_PERATOM}; #ifdef FFT_SINGLE #define ZEROF 0.0f @@ -68,10 +68,12 @@ PPPMDipoleSpin::PPPMDipoleSpin(LAMMPS *lmp, int narg, char **arg) : { dipoleflag = 0; spinflag = 1; - group_group_enable = 0; - - cg_dipole = NULL; - cg_peratom_dipole = NULL; + + hbar = force->hplanck/MY_2PI; // eV/(rad.THz) + mub = 5.78901e-5; // in eV/T + mu_0 = 1.2566370614e-6; // in T.m/A + mub2mu0 = mub * mub * mu_0; // in eV + mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz } /* ---------------------------------------------------------------------- @@ -104,7 +106,10 @@ void PPPMDipoleSpin::init() // error check spinflag = atom->sp?1:0; - + //qsum_qsq(0); // q[i] is probably not declared ? + //if (spinflag && q2) + // error->all(FLERR,"Cannot use charges with Kspace style PPPMDipoleSpin"); + triclinic_check(); if (triclinic != domain->triclinic) @@ -118,8 +123,8 @@ void PPPMDipoleSpin::init() if (!atom->sp) error->all(FLERR,"Kspace style requires atom attribute sp"); - if (atom->sp && differentiation_flag == 1) error->all(FLERR,"Cannot (yet) use kspace_modify diff" - " ad with spins"); + if (atom->sp && differentiation_flag == 1) error->all(FLERR,"Cannot (yet) use" + " kspace_modify diff ad with spins"); if (spinflag && strcmp(update->unit_style,"metal") != 0) error->all(FLERR,"'metal' units have to be used with spins"); @@ -148,21 +153,19 @@ void PPPMDipoleSpin::init() int itmp = 0; double *p_cutoff = (double *) force->pair->extract("cut_coul",itmp); + // probably not the correct extract here if (p_cutoff == NULL) error->all(FLERR,"KSpace style is incompatible with Pair style"); cutoff = *p_cutoff; // kspace TIP4P not yet supported - + // qdist = offset only for TIP4P fictitious charge + + qdist = 0.0; if (tip4pflag) error->all(FLERR,"Cannot yet use TIP4P with PPPMDipoleSpin"); scale = 1.0; - hbar = force->hplanck/MY_2PI; // eV/(rad.THz) - mub = 5.78901e-5; // in eV/T - mu_0 = 1.2566370614e-6; // in T.m/A - mub2mu0 = mub * mub * mu_0; // in eV - mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz spsum_spsq(); natoms_original = atom->natoms; @@ -188,14 +191,14 @@ void PPPMDipoleSpin::init() GridComm *cgtmp = NULL; int iteration = 0; - + while (order >= minorder) { if (iteration && me == 0) error->warning(FLERR,"Reducing PPPMDipoleSpin order b/c stencil extends " "beyond nearest neighbor processor"); compute_gf_denom(); - set_grid_global(sp2); + set_grid_global(); set_grid_local(); if (overlap_allowed) break; @@ -224,7 +227,7 @@ void PPPMDipoleSpin::init() // calculate the final accuracy - double estimated_accuracy = final_accuracy_dipole(sp2); + double estimated_accuracy = final_accuracy_dipole(); // print stats @@ -310,7 +313,7 @@ void PPPMDipoleSpin::compute(int eflag, int vflag) // return if there are no spins - if (spsqsum == 0.0) return; + if (musqsum == 0.0) return; // convert atoms from box to lamda coords @@ -334,7 +337,7 @@ void PPPMDipoleSpin::compute(int eflag, int vflag) // to fully sum contribution in their 3d bricks // remap from 3d decomposition to FFT decomposition - cg_dipole->reverse_comm(this,REVERSE_SP); + cg_dipole->reverse_comm(this,REVERSE_MU); brick2fft_dipole(); // compute potential gradient on my FFT grid and @@ -347,12 +350,12 @@ void PPPMDipoleSpin::compute(int eflag, int vflag) // all procs communicate E-field values // to fill ghost cells surrounding their 3d bricks - cg_dipole->forward_comm(this,FORWARD_SP); + cg_dipole->forward_comm(this,FORWARD_MU); // extra per-atom energy/virial communication if (evflag_atom) { - cg_peratom_dipole->forward_comm(this,FORWARD_SP_PERATOM); + cg_peratom_dipole->forward_comm(this,FORWARD_MU_PERATOM); } // calculate the force on my particles @@ -374,7 +377,7 @@ void PPPMDipoleSpin::compute(int eflag, int vflag) energy = energy_all; energy *= 0.5*volume; - energy -= spsqsum*2.0*g3/3.0/MY_PIS; + energy -= musqsum*2.0*g3/3.0/MY_PIS; energy *= spscale; } @@ -510,7 +513,7 @@ void PPPMDipoleSpin::fieldforce_ik_spin() double spx,spy,spz; double **x = atom->x; double **f = atom->f; - double **fm = atom->fm; + double **fm_long = atom->fm_long; int nlocal = atom->nlocal; @@ -548,7 +551,7 @@ void PPPMDipoleSpin::fieldforce_ik_spin() } } - // convert M-field to mech. and mag. forces + // convert M-field and store mech. forces const double spfactor = mub2mu0 * scale; spx = sp[i][0]*sp[i][3]; @@ -558,13 +561,12 @@ void PPPMDipoleSpin::fieldforce_ik_spin() f[i][1] += spfactor*(vxy*spx + vyy*spy + vyz*spz); f[i][2] += spfactor*(vxz*spx + vyz*spy + vzz*spz); + // store long-range mag. precessions + const double spfactorh = mub2mu0hbinv * scale; - fm[i][0] += spfactorh*ex; - fm[i][1] += spfactorh*ey; - fm[i][2] += spfactorh*ez; - - // create a new vector (in atom_spin style ?) to store long-range fm tables - + fm_long[i][0] += spfactorh*ex; + fm_long[i][1] += spfactorh*ey; + fm_long[i][2] += spfactorh*ez; } } @@ -708,9 +710,11 @@ void PPPMDipoleSpin::slabcorr() // add on mag. force corrections double ffact = spscale * (-4.0*MY_PI/volume); - double **fm = atom->fm; + //double **fm = atom->fm; + double **fm_long = atom->fm_long; for (int i = 0; i < nlocal; i++) { - fm[i][2] += ffact * spin_all; + //fm[i][2] += ffact * spin_all; + fm_long[i][2] += ffact * spin_all; } } @@ -723,13 +727,13 @@ void PPPMDipoleSpin::spsum_spsq() { const int nlocal = atom->nlocal; - spsum = spsqsum = sp2 = 0.0; + musum = musqsum = mu2 = 0.0; if (atom->sp_flag) { double **sp = atom->sp; double spx, spy, spz; double spsum_local(0.0), spsqsum_local(0.0); - // not exactly the good loop: need to add norm of spins + // sum (direction x norm) of all spins for (int i = 0; i < nlocal; i++) { spx = sp[i][0]*sp[i][3]; @@ -739,12 +743,14 @@ void PPPMDipoleSpin::spsum_spsq() spsqsum_local += spx*spx + spy*spy + spz*spz; } - MPI_Allreduce(&spsum_local,&spsum,1,MPI_DOUBLE,MPI_SUM,world); - MPI_Allreduce(&spsqsum_local,&spsqsum,1,MPI_DOUBLE,MPI_SUM,world); + // store results into pppm_dipole quantities - sp2 = spsqsum * mub2mu0; + MPI_Allreduce(&spsum_local,&musum,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&spsqsum_local,&musqsum,1,MPI_DOUBLE,MPI_SUM,world); + + mu2 = musqsum * mub2mu0; } - if (sp2 == 0 && comm->me == 0) + if (mu2 == 0 && comm->me == 0) error->all(FLERR,"Using kspace solver PPPMDipoleSpin on system with no spins"); } diff --git a/src/KSPACE/pppm_dipole_spin.h b/src/KSPACE/pppm_dipole_spin.h index 347006e586..8d6c5d4eb2 100644 --- a/src/KSPACE/pppm_dipole_spin.h +++ b/src/KSPACE/pppm_dipole_spin.h @@ -42,7 +42,6 @@ class PPPMDipoleSpin : public PPPMDipole { // spin - double spsum,spsqsum,sp2; void make_rho_spin(); void fieldforce_ik_spin(); void fieldforce_peratom_spin(); diff --git a/src/SPIN/atom_vec_spin.cpp b/src/SPIN/atom_vec_spin.cpp index fb2b6dd797..477da613d2 100644 --- a/src/SPIN/atom_vec_spin.cpp +++ b/src/SPIN/atom_vec_spin.cpp @@ -106,7 +106,6 @@ void AtomVecSpin::grow_reset() sp = atom->sp; fm = atom->fm; fm_long = atom->fm_long; } - /* ---------------------------------------------------------------------- copy atom I info to atom J ------------------------------------------------------------------------- */ diff --git a/src/SPIN/fix_nve_spin.cpp b/src/SPIN/fix_nve_spin.cpp index b75f03212a..996bd3c2da 100644 --- a/src/SPIN/fix_nve_spin.cpp +++ b/src/SPIN/fix_nve_spin.cpp @@ -126,6 +126,7 @@ FixNVESpin::FixNVESpin(LAMMPS *lmp, int narg, char **arg) : // initialize the magnetic interaction flags pair_spin_flag = 0; + long_spin_flag = 0; precession_spin_flag = 0; maglangevin_flag = 0; tdamp_flag = temp_flag = 0; @@ -209,8 +210,16 @@ void FixNVESpin::init() if (count != npairspin) error->all(FLERR,"Incorrect number of spin pairs"); + // set pair/spin and long/spin flags + if (npairspin >= 1) pair_spin_flag = 1; + for (int i = 0; ipair_match("spin/long",0,i)) { + long_spin_flag = 1; + } + } + // ptrs FixPrecessionSpin classes int iforce; @@ -425,6 +434,7 @@ void FixNVESpin::ComputeInteractionsSpin(int i) double **sp = atom->sp; double **fm = atom->fm; + double **fm_long = atom->fm_long; // force computation for spin i @@ -442,6 +452,14 @@ void FixNVESpin::ComputeInteractionsSpin(int i) } } + // update magnetic long-range components + + if (long_spin_flag) { + fmi[0] += fm_long[i][0]; + fmi[1] += fm_long[i][1]; + fmi[2] += fm_long[i][2]; + } + // update magnetic precession interactions if (precession_spin_flag) { diff --git a/src/SPIN/fix_nve_spin.h b/src/SPIN/fix_nve_spin.h index afc1db14d6..565de13e92 100644 --- a/src/SPIN/fix_nve_spin.h +++ b/src/SPIN/fix_nve_spin.h @@ -58,7 +58,8 @@ friend class PairSpin; int nlocal_max; // max value of nlocal (for lists size) int pair_spin_flag; // magnetic pair flags - int precession_spin_flag; // magnetic precession flags + int long_spin_flag; // magnetic long-range flag + int precession_spin_flag; // magnetic precession flags int maglangevin_flag; // magnetic langevin flags int tdamp_flag, temp_flag; diff --git a/src/SPIN/pair_spin_long.cpp b/src/SPIN/pair_spin_long.cpp index ca4f3d5e24..efedea3247 100644 --- a/src/SPIN/pair_spin_long.cpp +++ b/src/SPIN/pair_spin_long.cpp @@ -81,6 +81,7 @@ PairSpinLong::~PairSpinLong() if (allocated) { memory->destroy(setflag); memory->destroy(cut_spin_long); + memory->destroy(cutsq); } } @@ -97,7 +98,6 @@ void PairSpinLong::settings(int narg, char **arg) error->all(FLERR,"Spin simulations require metal unit style"); cut_spin_long_global = force->numeric(FLERR,arg[0]); - //cut_spin = force->numeric(FLERR,arg[0]); // reset cutoffs that have been explicitly set @@ -126,7 +126,7 @@ void PairSpinLong::coeff(int narg, char **arg) if (strcmp(arg[2],"long") != 0) error->all(FLERR,"Incorrect args in pair_style command"); - if (narg != 3) + if (narg < 1 || narg > 4) error->all(FLERR,"Incorrect args in pair_style command"); int ilo,ihi,jlo,jhi; @@ -197,9 +197,9 @@ void PairSpinLong::init_style() double PairSpinLong::init_one(int i, int j) { if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); - + cut_spin_long[j][i] = cut_spin_long[i][j]; - + return cut_spin_long_global; } @@ -505,7 +505,8 @@ void PairSpinLong::allocate() for (int j = i; j <= n; j++) setflag[i][j] = 0; - memory->create(cut_spin_long,n+1,n+1,"pair:cut_spin_long"); + memory->create(cut_spin_long,n+1,n+1,"pair/spin/long:cut_spin_long"); + memory->create(cutsq,n+1,n+1,"pair/spin/long:cutsq"); } /* ---------------------------------------------------------------------- diff --git a/src/atom.cpp b/src/atom.cpp index cf4d20a71e..58b00712f7 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -98,7 +98,7 @@ Atom::Atom(LAMMPS *lmp) : Pointers(lmp) // SPIN package - sp = fm = NULL; + sp = fm = fm_long = NULL; // USER-DPD @@ -277,6 +277,7 @@ Atom::~Atom() memory->destroy(sp); memory->destroy(fm); + memory->destroy(fm_long); memory->destroy(vfrac); memory->destroy(s0); diff --git a/src/atom.h b/src/atom.h index 7e003dff5e..95c4a9c30f 100644 --- a/src/atom.h +++ b/src/atom.h @@ -65,6 +65,7 @@ class Atom : protected Pointers { double **sp; double **fm; + double **fm_long; // PERI package diff --git a/src/pair.h b/src/pair.h index f830b7c035..0b46d58782 100644 --- a/src/pair.h +++ b/src/pair.h @@ -61,7 +61,7 @@ class Pair : protected Pointers { int dispersionflag; // 1 if compatible with LJ/dispersion solver int tip4pflag; // 1 if compatible with TIP4P solver int dipoleflag; // 1 if compatible with dipole solver - int spinflag; // 1 if compatible with spin long solver + int spinflag; // 1 if compatible with spin solver int reinitflag; // 1 if compatible with fix adapt and alike int tail_flag; // pair_modify flag for LJ tail correction From 16911adcea92142dc01a550a733499fc1efea7b2 Mon Sep 17 00:00:00 2001 From: julient31 Date: Thu, 30 Aug 2018 07:33:25 -0600 Subject: [PATCH 006/311] Commit1 JT 083018 - started to work on ewald_dipole (not yet triclinic) - compiles and runs (no memory issue) - check the energy accuracy --- examples/SPIN/pppm_spin/in.dipole.pppm_dipole | 7 +- examples/SPIN/pppm_spin/in.spin.pppm_spin | 7 +- src/KSPACE/ewald_dipole.cpp | 847 ++++++++++++++++++ src/KSPACE/ewald_dipole.h | 104 +++ src/KSPACE/pppm.cpp | 3 - src/KSPACE/pppm_dipole.cpp | 8 +- src/KSPACE/pppm_dipole_spin.cpp | 2 - 7 files changed, 963 insertions(+), 15 deletions(-) create mode 100644 src/KSPACE/ewald_dipole.cpp create mode 100644 src/KSPACE/ewald_dipole.h diff --git a/examples/SPIN/pppm_spin/in.dipole.pppm_dipole b/examples/SPIN/pppm_spin/in.dipole.pppm_dipole index 804ddad1e2..c2c49e3caf 100644 --- a/examples/SPIN/pppm_spin/in.dipole.pppm_dipole +++ b/examples/SPIN/pppm_spin/in.dipole.pppm_dipole @@ -23,11 +23,12 @@ velocity all create 1.0 87287 #pair_coeff * * 1.0 1.0 2.5 #pair_coeff * 2 1.0 1.0 5.0 pair_style lj/cut/dipole/long 3.0 -pair_coeff * * 1.0 1.0 +pair_coeff * * 0.0 0.0 #kspace_style pppm/disp 1.0e-4 -kspace_style pppm/dipole 1.0e-4 -kspace_modify gewald/disp 0.1 +#kspace_style pppm/dipole 1.0e-4 +kspace_style ewald/dipole 1.0e-4 +kspace_modify gewald 0.1 neighbor 0.3 bin neigh_modify every 2 delay 4 check yes diff --git a/examples/SPIN/pppm_spin/in.spin.pppm_spin b/examples/SPIN/pppm_spin/in.spin.pppm_spin index 87d18f4d16..f7e462c343 100644 --- a/examples/SPIN/pppm_spin/in.spin.pppm_spin +++ b/examples/SPIN/pppm_spin/in.spin.pppm_spin @@ -11,7 +11,7 @@ boundary p p p atom_modify map array lattice hcp 2.5071 -region box block 0.0 20.0 0.0 20.0 0.0 8.0 +region box block 0.0 8.0 0.0 8.0 0.0 8.0 create_box 1 box create_atoms 1 box @@ -33,7 +33,7 @@ neighbor 0.1 bin neigh_modify every 10 check yes delay 20 kspace_style pppm/dipole/spin 1.0e-4 - +kspace_modify mesh 32 32 32 #fix 1 all precession/spin zeeman 1.0 0.0 0.0 1.0 fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 fix 2 all langevin/spin 0.0 0.0 21 @@ -58,4 +58,5 @@ thermo 10 compute outsp all property/atom spx spy spz sp fmx fmy fmz dump 100 all custom 1 dump_cobalt_hcp.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] -run 20000 +#run 20000 +run 1 diff --git a/src/KSPACE/ewald_dipole.cpp b/src/KSPACE/ewald_dipole.cpp new file mode 100644 index 0000000000..d03d93a7c5 --- /dev/null +++ b/src/KSPACE/ewald_dipole.cpp @@ -0,0 +1,847 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + 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 authors: Julien Tranchida (SNL) + Stan Moore (SNL) +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include +#include "ewald_dipole.h" +#include "atom.h" +#include "comm.h" +#include "force.h" +#include "pair.h" +#include "domain.h" +#include "math_const.h" +#include "memory.h" +#include "error.h" +#include "update.h" + +#include "math_const.h" +#include "math_special.h" + +using namespace LAMMPS_NS; +using namespace MathConst; + +#define SMALL 0.00001 + +/* ---------------------------------------------------------------------- */ + +EwaldDipole::EwaldDipole(LAMMPS *lmp, int narg, char **arg) : Ewald(lmp, narg, arg) +{ + ewaldflag = dipoleflag = 1; + group_group_enable = 0; + muk = NULL; +} + +/* ---------------------------------------------------------------------- + free all memory +------------------------------------------------------------------------- */ + +EwaldDipole::~EwaldDipole() +{ + memory->destroy(muk); +} + +/* ---------------------------------------------------------------------- + called once before run +------------------------------------------------------------------------- */ + +void EwaldDipole::init() +{ + if (comm->me == 0) { + if (screen) fprintf(screen,"EwaldDipole initialization ...\n"); + if (logfile) fprintf(logfile,"EwaldDipole initialization ...\n"); + } + + // error check + + dipoleflag = atom->mu?1:0; + qsum_qsq(0); // q[i] might not be declared ? + + if (dipoleflag && q2) + error->all(FLERR,"Cannot (yet) use charges with Kspace style EwaldDipole"); + + triclinic_check(); + + // set triclinic to 0 for now (no triclinic calc.) + triclinic = 0; + + if (triclinic) + error->all(FLERR,"Cannot (yet) use EwaldDipole with triclinic box"); + + if (domain->dimension == 2) + error->all(FLERR,"Cannot use EwaldDipole with 2d simulation"); + + if (!atom->mu) error->all(FLERR,"Kspace style requires atom attribute mu"); +//if (!atom->q_flag) error->all(FLERR,"Kspace style requires atom attribute q"); + + if (dipoleflag && strcmp(update->unit_style,"electron") == 0) + error->all(FLERR,"Cannot (yet) use 'electron' units with dipoles"); + + if (slabflag == 0 && domain->nonperiodic > 0) + error->all(FLERR,"Cannot use nonperiodic boundaries with EwaldDipole"); + if (slabflag) { + if (domain->xperiodic != 1 || domain->yperiodic != 1 || + domain->boundary[2][0] != 1 || domain->boundary[2][1] != 1) + error->all(FLERR,"Incorrect boundaries with slab EwaldDipole"); + //if (domain->triclinic) + // error->all(FLERR,"Cannot (yet) use EwaldDipole with triclinic box " + // "and slab correction"); + } + + // extract short-range Coulombic cutoff from pair style + + triclinic = domain->triclinic; + if (triclinic) + error->all(FLERR,"Cannot yet use triclinic cells with EwaldDipole"); + + pair_check(); + + int itmp; + double *p_cutoff = (double *) force->pair->extract("cut_coul",itmp); + if (p_cutoff == NULL) + error->all(FLERR,"KSpace style is incompatible with Pair style"); + double cutoff = *p_cutoff; + + // kspace TIP4P not yet supported + // qdist = offset only for TIP4P fictitious charge + + //qdist = 0.0; + if (tip4pflag) + error->all(FLERR,"Cannot yet use TIP4P with EwaldDipole"); + + // compute musum & musqsum and warn if no dipole + + scale = 1.0; + qqrd2e = force->qqrd2e; + musum_musq(); + natoms_original = atom->natoms; + + // set accuracy (force units) from accuracy_relative or accuracy_absolute + + if (accuracy_absolute >= 0.0) accuracy = accuracy_absolute; + else accuracy = accuracy_relative * two_charge_force; + + // setup K-space resolution + + bigint natoms = atom->natoms; + + // use xprd,yprd,zprd even if triclinic so grid size is the same + // adjust z dimension for 2d slab EwaldDipole + // 3d EwaldDipole just uses zprd since slab_volfactor = 1.0 + + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + double zprd_slab = zprd*slab_volfactor; + + // make initial g_ewald estimate + // based on desired accuracy and real space cutoff + // fluid-occupied volume used to estimate real-space error + // zprd used rather than zprd_slab + + if (!gewaldflag) { + if (accuracy <= 0.0) + error->all(FLERR,"KSpace accuracy must be > 0"); + if (q2 == 0.0) + error->all(FLERR,"Must use 'kspace_modify gewald' for uncharged system"); + g_ewald = accuracy*sqrt(natoms*cutoff*xprd*yprd*zprd) / (2.0*q2); + if (g_ewald >= 1.0) g_ewald = (1.35 - 0.15*log(accuracy))/cutoff; + else g_ewald = sqrt(-log(g_ewald)) / cutoff; + } + + // setup EwaldDipole coefficients so can print stats + + setup(); + + // final RMS accuracy + + double lprx = rms(kxmax_orig,xprd,natoms,q2); + double lpry = rms(kymax_orig,yprd,natoms,q2); + double lprz = rms(kzmax_orig,zprd_slab,natoms,q2); + double lpr = sqrt(lprx*lprx + lpry*lpry + lprz*lprz) / sqrt(3.0); + double q2_over_sqrt = q2 / sqrt(natoms*cutoff*xprd*yprd*zprd_slab); + double spr = 2.0 *q2_over_sqrt * exp(-g_ewald*g_ewald*cutoff*cutoff); + double tpr = estimate_table_accuracy(q2_over_sqrt,spr); + double estimated_accuracy = sqrt(lpr*lpr + spr*spr + tpr*tpr); + + // stats + + if (comm->me == 0) { + if (screen) { + fprintf(screen," G vector (1/distance) = %g\n",g_ewald); + fprintf(screen," estimated absolute RMS force accuracy = %g\n", + estimated_accuracy); + fprintf(screen," estimated relative force accuracy = %g\n", + estimated_accuracy/two_charge_force); + fprintf(screen," KSpace vectors: actual max1d max3d = %d %d %d\n", + kcount,kmax,kmax3d); + fprintf(screen," kxmax kymax kzmax = %d %d %d\n", + kxmax,kymax,kzmax); + } + if (logfile) { + fprintf(logfile," G vector (1/distance) = %g\n",g_ewald); + fprintf(logfile," estimated absolute RMS force accuracy = %g\n", + estimated_accuracy); + fprintf(logfile," estimated relative force accuracy = %g\n", + estimated_accuracy/two_charge_force); + fprintf(logfile," KSpace vectors: actual max1d max3d = %d %d %d\n", + kcount,kmax,kmax3d); + fprintf(logfile," kxmax kymax kzmax = %d %d %d\n", + kxmax,kymax,kzmax); + } + } +} + +/* ---------------------------------------------------------------------- + adjust EwaldDipole coeffs, called initially and whenever volume has changed +------------------------------------------------------------------------- */ + +void EwaldDipole::setup() +{ + // volume-dependent factors + + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + + // adjustment of z dimension for 2d slab EwaldDipole + // 3d EwaldDipole just uses zprd since slab_volfactor = 1.0 + + double zprd_slab = zprd*slab_volfactor; + volume = xprd * yprd * zprd_slab; + + unitk[0] = 2.0*MY_PI/xprd; + unitk[1] = 2.0*MY_PI/yprd; + unitk[2] = 2.0*MY_PI/zprd_slab; + + int kmax_old = kmax; + + if (kewaldflag == 0) { + + // determine kmax + // function of current box size, accuracy, G_ewald (short-range cutoff) + + bigint natoms = atom->natoms; + double err; + kxmax = 1; + kymax = 1; + kzmax = 1; + + // set kmax in 3 directions to respect accuracy + + err = rms_dipole(kxmax,xprd,natoms); + while (err > accuracy) { + kxmax++; + err = rms_dipole(kxmax,xprd,natoms); + } + + err = rms_dipole(kxmax,xprd,natoms); + while (err > accuracy) { + kymax++; + err = rms_dipole(kxmax,xprd,natoms); + } + + err = rms_dipole(kxmax,xprd,natoms); + while (err > accuracy) { + kzmax++; + err = rms_dipole(kxmax,xprd,natoms); + } + + kmax = MAX(kxmax,kymax); + kmax = MAX(kmax,kzmax); + kmax3d = 4*kmax*kmax*kmax + 6*kmax*kmax + 3*kmax; + + double gsqxmx = unitk[0]*unitk[0]*kxmax*kxmax; + double gsqymx = unitk[1]*unitk[1]*kymax*kymax; + double gsqzmx = unitk[2]*unitk[2]*kzmax*kzmax; + gsqmx = MAX(gsqxmx,gsqymx); + gsqmx = MAX(gsqmx,gsqzmx); + + kxmax_orig = kxmax; + kymax_orig = kymax; + kzmax_orig = kzmax; + + // scale lattice vectors for triclinic skew + + //if (triclinic) { + // double tmp[3]; + // tmp[0] = kxmax/xprd; + // tmp[1] = kymax/yprd; + // tmp[2] = kzmax/zprd; + // lamda2xT(&tmp[0],&tmp[0]); + // kxmax = MAX(1,static_cast(tmp[0])); + // kymax = MAX(1,static_cast(tmp[1])); + // kzmax = MAX(1,static_cast(tmp[2])); + + // kmax = MAX(kxmax,kymax); + // kmax = MAX(kmax,kzmax); + // kmax3d = 4*kmax*kmax*kmax + 6*kmax*kmax + 3*kmax; + //} + + } else { + + kxmax = kx_ewald; + kymax = ky_ewald; + kzmax = kz_ewald; + + kxmax_orig = kxmax; + kymax_orig = kymax; + kzmax_orig = kzmax; + + kmax = MAX(kxmax,kymax); + kmax = MAX(kmax,kzmax); + kmax3d = 4*kmax*kmax*kmax + 6*kmax*kmax + 3*kmax; + + double gsqxmx = unitk[0]*unitk[0]*kxmax*kxmax; + double gsqymx = unitk[1]*unitk[1]*kymax*kymax; + double gsqzmx = unitk[2]*unitk[2]*kzmax*kzmax; + gsqmx = MAX(gsqxmx,gsqymx); + gsqmx = MAX(gsqmx,gsqzmx); + } + + gsqmx *= 1.00001; + + // if size has grown, reallocate k-dependent and nlocal-dependent arrays + + if (kmax > kmax_old) { + deallocate(); + allocate(); + group_allocate_flag = 0; + + memory->destroy(ek); + memory->destroy3d_offset(cs,-kmax_created); + memory->destroy3d_offset(sn,-kmax_created); + memory->destroy(muk); + nmax = atom->nmax; + memory->create(ek,nmax,3,"ewald:ek"); + memory->create3d_offset(cs,-kmax,kmax,3,nmax,"ewald:cs"); + memory->create3d_offset(sn,-kmax,kmax,3,nmax,"ewald:sn"); + memory->create(muk,kmax3d,nmax,"ewald:muk"); + kmax_created = kmax; + } + + // pre-compute EwaldDipole coefficients + + coeffs(); + //if (triclinic == 0) + // coeffs(); + //else + // coeffs_triclinic(); +} + +/* ---------------------------------------------------------------------- + compute dipole RMS accuracy for a dimension +------------------------------------------------------------------------- */ + +double EwaldDipole::rms_dipole(int km, double prd, bigint natoms) +{ + if (natoms == 0) natoms = 1; // avoid division by zero + + // error from eq.(46), Wang et al., JCP 115, 6351 (2001) + + double value = 8*MY_PI*mu2*g_ewald/volume * + sqrt(2*MY_PI*km*km*km/(15.0*natoms)) * + exp(-MY_PI*MY_PI*km*km/(g_ewald*g_ewald*prd*prd)); + + return value; +} + +/* ---------------------------------------------------------------------- + compute the EwaldDipole long-range force, energy, virial +------------------------------------------------------------------------- */ + +void EwaldDipole::compute(int eflag, int vflag) +{ + int i,j,k; + + // set energy/virial flags + + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = evflag_atom = eflag_global = vflag_global = + eflag_atom = vflag_atom = 0; + + // if atom count has changed, update qsum and qsqsum + + if (atom->natoms != natoms_original) { + //qsum_qsq(); + musum_musq(); + natoms_original = atom->natoms; + } + + // return if there are no charges + + if (qsqsum == 0.0) return; + + // extend size of per-atom arrays if necessary + + if (atom->nmax > nmax) { + memory->destroy(ek); + memory->destroy3d_offset(cs,-kmax_created); + memory->destroy3d_offset(sn,-kmax_created); + memory->destroy(muk); + nmax = atom->nmax; + memory->create(ek,nmax,3,"ewald:ek"); + memory->create3d_offset(cs,-kmax,kmax,3,nmax,"ewald:cs"); + memory->create3d_offset(sn,-kmax,kmax,3,nmax,"ewald:sn"); + memory->create(muk,kmax3d,nmax,"ewald:muk"); + kmax_created = kmax; + } + + // partial structure factors on each processor + // total structure factor by summing over procs + + //if (triclinic == 0) + // eik_dot_r(); + //else + // eik_dot_r_triclinic(); + eik_dot_r(); + + MPI_Allreduce(sfacrl,sfacrl_all,kcount,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(sfacim,sfacim_all,kcount,MPI_DOUBLE,MPI_SUM,world); + + // K-space portion of electric field + // double loop over K-vectors and local atoms + // perform per-atom calculations if needed + + double **f = atom->f; + double *q = atom->q; + int nlocal = atom->nlocal; + + int kx,ky,kz; + double cypz,sypz,exprl,expim,partial,partial_peratom; + + for (i = 0; i < nlocal; i++) { + ek[i][0] = 0.0; + ek[i][1] = 0.0; + ek[i][2] = 0.0; + } + + for (k = 0; k < kcount; k++) { + kx = kxvecs[k]; + ky = kyvecs[k]; + kz = kzvecs[k]; + + for (i = 0; i < nlocal; i++) { + cypz = cs[ky][1][i]*cs[kz][2][i] - sn[ky][1][i]*sn[kz][2][i]; + sypz = sn[ky][1][i]*cs[kz][2][i] + cs[ky][1][i]*sn[kz][2][i]; + exprl = cs[kx][0][i]*cypz - sn[kx][0][i]*sypz; + expim = sn[kx][0][i]*cypz + cs[kx][0][i]*sypz; + partial = expim*sfacrl_all[k] - exprl*sfacim_all[k]; + ek[i][0] += partial*eg[k][0]; + ek[i][1] += partial*eg[k][1]; + ek[i][2] += partial*eg[k][2]; + + if (evflag_atom) { + partial_peratom = exprl*sfacrl_all[k] + expim*sfacim_all[k]; + //if (eflag_atom) eatom[i] += q[i]*ug[k]*partial_peratom; + if (eflag_atom) eatom[i] += muk[k][i]*ug[k]*partial_peratom; + if (vflag_atom) + for (j = 0; j < 6; j++) + vatom[i][j] += ug[k]*vg[k][j]*partial_peratom; + } + } + } + + // convert E-field to force + + const double qscale = qqrd2e * scale; + const double muscale = qqrd2e * scale; + + for (i = 0; i < nlocal; i++) { + for (k = 0; k < kcount; k++) { + //f[i][0] += qscale * q[i]*ek[i][0]; + //f[i][1] += qscale * q[i]*ek[i][1]; + //if (slabflag != 2) f[i][2] += qscale * q[i]*ek[i][2]; + f[i][0] += muscale * muk[k][i] * ek[i][0]; + f[i][1] += muscale * muk[k][i] * ek[i][1]; + if (slabflag != 2) f[i][2] += muscale * muk[k][i] * ek[i][2]; + } + } + + // sum global energy across Kspace vevs and add in volume-dependent term + + if (eflag_global) { + for (k = 0; k < kcount; k++) + energy += ug[k] * (sfacrl_all[k]*sfacrl_all[k] + + sfacim_all[k]*sfacim_all[k]); + + energy -= g_ewald*qsqsum/MY_PIS + + MY_PI2*qsum*qsum / (g_ewald*g_ewald*volume); + energy *= qscale; + } + + // global virial + + if (vflag_global) { + double uk; + for (k = 0; k < kcount; k++) { + uk = ug[k] * (sfacrl_all[k]*sfacrl_all[k] + sfacim_all[k]*sfacim_all[k]); + for (j = 0; j < 6; j++) virial[j] += uk*vg[k][j]; + } + for (j = 0; j < 6; j++) virial[j] *= qscale; + } + + // per-atom energy/virial + // energy includes self-energy correction + + if (evflag_atom) { + if (eflag_atom) { + for (i = 0; i < nlocal; i++) { + eatom[i] -= g_ewald*q[i]*q[i]/MY_PIS + MY_PI2*q[i]*qsum / + (g_ewald*g_ewald*volume); + eatom[i] *= qscale; + } + } + + if (vflag_atom) + for (i = 0; i < nlocal; i++) + for (j = 0; j < 6; j++) vatom[i][j] *= q[i]*qscale; + } + + // 2d slab correction + + if (slabflag == 1) slabcorr(); +} + +/* ---------------------------------------------------------------------- */ + +void EwaldDipole::eik_dot_r() +{ + int i,k,l,m,n,ic; + double cstr1,sstr1,cstr2,sstr2,cstr3,sstr3,cstr4,sstr4; + double sqk,clpm,slpm; + double mux, muy, muz; + + double **x = atom->x; + //double *q = atom->q; + double **mu = atom->mu; + int nlocal = atom->nlocal; + + n = 0; + mux = muy = muz = 0.0; + + // loop on different k-directions + // loop on n kpoints and nlocal atoms + // store (n x nlocal) tab. of values of (mu_i dot k) + // store n values of sum_j[ (mu_j dot k) exp(-k dot r_j) ] + + // (k,0,0), (0,l,0), (0,0,m) + + // loop 1: k=1, l=1, m=1 + // define first val. of cos and sin + + for (ic = 0; ic < 3; ic++) { + sqk = (unitk[ic] * unitk[ic]); + if (sqk <= gsqmx) { + cstr1 = 0.0; + sstr1 = 0.0; + for (i = 0; i < nlocal; i++) { + cs[0][ic][i] = 1.0; + sn[0][ic][i] = 0.0; + cs[1][ic][i] = cos(unitk[ic]*x[i][ic]); + sn[1][ic][i] = sin(unitk[ic]*x[i][ic]); + cs[-1][ic][i] = cs[1][0][i]; + sn[-1][ic][i] = -sn[1][0][i]; + muk[n][i] = (mu[i][ic]*unitk[ic]); + cstr1 += muk[n][i]*cs[1][ic][i]; + sstr1 += muk[n][i]*sn[1][ic][i]; + } + sfacrl[n] = cstr1; + sfacim[n++] = sstr1; + } + } + + // loop 2: k>1, l>1, m>1 + + for (m = 2; m <= kmax; m++) { + for (ic = 0; ic < 3; ic++) { + sqk = m*unitk[ic] * m*unitk[ic]; + if (sqk <= gsqmx) { + cstr1 = 0.0; + sstr1 = 0.0; + for (i = 0; i < nlocal; i++) { + cs[m][ic][i] = cs[m-1][ic][i]*cs[1][ic][i] - + sn[m-1][ic][i]*sn[1][ic][i]; + sn[m][ic][i] = sn[m-1][ic][i]*cs[1][ic][i] + + cs[m-1][ic][i]*sn[1][ic][i]; + cs[-m][ic][i] = cs[m][ic][i]; + sn[-m][ic][i] = -sn[m][ic][i]; + muk[n][i] = (mu[i][ic]*m*unitk[ic]); + cstr1 += muk[n][i]*cs[1][ic][i]; + sstr1 += muk[n][i]*sn[1][ic][i]; + } + sfacrl[n] = cstr1; + sfacim[n++] = sstr1; + } + } + } + + // 1 = (k,l,0), 2 = (k,-l,0) + + for (k = 1; k <= kxmax; k++) { + for (l = 1; l <= kymax; l++) { + sqk = (k*unitk[0] * k*unitk[0]) + (l*unitk[1] * l*unitk[1]); + if (sqk <= gsqmx) { + cstr1 = 0.0; + sstr1 = 0.0; + cstr2 = 0.0; + sstr2 = 0.0; + for (i = 0; i < nlocal; i++) { + mux = mu[i][0]; + muy = mu[i][1]; + + // dir 1: (k,l,0) + muk[n][i] = (mux*k*unitk[0] + muy*l*unitk[1]); + cstr1 += muk[n][i]*(cs[k][0][i]*cs[l][1][i]-sn[k][0][i]*sn[l][1][i]); + sstr1 += muk[n][i]*(sn[k][0][i]*cs[l][1][i]+cs[k][0][i]*sn[l][1][i]); + + // dir 2: (k,-l,0) + muk[n+1][i] = (mux*k*unitk[0] - muy*l*unitk[1]); + cstr2 += muk[n+1][i]*(cs[k][0][i]*cs[l][1][i]+sn[k][0][i]*sn[l][1][i]); + sstr2 += muk[n+1][i]*(sn[k][0][i]*cs[l][1][i]-cs[k][0][i]*sn[l][1][i]); + } + sfacrl[n] = cstr1; + sfacim[n++] = sstr1; + sfacrl[n] = cstr2; + sfacim[n++] = sstr2; + } + } + } + + // 1 = (0,l,m), 2 = (0,l,-m) + + for (l = 1; l <= kymax; l++) { + for (m = 1; m <= kzmax; m++) { + sqk = (l*unitk[1] * l*unitk[1]) + (m*unitk[2] * m*unitk[2]); + if (sqk <= gsqmx) { + cstr1 = 0.0; + sstr1 = 0.0; + cstr2 = 0.0; + sstr2 = 0.0; + for (i = 0; i < nlocal; i++) { + muy = mu[i][1]; + muz = mu[i][2]; + + // dir 1: (0,l,m) + muk[n][i] = (muy*l*unitk[1] + muz*m*unitk[2]); + cstr1 += muk[n][i]*(cs[l][1][i]*cs[m][2][i] - sn[l][1][i]*sn[m][2][i]); + sstr1 += muk[n][i]*(sn[l][1][i]*cs[m][2][i] + cs[l][1][i]*sn[m][2][i]); + + // dir 2: (0,l,-m) + muk[n+1][i] = (muy*l*unitk[1] - muz*m*unitk[2]); + cstr2 += muk[n+1][i]*(cs[l][1][i]*cs[m][2][i]+sn[l][1][i]*sn[m][2][i]); + sstr2 += muk[n+1][i]*(sn[l][1][i]*cs[m][2][i]-cs[l][1][i]*sn[m][2][i]); + } + sfacrl[n] = cstr1; + sfacim[n++] = sstr1; + sfacrl[n] = cstr2; + sfacim[n++] = sstr2; + } + } + } + + // 1 = (k,0,m), 2 = (k,0,-m) + + for (k = 1; k <= kxmax; k++) { + for (m = 1; m <= kzmax; m++) { + sqk = (k*unitk[0] * k*unitk[0]) + (m*unitk[2] * m*unitk[2]); + if (sqk <= gsqmx) { + cstr1 = 0.0; + sstr1 = 0.0; + cstr2 = 0.0; + sstr2 = 0.0; + for (i = 0; i < nlocal; i++) { + mux = mu[i][0]; + muz = mu[i][2]; + + // dir 1: (k,0,m) + muk[n][i] = (mux*k*unitk[0] + muz*m*unitk[2]); + cstr1 += muk[n][i]*(cs[k][0][i]*cs[m][2][i]-sn[k][0][i]*sn[m][2][i]); + sstr1 += muk[n][i]*(sn[k][0][i]*cs[m][2][i]+cs[k][0][i]*sn[m][2][i]); + + // dir 2: (k,0,-m) + muk[n+1][i] = (mux*k*unitk[0] - muz*m*unitk[2]); + cstr2 += muk[n+1][i]*(cs[k][0][i]*cs[m][2][i]+sn[k][0][i]*sn[m][2][i]); + sstr2 += muk[n+1][i]*(sn[k][0][i]*cs[m][2][i]-cs[k][0][i]*sn[m][2][i]); + } + sfacrl[n] = cstr1; + sfacim[n++] = sstr1; + sfacrl[n] = cstr2; + sfacim[n++] = sstr2; + } + } + } + + // 1 = (k,l,m), 2 = (k,-l,m), 3 = (k,l,-m), 4 = (k,-l,-m) + + for (k = 1; k <= kxmax; k++) { + for (l = 1; l <= kymax; l++) { + for (m = 1; m <= kzmax; m++) { + sqk = (k*unitk[0] * k*unitk[0]) + (l*unitk[1] * l*unitk[1]) + + (m*unitk[2] * m*unitk[2]); + if (sqk <= gsqmx) { + cstr1 = 0.0; + sstr1 = 0.0; + cstr2 = 0.0; + sstr2 = 0.0; + cstr3 = 0.0; + sstr3 = 0.0; + cstr4 = 0.0; + sstr4 = 0.0; + for (i = 0; i < nlocal; i++) { + mux = mu[i][0]; + muy = mu[i][1]; + muz = mu[i][2]; + + // dir 1: (k,l,m) + muk[n][i] = (mux*k*unitk[0] + muy*l*unitk[1] + muz*m*unitk[2]); + clpm = cs[l][1][i]*cs[m][2][i] - sn[l][1][i]*sn[m][2][i]; + slpm = sn[l][1][i]*cs[m][2][i] + cs[l][1][i]*sn[m][2][i]; + cstr1 += muk[n][i]*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); + sstr1 += muk[n][i]*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); + + // dir 2: (k,-l,m) + muk[n+1][i] = (mux*k*unitk[0] - muy*l*unitk[1] + muz*m*unitk[2]); + clpm = cs[l][1][i]*cs[m][2][i] + sn[l][1][i]*sn[m][2][i]; + slpm = -sn[l][1][i]*cs[m][2][i] + cs[l][1][i]*sn[m][2][i]; + cstr2 += muk[n+1][i]*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); + sstr2 += muk[n+1][i]*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); + + // dir 3: (k,l,-m) + muk[n+2][i] = (mux*k*unitk[0] + muy*l*unitk[1] - muz*m*unitk[2]); + clpm = cs[l][1][i]*cs[m][2][i] + sn[l][1][i]*sn[m][2][i]; + slpm = sn[l][1][i]*cs[m][2][i] - cs[l][1][i]*sn[m][2][i]; + cstr3 += muk[n+2][i]*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); + sstr3 += muk[n+2][i]*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); + + // dir 4: (k,-l,-m) + muk[n+3][i] = (mux*k*unitk[0] - muy*l*unitk[1] - muz*m*unitk[2]); + clpm = cs[l][1][i]*cs[m][2][i] - sn[l][1][i]*sn[m][2][i]; + slpm = -sn[l][1][i]*cs[m][2][i] - cs[l][1][i]*sn[m][2][i]; + cstr4 += muk[n+3][i]*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); + sstr4 += muk[n+3][i]*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); + } + sfacrl[n] = cstr1; + sfacim[n++] = sstr1; + sfacrl[n] = cstr2; + sfacim[n++] = sstr2; + sfacrl[n] = cstr3; + sfacim[n++] = sstr3; + sfacrl[n] = cstr4; + sfacim[n++] = sstr4; + } + } + } + } +} + +/* ---------------------------------------------------------------------- + Slab-geometry correction term to dampen inter-slab interactions between + periodically repeating slabs. Yields good approximation to 2D EwaldDipole if + adequate empty space is left between repeating slabs (J. Chem. Phys. + 111, 3155). Slabs defined here to be parallel to the xy plane. Also + extended to non-neutral systems (J. Chem. Phys. 131, 094107). +------------------------------------------------------------------------- */ + +void EwaldDipole::slabcorr() +{ + // compute local contribution to global dipole moment + + double *q = atom->q; + double **x = atom->x; + double zprd = domain->zprd; + int nlocal = atom->nlocal; + + double dipole = 0.0; + for (int i = 0; i < nlocal; i++) dipole += q[i]*x[i][2]; + + // sum local contributions to get global dipole moment + + double dipole_all; + MPI_Allreduce(&dipole,&dipole_all,1,MPI_DOUBLE,MPI_SUM,world); + + // need to make non-neutral systems and/or + // per-atom energy translationally invariant + + double dipole_r2 = 0.0; + if (eflag_atom || fabs(qsum) > SMALL) { + for (int i = 0; i < nlocal; i++) + dipole_r2 += q[i]*x[i][2]*x[i][2]; + + // sum local contributions + + double tmp; + MPI_Allreduce(&dipole_r2,&tmp,1,MPI_DOUBLE,MPI_SUM,world); + dipole_r2 = tmp; + } + + // compute corrections + + const double e_slabcorr = MY_2PI*(dipole_all*dipole_all - + qsum*dipole_r2 - qsum*qsum*zprd*zprd/12.0)/volume; + const double qscale = qqrd2e * scale; + + if (eflag_global) energy += qscale * e_slabcorr; + + // per-atom energy + + if (eflag_atom) { + double efact = qscale * MY_2PI/volume; + for (int i = 0; i < nlocal; i++) + eatom[i] += efact * q[i]*(x[i][2]*dipole_all - 0.5*(dipole_r2 + + qsum*x[i][2]*x[i][2]) - qsum*zprd*zprd/12.0); + } + + // add on force corrections + + double ffact = qscale * (-4.0*MY_PI/volume); + double **f = atom->f; + + for (int i = 0; i < nlocal; i++) f[i][2] += ffact * q[i]*(dipole_all - qsum*x[i][2]); +} + +/* ---------------------------------------------------------------------- + compute musum,musqsum,mu2 + called initially, when particle count changes, when dipoles are changed +------------------------------------------------------------------------- */ + +void EwaldDipole::musum_musq() +{ + const int nlocal = atom->nlocal; + + musum = musqsum = mu2 = 0.0; + if (atom->mu_flag) { + double** mu = atom->mu; + double musum_local(0.0), musqsum_local(0.0); + + for (int i = 0; i < nlocal; i++) { + musum_local += mu[i][0] + mu[i][1] + mu[i][2]; + musqsum_local += mu[i][0]*mu[i][0] + mu[i][1]*mu[i][1] + mu[i][2]*mu[i][2]; + } + + MPI_Allreduce(&musum_local,&musum,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&musqsum_local,&musqsum,1,MPI_DOUBLE,MPI_SUM,world); + + mu2 = musqsum * force->qqrd2e; + } + + if (mu2 == 0 && comm->me == 0) + error->all(FLERR,"Using kspace solver PPPMDipole on system with no dipoles"); +} diff --git a/src/KSPACE/ewald_dipole.h b/src/KSPACE/ewald_dipole.h new file mode 100644 index 0000000000..5cd969bbee --- /dev/null +++ b/src/KSPACE/ewald_dipole.h @@ -0,0 +1,104 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + 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 KSPACE_CLASS + +KSpaceStyle(ewald/dipole,EwaldDipole) + +#else + +#ifndef LMP_EWALD_DIPOLE_H +#define LMP_EWALD_DIPOLE_H + +#include "ewald.h" + +namespace LAMMPS_NS { + +class EwaldDipole : public Ewald { + public: + EwaldDipole(class LAMMPS *, int, char **); + virtual ~EwaldDipole(); + void init(); + void setup(); + virtual void compute(int, int); + + protected: + double musum,musqsum,mu2; + double **muk; // mu_i dot k + + void musum_musq(); + double rms_dipole(int, double, bigint); + virtual void eik_dot_r(); + void slabcorr(); + + // triclinic + + //void eik_dot_r_triclinic(); + +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Cannot use EwaldDipole with 2d simulation + +The kspace style ewald cannot be used in 2d simulations. You can use +2d EwaldDipole in a 3d simulation; see the kspace_modify command. + +E: Kspace style requires atom attribute q + +The atom style defined does not have these attributes. + +E: Cannot use nonperiodic boundaries with EwaldDipole + +For kspace style ewald, all 3 dimensions must have periodic boundaries +unless you use the kspace_modify command to define a 2d slab with a +non-periodic z dimension. + +E: Incorrect boundaries with slab EwaldDipole + +Must have periodic x,y dimensions and non-periodic z dimension to use +2d slab option with EwaldDipole. + +E: Cannot (yet) use EwaldDipole with triclinic box and slab correction + +This feature is not yet supported. + +E: KSpace style is incompatible with Pair style + +Setting a kspace style requires that a pair style with matching +long-range Coulombic or dispersion components be used. + +E: KSpace accuracy must be > 0 + +The kspace accuracy designated in the input must be greater than zero. + +E: Must use 'kspace_modify gewald' for uncharged system + +UNDOCUMENTED + +E: Cannot (yet) use K-space slab correction with compute group/group for triclinic systems + +This option is not yet supported. + +*/ diff --git a/src/KSPACE/pppm.cpp b/src/KSPACE/pppm.cpp index 8eec8e2542..694860521e 100644 --- a/src/KSPACE/pppm.cpp +++ b/src/KSPACE/pppm.cpp @@ -100,9 +100,6 @@ PPPM::PPPM(LAMMPS *lmp, int narg, char **arg) : KSpace(lmp, narg, arg), nyhi_in = nylo_in = nyhi_out = nylo_out = 0; nzhi_in = nzlo_in = nzhi_out = nzlo_out = 0; - // test - nlower = nupper = 0; - density_brick = vdx_brick = vdy_brick = vdz_brick = NULL; density_fft = NULL; u_brick = NULL; diff --git a/src/KSPACE/pppm_dipole.cpp b/src/KSPACE/pppm_dipole.cpp index 4d2b594af8..fd986f5eb1 100644 --- a/src/KSPACE/pppm_dipole.cpp +++ b/src/KSPACE/pppm_dipole.cpp @@ -126,8 +126,9 @@ void PPPMDipole::init() if (triclinic != domain->triclinic) error->all(FLERR,"Must redefine kspace_style after changing to triclinic box"); - if (domain->dimension == 2) error->all(FLERR, - "Cannot use PPPMDipole with 2d simulation"); + if (domain->dimension == 2) + error->all(FLERR,"Cannot use PPPMDipole with 2d simulation"); + if (comm->style != 0) error->universe_all(FLERR,"PPPMDipole can only currently be used with " "comm_style brick"); @@ -175,7 +176,7 @@ void PPPMDipole::init() if (tip4pflag) error->all(FLERR,"Cannot yet use TIP4P with PPPMDipole"); - // compute qsum & qsqsum and warn if not charge-neutral + // compute musum & musqsum and warn if no dipoles scale = 1.0; qqrd2e = force->qqrd2e; @@ -794,7 +795,6 @@ void PPPMDipole::deallocate_peratom() used for charge accumulation, FFTs, and electric field interpolation ------------------------------------------------------------------------- */ -//void PPPMDipole::set_grid_global(double dipole2) void PPPMDipole::set_grid_global() { // use xprd,yprd,zprd diff --git a/src/KSPACE/pppm_dipole_spin.cpp b/src/KSPACE/pppm_dipole_spin.cpp index a5aee7150c..aa85c5d289 100644 --- a/src/KSPACE/pppm_dipole_spin.cpp +++ b/src/KSPACE/pppm_dipole_spin.cpp @@ -710,10 +710,8 @@ void PPPMDipoleSpin::slabcorr() // add on mag. force corrections double ffact = spscale * (-4.0*MY_PI/volume); - //double **fm = atom->fm; double **fm_long = atom->fm_long; for (int i = 0; i < nlocal; i++) { - //fm[i][2] += ffact * spin_all; fm_long[i][2] += ffact * spin_all; } } From e6b5112ddc80ed86a97ed05176aae2b01ccb9e8b Mon Sep 17 00:00:00 2001 From: "Stan Gerald Moore (stamoor)" Date: Thu, 13 Sep 2018 14:36:54 -0600 Subject: [PATCH 007/311] Fix issues in ewald_dipole --- src/KSPACE/ewald_dipole.cpp | 86 +++++++++++++++++++++++++++++++------ src/KSPACE/ewald_dipole.h | 3 ++ 2 files changed, 75 insertions(+), 14 deletions(-) diff --git a/src/KSPACE/ewald_dipole.cpp b/src/KSPACE/ewald_dipole.cpp index d03d93a7c5..43c4717096 100644 --- a/src/KSPACE/ewald_dipole.cpp +++ b/src/KSPACE/ewald_dipole.cpp @@ -28,6 +28,7 @@ #include "pair.h" #include "domain.h" #include "math_const.h" +#include "math_special.h" #include "memory.h" #include "error.h" #include "update.h" @@ -37,6 +38,7 @@ using namespace LAMMPS_NS; using namespace MathConst; +using namespace MathSpecial; #define SMALL 0.00001 @@ -157,13 +159,11 @@ void EwaldDipole::init() // zprd used rather than zprd_slab if (!gewaldflag) { - if (accuracy <= 0.0) - error->all(FLERR,"KSpace accuracy must be > 0"); - if (q2 == 0.0) - error->all(FLERR,"Must use 'kspace_modify gewald' for uncharged system"); - g_ewald = accuracy*sqrt(natoms*cutoff*xprd*yprd*zprd) / (2.0*q2); - if (g_ewald >= 1.0) g_ewald = (1.35 - 0.15*log(accuracy))/cutoff; - else g_ewald = sqrt(-log(g_ewald)) / cutoff; + double g_ewald_new = + NewtonSolve(g_ewald,cutoff,natoms,xprd*yprd*zprd,mu2); + if (g_ewald_new > 0.0) g_ewald = g_ewald_new; + else error->warning(FLERR,"Ewald/disp Newton solver failed, " + "using old method to estimate g_ewald"); } // setup EwaldDipole coefficients so can print stats @@ -252,16 +252,16 @@ void EwaldDipole::setup() err = rms_dipole(kxmax,xprd,natoms); } - err = rms_dipole(kxmax,xprd,natoms); + err = rms_dipole(kymax,yprd,natoms); while (err > accuracy) { kymax++; - err = rms_dipole(kxmax,xprd,natoms); + err = rms_dipole(kymax,yprd,natoms); } - err = rms_dipole(kxmax,xprd,natoms); + err = rms_dipole(kzmax,zprd,natoms); while (err > accuracy) { kzmax++; - err = rms_dipole(kxmax,xprd,natoms); + err = rms_dipole(kzmax,zprd,natoms); } kmax = MAX(kxmax,kymax); @@ -387,7 +387,7 @@ void EwaldDipole::compute(int eflag, int vflag) // return if there are no charges - if (qsqsum == 0.0) return; + if (musqsum == 0.0) return; // extend size of per-atom arrays if necessary @@ -482,8 +482,8 @@ void EwaldDipole::compute(int eflag, int vflag) energy += ug[k] * (sfacrl_all[k]*sfacrl_all[k] + sfacim_all[k]*sfacim_all[k]); - energy -= g_ewald*qsqsum/MY_PIS + - MY_PI2*qsum*qsum / (g_ewald*g_ewald*volume); + const double g3 = g_ewald*g_ewald*g_ewald; + energy -= musqsum*2.0*g3/3.0/MY_PIS; energy *= qscale; } @@ -845,3 +845,61 @@ void EwaldDipole::musum_musq() if (mu2 == 0 && comm->me == 0) error->all(FLERR,"Using kspace solver PPPMDipole on system with no dipoles"); } + +/* ---------------------------------------------------------------------- + Newton solver used to find g_ewald for LJ systems +------------------------------------------------------------------------- */ + +double EwaldDipole::NewtonSolve(double x, double Rc, + bigint natoms, double vol, double b2) +{ + double dx,tol; + int maxit; + + maxit = 10000; //Maximum number of iterations + tol = 0.00001; //Convergence tolerance + + //Begin algorithm + + for (int i = 0; i < maxit; i++) { + dx = f(x,Rc,natoms,vol,b2) / derivf(x,Rc,natoms,vol,b2); + x = x - dx; //Update x + if (fabs(dx) < tol) return x; + if (x < 0 || x != x) // solver failed + return -1; + } + return -1; +} + +/* ---------------------------------------------------------------------- + Calculate f(x) + ------------------------------------------------------------------------- */ + +double EwaldDipole::f(double x, double Rc, bigint natoms, double vol, double b2) +{ + double a = Rc*x; + double f = 0.0; + + double rg2 = a*a; + double rg4 = rg2*rg2; + double rg6 = rg4*rg2; + double Cc = 4.0*rg4 + 6.0*rg2 + 3.0; + double Dc = 8.0*rg6 + 20.0*rg4 + 30.0*rg2 + 15.0; + f = (b2/(sqrt(vol*powint(x,4)*powint(Rc,9)*natoms)) * + sqrt(13.0/6.0*Cc*Cc + 2.0/15.0*Dc*Dc - 13.0/15.0*Cc*Dc) * + exp(-rg2)) - accuracy; + + return f; +} + +/* ---------------------------------------------------------------------- + Calculate numerical derivative f'(x) + ------------------------------------------------------------------------- */ + +double EwaldDipole::derivf(double x, double Rc, + bigint natoms, double vol, double b2) +{ + double h = 0.000001; //Derivative step-size + return (f(x + h,Rc,natoms,vol,b2) - f(x,Rc,natoms,vol,b2)) / h; +} + diff --git a/src/KSPACE/ewald_dipole.h b/src/KSPACE/ewald_dipole.h index 5cd969bbee..77f6a2817c 100644 --- a/src/KSPACE/ewald_dipole.h +++ b/src/KSPACE/ewald_dipole.h @@ -40,6 +40,9 @@ class EwaldDipole : public Ewald { double rms_dipole(int, double, bigint); virtual void eik_dot_r(); void slabcorr(); + double NewtonSolve(double, double, bigint, double, double); + double f(double, double, bigint, double, double); + double derivf(double, double, bigint, double, double); // triclinic From a76457ef22d0864b78dc4b48f1c249a3fd153a47 Mon Sep 17 00:00:00 2001 From: "Stan Gerald Moore (stamoor)" Date: Fri, 14 Sep 2018 13:05:48 -0600 Subject: [PATCH 008/311] Fix bug in ewald_dipole structure factor --- src/KSPACE/ewald_dipole.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/KSPACE/ewald_dipole.cpp b/src/KSPACE/ewald_dipole.cpp index 43c4717096..d7c3aad206 100644 --- a/src/KSPACE/ewald_dipole.cpp +++ b/src/KSPACE/ewald_dipole.cpp @@ -584,8 +584,8 @@ void EwaldDipole::eik_dot_r() cs[-m][ic][i] = cs[m][ic][i]; sn[-m][ic][i] = -sn[m][ic][i]; muk[n][i] = (mu[i][ic]*m*unitk[ic]); - cstr1 += muk[n][i]*cs[1][ic][i]; - sstr1 += muk[n][i]*sn[1][ic][i]; + cstr1 += muk[n][i]*cs[m][ic][i]; + sstr1 += muk[n][i]*sn[m][ic][i]; } sfacrl[n] = cstr1; sfacim[n++] = sstr1; From 82a5346ab1f1ddfa8ad114a7dceff47d0cdbe0ee Mon Sep 17 00:00:00 2001 From: julient31 Date: Fri, 14 Sep 2018 15:09:59 -0600 Subject: [PATCH 009/311] Commit JT 091418 - created pair_spin_long_qsymp - modified ewald_dipole --- examples/SPIN/pppm_spin/in.spin.pppm_spin | 7 +- src/KSPACE/ewald_dipole.cpp | 100 ++-- src/KSPACE/ewald_dipole.h | 6 +- src/SPIN/fix_nve_spin.cpp | 17 +- src/SPIN/fix_nve_spin.h | 1 - src/SPIN/pair_spin_long.cpp | 24 +- src/SPIN/pair_spin_long_qsymp.cpp | 655 ++++++++++++++++++++++ src/SPIN/pair_spin_long_qsymp.h | 100 ++++ 8 files changed, 828 insertions(+), 82 deletions(-) create mode 100644 src/SPIN/pair_spin_long_qsymp.cpp create mode 100644 src/SPIN/pair_spin_long_qsymp.h diff --git a/examples/SPIN/pppm_spin/in.spin.pppm_spin b/examples/SPIN/pppm_spin/in.spin.pppm_spin index f7e462c343..9e57797f55 100644 --- a/examples/SPIN/pppm_spin/in.spin.pppm_spin +++ b/examples/SPIN/pppm_spin/in.spin.pppm_spin @@ -23,17 +23,20 @@ mass 1 58.93 set group all spin 1.72 0.0 0.0 1.0 velocity all create 100 4928459 rot yes dist gaussian -pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/long 8.0 +#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/long 8.0 +pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/long/qsymp 8.0 #pair_style hybrid/overlay eam/alloy spin/exchange 4.0 pair_coeff * * eam/alloy ../examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy Co pair_coeff * * spin/exchange exchange 4.0 0.3593 1.135028015e-05 1.064568567 -pair_coeff * * spin/long long 8.0 +pair_coeff * * spin/long/qsymp long 8.0 +#pair_coeff * * spin/long long 8.0 neighbor 0.1 bin neigh_modify every 10 check yes delay 20 kspace_style pppm/dipole/spin 1.0e-4 kspace_modify mesh 32 32 32 + #fix 1 all precession/spin zeeman 1.0 0.0 0.0 1.0 fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 fix 2 all langevin/spin 0.0 0.0 21 diff --git a/src/KSPACE/ewald_dipole.cpp b/src/KSPACE/ewald_dipole.cpp index d03d93a7c5..3b3e3b93db 100644 --- a/src/KSPACE/ewald_dipole.cpp +++ b/src/KSPACE/ewald_dipole.cpp @@ -79,9 +79,9 @@ void EwaldDipole::init() triclinic_check(); - // set triclinic to 0 for now (no triclinic calc.) - triclinic = 0; - + // no triclinic ewald dipole (yet) + + triclinic = domain->triclinic; if (triclinic) error->all(FLERR,"Cannot (yet) use EwaldDipole with triclinic box"); @@ -100,9 +100,6 @@ void EwaldDipole::init() if (domain->xperiodic != 1 || domain->yperiodic != 1 || domain->boundary[2][0] != 1 || domain->boundary[2][1] != 1) error->all(FLERR,"Incorrect boundaries with slab EwaldDipole"); - //if (domain->triclinic) - // error->all(FLERR,"Cannot (yet) use EwaldDipole with triclinic box " - // "and slab correction"); } // extract short-range Coulombic cutoff from pair style @@ -278,23 +275,6 @@ void EwaldDipole::setup() kymax_orig = kymax; kzmax_orig = kzmax; - // scale lattice vectors for triclinic skew - - //if (triclinic) { - // double tmp[3]; - // tmp[0] = kxmax/xprd; - // tmp[1] = kymax/yprd; - // tmp[2] = kzmax/zprd; - // lamda2xT(&tmp[0],&tmp[0]); - // kxmax = MAX(1,static_cast(tmp[0])); - // kymax = MAX(1,static_cast(tmp[1])); - // kzmax = MAX(1,static_cast(tmp[2])); - - // kmax = MAX(kxmax,kymax); - // kmax = MAX(kmax,kzmax); - // kmax3d = 4*kmax*kmax*kmax + 6*kmax*kmax + 3*kmax; - //} - } else { kxmax = kx_ewald; @@ -340,10 +320,6 @@ void EwaldDipole::setup() // pre-compute EwaldDipole coefficients coeffs(); - //if (triclinic == 0) - // coeffs(); - //else - // coeffs_triclinic(); } /* ---------------------------------------------------------------------- @@ -380,7 +356,6 @@ void EwaldDipole::compute(int eflag, int vflag) // if atom count has changed, update qsum and qsqsum if (atom->natoms != natoms_original) { - //qsum_qsq(); musum_musq(); natoms_original = atom->natoms; } @@ -407,10 +382,6 @@ void EwaldDipole::compute(int eflag, int vflag) // partial structure factors on each processor // total structure factor by summing over procs - //if (triclinic == 0) - // eik_dot_r(); - //else - // eik_dot_r_triclinic(); eik_dot_r(); MPI_Allreduce(sfacrl,sfacrl_all,kcount,MPI_DOUBLE,MPI_SUM,world); @@ -421,7 +392,8 @@ void EwaldDipole::compute(int eflag, int vflag) // perform per-atom calculations if needed double **f = atom->f; - double *q = atom->q; + //double *q = atom->q; + double **mu = atom->mu; int nlocal = atom->nlocal; int kx,ky,kz; @@ -439,21 +411,34 @@ void EwaldDipole::compute(int eflag, int vflag) kz = kzvecs[k]; for (i = 0; i < nlocal; i++) { + + // calculating exp(i*k*ri) + cypz = cs[ky][1][i]*cs[kz][2][i] - sn[ky][1][i]*sn[kz][2][i]; sypz = sn[ky][1][i]*cs[kz][2][i] + cs[ky][1][i]*sn[kz][2][i]; exprl = cs[kx][0][i]*cypz - sn[kx][0][i]*sypz; expim = sn[kx][0][i]*cypz + cs[kx][0][i]*sypz; + + // taking im-part of struct_fact x exp(i*k*ri) (for force calc.) + partial = expim*sfacrl_all[k] - exprl*sfacim_all[k]; - ek[i][0] += partial*eg[k][0]; - ek[i][1] += partial*eg[k][1]; - ek[i][2] += partial*eg[k][2]; + //ek[i][0] += partial*eg[k][0]; + //ek[i][1] += partial*eg[k][1]; + //ek[i][2] += partial*eg[k][2]; + ek[i][0] += kx*partial*eg[k][0]; + ek[i][1] += ky*partial*eg[k][1]; + ek[i][2] += kz*partial*eg[k][2]; if (evflag_atom) { + + // taking re-part of struct_fact x exp(i*k*ri) (for energy calc.) + partial_peratom = exprl*sfacrl_all[k] + expim*sfacim_all[k]; //if (eflag_atom) eatom[i] += q[i]*ug[k]*partial_peratom; if (eflag_atom) eatom[i] += muk[k][i]*ug[k]*partial_peratom; if (vflag_atom) for (j = 0; j < 6; j++) + // to be done vatom[i][j] += ug[k]*vg[k][j]*partial_peratom; } } @@ -461,30 +446,33 @@ void EwaldDipole::compute(int eflag, int vflag) // convert E-field to force - const double qscale = qqrd2e * scale; + //const double qscale = qqrd2e * scale; const double muscale = qqrd2e * scale; for (i = 0; i < nlocal; i++) { - for (k = 0; k < kcount; k++) { - //f[i][0] += qscale * q[i]*ek[i][0]; - //f[i][1] += qscale * q[i]*ek[i][1]; - //if (slabflag != 2) f[i][2] += qscale * q[i]*ek[i][2]; - f[i][0] += muscale * muk[k][i] * ek[i][0]; - f[i][1] += muscale * muk[k][i] * ek[i][1]; - if (slabflag != 2) f[i][2] += muscale * muk[k][i] * ek[i][2]; - } + //f[i][0] += qscale * q[i]*ek[i][0]; + //f[i][1] += qscale * q[i]*ek[i][1]; + //if (slabflag != 2) f[i][2] += qscale * q[i]*ek[i][2]; + f[i][0] += muscale * mu[i][0] * ek[i][0]; + f[i][1] += muscale * mu[i][1] * ek[i][1]; + if (slabflag != 2) f[i][2] += muscale * mu[i][2] * ek[i][2]; } // sum global energy across Kspace vevs and add in volume-dependent term if (eflag_global) { - for (k = 0; k < kcount; k++) + for (k = 0; k < kcount; k++) { + + // taking the re-part of struct_fact_i x struct_fact_j + energy += ug[k] * (sfacrl_all[k]*sfacrl_all[k] + sfacim_all[k]*sfacim_all[k]); + } - energy -= g_ewald*qsqsum/MY_PIS + - MY_PI2*qsum*qsum / (g_ewald*g_ewald*volume); - energy *= qscale; + // substracting self energy and scaling + + energy -= musqsum*2.0*g3/3.0/MY_PIS; + energy *= muscale; } // global virial @@ -495,7 +483,8 @@ void EwaldDipole::compute(int eflag, int vflag) uk = ug[k] * (sfacrl_all[k]*sfacrl_all[k] + sfacim_all[k]*sfacim_all[k]); for (j = 0; j < 6; j++) virial[j] += uk*vg[k][j]; } - for (j = 0; j < 6; j++) virial[j] *= qscale; + //for (j = 0; j < 6; j++) virial[j] *= qscale; + for (j = 0; j < 6; j++) virial[j] *= muscale; } // per-atom energy/virial @@ -504,9 +493,9 @@ void EwaldDipole::compute(int eflag, int vflag) if (evflag_atom) { if (eflag_atom) { for (i = 0; i < nlocal; i++) { - eatom[i] -= g_ewald*q[i]*q[i]/MY_PIS + MY_PI2*q[i]*qsum / - (g_ewald*g_ewald*volume); - eatom[i] *= qscale; + eatom[i] -= (mu[i][0]*mu[i][0] + mu[i][1]*mu[i][1] + mu[i][2]*mu[i][2]) + *2.0*g3/3.0/MY_PIS; + eatom[i] *= muscale; } } @@ -520,7 +509,9 @@ void EwaldDipole::compute(int eflag, int vflag) if (slabflag == 1) slabcorr(); } -/* ---------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- + compute the +------------------------------------------------------------------------- */ void EwaldDipole::eik_dot_r() { @@ -530,7 +521,6 @@ void EwaldDipole::eik_dot_r() double mux, muy, muz; double **x = atom->x; - //double *q = atom->q; double **mu = atom->mu; int nlocal = atom->nlocal; diff --git a/src/KSPACE/ewald_dipole.h b/src/KSPACE/ewald_dipole.h index 5cd969bbee..401742ed3a 100644 --- a/src/KSPACE/ewald_dipole.h +++ b/src/KSPACE/ewald_dipole.h @@ -34,17 +34,13 @@ class EwaldDipole : public Ewald { protected: double musum,musqsum,mu2; - double **muk; // mu_i dot k + double **muk; // store mu_i dot k void musum_musq(); double rms_dipole(int, double, bigint); virtual void eik_dot_r(); void slabcorr(); - // triclinic - - //void eik_dot_r_triclinic(); - }; } diff --git a/src/SPIN/fix_nve_spin.cpp b/src/SPIN/fix_nve_spin.cpp index 996bd3c2da..5e972cd14d 100644 --- a/src/SPIN/fix_nve_spin.cpp +++ b/src/SPIN/fix_nve_spin.cpp @@ -295,6 +295,13 @@ void FixNVESpin::initial_integrate(int vflag) } } + // update fm_kspace if long-range + // remove short-range comp. of fm_kspace + + if (long_spin_flag) { + + } + // update half s for all atoms if (sector_flag) { // sectoring seq. update @@ -434,7 +441,7 @@ void FixNVESpin::ComputeInteractionsSpin(int i) double **sp = atom->sp; double **fm = atom->fm; - double **fm_long = atom->fm_long; + //double **fm_long = atom->fm_long; // force computation for spin i @@ -452,14 +459,6 @@ void FixNVESpin::ComputeInteractionsSpin(int i) } } - // update magnetic long-range components - - if (long_spin_flag) { - fmi[0] += fm_long[i][0]; - fmi[1] += fm_long[i][1]; - fmi[2] += fm_long[i][2]; - } - // update magnetic precession interactions if (precession_spin_flag) { diff --git a/src/SPIN/fix_nve_spin.h b/src/SPIN/fix_nve_spin.h index 565de13e92..9fcbfb3803 100644 --- a/src/SPIN/fix_nve_spin.h +++ b/src/SPIN/fix_nve_spin.h @@ -48,7 +48,6 @@ friend class PairSpin; int lattice_flag; // lattice_flag = 0 if spins only // lattice_flag = 1 if spin-lattice calc. - protected: int sector_flag; // sector_flag = 0 if serial algorithm // sector_flag = 1 if parallel algorithm diff --git a/src/SPIN/pair_spin_long.cpp b/src/SPIN/pair_spin_long.cpp index efedea3247..d7ecdf5edd 100644 --- a/src/SPIN/pair_spin_long.cpp +++ b/src/SPIN/pair_spin_long.cpp @@ -362,13 +362,15 @@ void PairSpinLong::compute_single_pair(int ii, double fmi[3]) int i,j,jj,jnum,itype,jtype; double r,rinv,r2inv,rsq; double grij,expm2,t,erfc; - double bij[4],xi[3],rij[3],spi[4],spj[4]; + double bij[4],xi[3],rij[3]; + double spi[4],spj[4]; double local_cut2; double pre1,pre2,pre3; int *ilist,*jlist,*numneigh,**firstneigh; double **x = atom->x; double **sp = atom->sp; + double **fm_long = atom->fm_long; int *type = atom->type; ilist = list->ilist; @@ -433,15 +435,16 @@ void PairSpinLong::compute_single_pair(int ii, double fmi[3]) } } - // force accumulation + // adding the kspace components to fm + + fmi[0] += fm_long[i][0]; + fmi[1] += fm_long[i][1]; + fmi[2] += fm_long[i][2]; - fmi[0] *= mub2mu0hbinv; - fmi[1] *= mub2mu0hbinv; - fmi[2] *= mub2mu0hbinv; } /* ---------------------------------------------------------------------- - compute exchange interaction between spins i and j + compute dipolar interaction between spins i and j ------------------------------------------------------------------------- */ void PairSpinLong::compute_long(int i, int j, double rij[3], @@ -456,13 +459,14 @@ void PairSpinLong::compute_long(int i, int j, double rij[3], b1 = bij[1]; b2 = bij[2]; - fmi[0] += gigj * (b2 * sjdotr *rij[0] - b1 * spj[0]); - fmi[1] += gigj * (b2 * sjdotr *rij[1] - b1 * spj[1]); - fmi[2] += gigj * (b2 * sjdotr *rij[2] - b1 * spj[2]); + fmi[0] += mub2mu0hbinv * gigj * (b2 * sjdotr *rij[0] - b1 * spj[0]); + fmi[1] += mub2mu0hbinv * gigj * (b2 * sjdotr *rij[1] - b1 * spj[1]); + fmi[2] += mub2mu0hbinv * gigj * (b2 * sjdotr *rij[2] - b1 * spj[2]); } /* ---------------------------------------------------------------------- - compute the mechanical force due to the exchange interaction between atom i and atom j + compute the mechanical force due to the dipolar interaction between + atom i and atom j ------------------------------------------------------------------------- */ void PairSpinLong::compute_long_mech(int i, int j, double rij[3], diff --git a/src/SPIN/pair_spin_long_qsymp.cpp b/src/SPIN/pair_spin_long_qsymp.cpp new file mode 100644 index 0000000000..3b499d0ef7 --- /dev/null +++ b/src/SPIN/pair_spin_long_qsymp.cpp @@ -0,0 +1,655 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + www.cs.sandia.gov/~sjplimp/lammps.html + Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories + + 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 authors: Julien Tranchida (SNL) + Aidan Thompson (SNL) + + Please cite the related publication: + Tranchida, J., Plimpton, S. J., Thibaudeau, P., & Thompson, A. P. (2018). + Massively parallel symplectic algorithm for coupled magnetic spin dynamics + and molecular dynamics. Journal of Computational Physics. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include + +#include "pair_spin_long_qsymp.h" +#include "atom.h" +#include "comm.h" +#include "neighbor.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "fix_nve_spin.h" +#include "force.h" +#include "kspace.h" +#include "math_const.h" +#include "memory.h" +#include "modify.h" +#include "error.h" +#include "update.h" + + +using namespace LAMMPS_NS; +using namespace MathConst; + +#define EWALD_F 1.12837917 +#define EWALD_P 0.3275911 +#define A1 0.254829592 +#define A2 -0.284496736 +#define A3 1.421413741 +#define A4 -1.453152027 +#define A5 1.061405429 + +/* ---------------------------------------------------------------------- */ + +PairSpinLongQsymp::PairSpinLongQsymp(LAMMPS *lmp) : PairSpin(lmp), +lockfixnvespin(NULL) +{ + single_enable = 0; + ewaldflag = pppmflag = spinflag = 1; + respa_enable = 0; + no_virial_fdotr_compute = 1; + lattice_flag = 0; + + hbar = force->hplanck/MY_2PI; // eV/(rad.THz) + mub = 5.78901e-5; // in eV/T + mu_0 = 1.2566370614e-6; // in T.m/A + mub2mu0 = mub * mub * mu_0; // in eV + mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz + +} + +/* ---------------------------------------------------------------------- + free all arrays +------------------------------------------------------------------------- */ + +PairSpinLongQsymp::~PairSpinLongQsymp() +{ + if (allocated) { + memory->destroy(setflag); + memory->destroy(cut_spin_long); + memory->destroy(cutsq); + } +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairSpinLongQsymp::settings(int narg, char **arg) +{ + if (narg < 1 || narg > 2) + error->all(FLERR,"Incorrect args in pair_style command"); + + if (strcmp(update->unit_style,"metal") != 0) + error->all(FLERR,"Spin simulations require metal unit style"); + + cut_spin_long_global = force->numeric(FLERR,arg[0]); + + // reset cutoffs that have been explicitly set + + if (allocated) { + int i,j; + for (i = 1; i <= atom->ntypes; i++) { + for (j = i+1; j <= atom->ntypes; j++) { + if (setflag[i][j]) { + cut_spin_long[i][j] = cut_spin_long_global; + } + } + } + } + +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more type pairs +------------------------------------------------------------------------- */ + +void PairSpinLongQsymp::coeff(int narg, char **arg) +{ + if (!allocated) allocate(); + + // check if args correct + + if (strcmp(arg[2],"long") != 0) + error->all(FLERR,"Incorrect args in pair_style command"); + if (narg < 1 || narg > 4) + error->all(FLERR,"Incorrect args in pair_style command"); + + int ilo,ihi,jlo,jhi; + force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); + force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); + + double spin_long_cut_one = force->numeric(FLERR,arg[3]); + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + for (int j = MAX(jlo,i); j <= jhi; j++) { + setflag[i][j] = 1; + cut_spin_long[i][j] = spin_long_cut_one; + count++; + } + } + + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); +} + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairSpinLongQsymp::init_style() +{ + if (!atom->sp_flag) + error->all(FLERR,"Pair spin requires atom/spin style"); + + // need a full neighbor list + + int irequest = neighbor->request(this,instance_me); + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; + + // checking if nve/spin is a listed fix + + int ifix = 0; + while (ifix < modify->nfix) { + if (strcmp(modify->fix[ifix]->style,"nve/spin") == 0) break; + ifix++; + } + if (ifix == modify->nfix) + error->all(FLERR,"pair/spin style requires nve/spin"); + + // get the lattice_flag from nve/spin + + for (int i = 0; i < modify->nfix; i++) { + if (strcmp(modify->fix[i]->style,"nve/spin") == 0) { + lockfixnvespin = (FixNVESpin *) modify->fix[i]; + lattice_flag = lockfixnvespin->lattice_flag; + } + } + + // insure use of KSpace long-range solver, set g_ewald + + if (force->kspace == NULL) + error->all(FLERR,"Pair style requires a KSpace style"); + + g_ewald = force->kspace->g_ewald; + +} + +/* ---------------------------------------------------------------------- + init for one type pair i,j and corresponding j,i +------------------------------------------------------------------------- */ + +double PairSpinLongQsymp::init_one(int i, int j) +{ + if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + + cut_spin_long[j][i] = cut_spin_long[i][j]; + + return cut_spin_long_global; +} + +/* ---------------------------------------------------------------------- + extract the larger cutoff if "cut" or "cut_coul" +------------------------------------------------------------------------- */ + +void *PairSpinLongQsymp::extract(const char *str, int &dim) +{ + if (strcmp(str,"cut") == 0) { + dim = 0; + return (void *) &cut_spin_long_global; + } else if (strcmp(str,"cut_coul") == 0) { + dim = 0; + return (void *) &cut_spin_long_global; + } else if (strcmp(str,"ewald_order") == 0) { + ewald_order = 0; + ewald_order |= 1<<1; + ewald_order |= 1<<3; + dim = 0; + return (void *) &ewald_order; + } else if (strcmp(str,"ewald_mix") == 0) { + dim = 0; + return (void *) &mix_flag; + } + return NULL; +} + +/* ---------------------------------------------------------------------- */ + +void PairSpinLongQsymp::compute(int eflag, int vflag) +{ + int i,j,ii,jj,inum,jnum,itype,jtype; + double r,rinv,r2inv,rsq; + double grij,expm2,t,erfc,erf; + double sjdotr,gigj; + double bij[4]; + double cij[4]; + double evdwl,ecoul; + double xi[3],rij[3]; + double spi[4],spj[4],fi[3],fmi[3]; + double fmx_erf_s,fmy_erf_s,fmz_erf_s; + double local_cut2; + double pre1,pre2,pre3; + int *ilist,*jlist,*numneigh,**firstneigh; + + evdwl = ecoul = 0.0; + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = vflag_fdotr = 0; + + double **x = atom->x; + double **f = atom->f; + double **fm = atom->fm; + double **fm_long = atom->fm_long; + double **sp = atom->sp; + int *type = atom->type; + int nlocal = atom->nlocal; + int newton_pair = force->newton_pair; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + pre1 = 2.0 * g_ewald / MY_PIS; + pre2 = 4.0 * pow(g_ewald,3.0) / MY_PIS; + pre3 = 8.0 * pow(g_ewald,5.0) / MY_PIS; + + // computation of the exchange interaction + // loop over atoms and their neighbors + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + xi[0] = x[i][0]; + xi[1] = x[i][1]; + xi[2] = x[i][2]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + spi[0] = sp[i][0]; + spi[1] = sp[i][1]; + spi[2] = sp[i][2]; + spi[3] = sp[i][3]; + itype = type[i]; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + jtype = type[j]; + + spj[0] = sp[j][0]; + spj[1] = sp[j][1]; + spj[2] = sp[j][2]; + spj[3] = sp[j][3]; + + evdwl = 0.0; + + fi[0] = fi[1] = fi[2] = 0.0; + fmi[0] = fmi[1] = fmi[2] = 0.0; + fmx_erf_s = fmy_erf_s = fmz_erf_s = 0.0; + bij[0] = bij[1] = bij[2] = bij[3] = 0.0; + cij[0] = cij[1] = cij[2] = cij[3] = 0.0; + + rij[0] = x[j][0] - xi[0]; + rij[1] = x[j][1] - xi[1]; + rij[2] = x[j][2] - xi[2]; + rsq = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; + + local_cut2 = cut_spin_long[itype][jtype]*cut_spin_long[itype][jtype]; + + if (rsq < local_cut2) { + r2inv = 1.0/rsq; + rinv = sqrt(r2inv); + + r = sqrt(rsq); + grij = g_ewald * r; + expm2 = exp(-grij*grij); + t = 1.0 / (1.0 + EWALD_P*grij); + erfc = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; + erf = 1.0 - t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; + + // evaluating erfc for mech. force and energy calc. + + bij[0] = erfc * rinv; + bij[1] = (bij[0] + pre1*expm2) * r2inv; + bij[2] = (3.0*bij[1] + pre2*expm2) * r2inv; + bij[3] = (5.0*bij[2] + pre3*expm2) * r2inv; + + compute_long(i,j,rij,bij,fmi,spi,spj); + compute_long_mech(i,j,rij,bij,fmi,spi,spj); + + // evaluating erf comp. for fm_kspace correction + + cij[0] = erf * rinv; + cij[1] = (bij[0] + pre1*expm2) * r2inv; + cij[2] = (3.0*bij[1] + pre2*expm2) * r2inv; + //cij[3] = (5.0*bij[2] + pre3*expm2) * r2inv; + + gigj = spi[3] * spj[3]; + sjdotr = spj[0]*rij[0] + spj[1]*rij[1] + spj[2]*rij[2]; + + // evaluating short-range correction to the kspace part on [0,rc] + + fmx_erf_s += gigj * (cij[2] * sjdotr * rij[0] - cij[1] * spj[0]); + fmy_erf_s += gigj * (cij[2] * sjdotr * rij[1] - cij[1] * spj[1]); + fmz_erf_s += gigj * (cij[2] * sjdotr * rij[2] - cij[1] * spj[2]); + + } + + // force accumulation + + f[i][0] += fi[0] * mub2mu0; + f[i][1] += fi[1] * mub2mu0; + f[i][2] += fi[2] * mub2mu0; + fm[i][0] += fmi[0] * mub2mu0hbinv; + fm[i][1] += fmi[1] * mub2mu0hbinv; + fm[i][2] += fmi[2] * mub2mu0hbinv; + + // correction of the fm_kspace + + fm_long[i][0] -= mub2mu0hbinv * fmx_erf_s; + fm_long[i][1] -= mub2mu0hbinv * fmy_erf_s; + fm_long[i][2] -= mub2mu0hbinv * fmz_erf_s; + + if (newton_pair || j < nlocal) { + f[j][0] -= fi[0]; + f[j][1] -= fi[1]; + f[j][2] -= fi[2]; + } + + if (eflag) { + if (rsq <= local_cut2) { + evdwl -= spi[0]*fmi[0] + spi[1]*fmi[1] + + spi[2]*fmi[2]; + evdwl *= hbar; + } + } else evdwl = 0.0; + + + if (evflag) ev_tally_xyz(i,j,nlocal,newton_pair, + evdwl,ecoul,fi[0],fi[1],fi[2],rij[0],rij[1],rij[2]); + + } + } +} + +/* ---------------------------------------------------------------------- + update the pair interaction fmi acting on the spin ii + adding 1/r (for r in [0,rc]) contribution to the pair + removing erf(r)/r (for r in [0,rc]) from the kspace force +------------------------------------------------------------------------- */ + +void PairSpinLongQsymp::compute_single_pair(int ii, double fmi[3]) +{ + int i,j,jj,jnum,itype,jtype; + double r,rinv,r2inv,r3inv,rsq; + double grij,expm2,t,erf; + double sjdotr,sjdotrr3inv; + double b1,b2,gigj; + double bij[4],xi[3],rij[3]; + double spi[4],spj[4]; + double local_cut2; + double pre1,pre2,pre3; + int *ilist,*jlist,*numneigh,**firstneigh; + //double fmx_erf_s,fmy_erf_s,fmz_erf_s; + double fmx_s,fmy_s,fmz_s; + //double fmx_long,fmy_long,fmz_long; + + double **x = atom->x; + double **sp = atom->sp; + double **fm_long = atom->fm_long; + int *type = atom->type; + + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + pre1 = 2.0 * g_ewald / MY_PIS; + pre2 = 4.0 * pow(g_ewald,3.0) / MY_PIS; + pre3 = 8.0 * pow(g_ewald,5.0) / MY_PIS; + + // computation of the exchange interaction + // loop over neighbors of atom i + + i = ilist[ii]; + xi[0] = x[i][0]; + xi[1] = x[i][1]; + xi[2] = x[i][2]; + spi[0] = sp[i][0]; + spi[1] = sp[i][1]; + spi[2] = sp[i][2]; + spi[3] = sp[i][3]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + itype = type[i]; + + //fmx_long = fmy_long = fmz_long = 0.0; + //fmx_erf_s = fmy_erf_s = fmz_erf_s = 0.0; + fmx_s = fmy_s = fmz_s = 0.0; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + jtype = type[j]; + + spj[0] = sp[j][0]; + spj[1] = sp[j][1]; + spj[2] = sp[j][2]; + spj[3] = sp[j][3]; + + bij[0] = bij[1] = bij[2] = bij[3] = 0.0; + + rij[0] = x[j][0] - xi[0]; + rij[1] = x[j][1] - xi[1]; + rij[2] = x[j][2] - xi[2]; + rsq = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; + + local_cut2 = cut_spin_long[itype][jtype]*cut_spin_long[itype][jtype]; + + if (rsq < local_cut2) { + r2inv = 1.0/rsq; + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + + r = sqrt(rsq); + //grij = g_ewald * r; + //expm2 = exp(-grij*grij); + //t = 1.0 / (1.0 + EWALD_P*grij); + + // evaluating erf instead of erfc + + //erf = 1.0 - t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; + + //bij[0] = erf * rinv; + //bij[1] = (bij[0] + pre1*expm2) * r2inv; + //bij[2] = (3.0*bij[1] + pre2*expm2) * r2inv; + //bij[3] = (5.0*bij[2] + pre3*expm2) * r2inv; + + //gigj = spi[3] * spj[3]; + //sjdotr = spj[0]*rij[0] + spj[1]*rij[1] + spj[2]*rij[2]; + + //b1 = bij[1]; + //b2 = bij[2]; + + // evaluating short-range correction to the kspace part on [0,rc] + + //fmx_erf_s += mub2mu0hbinv * gigj * (b2 * sjdotr * rij[0] - b1 * spj[0]); + //fmy_erf_s += mub2mu0hbinv * gigj * (b2 * sjdotr * rij[1] - b1 * spj[1]); + //fmz_erf_s += mub2mu0hbinv * gigj * (b2 * sjdotr * rij[2] - b1 * spj[2]); + + // evaluating real dipolar interaction on [0,rc] + + sjdotrr3inv = 3.0 * sjdotr * r3inv; + fmx_s += mub2mu0hbinv * gigj * (sjdotrr3inv * rij[0] - sp[i][0]/r3inv); + fmy_s += mub2mu0hbinv * gigj * (sjdotrr3inv * rij[1] - sp[i][1]/r3inv); + fmz_s += mub2mu0hbinv * gigj * (sjdotrr3inv * rij[2] - sp[i][2]/r3inv); + + } + } + + // removing short-range erf function from kspace force + + //fmx_long = fm_long[i][0] - fmx_erf_s; + //fmy_long = fm_long[i][1] - fmy_erf_s; + //fmz_long = fm_long[i][2] - fmz_erf_s; + + // adding truncated kspace force and short-range full force + + //fmi[0] += fmx_s + fmx_long; + //fmi[1] += fmy_s + fmy_long; + //fmi[2] += fmz_s + fmz_long; + fmi[0] += (fmx_s + fm_long[i][0]); + fmi[1] += (fmy_s + fm_long[i][1]); + fmi[2] += (fmz_s + fm_long[i][2]); +} + +/* ---------------------------------------------------------------------- + compute dipolar interaction between spins i and j +------------------------------------------------------------------------- */ + +void PairSpinLongQsymp::compute_long(int i, int j, double rij[3], + double bij[4], double fmi[3], double spi[4], double spj[4]) +{ + double sjdotr; + double b1,b2,gigj; + + gigj = spi[3] * spj[3]; + sjdotr = spj[0]*rij[0] + spj[1]*rij[1] + spj[2]*rij[2]; + + b1 = bij[1]; + b2 = bij[2]; + + fmi[0] += mub2mu0hbinv * gigj * (b2 * sjdotr *rij[0] - b1 * spj[0]); + fmi[1] += mub2mu0hbinv * gigj * (b2 * sjdotr *rij[1] - b1 * spj[1]); + fmi[2] += mub2mu0hbinv * gigj * (b2 * sjdotr *rij[2] - b1 * spj[2]); +} + +/* ---------------------------------------------------------------------- + compute the mechanical force due to the dipolar interaction between + atom i and atom j +------------------------------------------------------------------------- */ + +void PairSpinLongQsymp::compute_long_mech(int i, int j, double rij[3], + double bij[4], double fi[3], double spi[3], double spj[3]) +{ + double sdots,sidotr,sjdotr,b2,b3; + double g1,g2,g1b2_g2b3,gigj; + + gigj = spi[3] * spj[3]; + sdots = spi[0]*spj[0] + spi[1]*spj[1] + spi[2]*spj[2]; + sidotr = spi[0]*rij[0] + spi[1]*rij[1] + spi[2]*rij[2]; + sjdotr = spj[0]*rij[0] + spj[1]*rij[1] + spj[2]*rij[2]; + + b2 = bij[2]; + b3 = bij[3]; + g1 = sdots; + g2 = -sidotr*sjdotr; + g1b2_g2b3 = g1*b2 + g2*b3; + + fi[0] += gigj * (rij[0] * g1b2_g2b3 + + b2 * (sjdotr*spi[0] + sidotr*spj[0])); + fi[1] += gigj * (rij[1] * g1b2_g2b3 + + b2 * (sjdotr*spi[1] + sidotr*spj[1])); + fi[2] += gigj * (rij[2] * g1b2_g2b3 + + b2 * (sjdotr*spi[2] + sidotr*spj[2])); +} + + +/* ---------------------------------------------------------------------- + allocate all arrays +------------------------------------------------------------------------- */ + +void PairSpinLongQsymp::allocate() +{ + allocated = 1; + int n = atom->ntypes; + + memory->create(setflag,n+1,n+1,"pair:setflag"); + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + setflag[i][j] = 0; + + memory->create(cut_spin_long,n+1,n+1,"pair/spin/long:cut_spin_long"); + memory->create(cutsq,n+1,n+1,"pair/spin/long:cutsq"); +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairSpinLongQsymp::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(&cut_spin_long[i][j],sizeof(int),1,fp); + } + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairSpinLongQsymp::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) fread(&setflag[i][j],sizeof(int),1,fp); + MPI_Bcast(&setflag[i][j],1,MPI_INT,0,world); + if (setflag[i][j]) { + if (me == 0) { + fread(&cut_spin_long[i][j],sizeof(int),1,fp); + } + MPI_Bcast(&cut_spin_long[i][j],1,MPI_INT,0,world); + } + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairSpinLongQsymp::write_restart_settings(FILE *fp) +{ + fwrite(&cut_spin_long_global,sizeof(double),1,fp); + fwrite(&mix_flag,sizeof(int),1,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairSpinLongQsymp::read_restart_settings(FILE *fp) +{ + if (comm->me == 0) { + fread(&cut_spin_long_global,sizeof(double),1,fp); + fread(&mix_flag,sizeof(int),1,fp); + } + MPI_Bcast(&cut_spin_long_global,1,MPI_DOUBLE,0,world); + MPI_Bcast(&mix_flag,1,MPI_INT,0,world); +} diff --git a/src/SPIN/pair_spin_long_qsymp.h b/src/SPIN/pair_spin_long_qsymp.h new file mode 100644 index 0000000000..ae8c5a3864 --- /dev/null +++ b/src/SPIN/pair_spin_long_qsymp.h @@ -0,0 +1,100 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + www.cs.sandia.gov/~sjplimp/lammps.html + Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories + + 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 + +PairStyle(spin/long/qsymp,PairSpinLongQsymp) + +#else + +#ifndef LMP_PAIR_SPIN_LONG_QSYMP_H +#define LMP_PAIR_SPIN_LONG_QSYMP_H + +#include "pair_spin.h" + +namespace LAMMPS_NS { + +class PairSpinLongQsymp : public PairSpin { + public: + double cut_coul; + double **sigma; + + PairSpinLongQsymp(class LAMMPS *); + ~PairSpinLongQsymp(); + void settings(int, char **); + void coeff(int, char **); + double init_one(int, int); + void init_style(); + void *extract(const char *, int &); + + void compute(int, int); + void compute_single_pair(int, double *); + + void compute_long(int, int, double *, double *, double *, + double *, double *); + void compute_long_mech(int, int, double *, double *, double *, + double *, double *); + + void write_restart(FILE *); + void read_restart(FILE *); + void write_restart_settings(FILE *); + void read_restart_settings(FILE *); + + double cut_spin_long_global; // global long cutoff distance + + protected: + double hbar; // reduced Planck's constant + double mub; // Bohr's magneton + double mu_0; // vacuum permeability + double mub2mu0; // prefactor for mech force + double mub2mu0hbinv; // prefactor for mag force + + double **cut_spin_long; // cutoff distance long + + double g_ewald; + int ewald_order; + + int lattice_flag; // flag for mech force computation + class FixNVESpin *lockfixnvespin; // ptr for setups + + void allocate(); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Incorrect args in pair_style command + +Self-explanatory. + +E: Incorrect args for pair coefficients + +Self-explanatory. Check the input script or data file. + +E: Pair dipole/long requires atom attributes q, mu, torque + +The atom style defined does not have these attributes. + +E: Cannot (yet) use 'electron' units with dipoles + +This feature is not yet supported. + +E: Pair style requires a KSpace style + +No kspace style is defined. + +*/ From b9e33e631f81fac627b09fefcb0e285b1148668c Mon Sep 17 00:00:00 2001 From: "Stan Gerald Moore (stamoor)" Date: Sat, 15 Sep 2018 13:34:24 -0600 Subject: [PATCH 010/311] Fix bug in ewald_dipole forces --- src/KSPACE/ewald_dipole.cpp | 84 ++++++++++++++++++------------------- 1 file changed, 41 insertions(+), 43 deletions(-) diff --git a/src/KSPACE/ewald_dipole.cpp b/src/KSPACE/ewald_dipole.cpp index d7c3aad206..f5746ec31c 100644 --- a/src/KSPACE/ewald_dipole.cpp +++ b/src/KSPACE/ewald_dipole.cpp @@ -443,7 +443,7 @@ void EwaldDipole::compute(int eflag, int vflag) sypz = sn[ky][1][i]*cs[kz][2][i] + cs[ky][1][i]*sn[kz][2][i]; exprl = cs[kx][0][i]*cypz - sn[kx][0][i]*sypz; expim = sn[kx][0][i]*cypz + cs[kx][0][i]*sypz; - partial = expim*sfacrl_all[k] - exprl*sfacim_all[k]; + partial = (muk[k][i])*(expim*sfacrl_all[k] - exprl*sfacim_all[k]); ek[i][0] += partial*eg[k][0]; ek[i][1] += partial*eg[k][1]; ek[i][2] += partial*eg[k][2]; @@ -465,14 +465,12 @@ void EwaldDipole::compute(int eflag, int vflag) const double muscale = qqrd2e * scale; for (i = 0; i < nlocal; i++) { - for (k = 0; k < kcount; k++) { - //f[i][0] += qscale * q[i]*ek[i][0]; - //f[i][1] += qscale * q[i]*ek[i][1]; - //if (slabflag != 2) f[i][2] += qscale * q[i]*ek[i][2]; - f[i][0] += muscale * muk[k][i] * ek[i][0]; - f[i][1] += muscale * muk[k][i] * ek[i][1]; - if (slabflag != 2) f[i][2] += muscale * muk[k][i] * ek[i][2]; - } + //f[i][0] += qscale * q[i]*ek[i][0]; + //f[i][1] += qscale * q[i]*ek[i][1]; + //if (slabflag != 2) f[i][2] += qscale * q[i]*ek[i][2]; + f[i][0] += muscale * ek[i][0]; + f[i][1] += muscale * ek[i][1]; + if (slabflag != 2) f[i][2] += muscale * ek[i][2]; } // sum global energy across Kspace vevs and add in volume-dependent term @@ -548,7 +546,7 @@ void EwaldDipole::eik_dot_r() // define first val. of cos and sin for (ic = 0; ic < 3; ic++) { - sqk = (unitk[ic] * unitk[ic]); + sqk = unitk[ic]*unitk[ic]; if (sqk <= gsqmx) { cstr1 = 0.0; sstr1 = 0.0; @@ -557,8 +555,8 @@ void EwaldDipole::eik_dot_r() sn[0][ic][i] = 0.0; cs[1][ic][i] = cos(unitk[ic]*x[i][ic]); sn[1][ic][i] = sin(unitk[ic]*x[i][ic]); - cs[-1][ic][i] = cs[1][0][i]; - sn[-1][ic][i] = -sn[1][0][i]; + cs[-1][ic][i] = cs[1][ic][i]; + sn[-1][ic][i] = -sn[1][ic][i]; muk[n][i] = (mu[i][ic]*unitk[ic]); cstr1 += muk[n][i]*cs[1][ic][i]; sstr1 += muk[n][i]*sn[1][ic][i]; @@ -583,7 +581,7 @@ void EwaldDipole::eik_dot_r() cs[m-1][ic][i]*sn[1][ic][i]; cs[-m][ic][i] = cs[m][ic][i]; sn[-m][ic][i] = -sn[m][ic][i]; - muk[n][i] = (mu[i][ic]*m*unitk[ic]); + muk[n][i] = (mu[i][ic]*m*unitk[ic]); cstr1 += muk[n][i]*cs[m][ic][i]; sstr1 += muk[n][i]*sn[m][ic][i]; } @@ -604,16 +602,16 @@ void EwaldDipole::eik_dot_r() cstr2 = 0.0; sstr2 = 0.0; for (i = 0; i < nlocal; i++) { - mux = mu[i][0]; - muy = mu[i][1]; + mux = mu[i][0]; + muy = mu[i][1]; - // dir 1: (k,l,0) - muk[n][i] = (mux*k*unitk[0] + muy*l*unitk[1]); + // dir 1: (k,l,0) + muk[n][i] = (mux*k*unitk[0] + muy*l*unitk[1]); cstr1 += muk[n][i]*(cs[k][0][i]*cs[l][1][i]-sn[k][0][i]*sn[l][1][i]); sstr1 += muk[n][i]*(sn[k][0][i]*cs[l][1][i]+cs[k][0][i]*sn[l][1][i]); - // dir 2: (k,-l,0) - muk[n+1][i] = (mux*k*unitk[0] - muy*l*unitk[1]); + // dir 2: (k,-l,0) + muk[n+1][i] = (mux*k*unitk[0] - muy*l*unitk[1]); cstr2 += muk[n+1][i]*(cs[k][0][i]*cs[l][1][i]+sn[k][0][i]*sn[l][1][i]); sstr2 += muk[n+1][i]*(sn[k][0][i]*cs[l][1][i]-cs[k][0][i]*sn[l][1][i]); } @@ -636,16 +634,16 @@ void EwaldDipole::eik_dot_r() cstr2 = 0.0; sstr2 = 0.0; for (i = 0; i < nlocal; i++) { - muy = mu[i][1]; - muz = mu[i][2]; + muy = mu[i][1]; + muz = mu[i][2]; - // dir 1: (0,l,m) - muk[n][i] = (muy*l*unitk[1] + muz*m*unitk[2]); + // dir 1: (0,l,m) + muk[n][i] = (muy*l*unitk[1] + muz*m*unitk[2]); cstr1 += muk[n][i]*(cs[l][1][i]*cs[m][2][i] - sn[l][1][i]*sn[m][2][i]); sstr1 += muk[n][i]*(sn[l][1][i]*cs[m][2][i] + cs[l][1][i]*sn[m][2][i]); - // dir 2: (0,l,-m) - muk[n+1][i] = (muy*l*unitk[1] - muz*m*unitk[2]); + // dir 2: (0,l,-m) + muk[n+1][i] = (muy*l*unitk[1] - muz*m*unitk[2]); cstr2 += muk[n+1][i]*(cs[l][1][i]*cs[m][2][i]+sn[l][1][i]*sn[m][2][i]); sstr2 += muk[n+1][i]*(sn[l][1][i]*cs[m][2][i]-cs[l][1][i]*sn[m][2][i]); } @@ -656,7 +654,7 @@ void EwaldDipole::eik_dot_r() } } } - + // 1 = (k,0,m), 2 = (k,0,-m) for (k = 1; k <= kxmax; k++) { @@ -668,16 +666,16 @@ void EwaldDipole::eik_dot_r() cstr2 = 0.0; sstr2 = 0.0; for (i = 0; i < nlocal; i++) { - mux = mu[i][0]; - muz = mu[i][2]; + mux = mu[i][0]; + muz = mu[i][2]; - // dir 1: (k,0,m) - muk[n][i] = (mux*k*unitk[0] + muz*m*unitk[2]); + // dir 1: (k,0,m) + muk[n][i] = (mux*k*unitk[0] + muz*m*unitk[2]); cstr1 += muk[n][i]*(cs[k][0][i]*cs[m][2][i]-sn[k][0][i]*sn[m][2][i]); sstr1 += muk[n][i]*(sn[k][0][i]*cs[m][2][i]+cs[k][0][i]*sn[m][2][i]); - // dir 2: (k,0,-m) - muk[n+1][i] = (mux*k*unitk[0] - muz*m*unitk[2]); + // dir 2: (k,0,-m) + muk[n+1][i] = (mux*k*unitk[0] - muz*m*unitk[2]); cstr2 += muk[n+1][i]*(cs[k][0][i]*cs[m][2][i]+sn[k][0][i]*sn[m][2][i]); sstr2 += muk[n+1][i]*(sn[k][0][i]*cs[m][2][i]-cs[k][0][i]*sn[m][2][i]); } @@ -706,33 +704,33 @@ void EwaldDipole::eik_dot_r() cstr4 = 0.0; sstr4 = 0.0; for (i = 0; i < nlocal; i++) { - mux = mu[i][0]; - muy = mu[i][1]; - muz = mu[i][2]; + mux = mu[i][0]; + muy = mu[i][1]; + muz = mu[i][2]; - // dir 1: (k,l,m) - muk[n][i] = (mux*k*unitk[0] + muy*l*unitk[1] + muz*m*unitk[2]); + // dir 1: (k,l,m) + muk[n][i] = (mux*k*unitk[0] + muy*l*unitk[1] + muz*m*unitk[2]); clpm = cs[l][1][i]*cs[m][2][i] - sn[l][1][i]*sn[m][2][i]; slpm = sn[l][1][i]*cs[m][2][i] + cs[l][1][i]*sn[m][2][i]; cstr1 += muk[n][i]*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); sstr1 += muk[n][i]*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); - // dir 2: (k,-l,m) - muk[n+1][i] = (mux*k*unitk[0] - muy*l*unitk[1] + muz*m*unitk[2]); + // dir 2: (k,-l,m) + muk[n+1][i] = (mux*k*unitk[0] - muy*l*unitk[1] + muz*m*unitk[2]); clpm = cs[l][1][i]*cs[m][2][i] + sn[l][1][i]*sn[m][2][i]; slpm = -sn[l][1][i]*cs[m][2][i] + cs[l][1][i]*sn[m][2][i]; cstr2 += muk[n+1][i]*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); sstr2 += muk[n+1][i]*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); - // dir 3: (k,l,-m) - muk[n+2][i] = (mux*k*unitk[0] + muy*l*unitk[1] - muz*m*unitk[2]); + // dir 3: (k,l,-m) + muk[n+2][i] = (mux*k*unitk[0] + muy*l*unitk[1] - muz*m*unitk[2]); clpm = cs[l][1][i]*cs[m][2][i] + sn[l][1][i]*sn[m][2][i]; slpm = sn[l][1][i]*cs[m][2][i] - cs[l][1][i]*sn[m][2][i]; cstr3 += muk[n+2][i]*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); sstr3 += muk[n+2][i]*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); - // dir 4: (k,-l,-m) - muk[n+3][i] = (mux*k*unitk[0] - muy*l*unitk[1] - muz*m*unitk[2]); + // dir 4: (k,-l,-m) + muk[n+3][i] = (mux*k*unitk[0] - muy*l*unitk[1] - muz*m*unitk[2]); clpm = cs[l][1][i]*cs[m][2][i] - sn[l][1][i]*sn[m][2][i]; slpm = -sn[l][1][i]*cs[m][2][i] - cs[l][1][i]*sn[m][2][i]; cstr4 += muk[n+3][i]*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); From cce9fe4a34b39e81ec17e863bd9b42e3248edbb5 Mon Sep 17 00:00:00 2001 From: julient31 Date: Fri, 21 Sep 2018 09:55:41 -0600 Subject: [PATCH 011/311] Commit2 JT 092118 - created pair_spin_dipolar_cut - real-space short-range calc of the spin dipolar interaction - run and check valgrind ok --- .../SPIN/pppm_spin/in.spin.spin_dipolar_cut | 62 ++ src/SPIN/pair_spin_dipolar_cut.cpp | 528 ++++++++++++++++++ src/SPIN/pair_spin_dipolar_cut.h | 100 ++++ 3 files changed, 690 insertions(+) create mode 100644 examples/SPIN/pppm_spin/in.spin.spin_dipolar_cut create mode 100644 src/SPIN/pair_spin_dipolar_cut.cpp create mode 100644 src/SPIN/pair_spin_dipolar_cut.h diff --git a/examples/SPIN/pppm_spin/in.spin.spin_dipolar_cut b/examples/SPIN/pppm_spin/in.spin.spin_dipolar_cut new file mode 100644 index 0000000000..838181e6d8 --- /dev/null +++ b/examples/SPIN/pppm_spin/in.spin.spin_dipolar_cut @@ -0,0 +1,62 @@ +# hcp cobalt in a 3d periodic box + +clear +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice hcp 2.5071 +region box block 0.0 8.0 0.0 8.0 0.0 8.0 +create_box 1 box +create_atoms 1 box + +# setting mass, mag. moments, and interactions for hcp cobalt + +mass 1 58.93 + +#set group all spin/random 31 1.72 +set group all spin 1.72 0.0 0.0 1.0 +velocity all create 100 4928459 rot yes dist gaussian + +#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/long 8.0 +pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/dipolar/cut 8.0 +#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 +pair_coeff * * eam/alloy ../examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy Co +pair_coeff * * spin/exchange exchange 4.0 0.3593 1.135028015e-05 1.064568567 +pair_coeff * * spin/dipolar/cut long 8.0 +#pair_coeff * * spin/long long 8.0 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +#fix 1 all precession/spin zeeman 1.0 0.0 0.0 1.0 +fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 +fix 2 all langevin/spin 0.0 0.0 21 +fix 3 all nve/spin lattice yes + +timestep 0.0001 + + +compute out_mag all compute/spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magnorm v_emag temp etotal +thermo 10 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 100 all custom 1 dump_cobalt_hcp.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +#run 20000 +run 10 diff --git a/src/SPIN/pair_spin_dipolar_cut.cpp b/src/SPIN/pair_spin_dipolar_cut.cpp new file mode 100644 index 0000000000..f686d12926 --- /dev/null +++ b/src/SPIN/pair_spin_dipolar_cut.cpp @@ -0,0 +1,528 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + www.cs.sandia.gov/~sjplimp/lammps.html + Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories + + 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 authors: Julien Tranchida (SNL) + Aidan Thompson (SNL) + + Please cite the related publication: + Tranchida, J., Plimpton, S. J., Thibaudeau, P., & Thompson, A. P. (2018). + Massively parallel symplectic algorithm for coupled magnetic spin dynamics + and molecular dynamics. Journal of Computational Physics. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include + +#include "pair_spin_dipolar_cut.h" +#include "atom.h" +#include "comm.h" +#include "neighbor.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "fix_nve_spin.h" +#include "force.h" +#include "kspace.h" +#include "math_const.h" +#include "memory.h" +#include "modify.h" +#include "error.h" +#include "update.h" + + +using namespace LAMMPS_NS; +using namespace MathConst; + +#define EWALD_F 1.12837917 +#define EWALD_P 0.3275911 +#define A1 0.254829592 +#define A2 -0.284496736 +#define A3 1.421413741 +#define A4 -1.453152027 +#define A5 1.061405429 + +/* ---------------------------------------------------------------------- */ + +PairSpinDipolarCut::PairSpinDipolarCut(LAMMPS *lmp) : PairSpin(lmp), +lockfixnvespin(NULL) +{ + single_enable = 0; + spinflag = 1; + respa_enable = 0; + no_virial_fdotr_compute = 1; + lattice_flag = 0; + + hbar = force->hplanck/MY_2PI; // eV/(rad.THz) + mub = 5.78901e-5; // in eV/T + mu_0 = 1.2566370614e-6; // in T.m/A + mub2mu0 = mub * mub * mu_0; // in eV + mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz + +} + +/* ---------------------------------------------------------------------- + free all arrays +------------------------------------------------------------------------- */ + +PairSpinDipolarCut::~PairSpinDipolarCut() +{ + if (allocated) { + memory->destroy(setflag); + memory->destroy(cut_spin_long); + memory->destroy(cutsq); + } +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairSpinDipolarCut::settings(int narg, char **arg) +{ + if (narg < 1 || narg > 2) + error->all(FLERR,"Incorrect args in pair_style command"); + + if (strcmp(update->unit_style,"metal") != 0) + error->all(FLERR,"Spin simulations require metal unit style"); + + cut_spin_long_global = force->numeric(FLERR,arg[0]); + + // reset cutoffs that have been explicitly set + + if (allocated) { + int i,j; + for (i = 1; i <= atom->ntypes; i++) { + for (j = i+1; j <= atom->ntypes; j++) { + if (setflag[i][j]) { + cut_spin_long[i][j] = cut_spin_long_global; + } + } + } + } + +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more type pairs +------------------------------------------------------------------------- */ + +void PairSpinDipolarCut::coeff(int narg, char **arg) +{ + if (!allocated) allocate(); + + // check if args correct + + if (strcmp(arg[2],"long") != 0) + error->all(FLERR,"Incorrect args in pair_style command"); + if (narg < 1 || narg > 4) + error->all(FLERR,"Incorrect args in pair_style command"); + + int ilo,ihi,jlo,jhi; + force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); + force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); + + double spin_long_cut_one = force->numeric(FLERR,arg[3]); + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + for (int j = MAX(jlo,i); j <= jhi; j++) { + setflag[i][j] = 1; + cut_spin_long[i][j] = spin_long_cut_one; + count++; + } + } + + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); +} + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairSpinDipolarCut::init_style() +{ + if (!atom->sp_flag) + error->all(FLERR,"Pair spin requires atom/spin style"); + + // need a full neighbor list + + int irequest = neighbor->request(this,instance_me); + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; + + // checking if nve/spin is a listed fix + + int ifix = 0; + while (ifix < modify->nfix) { + if (strcmp(modify->fix[ifix]->style,"nve/spin") == 0) break; + ifix++; + } + if (ifix == modify->nfix) + error->all(FLERR,"pair/spin style requires nve/spin"); + + // get the lattice_flag from nve/spin + + for (int i = 0; i < modify->nfix; i++) { + if (strcmp(modify->fix[i]->style,"nve/spin") == 0) { + lockfixnvespin = (FixNVESpin *) modify->fix[i]; + lattice_flag = lockfixnvespin->lattice_flag; + } + } + +} + +/* ---------------------------------------------------------------------- + init for one type pair i,j and corresponding j,i +------------------------------------------------------------------------- */ + +double PairSpinDipolarCut::init_one(int i, int j) +{ + if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + + cut_spin_long[j][i] = cut_spin_long[i][j]; + + return cut_spin_long_global; +} + +/* ---------------------------------------------------------------------- + extract the larger cutoff if "cut" or "cut_coul" +------------------------------------------------------------------------- */ + +void *PairSpinDipolarCut::extract(const char *str, int &dim) +{ + if (strcmp(str,"cut") == 0) { + dim = 0; + return (void *) &cut_spin_long_global; + } else if (strcmp(str,"cut_coul") == 0) { + dim = 0; + return (void *) &cut_spin_long_global; + } else if (strcmp(str,"ewald_order") == 0) { + ewald_order = 0; + ewald_order |= 1<<1; + ewald_order |= 1<<3; + dim = 0; + return (void *) &ewald_order; + } else if (strcmp(str,"ewald_mix") == 0) { + dim = 0; + return (void *) &mix_flag; + } + return NULL; +} + +/* ---------------------------------------------------------------------- */ + +void PairSpinDipolarCut::compute(int eflag, int vflag) +{ + int i,j,ii,jj,inum,jnum,itype,jtype; + double rinv,r2inv,r3inv,rsq; + double evdwl,ecoul; + double xi[3],rij[3]; + double spi[4],spj[4],fi[3],fmi[3]; + double local_cut2; + int *ilist,*jlist,*numneigh,**firstneigh; + + evdwl = ecoul = 0.0; + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = vflag_fdotr = 0; + + double **x = atom->x; + double **f = atom->f; + double **fm = atom->fm; + double **sp = atom->sp; + int *type = atom->type; + int nlocal = atom->nlocal; + int newton_pair = force->newton_pair; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // computation of the exchange interaction + // loop over atoms and their neighbors + + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + xi[0] = x[i][0]; + xi[1] = x[i][1]; + xi[2] = x[i][2]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + spi[0] = sp[i][0]; + spi[1] = sp[i][1]; + spi[2] = sp[i][2]; + spi[3] = sp[i][3]; + itype = type[i]; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + jtype = type[j]; + + spj[0] = sp[j][0]; + spj[1] = sp[j][1]; + spj[2] = sp[j][2]; + spj[3] = sp[j][3]; + + fi[0] = fi[1] = fi[2] = 0.0; + fmi[0] = fmi[1] = fmi[2] = 0.0; + + rij[0] = x[j][0] - xi[0]; + rij[1] = x[j][1] - xi[1]; + rij[2] = x[j][2] - xi[2]; + rsq = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; + + local_cut2 = cut_spin_long[itype][jtype]*cut_spin_long[itype][jtype]; + + if (rsq < local_cut2) { + r2inv = 1.0/rsq; + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + + compute_dipolar(i,j,rij,fmi,spi,spj,r3inv); + if (lattice_flag) compute_dipolar_mech(i,j,rij,fmi,spi,spj,r2inv); + } + + // force accumulation + + f[i][0] += fi[0]; + f[i][1] += fi[1]; + f[i][2] += fi[2]; + fm[i][0] += fmi[0]; + fm[i][1] += fmi[1]; + fm[i][2] += fmi[2]; + + if (newton_pair || j < nlocal) { + f[j][0] -= fi[0]; + f[j][1] -= fi[1]; + f[j][2] -= fi[2]; + } + + if (eflag) { + if (rsq <= local_cut2) { + evdwl -= spi[0]*fmi[0] + spi[1]*fmi[1] + + spi[2]*fmi[2]; + evdwl *= hbar; + } + } else evdwl = 0.0; + + + if (evflag) ev_tally_xyz(i,j,nlocal,newton_pair, + evdwl,ecoul,fi[0],fi[1],fi[2],rij[0],rij[1],rij[2]); + + } + } +} + +/* ---------------------------------------------------------------------- + update the pair interaction fmi acting on the spin ii + adding 1/r (for r in [0,rc]) contribution to the pair + removing erf(r)/r (for r in [0,rc]) from the kspace force +------------------------------------------------------------------------- */ + +void PairSpinDipolarCut::compute_single_pair(int ii, double fmi[3]) +{ + int i,j,jj,jnum,itype,jtype; + double rsq,rinv,r2inv,r3inv; + double xi[3],rij[3]; + double spi[4],spj[4]; + double local_cut2; + int *ilist,*jlist,*numneigh,**firstneigh; + + double **x = atom->x; + double **sp = atom->sp; + int *type = atom->type; + + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // computation of the exchange interaction + // loop over neighbors of atom i + + i = ilist[ii]; + xi[0] = x[i][0]; + xi[1] = x[i][1]; + xi[2] = x[i][2]; + spi[0] = sp[i][0]; + spi[1] = sp[i][1]; + spi[2] = sp[i][2]; + spi[3] = sp[i][3]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + itype = type[i]; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + jtype = type[j]; + + spj[0] = sp[j][0]; + spj[1] = sp[j][1]; + spj[2] = sp[j][2]; + spj[3] = sp[j][3]; + + rij[0] = x[j][0] - xi[0]; + rij[1] = x[j][1] - xi[1]; + rij[2] = x[j][2] - xi[2]; + rsq = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; + + local_cut2 = cut_spin_long[itype][jtype]*cut_spin_long[itype][jtype]; + + if (rsq < local_cut2) { + r2inv = 1.0/rsq; + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + + // compute dipolar interaction + + compute_dipolar(i,j,rij,fmi,spi,spj,r3inv); + } + } + + //fmi[0] *= mub2mu0hbinv; + //fmi[1] *= mub2mu0hbinv; + //fmi[2] *= mub2mu0hbinv; +} + +/* ---------------------------------------------------------------------- + compute dipolar interaction between spins i and j +------------------------------------------------------------------------- */ + +void PairSpinDipolarCut::compute_dipolar(int i, int j, double rij[3], + double fmi[3], double spi[4], double spj[4], double r3inv) +{ + double sjdotr; + double gigjri2,pre; + + sjdotr = spj[0]*rij[0] + spj[1]*rij[1] + spj[2]*rij[2]; + gigjri2 = (spi[3] * spj[3])*r3inv; + pre = mub2mu0hbinv * gigjri2 / 4.0 / MY_PI; + + fmi[0] += pre * gigjri2 * (3.0 * sjdotr *rij[0] - spj[0]); + fmi[1] += pre * gigjri2 * (3.0 * sjdotr *rij[1] - spj[1]); + fmi[2] += pre * gigjri2 * (3.0 * sjdotr *rij[2] - spj[2]); +} + +/* ---------------------------------------------------------------------- + compute the mechanical force due to the dipolar interaction between + atom i and atom j +------------------------------------------------------------------------- */ + +void PairSpinDipolarCut::compute_dipolar_mech(int i, int j, double rij[3], + double fi[3], double spi[3], double spj[3], double r2inv) +{ + double sdots,sidotr,sjdotr,b2,b3; + double gigjri4,bij,pre; + + gigjri4 = (spi[3] * spj[3])/r2inv/r2inv; + sdots = spi[0]*spj[0] + spi[1]*spj[1] + spi[2]*spj[2]; + sidotr = spi[0]*rij[0] + spi[1]*rij[1] + spi[2]*rij[2]; + sjdotr = spj[0]*rij[0] + spj[1]*rij[1] + spj[2]*rij[2]; + + bij = sdots - 5.0 * sidotr*sjdotr; + pre = mub2mu0 * bij / 4.0 / MY_PI; + fi[0] += pre * (rij[0] * bij + (sjdotr*spi[0] + sidotr*spj[0])); + fi[1] += pre * (rij[1] * bij + (sjdotr*spi[1] + sidotr*spj[1])); + fi[2] += pre * (rij[2] * bij + (sjdotr*spi[2] + sidotr*spj[2])); +} + + +/* ---------------------------------------------------------------------- + allocate all arrays +------------------------------------------------------------------------- */ + +void PairSpinDipolarCut::allocate() +{ + allocated = 1; + int n = atom->ntypes; + + memory->create(setflag,n+1,n+1,"pair:setflag"); + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + setflag[i][j] = 0; + + memory->create(cut_spin_long,n+1,n+1,"pair/spin/long:cut_spin_long"); + memory->create(cutsq,n+1,n+1,"pair/spin/long:cutsq"); +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairSpinDipolarCut::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(&cut_spin_long[i][j],sizeof(int),1,fp); + } + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairSpinDipolarCut::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) fread(&setflag[i][j],sizeof(int),1,fp); + MPI_Bcast(&setflag[i][j],1,MPI_INT,0,world); + if (setflag[i][j]) { + if (me == 0) { + fread(&cut_spin_long[i][j],sizeof(int),1,fp); + } + MPI_Bcast(&cut_spin_long[i][j],1,MPI_INT,0,world); + } + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairSpinDipolarCut::write_restart_settings(FILE *fp) +{ + fwrite(&cut_spin_long_global,sizeof(double),1,fp); + fwrite(&mix_flag,sizeof(int),1,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairSpinDipolarCut::read_restart_settings(FILE *fp) +{ + if (comm->me == 0) { + fread(&cut_spin_long_global,sizeof(double),1,fp); + fread(&mix_flag,sizeof(int),1,fp); + } + MPI_Bcast(&cut_spin_long_global,1,MPI_DOUBLE,0,world); + MPI_Bcast(&mix_flag,1,MPI_INT,0,world); +} diff --git a/src/SPIN/pair_spin_dipolar_cut.h b/src/SPIN/pair_spin_dipolar_cut.h new file mode 100644 index 0000000000..ac17ac2120 --- /dev/null +++ b/src/SPIN/pair_spin_dipolar_cut.h @@ -0,0 +1,100 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + www.cs.sandia.gov/~sjplimp/lammps.html + Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories + + 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 + +PairStyle(spin/dipolar/cut,PairSpinDipolarCut) + +#else + +#ifndef LMP_PAIR_SPIN_DIPOLAR_CUT_H +#define LMP_PAIR_SPIN_DIPOLAR_CUT_H + +#include "pair_spin.h" + +namespace LAMMPS_NS { + +class PairSpinDipolarCut : public PairSpin { + public: + double cut_coul; + double **sigma; + + PairSpinDipolarCut(class LAMMPS *); + ~PairSpinDipolarCut(); + void settings(int, char **); + void coeff(int, char **); + double init_one(int, int); + void init_style(); + void *extract(const char *, int &); + + void compute(int, int); + void compute_single_pair(int, double *); + + void compute_dipolar(int, int, double *, double *, double *, + double *, double); + void compute_dipolar_mech(int, int, double *, double *, double *, + double *, double); + + void write_restart(FILE *); + void read_restart(FILE *); + void write_restart_settings(FILE *); + void read_restart_settings(FILE *); + + double cut_spin_long_global; // global long cutoff distance + + protected: + double hbar; // reduced Planck's constant + double mub; // Bohr's magneton + double mu_0; // vacuum permeability + double mub2mu0; // prefactor for mech force + double mub2mu0hbinv; // prefactor for mag force + + double **cut_spin_long; // cutoff distance long + + double g_ewald; + int ewald_order; + + int lattice_flag; // flag for mech force computation + class FixNVESpin *lockfixnvespin; // ptr for setups + + void allocate(); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Incorrect args in pair_style command + +Self-explanatory. + +E: Incorrect args for pair coefficients + +Self-explanatory. Check the input script or data file. + +E: Pair dipole/long requires atom attributes q, mu, torque + +The atom style defined does not have these attributes. + +E: Cannot (yet) use 'electron' units with dipoles + +This feature is not yet supported. + +E: Pair style requires a KSpace style + +No kspace style is defined. + +*/ From 53a779067ee59366eb96fddfd2c37e0471c0c4bf Mon Sep 17 00:00:00 2001 From: julient31 Date: Mon, 24 Sep 2018 10:59:17 -0600 Subject: [PATCH 012/311] Commit JT 092418 - ewald_dipole_spin added - accuracy problem (with eval of gewald and Newton solver) --- examples/SPIN/pppm_spin/in.spin.ewald_spin | 67 ++ src/KSPACE/ewald_dipole.cpp | 6 +- src/KSPACE/ewald_dipole.h | 3 - src/KSPACE/ewald_dipole_spin.cpp | 895 +++++++++++++++++++++ src/KSPACE/ewald_dipole_spin.h | 102 +++ 5 files changed, 1067 insertions(+), 6 deletions(-) create mode 100644 examples/SPIN/pppm_spin/in.spin.ewald_spin create mode 100644 src/KSPACE/ewald_dipole_spin.cpp create mode 100644 src/KSPACE/ewald_dipole_spin.h diff --git a/examples/SPIN/pppm_spin/in.spin.ewald_spin b/examples/SPIN/pppm_spin/in.spin.ewald_spin new file mode 100644 index 0000000000..d9ca46b27a --- /dev/null +++ b/examples/SPIN/pppm_spin/in.spin.ewald_spin @@ -0,0 +1,67 @@ +# hcp cobalt in a 3d periodic box + +clear +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice hcp 2.5071 +region box block 0.0 8.0 0.0 8.0 0.0 8.0 +create_box 1 box +create_atoms 1 box + +# setting mass, mag. moments, and interactions for hcp cobalt + +mass 1 58.93 + +#set group all spin/random 31 1.72 +set group all spin 1.72 0.0 0.0 1.0 +velocity all create 100 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/long 8.0 +#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/long/qsymp 8.0 +#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 +pair_coeff * * eam/alloy ../examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy Co +pair_coeff * * spin/exchange exchange 4.0 0.3593 1.135028015e-05 1.064568567 +#pair_coeff * * spin/long/qsymp long 8.0 +pair_coeff * * spin/long long 8.0 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +#kspace_style pppm/dipole/spin 1.0e-4 +#kspace_style ewald/dipole/spin 1.0e-4 +kspace_style ewald/dipole/spin 1.0e-2 +kspace_modify mesh 32 32 32 + +#fix 1 all precession/spin zeeman 1.0 0.0 0.0 1.0 +fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 +fix 2 all langevin/spin 0.0 0.0 21 +fix 3 all nve/spin lattice yes + +timestep 0.0001 + + +compute out_mag all compute/spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magnorm v_emag temp etotal +thermo 10 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 100 all custom 1 dump_cobalt_hcp.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +#run 20000 +run 1 diff --git a/src/KSPACE/ewald_dipole.cpp b/src/KSPACE/ewald_dipole.cpp index 372825d587..42d850dcc2 100644 --- a/src/KSPACE/ewald_dipole.cpp +++ b/src/KSPACE/ewald_dipole.cpp @@ -161,6 +161,8 @@ void EwaldDipole::init() // zprd used rather than zprd_slab if (!gewaldflag) { + if (accuracy <= 0.0) + error->all(FLERR,"KSpace accuracy must be > 0"); double g_ewald_new = NewtonSolve(g_ewald,cutoff,natoms,xprd*yprd*zprd,mu2); if (g_ewald_new > 0.0) g_ewald = g_ewald_new; @@ -778,14 +780,12 @@ void EwaldDipole::slabcorr() { // compute local contribution to global dipole moment - //double *q = atom->q; double **x = atom->x; double zprd = domain->zprd; int nlocal = atom->nlocal; double dipole = 0.0; double **mu = atom->mu; - //for (int i = 0; i < nlocal; i++) dipole += q[i]*x[i][2]; for (int i = 0; i < nlocal; i++) dipole += mu[i][2]; // sum local contributions to get global dipole moment @@ -856,7 +856,7 @@ void EwaldDipole::musum_musq() } if (mu2 == 0 && comm->me == 0) - error->all(FLERR,"Using kspace solver PPPMDipole on system with no dipoles"); + error->all(FLERR,"Using kspace solver EwaldDipole on system with no dipoles"); } /* ---------------------------------------------------------------------- diff --git a/src/KSPACE/ewald_dipole.h b/src/KSPACE/ewald_dipole.h index f937b2a2c2..0a57f86d00 100644 --- a/src/KSPACE/ewald_dipole.h +++ b/src/KSPACE/ewald_dipole.h @@ -38,9 +38,6 @@ class EwaldDipole : public Ewald { double **tk; // field for torque double **vc; // virial per k - //virtual void allocate(); - //void deallocate(); - void musum_musq(); double rms_dipole(int, double, bigint); virtual void eik_dot_r(); diff --git a/src/KSPACE/ewald_dipole_spin.cpp b/src/KSPACE/ewald_dipole_spin.cpp new file mode 100644 index 0000000000..5522b18e03 --- /dev/null +++ b/src/KSPACE/ewald_dipole_spin.cpp @@ -0,0 +1,895 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + 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 authors: Julien Tranchida (SNL) + Stan Moore (SNL) +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include +#include "ewald_dipole_spin.h" +#include "atom.h" +#include "comm.h" +#include "force.h" +#include "pair.h" +#include "domain.h" +#include "math_const.h" +#include "math_special.h" +#include "memory.h" +#include "error.h" +#include "update.h" + +#include "math_const.h" +#include "math_special.h" + +using namespace LAMMPS_NS; +using namespace MathConst; +using namespace MathSpecial; + +#define SMALL 0.00001 + +/* ---------------------------------------------------------------------- */ + +EwaldDipoleSpin::EwaldDipoleSpin(LAMMPS *lmp, int narg, char **arg) : + EwaldDipole(lmp, narg, arg) +{ + dipoleflag = 0; + spinflag = 1; + + hbar = force->hplanck/MY_2PI; // eV/(rad.THz) + mub = 5.78901e-5; // in eV/T + mu_0 = 1.2566370614e-6; // in T.m/A + mub2mu0 = mub * mub * mu_0; // in eV + mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz +} + +/* ---------------------------------------------------------------------- + free all memory +------------------------------------------------------------------------- */ + +EwaldDipoleSpin::~EwaldDipoleSpin() +{ + //memory->destroy(muk); + //memory->destroy(tk); + //memory->destroy(vc); +} + +/* ---------------------------------------------------------------------- + called once before run +------------------------------------------------------------------------- */ + +void EwaldDipoleSpin::init() +{ + if (comm->me == 0) { + if (screen) fprintf(screen,"EwaldDipoleSpin initialization ...\n"); + if (logfile) fprintf(logfile,"EwaldDipoleSpin initialization ...\n"); + } + + // error check + + //dipoleflag = atom->mu?1:0; + spinflag = atom->sp?1:0; + //qsum_qsq(0); // q[i] might not be declared ? + + //if (dipoleflag && q2) + // error->all(FLERR,"Cannot (yet) use charges with Kspace style EwaldDipoleSpin"); + + triclinic_check(); + + // no triclinic ewald spin (yet) + + triclinic = domain->triclinic; + if (triclinic) + error->all(FLERR,"Cannot (yet) use EwaldDipoleSpin with triclinic box"); + + if (domain->dimension == 2) + error->all(FLERR,"Cannot use EwaldDipoleSpin with 2d simulation"); + + if (!atom->sp) error->all(FLERR,"Kspace style requires atom attribute sp"); +//if (!atom->q_flag) error->all(FLERR,"Kspace style requires atom attribute q"); + + if ((spinflag && strcmp(update->unit_style,"metal")) != 0) + error->all(FLERR,"'metal' units have to be used with spins"); + + if (slabflag == 0 && domain->nonperiodic > 0) + error->all(FLERR,"Cannot use nonperiodic boundaries with EwaldDipoleSpin"); + if (slabflag) { + if (domain->xperiodic != 1 || domain->yperiodic != 1 || + domain->boundary[2][0] != 1 || domain->boundary[2][1] != 1) + error->all(FLERR,"Incorrect boundaries with slab EwaldDipoleSpin"); + } + + // extract short-range Coulombic cutoff from pair style + + pair_check(); + + int itmp; + double *p_cutoff = (double *) force->pair->extract("cut_coul",itmp); + if (p_cutoff == NULL) + error->all(FLERR,"KSpace style is incompatible with Pair style"); + double cutoff = *p_cutoff; + + // kspace TIP4P not yet supported + // qdist = offset only for TIP4P fictitious charge + + //qdist = 0.0; + if (tip4pflag) + error->all(FLERR,"Cannot yet use TIP4P with EwaldDipoleSpin"); + + // compute musum & musqsum and warn if no spin + + scale = 1.0; + qqrd2e = force->qqrd2e; + //musum_musq(); + spsum_musq(); + natoms_original = atom->natoms; + + // set accuracy (force units) from accuracy_relative or accuracy_absolute + + if (accuracy_absolute >= 0.0) accuracy = accuracy_absolute; + else accuracy = accuracy_relative * two_charge_force; + + // setup K-space resolution + + bigint natoms = atom->natoms; + + // use xprd,yprd,zprd even if triclinic so grid size is the same + // adjust z dimension for 2d slab EwaldDipoleSpin + // 3d EwaldDipoleSpin just uses zprd since slab_volfactor = 1.0 + + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + double zprd_slab = zprd*slab_volfactor; + + // make initial g_ewald estimate + // based on desired accuracy and real space cutoff + // fluid-occupied volume used to estimate real-space error + // zprd used rather than zprd_slab + + if (!gewaldflag) { + if (accuracy <= 0.0) + error->all(FLERR,"KSpace accuracy must be > 0"); + double g_ewald_new = + NewtonSolve(g_ewald,cutoff,natoms,xprd*yprd*zprd,mu2); + if (g_ewald_new > 0.0) g_ewald = g_ewald_new; + else error->warning(FLERR,"Ewald/disp Newton solver failed, " + "using old method to estimate g_ewald"); + } + + // setup EwaldDipoleSpin coefficients so can print stats + + setup(); + + // final RMS accuracy + + double lprx = rms(kxmax_orig,xprd,natoms,q2); + double lpry = rms(kymax_orig,yprd,natoms,q2); + double lprz = rms(kzmax_orig,zprd_slab,natoms,q2); + double lpr = sqrt(lprx*lprx + lpry*lpry + lprz*lprz) / sqrt(3.0); + double q2_over_sqrt = q2 / sqrt(natoms*cutoff*xprd*yprd*zprd_slab); + double spr = 2.0 *q2_over_sqrt * exp(-g_ewald*g_ewald*cutoff*cutoff); + double tpr = estimate_table_accuracy(q2_over_sqrt,spr); + double estimated_accuracy = sqrt(lpr*lpr + spr*spr + tpr*tpr); + + // stats + + if (comm->me == 0) { + if (screen) { + fprintf(screen," G vector (1/distance) = %g\n",g_ewald); + fprintf(screen," estimated absolute RMS force accuracy = %g\n", + estimated_accuracy); + fprintf(screen," estimated relative force accuracy = %g\n", + estimated_accuracy/two_charge_force); + fprintf(screen," KSpace vectors: actual max1d max3d = %d %d %d\n", + kcount,kmax,kmax3d); + fprintf(screen," kxmax kymax kzmax = %d %d %d\n", + kxmax,kymax,kzmax); + } + if (logfile) { + fprintf(logfile," G vector (1/distance) = %g\n",g_ewald); + fprintf(logfile," estimated absolute RMS force accuracy = %g\n", + estimated_accuracy); + fprintf(logfile," estimated relative force accuracy = %g\n", + estimated_accuracy/two_charge_force); + fprintf(logfile," KSpace vectors: actual max1d max3d = %d %d %d\n", + kcount,kmax,kmax3d); + fprintf(logfile," kxmax kymax kzmax = %d %d %d\n", + kxmax,kymax,kzmax); + } + } +} + +/* ---------------------------------------------------------------------- + adjust EwaldDipoleSpin coeffs, called initially and whenever volume has changed +------------------------------------------------------------------------- */ + +void EwaldDipoleSpin::setup() +{ + // volume-dependent factors + + double xprd = domain->xprd; + double yprd = domain->yprd; + double zprd = domain->zprd; + + // adjustment of z dimension for 2d slab EwaldDipoleSpin + // 3d EwaldDipoleSpin just uses zprd since slab_volfactor = 1.0 + + double zprd_slab = zprd*slab_volfactor; + volume = xprd * yprd * zprd_slab; + + unitk[0] = 2.0*MY_PI/xprd; + unitk[1] = 2.0*MY_PI/yprd; + unitk[2] = 2.0*MY_PI/zprd_slab; + + int kmax_old = kmax; + + if (kewaldflag == 0) { + + // determine kmax + // function of current box size, accuracy, G_ewald (short-range cutoff) + + bigint natoms = atom->natoms; + double err; + kxmax = 1; + kymax = 1; + kzmax = 1; + + // set kmax in 3 directions to respect accuracy + + err = rms_dipole(kxmax,xprd,natoms); + while (err > accuracy) { + kxmax++; + err = rms_dipole(kxmax,xprd,natoms); + } + + err = rms_dipole(kymax,yprd,natoms); + while (err > accuracy) { + kymax++; + err = rms_dipole(kymax,yprd,natoms); + } + + err = rms_dipole(kzmax,zprd,natoms); + while (err > accuracy) { + kzmax++; + err = rms_dipole(kzmax,zprd,natoms); + } + + kmax = MAX(kxmax,kymax); + kmax = MAX(kmax,kzmax); + kmax3d = 4*kmax*kmax*kmax + 6*kmax*kmax + 3*kmax; + + double gsqxmx = unitk[0]*unitk[0]*kxmax*kxmax; + double gsqymx = unitk[1]*unitk[1]*kymax*kymax; + double gsqzmx = unitk[2]*unitk[2]*kzmax*kzmax; + gsqmx = MAX(gsqxmx,gsqymx); + gsqmx = MAX(gsqmx,gsqzmx); + + kxmax_orig = kxmax; + kymax_orig = kymax; + kzmax_orig = kzmax; + + } else { + + kxmax = kx_ewald; + kymax = ky_ewald; + kzmax = kz_ewald; + + kxmax_orig = kxmax; + kymax_orig = kymax; + kzmax_orig = kzmax; + + kmax = MAX(kxmax,kymax); + kmax = MAX(kmax,kzmax); + kmax3d = 4*kmax*kmax*kmax + 6*kmax*kmax + 3*kmax; + + double gsqxmx = unitk[0]*unitk[0]*kxmax*kxmax; + double gsqymx = unitk[1]*unitk[1]*kymax*kymax; + double gsqzmx = unitk[2]*unitk[2]*kzmax*kzmax; + gsqmx = MAX(gsqxmx,gsqymx); + gsqmx = MAX(gsqmx,gsqzmx); + } + + gsqmx *= 1.00001; + + // if size has grown, reallocate k-dependent and nlocal-dependent arrays + + if (kmax > kmax_old) { + deallocate(); + allocate(); + group_allocate_flag = 0; + + memory->destroy(ek); + memory->destroy(tk); + memory->destroy(vc); + memory->destroy3d_offset(cs,-kmax_created); + memory->destroy3d_offset(sn,-kmax_created); + memory->destroy(muk); + nmax = atom->nmax; + memory->create(ek,nmax,3,"ewald_dipole_spin:ek"); + memory->create(tk,nmax,3,"ewald_dipole_spin:tk"); + memory->create(vc,kmax3d,6,"ewald_dipole_spin:tk"); + memory->create3d_offset(cs,-kmax,kmax,3,nmax,"ewald_dipole_spin:cs"); + memory->create3d_offset(sn,-kmax,kmax,3,nmax,"ewald_dipole_spin:sn"); + memory->create(muk,kmax3d,nmax,"ewald_dipole_spin:muk"); + kmax_created = kmax; + } + + // pre-compute EwaldDipoleSpin coefficients + + coeffs(); +} + +/* ---------------------------------------------------------------------- + compute dipole RMS accuracy for a dimension +------------------------------------------------------------------------- */ + +//double EwaldDipoleSpin::rms_dipole(int km, double prd, bigint natoms) +//{ +// if (natoms == 0) natoms = 1; // avoid division by zero +// +// // error from eq.(46), Wang et al., JCP 115, 6351 (2001) +// +// double value = 8*MY_PI*mu2*g_ewald/volume * +// sqrt(2*MY_PI*km*km*km/(15.0*natoms)) * +// exp(-MY_PI*MY_PI*km*km/(g_ewald*g_ewald*prd*prd)); +// +// return value; +//} + +/* ---------------------------------------------------------------------- + compute the EwaldDipoleSpin long-range force, energy, virial +------------------------------------------------------------------------- */ + +void EwaldDipoleSpin::compute(int eflag, int vflag) +{ + int i,j,k; + const double g3 = g_ewald*g_ewald*g_ewald; + double spx, spy, spz; + + // set energy/virial flags + + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = evflag_atom = eflag_global = vflag_global = + eflag_atom = vflag_atom = 0; + + // if atom count has changed, update qsum and qsqsum + + if (atom->natoms != natoms_original) { + //musum_musq(); + spsum_musq(); + natoms_original = atom->natoms; + } + + // return if there are no charges + + if (musqsum == 0.0) return; + + // extend size of per-atom arrays if necessary + + if (atom->nmax > nmax) { + memory->destroy(ek); + memory->destroy(tk); + memory->destroy(vc); + memory->destroy3d_offset(cs,-kmax_created); + memory->destroy3d_offset(sn,-kmax_created); + memory->destroy(muk); + nmax = atom->nmax; + memory->create(ek,nmax,3,"ewald_dipole_spin:ek"); + memory->create(tk,nmax,3,"ewald_dipole_spin:tk"); + memory->create(vc,kmax3d,6,"ewald_dipole_spin:tk"); + memory->create3d_offset(cs,-kmax,kmax,3,nmax,"ewald_dipole_spin:cs"); + memory->create3d_offset(sn,-kmax,kmax,3,nmax,"ewald_dipole_spin:sn"); + memory->create(muk,kmax3d,nmax,"ewald_dipole_spin:muk"); + kmax_created = kmax; + } + + // partial structure factors on each processor + // total structure factor by summing over procs + + eik_dot_r(); + + MPI_Allreduce(sfacrl,sfacrl_all,kcount,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(sfacim,sfacim_all,kcount,MPI_DOUBLE,MPI_SUM,world); + + // K-space portion of electric field + // double loop over K-vectors and local atoms + // perform per-atom calculations if needed + + double **f = atom->f; + double **fm_long = atom->fm_long; + double **t = atom->torque; + //double **mu = atom->mu; + double **sp = atom->sp; + int nlocal = atom->nlocal; + + int kx,ky,kz; + double cypz,sypz,exprl,expim; + double partial,partial2,partial_peratom; + double vcik[6]; + + for (i = 0; i < nlocal; i++) { + ek[i][0] = ek[i][1] = ek[i][2] = 0.0; + tk[i][0] = tk[i][1] = tk[i][2] = 0.0; + } + + for (k = 0; k < kcount; k++) { + kx = kxvecs[k]; + ky = kyvecs[k]; + kz = kzvecs[k]; + for (j = 0; j<6; j++) vc[k][j] = 0.0; + + for (i = 0; i < nlocal; i++) { + + vcik[0] = vcik[1] = vcik[2] = 0.0; + vcik[3] = vcik[4] = vcik[5] = 0.0; + + // calculating re and im of exp(i*k*ri) + + cypz = cs[ky][1][i]*cs[kz][2][i] - sn[ky][1][i]*sn[kz][2][i]; + sypz = sn[ky][1][i]*cs[kz][2][i] + cs[ky][1][i]*sn[kz][2][i]; + exprl = cs[kx][0][i]*cypz - sn[kx][0][i]*sypz; + expim = sn[kx][0][i]*cypz + cs[kx][0][i]*sypz; + + // taking im of struct_fact x exp(i*k*ri) (for force calc.) + + partial = (muk[k][i])*(expim*sfacrl_all[k] + exprl*sfacim_all[k]); + ek[i][0] += partial*eg[k][0]; + ek[i][1] += partial*eg[k][1]; + ek[i][2] += partial*eg[k][2]; + + // compute field for torque calculation + + partial2 = exprl*sfacrl_all[k] - expim*sfacim_all[k]; + tk[i][0] += partial2*eg[k][0]; + tk[i][1] += partial2*eg[k][1]; + tk[i][2] += partial2*eg[k][2]; + + // total and per-atom virial correction + + spx = sp[i][0]*sp[i][3]; + spy = sp[i][1]*sp[i][3]; + spz = sp[i][2]*sp[i][3]; + + vc[k][0] += vcik[0] = partial2 * spx * kx; + vc[k][1] += vcik[1] = partial2 * spy * ky; + vc[k][2] += vcik[2] = partial2 * spz * kz; + vc[k][3] += vcik[3] = partial2 * spx * ky; + vc[k][4] += vcik[4] = partial2 * spx * kz; + vc[k][5] += vcik[5] = partial2 * spy * kz; + + // taking re-part of struct_fact x exp(i*k*ri) + // (for per-atom energy and virial calc.) + + if (evflag_atom) { + partial_peratom = exprl*sfacrl_all[k] + expim*sfacim_all[k]; + if (eflag_atom) eatom[i] += muk[k][i]*ug[k]*partial_peratom; + if (vflag_atom) + for (j = 0; j < 6; j++) + vatom[i][j] += ug[k] * (vg[k][j]*partial_peratom - vcik[j]); + } + } + } + + // force and mag. precession vectors calculation + + const double spscale = mub2mu0 * scale; + const double spscale2 = mub2mu0hbinv * scale; + //const double muscale = qqrd2e * scale; + + for (i = 0; i < nlocal; i++) { + f[i][0] += spscale * ek[i][0]; + f[i][1] += spscale * ek[i][1]; + if (slabflag != 2) f[i][2] += spscale * ek[i][2]; + fm_long[i][0] += spscale2 * tk[i][0]; + fm_long[i][1] += spscale2 * tk[i][1]; + if (slabflag != 2) fm_long[i][2] += spscale2 * tk[i][3]; + } + + // sum global energy across Kspace vevs and add in volume-dependent term + // taking the re-part of struct_fact_i x struct_fact_j + // substracting self energy and scaling + + if (eflag_global) { + for (k = 0; k < kcount; k++) { + energy += ug[k] * (sfacrl_all[k]*sfacrl_all[k] + + sfacim_all[k]*sfacim_all[k]); + } + energy -= musqsum*2.0*g3/3.0/MY_PIS; + energy *= spscale; + } + + // global virial + + if (vflag_global) { + double uk, vk; + for (k = 0; k < kcount; k++) { + uk = ug[k] * (sfacrl_all[k]*sfacrl_all[k] + sfacim_all[k]*sfacim_all[k]); + for (j = 0; j < 6; j++) virial[j] += uk*vg[k][j] + ug[k]*vc[k][j]; + } + for (j = 0; j < 6; j++) virial[j] *= spscale; + } + + // per-atom energy/virial + // energy includes self-energy correction + + if (evflag_atom) { + if (eflag_atom) { + for (i = 0; i < nlocal; i++) { + spx = sp[i][0]*sp[i][3]; + spy = sp[i][1]*sp[i][3]; + spz = sp[i][2]*sp[i][3]; + eatom[i] -= (spx*spx + spy*spy + spz*spz) + *2.0*g3/3.0/MY_PIS; + eatom[i] *= spscale; + } + } + + if (vflag_atom) + for (i = 0; i < nlocal; i++) + for (j = 0; j < 6; j++) vatom[i][j] *= spscale; + } + + // 2d slab correction + + if (slabflag == 1) slabcorr(); +} + +/* ---------------------------------------------------------------------- + compute the +------------------------------------------------------------------------- */ + +void EwaldDipoleSpin::eik_dot_r() +{ + int i,k,l,m,n,ic; + double cstr1,sstr1,cstr2,sstr2,cstr3,sstr3,cstr4,sstr4; + double sqk,clpm,slpm; + //double mux, muy, muz; + double spx, spy, spz, spi; + + double **x = atom->x; + //double **mu = atom->mu; + double **sp = atom->sp; + int nlocal = atom->nlocal; + + n = 0; + spi = spx = spy = spz = 0.0; + + // loop on different k-directions + // loop on n kpoints and nlocal atoms + // store (n x nlocal) tab. of values of (mu_i dot k) + // store n values of sum_j[ (mu_j dot k) exp(-k dot r_j) ] + + // (k,0,0), (0,l,0), (0,0,m) + + // loop 1: k=1, l=1, m=1 + // define first val. of cos and sin + + for (ic = 0; ic < 3; ic++) { + sqk = unitk[ic]*unitk[ic]; + if (sqk <= gsqmx) { + cstr1 = 0.0; + sstr1 = 0.0; + for (i = 0; i < nlocal; i++) { + cs[0][ic][i] = 1.0; + sn[0][ic][i] = 0.0; + cs[1][ic][i] = cos(unitk[ic]*x[i][ic]); + sn[1][ic][i] = sin(unitk[ic]*x[i][ic]); + cs[-1][ic][i] = cs[1][ic][i]; + sn[-1][ic][i] = -sn[1][ic][i]; + spi = sp[i][ic]*sp[i][3]; + //muk[n][i] = (mu[i][ic]*unitk[ic]); + muk[n][i] = (spi*unitk[ic]); + cstr1 += muk[n][i]*cs[1][ic][i]; + sstr1 += muk[n][i]*sn[1][ic][i]; + } + sfacrl[n] = cstr1; + sfacim[n++] = sstr1; + } + } + + // loop 2: k>1, l>1, m>1 + + for (m = 2; m <= kmax; m++) { + for (ic = 0; ic < 3; ic++) { + sqk = m*unitk[ic] * m*unitk[ic]; + if (sqk <= gsqmx) { + cstr1 = 0.0; + sstr1 = 0.0; + for (i = 0; i < nlocal; i++) { + cs[m][ic][i] = cs[m-1][ic][i]*cs[1][ic][i] - + sn[m-1][ic][i]*sn[1][ic][i]; + sn[m][ic][i] = sn[m-1][ic][i]*cs[1][ic][i] + + cs[m-1][ic][i]*sn[1][ic][i]; + cs[-m][ic][i] = cs[m][ic][i]; + sn[-m][ic][i] = -sn[m][ic][i]; + spi = sp[i][ic]*sp[i][3]; + muk[n][i] = (spi*m*unitk[ic]); + //muk[n][i] = (mu[i][ic]*m*unitk[ic]); + cstr1 += muk[n][i]*cs[m][ic][i]; + sstr1 += muk[n][i]*sn[m][ic][i]; + } + sfacrl[n] = cstr1; + sfacim[n++] = sstr1; + } + } + } + + // 1 = (k,l,0), 2 = (k,-l,0) + + for (k = 1; k <= kxmax; k++) { + for (l = 1; l <= kymax; l++) { + sqk = (k*unitk[0] * k*unitk[0]) + (l*unitk[1] * l*unitk[1]); + if (sqk <= gsqmx) { + cstr1 = 0.0; + sstr1 = 0.0; + cstr2 = 0.0; + sstr2 = 0.0; + for (i = 0; i < nlocal; i++) { + spx = sp[i][0]*sp[i][3]; + spy = sp[i][1]*sp[i][3]; + //mux = mu[i][0]; + //muy = mu[i][1]; + + // dir 1: (k,l,0) + muk[n][i] = (spx*k*unitk[0] + spy*l*unitk[1]); + cstr1 += muk[n][i]*(cs[k][0][i]*cs[l][1][i]-sn[k][0][i]*sn[l][1][i]); + sstr1 += muk[n][i]*(sn[k][0][i]*cs[l][1][i]+cs[k][0][i]*sn[l][1][i]); + + // dir 2: (k,-l,0) + muk[n+1][i] = (spx*k*unitk[0] - spy*l*unitk[1]); + cstr2 += muk[n+1][i]*(cs[k][0][i]*cs[l][1][i]+sn[k][0][i]*sn[l][1][i]); + sstr2 += muk[n+1][i]*(sn[k][0][i]*cs[l][1][i]-cs[k][0][i]*sn[l][1][i]); + } + sfacrl[n] = cstr1; + sfacim[n++] = sstr1; + sfacrl[n] = cstr2; + sfacim[n++] = sstr2; + } + } + } + + // 1 = (0,l,m), 2 = (0,l,-m) + + for (l = 1; l <= kymax; l++) { + for (m = 1; m <= kzmax; m++) { + sqk = (l*unitk[1] * l*unitk[1]) + (m*unitk[2] * m*unitk[2]); + if (sqk <= gsqmx) { + cstr1 = 0.0; + sstr1 = 0.0; + cstr2 = 0.0; + sstr2 = 0.0; + for (i = 0; i < nlocal; i++) { + spy = sp[i][1]*sp[i][3]; + spz = sp[i][2]*sp[i][3]; + //muy = mu[i][1]; + //muz = mu[i][2]; + + // dir 1: (0,l,m) + muk[n][i] = (spy*l*unitk[1] + spz*m*unitk[2]); + cstr1 += muk[n][i]*(cs[l][1][i]*cs[m][2][i] - sn[l][1][i]*sn[m][2][i]); + sstr1 += muk[n][i]*(sn[l][1][i]*cs[m][2][i] + cs[l][1][i]*sn[m][2][i]); + + // dir 2: (0,l,-m) + muk[n+1][i] = (spy*l*unitk[1] - spz*m*unitk[2]); + cstr2 += muk[n+1][i]*(cs[l][1][i]*cs[m][2][i]+sn[l][1][i]*sn[m][2][i]); + sstr2 += muk[n+1][i]*(sn[l][1][i]*cs[m][2][i]-cs[l][1][i]*sn[m][2][i]); + } + sfacrl[n] = cstr1; + sfacim[n++] = sstr1; + sfacrl[n] = cstr2; + sfacim[n++] = sstr2; + } + } + } + + // 1 = (k,0,m), 2 = (k,0,-m) + + for (k = 1; k <= kxmax; k++) { + for (m = 1; m <= kzmax; m++) { + sqk = (k*unitk[0] * k*unitk[0]) + (m*unitk[2] * m*unitk[2]); + if (sqk <= gsqmx) { + cstr1 = 0.0; + sstr1 = 0.0; + cstr2 = 0.0; + sstr2 = 0.0; + for (i = 0; i < nlocal; i++) { + //mux = mu[i][0]; + //muz = mu[i][2]; + spx = sp[i][0]*sp[i][3]; + spz = sp[i][2]*sp[i][3]; + + // dir 1: (k,0,m) + muk[n][i] = (spx*k*unitk[0] + spz*m*unitk[2]); + cstr1 += muk[n][i]*(cs[k][0][i]*cs[m][2][i]-sn[k][0][i]*sn[m][2][i]); + sstr1 += muk[n][i]*(sn[k][0][i]*cs[m][2][i]+cs[k][0][i]*sn[m][2][i]); + + // dir 2: (k,0,-m) + muk[n+1][i] = (spx*k*unitk[0] - spz*m*unitk[2]); + cstr2 += muk[n+1][i]*(cs[k][0][i]*cs[m][2][i]+sn[k][0][i]*sn[m][2][i]); + sstr2 += muk[n+1][i]*(sn[k][0][i]*cs[m][2][i]-cs[k][0][i]*sn[m][2][i]); + } + sfacrl[n] = cstr1; + sfacim[n++] = sstr1; + sfacrl[n] = cstr2; + sfacim[n++] = sstr2; + } + } + } + + // 1 = (k,l,m), 2 = (k,-l,m), 3 = (k,l,-m), 4 = (k,-l,-m) + + for (k = 1; k <= kxmax; k++) { + for (l = 1; l <= kymax; l++) { + for (m = 1; m <= kzmax; m++) { + sqk = (k*unitk[0] * k*unitk[0]) + (l*unitk[1] * l*unitk[1]) + + (m*unitk[2] * m*unitk[2]); + if (sqk <= gsqmx) { + cstr1 = 0.0; + sstr1 = 0.0; + cstr2 = 0.0; + sstr2 = 0.0; + cstr3 = 0.0; + sstr3 = 0.0; + cstr4 = 0.0; + sstr4 = 0.0; + for (i = 0; i < nlocal; i++) { + //mux = mu[i][0]; + //muy = mu[i][1]; + //muz = mu[i][2]; + spx = sp[i][0]*sp[i][3]; + spy = sp[i][1]*sp[i][3]; + spz = sp[i][2]*sp[i][3]; + + // dir 1: (k,l,m) + muk[n][i] = (spx*k*unitk[0] + spy*l*unitk[1] + spz*m*unitk[2]); + clpm = cs[l][1][i]*cs[m][2][i] - sn[l][1][i]*sn[m][2][i]; + slpm = sn[l][1][i]*cs[m][2][i] + cs[l][1][i]*sn[m][2][i]; + cstr1 += muk[n][i]*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); + sstr1 += muk[n][i]*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); + + // dir 2: (k,-l,m) + muk[n+1][i] = (spx*k*unitk[0] - spy*l*unitk[1] + spz*m*unitk[2]); + clpm = cs[l][1][i]*cs[m][2][i] + sn[l][1][i]*sn[m][2][i]; + slpm = -sn[l][1][i]*cs[m][2][i] + cs[l][1][i]*sn[m][2][i]; + cstr2 += muk[n+1][i]*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); + sstr2 += muk[n+1][i]*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); + + // dir 3: (k,l,-m) + muk[n+2][i] = (spx*k*unitk[0] + spy*l*unitk[1] - spz*m*unitk[2]); + clpm = cs[l][1][i]*cs[m][2][i] + sn[l][1][i]*sn[m][2][i]; + slpm = sn[l][1][i]*cs[m][2][i] - cs[l][1][i]*sn[m][2][i]; + cstr3 += muk[n+2][i]*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); + sstr3 += muk[n+2][i]*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); + + // dir 4: (k,-l,-m) + muk[n+3][i] = (spx*k*unitk[0] - spy*l*unitk[1] - spz*m*unitk[2]); + clpm = cs[l][1][i]*cs[m][2][i] - sn[l][1][i]*sn[m][2][i]; + slpm = -sn[l][1][i]*cs[m][2][i] - cs[l][1][i]*sn[m][2][i]; + cstr4 += muk[n+3][i]*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); + sstr4 += muk[n+3][i]*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); + } + sfacrl[n] = cstr1; + sfacim[n++] = sstr1; + sfacrl[n] = cstr2; + sfacim[n++] = sstr2; + sfacrl[n] = cstr3; + sfacim[n++] = sstr3; + sfacrl[n] = cstr4; + sfacim[n++] = sstr4; + } + } + } + } +} + +/* ---------------------------------------------------------------------- + Slab-geometry correction term to dampen inter-slab interactions between + periodically repeating slabs. Yields good approximation to 2D EwaldDipoleSpin if + adequate empty space is left between repeating slabs (J. Chem. Phys. + 111, 3155). Slabs defined here to be parallel to the xy plane. Also + extended to non-neutral systems (J. Chem. Phys. 131, 094107). +------------------------------------------------------------------------- */ + +void EwaldDipoleSpin::slabcorr() +{ + // compute local contribution to global dipole/spin moment + + double **x = atom->x; + double zprd = domain->zprd; + int nlocal = atom->nlocal; + + double spin = 0.0; + double **sp = atom->sp; + double spx,spy,spz; + for (int i = 0; i < nlocal; i++) { + spz = sp[i][2]*sp[i][3]; + spin += spz; + } + + // sum local contributions to get global spin moment + + double spin_all; + MPI_Allreduce(&spin,&spin_all,1,MPI_DOUBLE,MPI_SUM,world); + + // need to make non-neutral systems and/or + // per-atom energy translationally invariant + + if (eflag_atom || fabs(qsum) > SMALL) { + + error->all(FLERR,"Cannot (yet) use kspace slab correction with " + "long-range spins and non-neutral systems or per-atom energy"); + } + + // compute corrections + + const double e_slabcorr = MY_2PI*(spin_all*spin_all/12.0)/volume; + const double spscale = mub2mu0 * scale; + + if (eflag_global) energy += spscale * e_slabcorr; + + // per-atom energy + + if (eflag_atom) { + double efact = spscale * MY_2PI/volume/12.0; + for (int i = 0; i < nlocal; i++) { + spz = sp[i][2]*sp[i][3]; + eatom[i] += efact * spz * spin_all; + } + } + + // add on mag. force corrections + + double ffact = spscale * (-4.0*MY_PI/volume); + double **fm_long = atom->fm_long; + for (int i = 0; i < nlocal; i++) { + fm_long[i][2] += ffact * spin_all; + } +} + +/* ---------------------------------------------------------------------- + compute musum,musqsum,mu2 for magnetic spins + called initially, when particle count changes, when spins are changed +------------------------------------------------------------------------- */ + +void EwaldDipoleSpin::spsum_musq() +{ + const int nlocal = atom->nlocal; + + musum = musqsum = mu2 = 0.0; + if (atom->sp_flag) { + double** sp = atom->sp; + double spx,spy,spz; + double musum_local(0.0), musqsum_local(0.0); + + for (int i = 0; i < nlocal; i++) { + spx = sp[i][0]*sp[i][3]; + spy = sp[i][1]*sp[i][3]; + spz = sp[i][2]*sp[i][3]; + musum_local += spx + spy + spz; + musqsum_local += spx*spx + spy*spy + spz*spz; + } + + MPI_Allreduce(&musum_local,&musum,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&musqsum_local,&musqsum,1,MPI_DOUBLE,MPI_SUM,world); + + mu2 = musqsum * mub2mu0; + } + + if (mu2 == 0 && comm->me == 0) + error->all(FLERR,"Using kspace solver EwaldDipoleSpin on system with no spins"); +} diff --git a/src/KSPACE/ewald_dipole_spin.h b/src/KSPACE/ewald_dipole_spin.h new file mode 100644 index 0000000000..92122525a8 --- /dev/null +++ b/src/KSPACE/ewald_dipole_spin.h @@ -0,0 +1,102 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + 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 KSPACE_CLASS + +KSpaceStyle(ewald/dipole/spin,EwaldDipoleSpin) + +#else + +#ifndef LMP_EWALD_DIPOLE_SPIN_H +#define LMP_EWALD_DIPOLE_SPIN_H + +#include "ewald_dipole.h" + +namespace LAMMPS_NS { + +class EwaldDipoleSpin : public EwaldDipole { + public: + EwaldDipoleSpin(class LAMMPS *, int, char **); + virtual ~EwaldDipoleSpin(); + void init(); + void setup(); + void compute(int, int); + + protected: + double hbar; // reduced Planck's constant + double mub; // Bohr's magneton + double mu_0; // vacuum permeability + double mub2mu0; // prefactor for mech force + double mub2mu0hbinv; // prefactor for mag force + + void spsum_musq(); + virtual void eik_dot_r(); + void slabcorr(); + +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Cannot use EwaldDipoleSpin with 2d simulation + +The kspace style ewald cannot be used in 2d simulations. You can use +2d EwaldDipoleSpin in a 3d simulation; see the kspace_modify command. + +E: Kspace style requires atom attribute q + +The atom style defined does not have these attributes. + +E: Cannot use nonperiodic boundaries with EwaldDipoleSpin + +For kspace style ewald, all 3 dimensions must have periodic boundaries +unless you use the kspace_modify command to define a 2d slab with a +non-periodic z dimension. + +E: Incorrect boundaries with slab EwaldDipoleSpin + +Must have periodic x,y dimensions and non-periodic z dimension to use +2d slab option with EwaldDipoleSpin. + +E: Cannot (yet) use EwaldDipoleSpin with triclinic box and slab correction + +This feature is not yet supported. + +E: KSpace style is incompatible with Pair style + +Setting a kspace style requires that a pair style with matching +long-range Coulombic or dispersion components be used. + +E: KSpace accuracy must be > 0 + +The kspace accuracy designated in the input must be greater than zero. + +E: Must use 'kspace_modify gewald' for uncharged system + +UNDOCUMENTED + +E: Cannot (yet) use K-space slab correction with compute group/group for triclinic systems + +This option is not yet supported. + +*/ From 6b4303c405b9fa0f39eb69fcd8a1b53e66936618 Mon Sep 17 00:00:00 2001 From: julient31 Date: Mon, 24 Sep 2018 16:40:59 -0600 Subject: [PATCH 013/311] Commit2 JT 092418 - initialized g_ewald before Newton solver - mu2 is now adim in ewald_dipole_spin --- examples/SPIN/pppm_spin/in.dipole.pppm_dipole | 2 +- examples/SPIN/pppm_spin/in.spin.ewald_spin | 4 ++-- src/KSPACE/ewald_dipole.cpp | 9 +++++++++ src/KSPACE/ewald_dipole_spin.cpp | 12 +++++++++++- 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/examples/SPIN/pppm_spin/in.dipole.pppm_dipole b/examples/SPIN/pppm_spin/in.dipole.pppm_dipole index c2c49e3caf..86ac5198b0 100644 --- a/examples/SPIN/pppm_spin/in.dipole.pppm_dipole +++ b/examples/SPIN/pppm_spin/in.dipole.pppm_dipole @@ -28,7 +28,7 @@ pair_coeff * * 0.0 0.0 #kspace_style pppm/disp 1.0e-4 #kspace_style pppm/dipole 1.0e-4 kspace_style ewald/dipole 1.0e-4 -kspace_modify gewald 0.1 +#kspace_modify gewald 0.1 neighbor 0.3 bin neigh_modify every 2 delay 4 check yes diff --git a/examples/SPIN/pppm_spin/in.spin.ewald_spin b/examples/SPIN/pppm_spin/in.spin.ewald_spin index d9ca46b27a..f2192676c7 100644 --- a/examples/SPIN/pppm_spin/in.spin.ewald_spin +++ b/examples/SPIN/pppm_spin/in.spin.ewald_spin @@ -36,8 +36,8 @@ neigh_modify every 10 check yes delay 20 #kspace_style pppm/dipole/spin 1.0e-4 #kspace_style ewald/dipole/spin 1.0e-4 -kspace_style ewald/dipole/spin 1.0e-2 -kspace_modify mesh 32 32 32 +kspace_style ewald/dipole/spin 1.0e-4 +#kspace_modify mesh 32 32 32 #fix 1 all precession/spin zeeman 1.0 0.0 0.0 1.0 fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 diff --git a/src/KSPACE/ewald_dipole.cpp b/src/KSPACE/ewald_dipole.cpp index 42d850dcc2..c3a3818013 100644 --- a/src/KSPACE/ewald_dipole.cpp +++ b/src/KSPACE/ewald_dipole.cpp @@ -163,6 +163,15 @@ void EwaldDipole::init() if (!gewaldflag) { if (accuracy <= 0.0) error->all(FLERR,"KSpace accuracy must be > 0"); + + // initial guess with old method + + g_ewald = accuracy*sqrt(natoms*cutoff*xprd*yprd*zprd) / (2.0*mu2); + if (g_ewald >= 1.0) g_ewald = (1.35 - 0.15*log(accuracy))/cutoff; + else g_ewald = sqrt(-log(g_ewald)) / cutoff; + + // try Newton solver + double g_ewald_new = NewtonSolve(g_ewald,cutoff,natoms,xprd*yprd*zprd,mu2); if (g_ewald_new > 0.0) g_ewald = g_ewald_new; diff --git a/src/KSPACE/ewald_dipole_spin.cpp b/src/KSPACE/ewald_dipole_spin.cpp index 5522b18e03..43b9b32c76 100644 --- a/src/KSPACE/ewald_dipole_spin.cpp +++ b/src/KSPACE/ewald_dipole_spin.cpp @@ -164,6 +164,15 @@ void EwaldDipoleSpin::init() if (!gewaldflag) { if (accuracy <= 0.0) error->all(FLERR,"KSpace accuracy must be > 0"); + + // initial guess with old method + + g_ewald = accuracy*sqrt(natoms*cutoff*xprd*yprd*zprd) / (2.0*mu2); + if (g_ewald >= 1.0) g_ewald = (1.35 - 0.15*log(accuracy))/cutoff; + else g_ewald = sqrt(-log(g_ewald)) / cutoff; + + // try Newton solver + double g_ewald_new = NewtonSolve(g_ewald,cutoff,natoms,xprd*yprd*zprd,mu2); if (g_ewald_new > 0.0) g_ewald = g_ewald_new; @@ -887,7 +896,8 @@ void EwaldDipoleSpin::spsum_musq() MPI_Allreduce(&musum_local,&musum,1,MPI_DOUBLE,MPI_SUM,world); MPI_Allreduce(&musqsum_local,&musqsum,1,MPI_DOUBLE,MPI_SUM,world); - mu2 = musqsum * mub2mu0; + //mu2 = musqsum * mub2mu0; + mu2 = musqsum; } if (mu2 == 0 && comm->me == 0) From 19aaf294e560e1a0b70699428736e0ef3f003fab Mon Sep 17 00:00:00 2001 From: julient31 Date: Thu, 27 Sep 2018 10:46:52 -0600 Subject: [PATCH 014/311] Commit JT 092718 - renamed pair/spin/long functions - started to work on debugging ewald_dipole (force errors) --- examples/SPIN/pppm_spin/in.spin.ewald_spin | 27 ++-- examples/SPIN/pppm_spin/in.spin.pppm_spin | 17 ++- .../SPIN/pppm_spin/in.spin.spin_dipolar_cut | 18 +-- src/KSPACE/ewald_dipole.cpp | 18 ++- src/KSPACE/ewald_dipole_spin.cpp | 16 ++- src/KSPACE/pppm_dipole_spin.cpp | 13 +- src/SPIN/pair_spin_dipolar_cut.cpp | 30 +++-- ...in_long.cpp => pair_spin_dipolar_long.cpp} | 57 ++++----- ...r_spin_long.h => pair_spin_dipolar_long.h} | 12 +- ...p.cpp => pair_spin_dipolar_long_qsymp.cpp} | 119 +++++------------- ...qsymp.h => pair_spin_dipolar_long_qsymp.h} | 12 +- 11 files changed, 153 insertions(+), 186 deletions(-) rename src/SPIN/{pair_spin_long.cpp => pair_spin_dipolar_long.cpp} (91%) rename src/SPIN/{pair_spin_long.h => pair_spin_dipolar_long.h} (90%) rename src/SPIN/{pair_spin_long_qsymp.cpp => pair_spin_dipolar_long_qsymp.cpp} (82%) rename src/SPIN/{pair_spin_long_qsymp.h => pair_spin_dipolar_long_qsymp.h} (89%) diff --git a/examples/SPIN/pppm_spin/in.spin.ewald_spin b/examples/SPIN/pppm_spin/in.spin.ewald_spin index f2192676c7..c0ce74dd77 100644 --- a/examples/SPIN/pppm_spin/in.spin.ewald_spin +++ b/examples/SPIN/pppm_spin/in.spin.ewald_spin @@ -19,30 +19,30 @@ create_atoms 1 box mass 1 58.93 -#set group all spin/random 31 1.72 -set group all spin 1.72 0.0 0.0 1.0 -velocity all create 100 4928459 rot yes dist gaussian +set group all spin/random 31 1.72 +#set group all spin 1.72 0.0 0.0 1.0 +#velocity all create 100 4928459 rot yes dist gaussian -pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/long 8.0 +#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/dipolar/long 8.0 #pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/long/qsymp 8.0 #pair_style hybrid/overlay eam/alloy spin/exchange 4.0 -pair_coeff * * eam/alloy ../examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy Co -pair_coeff * * spin/exchange exchange 4.0 0.3593 1.135028015e-05 1.064568567 +#pair_coeff * * eam/alloy ../examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy Co +#pair_coeff * * spin/exchange exchange 4.0 0.3593 1.135028015e-05 1.064568567 #pair_coeff * * spin/long/qsymp long 8.0 -pair_coeff * * spin/long long 8.0 +pair_style spin/dipolar/long 8.0 +pair_coeff * * long 8.0 neighbor 0.1 bin neigh_modify every 10 check yes delay 20 -#kspace_style pppm/dipole/spin 1.0e-4 -#kspace_style ewald/dipole/spin 1.0e-4 -kspace_style ewald/dipole/spin 1.0e-4 -#kspace_modify mesh 32 32 32 +kspace_style ewald/dipole/spin 1.0e-4 +#kspace_modify mesh 32 32 32 #fix 1 all precession/spin zeeman 1.0 0.0 0.0 1.0 fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 fix 2 all langevin/spin 0.0 0.0 21 -fix 3 all nve/spin lattice yes +#fix 3 all nve/spin lattice yes +fix 3 all nve/spin lattice no timestep 0.0001 @@ -57,7 +57,8 @@ variable magnorm equal c_out_mag[4] variable emag equal c_out_mag[5] variable tmag equal c_out_mag[6] -thermo_style custom step time v_magnorm v_emag temp etotal +thermo_style custom step time v_magnorm v_tmag temp v_emag ke pe etotal +#thermo_style custom step time v_magnorm v_emag temp etotal thermo 10 compute outsp all property/atom spx spy spz sp fmx fmy fmz diff --git a/examples/SPIN/pppm_spin/in.spin.pppm_spin b/examples/SPIN/pppm_spin/in.spin.pppm_spin index 9e57797f55..6762fe6fab 100644 --- a/examples/SPIN/pppm_spin/in.spin.pppm_spin +++ b/examples/SPIN/pppm_spin/in.spin.pppm_spin @@ -23,19 +23,18 @@ mass 1 58.93 set group all spin 1.72 0.0 0.0 1.0 velocity all create 100 4928459 rot yes dist gaussian -#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/long 8.0 -pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/long/qsymp 8.0 -#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 +pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/dipolar/long 8.0 +#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/dipolar/long/qsymp 8.0 pair_coeff * * eam/alloy ../examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy Co pair_coeff * * spin/exchange exchange 4.0 0.3593 1.135028015e-05 1.064568567 -pair_coeff * * spin/long/qsymp long 8.0 -#pair_coeff * * spin/long long 8.0 +#pair_coeff * * spin/dipolar/long/qsymp long 8.0 +pair_coeff * * spin/dipolar/long long 8.0 neighbor 0.1 bin neigh_modify every 10 check yes delay 20 -kspace_style pppm/dipole/spin 1.0e-4 -kspace_modify mesh 32 32 32 +kspace_style pppm/dipole/spin 1.0e-4 +#kspace_modify mesh 32 32 32 #fix 1 all precession/spin zeeman 1.0 0.0 0.0 1.0 fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 @@ -61,5 +60,5 @@ thermo 10 compute outsp all property/atom spx spy spz sp fmx fmy fmz dump 100 all custom 1 dump_cobalt_hcp.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] -#run 20000 -run 1 +run 20000 +#run 1 diff --git a/examples/SPIN/pppm_spin/in.spin.spin_dipolar_cut b/examples/SPIN/pppm_spin/in.spin.spin_dipolar_cut index 838181e6d8..b265c4413e 100644 --- a/examples/SPIN/pppm_spin/in.spin.spin_dipolar_cut +++ b/examples/SPIN/pppm_spin/in.spin.spin_dipolar_cut @@ -19,16 +19,17 @@ create_atoms 1 box mass 1 58.93 -#set group all spin/random 31 1.72 -set group all spin 1.72 0.0 0.0 1.0 -velocity all create 100 4928459 rot yes dist gaussian +set group all spin/random 31 1.72 +#set group all spin 1.72 0.0 0.0 1.0 +#velocity all create 100 4928459 rot yes dist gaussian #pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/long 8.0 -pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/dipolar/cut 8.0 +#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/dipolar/cut 8.0 +pair_style spin/dipolar/cut 8.0 #pair_style hybrid/overlay eam/alloy spin/exchange 4.0 -pair_coeff * * eam/alloy ../examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy Co -pair_coeff * * spin/exchange exchange 4.0 0.3593 1.135028015e-05 1.064568567 -pair_coeff * * spin/dipolar/cut long 8.0 +#pair_coeff * * eam/alloy ../examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy Co +#pair_coeff * * spin/exchange exchange 4.0 0.3593 1.135028015e-05 1.064568567 +pair_coeff * * long 8.0 #pair_coeff * * spin/long long 8.0 neighbor 0.1 bin @@ -37,7 +38,8 @@ neigh_modify every 10 check yes delay 20 #fix 1 all precession/spin zeeman 1.0 0.0 0.0 1.0 fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 fix 2 all langevin/spin 0.0 0.0 21 -fix 3 all nve/spin lattice yes +#fix 3 all nve/spin lattice yes +fix 3 all nve/spin lattice no timestep 0.0001 diff --git a/src/KSPACE/ewald_dipole.cpp b/src/KSPACE/ewald_dipole.cpp index c3a3818013..ea05889f52 100644 --- a/src/KSPACE/ewald_dipole.cpp +++ b/src/KSPACE/ewald_dipole.cpp @@ -449,12 +449,19 @@ void EwaldDipole::compute(int eflag, int vflag) exprl = cs[kx][0][i]*cypz - sn[kx][0][i]*sypz; expim = sn[kx][0][i]*cypz + cs[kx][0][i]*sypz; + // mu dot k product + + //muik = mu[i][0]*kx + mu[i][1]*ky + mu[i][2]*kz; + + // taking im of struct_fact x exp(i*k*ri) (for force calc.) partial = (muk[k][i])*(expim*sfacrl_all[k] + exprl*sfacim_all[k]); - ek[i][0] += partial*eg[k][0]; - ek[i][1] += partial*eg[k][1]; - ek[i][2] += partial*eg[k][2]; + //partial = (muk[k][i])*(expim*sfacrl_all[k] - exprl*sfacim_all[k]); + //partial = muik * (expim*sfacrl_all[k] + exprl*sfacim_all[k]); + ek[i][0] += partial * eg[k][0]; + ek[i][1] += partial * eg[k][1]; + ek[i][2] += partial * eg[k][2]; // compute field for torque calculation @@ -493,6 +500,9 @@ void EwaldDipole::compute(int eflag, int vflag) f[i][0] += muscale * ek[i][0]; f[i][1] += muscale * ek[i][1]; if (slabflag != 2) f[i][2] += muscale * ek[i][2]; + //f[i][0] -= muscale * ek[i][0]; + //f[i][1] -= muscale * ek[i][1]; + //if (slabflag != 2) f[i][2] -= muscale * ek[i][2]; t[i][0] += -mu[i][1]*tk[i][2] + mu[i][2]*tk[i][1]; t[i][1] += -mu[i][2]*tk[i][0] + mu[i][0]*tk[i][2]; if (slabflag != 2) t[i][2] += -mu[i][0]*tk[i][1] + mu[i][1]*tk[i][0]; @@ -545,7 +555,7 @@ void EwaldDipole::compute(int eflag, int vflag) } /* ---------------------------------------------------------------------- - compute the + compute the struc. factors and mu dot k products ------------------------------------------------------------------------- */ void EwaldDipole::eik_dot_r() diff --git a/src/KSPACE/ewald_dipole_spin.cpp b/src/KSPACE/ewald_dipole_spin.cpp index 43b9b32c76..9a61d9cbe1 100644 --- a/src/KSPACE/ewald_dipole_spin.cpp +++ b/src/KSPACE/ewald_dipole_spin.cpp @@ -50,11 +50,11 @@ EwaldDipoleSpin::EwaldDipoleSpin(LAMMPS *lmp, int narg, char **arg) : dipoleflag = 0; spinflag = 1; - hbar = force->hplanck/MY_2PI; // eV/(rad.THz) - mub = 5.78901e-5; // in eV/T - mu_0 = 1.2566370614e-6; // in T.m/A - mub2mu0 = mub * mub * mu_0; // in eV - mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz + hbar = force->hplanck/MY_2PI; // eV/(rad.THz) + mub = 5.78901e-5; // in eV/T + mu_0 = 1.2566370614e-6; // in T.m/A + mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV + mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz } /* ---------------------------------------------------------------------- @@ -500,6 +500,9 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) const double spscale2 = mub2mu0hbinv * scale; //const double muscale = qqrd2e * scale; + printf("test ek: %g %g %g \n",ek[0][0],ek[0][1],ek[0][2]); + printf("test tk: %g %g %g \n",tk[0][0],tk[0][1],tk[0][2]); + for (i = 0; i < nlocal; i++) { f[i][0] += spscale * ek[i][0]; f[i][1] += spscale * ek[i][1]; @@ -509,6 +512,9 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) if (slabflag != 2) fm_long[i][2] += spscale2 * tk[i][3]; } + printf("test f_l: %g %g %g \n",f[0][0],f[0][1],f[0][2]); + printf("test fm_l: %g %g %g \n",fm_long[0][0],fm_long[0][1],fm_long[0][2]); + // sum global energy across Kspace vevs and add in volume-dependent term // taking the re-part of struct_fact_i x struct_fact_j // substracting self energy and scaling diff --git a/src/KSPACE/pppm_dipole_spin.cpp b/src/KSPACE/pppm_dipole_spin.cpp index aa85c5d289..e66ab4903e 100644 --- a/src/KSPACE/pppm_dipole_spin.cpp +++ b/src/KSPACE/pppm_dipole_spin.cpp @@ -69,11 +69,11 @@ PPPMDipoleSpin::PPPMDipoleSpin(LAMMPS *lmp, int narg, char **arg) : dipoleflag = 0; spinflag = 1; - hbar = force->hplanck/MY_2PI; // eV/(rad.THz) - mub = 5.78901e-5; // in eV/T - mu_0 = 1.2566370614e-6; // in T.m/A - mub2mu0 = mub * mub * mu_0; // in eV - mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz + hbar = force->hplanck/MY_2PI; // eV/(rad.THz) + mub = 5.78901e-5; // in eV/T + mu_0 = 1.2566370614e-6; // in T.m/A + mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV + mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz } /* ---------------------------------------------------------------------- @@ -746,7 +746,8 @@ void PPPMDipoleSpin::spsum_spsq() MPI_Allreduce(&spsum_local,&musum,1,MPI_DOUBLE,MPI_SUM,world); MPI_Allreduce(&spsqsum_local,&musqsum,1,MPI_DOUBLE,MPI_SUM,world); - mu2 = musqsum * mub2mu0; + //mu2 = musqsum * mub2mu0; + mu2 = musqsum; } if (mu2 == 0 && comm->me == 0) diff --git a/src/SPIN/pair_spin_dipolar_cut.cpp b/src/SPIN/pair_spin_dipolar_cut.cpp index f686d12926..b2c0a1ab11 100644 --- a/src/SPIN/pair_spin_dipolar_cut.cpp +++ b/src/SPIN/pair_spin_dipolar_cut.cpp @@ -13,7 +13,7 @@ /* ------------------------------------------------------------------------ Contributing authors: Julien Tranchida (SNL) - Aidan Thompson (SNL) + Stan Moore (SNL) Please cite the related publication: Tranchida, J., Plimpton, S. J., Thibaudeau, P., & Thompson, A. P. (2018). @@ -64,11 +64,13 @@ lockfixnvespin(NULL) no_virial_fdotr_compute = 1; lattice_flag = 0; - hbar = force->hplanck/MY_2PI; // eV/(rad.THz) - mub = 5.78901e-5; // in eV/T - mu_0 = 1.2566370614e-6; // in T.m/A - mub2mu0 = mub * mub * mu_0; // in eV - mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz + hbar = force->hplanck/MY_2PI; // eV/(rad.THz) + mub = 5.78901e-5; // in eV/T + mu_0 = 1.2566370614e-6; // in T.m/A + mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV + mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz + + //printf("hbar: %g, mub2mu0hbinv: %g \n",hbar,mub2mu0hbinv); } @@ -391,7 +393,9 @@ void PairSpinDipolarCut::compute_single_pair(int ii, double fmi[3]) compute_dipolar(i,j,rij,fmi,spi,spj,r3inv); } } - + + //printf("test fm: %g, %g, %g \n",fmi[0],fmi[1],fmi[2]); + //fmi[0] *= mub2mu0hbinv; //fmi[1] *= mub2mu0hbinv; //fmi[2] *= mub2mu0hbinv; @@ -405,15 +409,15 @@ void PairSpinDipolarCut::compute_dipolar(int i, int j, double rij[3], double fmi[3], double spi[4], double spj[4], double r3inv) { double sjdotr; - double gigjri2,pre; + double gigjri3,pre; sjdotr = spj[0]*rij[0] + spj[1]*rij[1] + spj[2]*rij[2]; - gigjri2 = (spi[3] * spj[3])*r3inv; - pre = mub2mu0hbinv * gigjri2 / 4.0 / MY_PI; + gigjri3 = (spi[3] * spj[3])*r3inv; + pre = mub2mu0hbinv * gigjri3 / 4.0 / MY_PI; - fmi[0] += pre * gigjri2 * (3.0 * sjdotr *rij[0] - spj[0]); - fmi[1] += pre * gigjri2 * (3.0 * sjdotr *rij[1] - spj[1]); - fmi[2] += pre * gigjri2 * (3.0 * sjdotr *rij[2] - spj[2]); + fmi[0] += pre * gigjri3 * (3.0 * sjdotr *rij[0] - spj[0]); + fmi[1] += pre * gigjri3 * (3.0 * sjdotr *rij[1] - spj[1]); + fmi[2] += pre * gigjri3 * (3.0 * sjdotr *rij[2] - spj[2]); } /* ---------------------------------------------------------------------- diff --git a/src/SPIN/pair_spin_long.cpp b/src/SPIN/pair_spin_dipolar_long.cpp similarity index 91% rename from src/SPIN/pair_spin_long.cpp rename to src/SPIN/pair_spin_dipolar_long.cpp index d7ecdf5edd..c1030c92d7 100644 --- a/src/SPIN/pair_spin_long.cpp +++ b/src/SPIN/pair_spin_dipolar_long.cpp @@ -13,12 +13,7 @@ /* ------------------------------------------------------------------------ Contributing authors: Julien Tranchida (SNL) - Aidan Thompson (SNL) - - Please cite the related publication: - Tranchida, J., Plimpton, S. J., Thibaudeau, P., & Thompson, A. P. (2018). - Massively parallel symplectic algorithm for coupled magnetic spin dynamics - and molecular dynamics. Journal of Computational Physics. + Stan Moore (SNL) ------------------------------------------------------------------------- */ #include @@ -26,7 +21,7 @@ #include #include -#include "pair_spin_long.h" +#include "pair_spin_dipolar_long.h" #include "atom.h" #include "comm.h" #include "neighbor.h" @@ -55,7 +50,7 @@ using namespace MathConst; /* ---------------------------------------------------------------------- */ -PairSpinLong::PairSpinLong(LAMMPS *lmp) : PairSpin(lmp), +PairSpinDipolarLong::PairSpinDipolarLong(LAMMPS *lmp) : PairSpin(lmp), lockfixnvespin(NULL) { single_enable = 0; @@ -64,11 +59,11 @@ lockfixnvespin(NULL) no_virial_fdotr_compute = 1; lattice_flag = 0; - hbar = force->hplanck/MY_2PI; // eV/(rad.THz) - mub = 5.78901e-5; // in eV/T - mu_0 = 1.2566370614e-6; // in T.m/A - mub2mu0 = mub * mub * mu_0; // in eV - mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz + hbar = force->hplanck/MY_2PI; // eV/(rad.THz) + mub = 5.78901e-5; // in eV/T + mu_0 = 1.2566370614e-6; // in T.m/A + mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV + mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz } @@ -76,7 +71,7 @@ lockfixnvespin(NULL) free all arrays ------------------------------------------------------------------------- */ -PairSpinLong::~PairSpinLong() +PairSpinDipolarLong::~PairSpinDipolarLong() { if (allocated) { memory->destroy(setflag); @@ -89,7 +84,7 @@ PairSpinLong::~PairSpinLong() global settings ------------------------------------------------------------------------- */ -void PairSpinLong::settings(int narg, char **arg) +void PairSpinDipolarLong::settings(int narg, char **arg) { if (narg < 1 || narg > 2) error->all(FLERR,"Incorrect args in pair_style command"); @@ -118,7 +113,7 @@ void PairSpinLong::settings(int narg, char **arg) set coeffs for one or more type pairs ------------------------------------------------------------------------- */ -void PairSpinLong::coeff(int narg, char **arg) +void PairSpinDipolarLong::coeff(int narg, char **arg) { if (!allocated) allocate(); @@ -151,7 +146,7 @@ void PairSpinLong::coeff(int narg, char **arg) init specific to this pair style ------------------------------------------------------------------------- */ -void PairSpinLong::init_style() +void PairSpinDipolarLong::init_style() { if (!atom->sp_flag) error->all(FLERR,"Pair spin requires atom/spin style"); @@ -194,7 +189,7 @@ void PairSpinLong::init_style() init for one type pair i,j and corresponding j,i ------------------------------------------------------------------------- */ -double PairSpinLong::init_one(int i, int j) +double PairSpinDipolarLong::init_one(int i, int j) { if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); @@ -207,7 +202,7 @@ double PairSpinLong::init_one(int i, int j) extract the larger cutoff if "cut" or "cut_coul" ------------------------------------------------------------------------- */ -void *PairSpinLong::extract(const char *str, int &dim) +void *PairSpinDipolarLong::extract(const char *str, int &dim) { if (strcmp(str,"cut") == 0) { dim = 0; @@ -230,7 +225,7 @@ void *PairSpinLong::extract(const char *str, int &dim) /* ---------------------------------------------------------------------- */ -void PairSpinLong::compute(int eflag, int vflag) +void PairSpinDipolarLong::compute(int eflag, int vflag) { int i,j,ii,jj,inum,jnum,itype,jtype; double r,rinv,r2inv,rsq; @@ -357,7 +352,7 @@ void PairSpinLong::compute(int eflag, int vflag) update the pair interaction fmi acting on the spin ii ------------------------------------------------------------------------- */ -void PairSpinLong::compute_single_pair(int ii, double fmi[3]) +void PairSpinDipolarLong::compute_single_pair(int ii, double fmi[3]) { int i,j,jj,jnum,itype,jtype; double r,rinv,r2inv,rsq; @@ -436,18 +431,20 @@ void PairSpinLong::compute_single_pair(int ii, double fmi[3]) } // adding the kspace components to fm - + + //printf("test fm before: %g, %g, %g \n",fmi[0],fmi[1],fmi[2]); + //printf("test fm_long: %g, %g, %g \n",fm_long[i][0],fm_long[i][1],fm_long[i][2]); fmi[0] += fm_long[i][0]; fmi[1] += fm_long[i][1]; fmi[2] += fm_long[i][2]; - + //printf("test fm after: %g, %g, %g \n",fmi[0],fmi[1],fmi[2]); } /* ---------------------------------------------------------------------- compute dipolar interaction between spins i and j ------------------------------------------------------------------------- */ -void PairSpinLong::compute_long(int i, int j, double rij[3], +void PairSpinDipolarLong::compute_long(int i, int j, double rij[3], double bij[4], double fmi[3], double spi[4], double spj[4]) { double sjdotr; @@ -469,7 +466,7 @@ void PairSpinLong::compute_long(int i, int j, double rij[3], atom i and atom j ------------------------------------------------------------------------- */ -void PairSpinLong::compute_long_mech(int i, int j, double rij[3], +void PairSpinDipolarLong::compute_long_mech(int i, int j, double rij[3], double bij[4], double fi[3], double spi[3], double spj[3]) { double sdots,sidotr,sjdotr,b2,b3; @@ -499,7 +496,7 @@ void PairSpinLong::compute_long_mech(int i, int j, double rij[3], allocate all arrays ------------------------------------------------------------------------- */ -void PairSpinLong::allocate() +void PairSpinDipolarLong::allocate() { allocated = 1; int n = atom->ntypes; @@ -517,7 +514,7 @@ void PairSpinLong::allocate() proc 0 writes to restart file ------------------------------------------------------------------------- */ -void PairSpinLong::write_restart(FILE *fp) +void PairSpinDipolarLong::write_restart(FILE *fp) { write_restart_settings(fp); @@ -536,7 +533,7 @@ void PairSpinLong::write_restart(FILE *fp) proc 0 reads from restart file, bcasts ------------------------------------------------------------------------- */ -void PairSpinLong::read_restart(FILE *fp) +void PairSpinDipolarLong::read_restart(FILE *fp) { read_restart_settings(fp); @@ -562,7 +559,7 @@ void PairSpinLong::read_restart(FILE *fp) proc 0 writes to restart file ------------------------------------------------------------------------- */ -void PairSpinLong::write_restart_settings(FILE *fp) +void PairSpinDipolarLong::write_restart_settings(FILE *fp) { fwrite(&cut_spin_long_global,sizeof(double),1,fp); fwrite(&mix_flag,sizeof(int),1,fp); @@ -572,7 +569,7 @@ void PairSpinLong::write_restart_settings(FILE *fp) proc 0 reads from restart file, bcasts ------------------------------------------------------------------------- */ -void PairSpinLong::read_restart_settings(FILE *fp) +void PairSpinDipolarLong::read_restart_settings(FILE *fp) { if (comm->me == 0) { fread(&cut_spin_long_global,sizeof(double),1,fp); diff --git a/src/SPIN/pair_spin_long.h b/src/SPIN/pair_spin_dipolar_long.h similarity index 90% rename from src/SPIN/pair_spin_long.h rename to src/SPIN/pair_spin_dipolar_long.h index 0cdf6d2b80..191e983328 100644 --- a/src/SPIN/pair_spin_long.h +++ b/src/SPIN/pair_spin_dipolar_long.h @@ -13,24 +13,24 @@ #ifdef PAIR_CLASS -PairStyle(spin/long,PairSpinLong) +PairStyle(spin/dipolar/long,PairSpinDipolarLong) #else -#ifndef LMP_PAIR_SPIN_LONG_H -#define LMP_PAIR_SPIN_LONG_H +#ifndef LMP_PAIR_SPIN_DIPOLAR_LONG_H +#define LMP_PAIR_SPIN_DIPOLAR_LONG_H #include "pair_spin.h" namespace LAMMPS_NS { -class PairSpinLong : public PairSpin { +class PairSpinDipolarLong : public PairSpin { public: double cut_coul; double **sigma; - PairSpinLong(class LAMMPS *); - ~PairSpinLong(); + PairSpinDipolarLong(class LAMMPS *); + ~PairSpinDipolarLong(); void settings(int, char **); void coeff(int, char **); double init_one(int, int); diff --git a/src/SPIN/pair_spin_long_qsymp.cpp b/src/SPIN/pair_spin_dipolar_long_qsymp.cpp similarity index 82% rename from src/SPIN/pair_spin_long_qsymp.cpp rename to src/SPIN/pair_spin_dipolar_long_qsymp.cpp index 3b499d0ef7..63876ba97a 100644 --- a/src/SPIN/pair_spin_long_qsymp.cpp +++ b/src/SPIN/pair_spin_dipolar_long_qsymp.cpp @@ -13,12 +13,7 @@ /* ------------------------------------------------------------------------ Contributing authors: Julien Tranchida (SNL) - Aidan Thompson (SNL) - - Please cite the related publication: - Tranchida, J., Plimpton, S. J., Thibaudeau, P., & Thompson, A. P. (2018). - Massively parallel symplectic algorithm for coupled magnetic spin dynamics - and molecular dynamics. Journal of Computational Physics. + Stan Moore (SNL) ------------------------------------------------------------------------- */ #include @@ -26,7 +21,7 @@ #include #include -#include "pair_spin_long_qsymp.h" +#include "pair_spin_dipolar_long_qsymp.h" #include "atom.h" #include "comm.h" #include "neighbor.h" @@ -55,7 +50,7 @@ using namespace MathConst; /* ---------------------------------------------------------------------- */ -PairSpinLongQsymp::PairSpinLongQsymp(LAMMPS *lmp) : PairSpin(lmp), +PairSpinDipolarLongQsymp::PairSpinDipolarLongQsymp(LAMMPS *lmp) : PairSpin(lmp), lockfixnvespin(NULL) { single_enable = 0; @@ -64,11 +59,11 @@ lockfixnvespin(NULL) no_virial_fdotr_compute = 1; lattice_flag = 0; - hbar = force->hplanck/MY_2PI; // eV/(rad.THz) - mub = 5.78901e-5; // in eV/T - mu_0 = 1.2566370614e-6; // in T.m/A - mub2mu0 = mub * mub * mu_0; // in eV - mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz + hbar = force->hplanck/MY_2PI; // eV/(rad.THz) + mub = 5.78901e-5; // in eV/T + mu_0 = 1.2566370614e-6; // in T.m/A + mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV + mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz } @@ -76,7 +71,7 @@ lockfixnvespin(NULL) free all arrays ------------------------------------------------------------------------- */ -PairSpinLongQsymp::~PairSpinLongQsymp() +PairSpinDipolarLongQsymp::~PairSpinDipolarLongQsymp() { if (allocated) { memory->destroy(setflag); @@ -89,7 +84,7 @@ PairSpinLongQsymp::~PairSpinLongQsymp() global settings ------------------------------------------------------------------------- */ -void PairSpinLongQsymp::settings(int narg, char **arg) +void PairSpinDipolarLongQsymp::settings(int narg, char **arg) { if (narg < 1 || narg > 2) error->all(FLERR,"Incorrect args in pair_style command"); @@ -118,7 +113,7 @@ void PairSpinLongQsymp::settings(int narg, char **arg) set coeffs for one or more type pairs ------------------------------------------------------------------------- */ -void PairSpinLongQsymp::coeff(int narg, char **arg) +void PairSpinDipolarLongQsymp::coeff(int narg, char **arg) { if (!allocated) allocate(); @@ -151,7 +146,7 @@ void PairSpinLongQsymp::coeff(int narg, char **arg) init specific to this pair style ------------------------------------------------------------------------- */ -void PairSpinLongQsymp::init_style() +void PairSpinDipolarLongQsymp::init_style() { if (!atom->sp_flag) error->all(FLERR,"Pair spin requires atom/spin style"); @@ -194,7 +189,7 @@ void PairSpinLongQsymp::init_style() init for one type pair i,j and corresponding j,i ------------------------------------------------------------------------- */ -double PairSpinLongQsymp::init_one(int i, int j) +double PairSpinDipolarLongQsymp::init_one(int i, int j) { if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); @@ -207,7 +202,7 @@ double PairSpinLongQsymp::init_one(int i, int j) extract the larger cutoff if "cut" or "cut_coul" ------------------------------------------------------------------------- */ -void *PairSpinLongQsymp::extract(const char *str, int &dim) +void *PairSpinDipolarLongQsymp::extract(const char *str, int &dim) { if (strcmp(str,"cut") == 0) { dim = 0; @@ -230,7 +225,7 @@ void *PairSpinLongQsymp::extract(const char *str, int &dim) /* ---------------------------------------------------------------------- */ -void PairSpinLongQsymp::compute(int eflag, int vflag) +void PairSpinDipolarLongQsymp::compute(int eflag, int vflag) { int i,j,ii,jj,inum,jnum,itype,jtype; double r,rinv,r2inv,rsq; @@ -359,9 +354,9 @@ void PairSpinLongQsymp::compute(int eflag, int vflag) // correction of the fm_kspace - fm_long[i][0] -= mub2mu0hbinv * fmx_erf_s; - fm_long[i][1] -= mub2mu0hbinv * fmy_erf_s; - fm_long[i][2] -= mub2mu0hbinv * fmz_erf_s; + fm_long[i][0] -= (mub2mu0hbinv * fmx_erf_s); + fm_long[i][1] -= (mub2mu0hbinv * fmy_erf_s); + fm_long[i][2] -= (mub2mu0hbinv * fmz_erf_s); if (newton_pair || j < nlocal) { f[j][0] -= fi[0]; @@ -391,21 +386,17 @@ void PairSpinLongQsymp::compute(int eflag, int vflag) removing erf(r)/r (for r in [0,rc]) from the kspace force ------------------------------------------------------------------------- */ -void PairSpinLongQsymp::compute_single_pair(int ii, double fmi[3]) +void PairSpinDipolarLongQsymp::compute_single_pair(int ii, double fmi[3]) { int i,j,jj,jnum,itype,jtype; - double r,rinv,r2inv,r3inv,rsq; - double grij,expm2,t,erf; + double rinv,r2inv,r3inv,rsq; double sjdotr,sjdotrr3inv; double b1,b2,gigj; double bij[4],xi[3],rij[3]; double spi[4],spj[4]; double local_cut2; - double pre1,pre2,pre3; int *ilist,*jlist,*numneigh,**firstneigh; - //double fmx_erf_s,fmy_erf_s,fmz_erf_s; double fmx_s,fmy_s,fmz_s; - //double fmx_long,fmy_long,fmz_long; double **x = atom->x; double **sp = atom->sp; @@ -416,10 +407,6 @@ void PairSpinLongQsymp::compute_single_pair(int ii, double fmi[3]) numneigh = list->numneigh; firstneigh = list->firstneigh; - pre1 = 2.0 * g_ewald / MY_PIS; - pre2 = 4.0 * pow(g_ewald,3.0) / MY_PIS; - pre3 = 8.0 * pow(g_ewald,5.0) / MY_PIS; - // computation of the exchange interaction // loop over neighbors of atom i @@ -427,16 +414,11 @@ void PairSpinLongQsymp::compute_single_pair(int ii, double fmi[3]) xi[0] = x[i][0]; xi[1] = x[i][1]; xi[2] = x[i][2]; - spi[0] = sp[i][0]; - spi[1] = sp[i][1]; - spi[2] = sp[i][2]; spi[3] = sp[i][3]; jlist = firstneigh[i]; jnum = numneigh[i]; itype = type[i]; - //fmx_long = fmy_long = fmz_long = 0.0; - //fmx_erf_s = fmy_erf_s = fmz_erf_s = 0.0; fmx_s = fmy_s = fmz_s = 0.0; for (jj = 0; jj < jnum; jj++) { @@ -449,8 +431,6 @@ void PairSpinLongQsymp::compute_single_pair(int ii, double fmi[3]) spj[2] = sp[j][2]; spj[3] = sp[j][3]; - bij[0] = bij[1] = bij[2] = bij[3] = 0.0; - rij[0] = x[j][0] - xi[0]; rij[1] = x[j][1] - xi[1]; rij[2] = x[j][2] - xi[2]; @@ -458,58 +438,25 @@ void PairSpinLongQsymp::compute_single_pair(int ii, double fmi[3]) local_cut2 = cut_spin_long[itype][jtype]*cut_spin_long[itype][jtype]; + // evaluating full dipolar interaction on [0,rc] + if (rsq < local_cut2) { r2inv = 1.0/rsq; rinv = sqrt(r2inv); r3inv = r2inv*rinv; - - r = sqrt(rsq); - //grij = g_ewald * r; - //expm2 = exp(-grij*grij); - //t = 1.0 / (1.0 + EWALD_P*grij); - - // evaluating erf instead of erfc - - //erf = 1.0 - t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; - - //bij[0] = erf * rinv; - //bij[1] = (bij[0] + pre1*expm2) * r2inv; - //bij[2] = (3.0*bij[1] + pre2*expm2) * r2inv; - //bij[3] = (5.0*bij[2] + pre3*expm2) * r2inv; - - //gigj = spi[3] * spj[3]; - //sjdotr = spj[0]*rij[0] + spj[1]*rij[1] + spj[2]*rij[2]; - - //b1 = bij[1]; - //b2 = bij[2]; - - // evaluating short-range correction to the kspace part on [0,rc] - - //fmx_erf_s += mub2mu0hbinv * gigj * (b2 * sjdotr * rij[0] - b1 * spj[0]); - //fmy_erf_s += mub2mu0hbinv * gigj * (b2 * sjdotr * rij[1] - b1 * spj[1]); - //fmz_erf_s += mub2mu0hbinv * gigj * (b2 * sjdotr * rij[2] - b1 * spj[2]); - - // evaluating real dipolar interaction on [0,rc] - + + gigj = spi[3] * spj[3]; + sjdotr = spj[0]*rij[0] + spj[1]*rij[1] + spj[2]*rij[2]; sjdotrr3inv = 3.0 * sjdotr * r3inv; + fmx_s += mub2mu0hbinv * gigj * (sjdotrr3inv * rij[0] - sp[i][0]/r3inv); fmy_s += mub2mu0hbinv * gigj * (sjdotrr3inv * rij[1] - sp[i][1]/r3inv); fmz_s += mub2mu0hbinv * gigj * (sjdotrr3inv * rij[2] - sp[i][2]/r3inv); - } } - // removing short-range erf function from kspace force - - //fmx_long = fm_long[i][0] - fmx_erf_s; - //fmy_long = fm_long[i][1] - fmy_erf_s; - //fmz_long = fm_long[i][2] - fmz_erf_s; - // adding truncated kspace force and short-range full force - //fmi[0] += fmx_s + fmx_long; - //fmi[1] += fmy_s + fmy_long; - //fmi[2] += fmz_s + fmz_long; fmi[0] += (fmx_s + fm_long[i][0]); fmi[1] += (fmy_s + fm_long[i][1]); fmi[2] += (fmz_s + fm_long[i][2]); @@ -519,7 +466,7 @@ void PairSpinLongQsymp::compute_single_pair(int ii, double fmi[3]) compute dipolar interaction between spins i and j ------------------------------------------------------------------------- */ -void PairSpinLongQsymp::compute_long(int i, int j, double rij[3], +void PairSpinDipolarLongQsymp::compute_long(int i, int j, double rij[3], double bij[4], double fmi[3], double spi[4], double spj[4]) { double sjdotr; @@ -541,7 +488,7 @@ void PairSpinLongQsymp::compute_long(int i, int j, double rij[3], atom i and atom j ------------------------------------------------------------------------- */ -void PairSpinLongQsymp::compute_long_mech(int i, int j, double rij[3], +void PairSpinDipolarLongQsymp::compute_long_mech(int i, int j, double rij[3], double bij[4], double fi[3], double spi[3], double spj[3]) { double sdots,sidotr,sjdotr,b2,b3; @@ -571,7 +518,7 @@ void PairSpinLongQsymp::compute_long_mech(int i, int j, double rij[3], allocate all arrays ------------------------------------------------------------------------- */ -void PairSpinLongQsymp::allocate() +void PairSpinDipolarLongQsymp::allocate() { allocated = 1; int n = atom->ntypes; @@ -589,7 +536,7 @@ void PairSpinLongQsymp::allocate() proc 0 writes to restart file ------------------------------------------------------------------------- */ -void PairSpinLongQsymp::write_restart(FILE *fp) +void PairSpinDipolarLongQsymp::write_restart(FILE *fp) { write_restart_settings(fp); @@ -608,7 +555,7 @@ void PairSpinLongQsymp::write_restart(FILE *fp) proc 0 reads from restart file, bcasts ------------------------------------------------------------------------- */ -void PairSpinLongQsymp::read_restart(FILE *fp) +void PairSpinDipolarLongQsymp::read_restart(FILE *fp) { read_restart_settings(fp); @@ -634,7 +581,7 @@ void PairSpinLongQsymp::read_restart(FILE *fp) proc 0 writes to restart file ------------------------------------------------------------------------- */ -void PairSpinLongQsymp::write_restart_settings(FILE *fp) +void PairSpinDipolarLongQsymp::write_restart_settings(FILE *fp) { fwrite(&cut_spin_long_global,sizeof(double),1,fp); fwrite(&mix_flag,sizeof(int),1,fp); @@ -644,7 +591,7 @@ void PairSpinLongQsymp::write_restart_settings(FILE *fp) proc 0 reads from restart file, bcasts ------------------------------------------------------------------------- */ -void PairSpinLongQsymp::read_restart_settings(FILE *fp) +void PairSpinDipolarLongQsymp::read_restart_settings(FILE *fp) { if (comm->me == 0) { fread(&cut_spin_long_global,sizeof(double),1,fp); diff --git a/src/SPIN/pair_spin_long_qsymp.h b/src/SPIN/pair_spin_dipolar_long_qsymp.h similarity index 89% rename from src/SPIN/pair_spin_long_qsymp.h rename to src/SPIN/pair_spin_dipolar_long_qsymp.h index ae8c5a3864..28867b5229 100644 --- a/src/SPIN/pair_spin_long_qsymp.h +++ b/src/SPIN/pair_spin_dipolar_long_qsymp.h @@ -13,24 +13,24 @@ #ifdef PAIR_CLASS -PairStyle(spin/long/qsymp,PairSpinLongQsymp) +PairStyle(spin/dipolar/long/qsymp,PairSpinDipolarLongQsymp) #else -#ifndef LMP_PAIR_SPIN_LONG_QSYMP_H -#define LMP_PAIR_SPIN_LONG_QSYMP_H +#ifndef LMP_PAIR_SPIN_DIPOLAR_LONG_QSYMP_H +#define LMP_PAIR_SPIN_DIPOLAR_LONG_QSYMP_H #include "pair_spin.h" namespace LAMMPS_NS { -class PairSpinLongQsymp : public PairSpin { +class PairSpinDipolarLongQsymp : public PairSpin { public: double cut_coul; double **sigma; - PairSpinLongQsymp(class LAMMPS *); - ~PairSpinLongQsymp(); + PairSpinDipolarLongQsymp(class LAMMPS *); + ~PairSpinDipolarLongQsymp(); void settings(int, char **); void coeff(int, char **); double init_one(int, int); From a745a0aed0846b8deccad6bdeadb263594f06555 Mon Sep 17 00:00:00 2001 From: julient31 Date: Wed, 3 Oct 2018 10:23:58 -0600 Subject: [PATCH 015/311] Commit JT 100318 - correction forces ewald_dipole - correction mag. dipolar energy --- examples/SPIN/pppm_spin/in.spin.ewald_spin | 4 +- src/KSPACE/ewald_dipole.cpp | 12 +--- src/KSPACE/ewald_dipole_spin.cpp | 66 ++++------------------ src/KSPACE/pppm_dipole_spin.cpp | 8 ++- src/SPIN/pair_spin_dipolar_cut.cpp | 8 ++- src/SPIN/pair_spin_dipolar_long.cpp | 9 ++- src/SPIN/pair_spin_dipolar_long_qsymp.cpp | 8 ++- 7 files changed, 37 insertions(+), 78 deletions(-) diff --git a/examples/SPIN/pppm_spin/in.spin.ewald_spin b/examples/SPIN/pppm_spin/in.spin.ewald_spin index c0ce74dd77..889ed086f8 100644 --- a/examples/SPIN/pppm_spin/in.spin.ewald_spin +++ b/examples/SPIN/pppm_spin/in.spin.ewald_spin @@ -44,7 +44,7 @@ fix 2 all langevin/spin 0.0 0.0 21 #fix 3 all nve/spin lattice yes fix 3 all nve/spin lattice no -timestep 0.0001 +timestep 0.001 compute out_mag all compute/spin @@ -65,4 +65,4 @@ compute outsp all property/atom spx spy spz sp fmx fmy fmz dump 100 all custom 1 dump_cobalt_hcp.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] #run 20000 -run 1 +run 1000 diff --git a/src/KSPACE/ewald_dipole.cpp b/src/KSPACE/ewald_dipole.cpp index ea05889f52..5579ba3840 100644 --- a/src/KSPACE/ewald_dipole.cpp +++ b/src/KSPACE/ewald_dipole.cpp @@ -449,16 +449,9 @@ void EwaldDipole::compute(int eflag, int vflag) exprl = cs[kx][0][i]*cypz - sn[kx][0][i]*sypz; expim = sn[kx][0][i]*cypz + cs[kx][0][i]*sypz; - // mu dot k product - - //muik = mu[i][0]*kx + mu[i][1]*ky + mu[i][2]*kz; - - // taking im of struct_fact x exp(i*k*ri) (for force calc.) - partial = (muk[k][i])*(expim*sfacrl_all[k] + exprl*sfacim_all[k]); - //partial = (muk[k][i])*(expim*sfacrl_all[k] - exprl*sfacim_all[k]); - //partial = muik * (expim*sfacrl_all[k] + exprl*sfacim_all[k]); + partial = (muk[k][i])*(expim*sfacrl_all[k] - exprl*sfacim_all[k]); ek[i][0] += partial * eg[k][0]; ek[i][1] += partial * eg[k][1]; ek[i][2] += partial * eg[k][2]; @@ -500,9 +493,6 @@ void EwaldDipole::compute(int eflag, int vflag) f[i][0] += muscale * ek[i][0]; f[i][1] += muscale * ek[i][1]; if (slabflag != 2) f[i][2] += muscale * ek[i][2]; - //f[i][0] -= muscale * ek[i][0]; - //f[i][1] -= muscale * ek[i][1]; - //if (slabflag != 2) f[i][2] -= muscale * ek[i][2]; t[i][0] += -mu[i][1]*tk[i][2] + mu[i][2]*tk[i][1]; t[i][1] += -mu[i][2]*tk[i][0] + mu[i][0]*tk[i][2]; if (slabflag != 2) t[i][2] += -mu[i][0]*tk[i][1] + mu[i][1]*tk[i][0]; diff --git a/src/KSPACE/ewald_dipole_spin.cpp b/src/KSPACE/ewald_dipole_spin.cpp index 9a61d9cbe1..df1acb337d 100644 --- a/src/KSPACE/ewald_dipole_spin.cpp +++ b/src/KSPACE/ewald_dipole_spin.cpp @@ -51,9 +51,12 @@ EwaldDipoleSpin::EwaldDipoleSpin(LAMMPS *lmp, int narg, char **arg) : spinflag = 1; hbar = force->hplanck/MY_2PI; // eV/(rad.THz) - mub = 5.78901e-5; // in eV/T - mu_0 = 1.2566370614e-6; // in T.m/A - mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV + //mub = 5.78901e-5; // in eV/T + //mu_0 = 1.2566370614e-6; // in T.m/A + mub = 9.274e-4; // in A.Ang^2 + mu_0 = 785.15; // in eV/Ang/A^2 + mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV.Ang^3 + //mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz } @@ -61,12 +64,7 @@ EwaldDipoleSpin::EwaldDipoleSpin(LAMMPS *lmp, int narg, char **arg) : free all memory ------------------------------------------------------------------------- */ -EwaldDipoleSpin::~EwaldDipoleSpin() -{ - //memory->destroy(muk); - //memory->destroy(tk); - //memory->destroy(vc); -} +EwaldDipoleSpin::~EwaldDipoleSpin() {} /* ---------------------------------------------------------------------- called once before run @@ -81,12 +79,7 @@ void EwaldDipoleSpin::init() // error check - //dipoleflag = atom->mu?1:0; spinflag = atom->sp?1:0; - //qsum_qsq(0); // q[i] might not be declared ? - - //if (dipoleflag && q2) - // error->all(FLERR,"Cannot (yet) use charges with Kspace style EwaldDipoleSpin"); triclinic_check(); @@ -100,7 +93,6 @@ void EwaldDipoleSpin::init() error->all(FLERR,"Cannot use EwaldDipoleSpin with 2d simulation"); if (!atom->sp) error->all(FLERR,"Kspace style requires atom attribute sp"); -//if (!atom->q_flag) error->all(FLERR,"Kspace style requires atom attribute q"); if ((spinflag && strcmp(update->unit_style,"metal")) != 0) error->all(FLERR,"'metal' units have to be used with spins"); @@ -134,7 +126,6 @@ void EwaldDipoleSpin::init() scale = 1.0; qqrd2e = force->qqrd2e; - //musum_musq(); spsum_musq(); natoms_original = atom->natoms; @@ -343,23 +334,6 @@ void EwaldDipoleSpin::setup() coeffs(); } -/* ---------------------------------------------------------------------- - compute dipole RMS accuracy for a dimension -------------------------------------------------------------------------- */ - -//double EwaldDipoleSpin::rms_dipole(int km, double prd, bigint natoms) -//{ -// if (natoms == 0) natoms = 1; // avoid division by zero -// -// // error from eq.(46), Wang et al., JCP 115, 6351 (2001) -// -// double value = 8*MY_PI*mu2*g_ewald/volume * -// sqrt(2*MY_PI*km*km*km/(15.0*natoms)) * -// exp(-MY_PI*MY_PI*km*km/(g_ewald*g_ewald*prd*prd)); -// -// return value; -//} - /* ---------------------------------------------------------------------- compute the EwaldDipoleSpin long-range force, energy, virial ------------------------------------------------------------------------- */ @@ -379,7 +353,6 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) // if atom count has changed, update qsum and qsqsum if (atom->natoms != natoms_original) { - //musum_musq(); spsum_musq(); natoms_original = atom->natoms; } @@ -421,8 +394,6 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) double **f = atom->f; double **fm_long = atom->fm_long; - double **t = atom->torque; - //double **mu = atom->mu; double **sp = atom->sp; int nlocal = atom->nlocal; @@ -456,7 +427,7 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) // taking im of struct_fact x exp(i*k*ri) (for force calc.) - partial = (muk[k][i])*(expim*sfacrl_all[k] + exprl*sfacim_all[k]); + partial = (muk[k][i])*(expim*sfacrl_all[k] - exprl*sfacim_all[k]); ek[i][0] += partial*eg[k][0]; ek[i][1] += partial*eg[k][1]; ek[i][2] += partial*eg[k][2]; @@ -498,10 +469,6 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) const double spscale = mub2mu0 * scale; const double spscale2 = mub2mu0hbinv * scale; - //const double muscale = qqrd2e * scale; - - printf("test ek: %g %g %g \n",ek[0][0],ek[0][1],ek[0][2]); - printf("test tk: %g %g %g \n",tk[0][0],tk[0][1],tk[0][2]); for (i = 0; i < nlocal; i++) { f[i][0] += spscale * ek[i][0]; @@ -512,8 +479,8 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) if (slabflag != 2) fm_long[i][2] += spscale2 * tk[i][3]; } - printf("test f_l: %g %g %g \n",f[0][0],f[0][1],f[0][2]); - printf("test fm_l: %g %g %g \n",fm_long[0][0],fm_long[0][1],fm_long[0][2]); + //printf("test f_l: %g %g %g \n",f[0][0],f[0][1],f[0][2]); + //printf("test fm_l: %g %g %g \n",fm_long[0][0],fm_long[0][1],fm_long[0][2]); // sum global energy across Kspace vevs and add in volume-dependent term // taking the re-part of struct_fact_i x struct_fact_j @@ -573,11 +540,9 @@ void EwaldDipoleSpin::eik_dot_r() int i,k,l,m,n,ic; double cstr1,sstr1,cstr2,sstr2,cstr3,sstr3,cstr4,sstr4; double sqk,clpm,slpm; - //double mux, muy, muz; double spx, spy, spz, spi; double **x = atom->x; - //double **mu = atom->mu; double **sp = atom->sp; int nlocal = atom->nlocal; @@ -607,7 +572,6 @@ void EwaldDipoleSpin::eik_dot_r() cs[-1][ic][i] = cs[1][ic][i]; sn[-1][ic][i] = -sn[1][ic][i]; spi = sp[i][ic]*sp[i][3]; - //muk[n][i] = (mu[i][ic]*unitk[ic]); muk[n][i] = (spi*unitk[ic]); cstr1 += muk[n][i]*cs[1][ic][i]; sstr1 += muk[n][i]*sn[1][ic][i]; @@ -634,7 +598,6 @@ void EwaldDipoleSpin::eik_dot_r() sn[-m][ic][i] = -sn[m][ic][i]; spi = sp[i][ic]*sp[i][3]; muk[n][i] = (spi*m*unitk[ic]); - //muk[n][i] = (mu[i][ic]*m*unitk[ic]); cstr1 += muk[n][i]*cs[m][ic][i]; sstr1 += muk[n][i]*sn[m][ic][i]; } @@ -657,8 +620,6 @@ void EwaldDipoleSpin::eik_dot_r() for (i = 0; i < nlocal; i++) { spx = sp[i][0]*sp[i][3]; spy = sp[i][1]*sp[i][3]; - //mux = mu[i][0]; - //muy = mu[i][1]; // dir 1: (k,l,0) muk[n][i] = (spx*k*unitk[0] + spy*l*unitk[1]); @@ -691,8 +652,6 @@ void EwaldDipoleSpin::eik_dot_r() for (i = 0; i < nlocal; i++) { spy = sp[i][1]*sp[i][3]; spz = sp[i][2]*sp[i][3]; - //muy = mu[i][1]; - //muz = mu[i][2]; // dir 1: (0,l,m) muk[n][i] = (spy*l*unitk[1] + spz*m*unitk[2]); @@ -723,8 +682,6 @@ void EwaldDipoleSpin::eik_dot_r() cstr2 = 0.0; sstr2 = 0.0; for (i = 0; i < nlocal; i++) { - //mux = mu[i][0]; - //muz = mu[i][2]; spx = sp[i][0]*sp[i][3]; spz = sp[i][2]*sp[i][3]; @@ -763,9 +720,6 @@ void EwaldDipoleSpin::eik_dot_r() cstr4 = 0.0; sstr4 = 0.0; for (i = 0; i < nlocal; i++) { - //mux = mu[i][0]; - //muy = mu[i][1]; - //muz = mu[i][2]; spx = sp[i][0]*sp[i][3]; spy = sp[i][1]*sp[i][3]; spz = sp[i][2]*sp[i][3]; diff --git a/src/KSPACE/pppm_dipole_spin.cpp b/src/KSPACE/pppm_dipole_spin.cpp index e66ab4903e..be38a460b2 100644 --- a/src/KSPACE/pppm_dipole_spin.cpp +++ b/src/KSPACE/pppm_dipole_spin.cpp @@ -70,8 +70,12 @@ PPPMDipoleSpin::PPPMDipoleSpin(LAMMPS *lmp, int narg, char **arg) : spinflag = 1; hbar = force->hplanck/MY_2PI; // eV/(rad.THz) - mub = 5.78901e-5; // in eV/T - mu_0 = 1.2566370614e-6; // in T.m/A + //mub = 5.78901e-5; // in eV/T + //mu_0 = 1.2566370614e-6; // in T.m/A + mub = 9.274e-4; // in A.Ang^2 + mu_0 = 785.15; // in eV/Ang/A^2 + mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV.Ang^3 + //mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz } diff --git a/src/SPIN/pair_spin_dipolar_cut.cpp b/src/SPIN/pair_spin_dipolar_cut.cpp index b2c0a1ab11..2c44b25fbf 100644 --- a/src/SPIN/pair_spin_dipolar_cut.cpp +++ b/src/SPIN/pair_spin_dipolar_cut.cpp @@ -65,8 +65,12 @@ lockfixnvespin(NULL) lattice_flag = 0; hbar = force->hplanck/MY_2PI; // eV/(rad.THz) - mub = 5.78901e-5; // in eV/T - mu_0 = 1.2566370614e-6; // in T.m/A + //mub = 5.78901e-5; // in eV/T + //mu_0 = 1.2566370614e-6; // in T.m/A + mub = 9.274e-4; // in A.Ang^2 + mu_0 = 785.15; // in eV/Ang/A^2 + mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV.Ang^3 + //mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz diff --git a/src/SPIN/pair_spin_dipolar_long.cpp b/src/SPIN/pair_spin_dipolar_long.cpp index c1030c92d7..140b92700c 100644 --- a/src/SPIN/pair_spin_dipolar_long.cpp +++ b/src/SPIN/pair_spin_dipolar_long.cpp @@ -60,9 +60,12 @@ lockfixnvespin(NULL) lattice_flag = 0; hbar = force->hplanck/MY_2PI; // eV/(rad.THz) - mub = 5.78901e-5; // in eV/T - mu_0 = 1.2566370614e-6; // in T.m/A - mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV + //mub = 5.78901e-5; // in eV/T + //mu_0 = 1.2566370614e-6; // in T.m/A + mub = 9.274e-4; // in A.Ang^2 + mu_0 = 785.15; // in eV/Ang/A^2 + mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV.Ang^3 + //mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz } diff --git a/src/SPIN/pair_spin_dipolar_long_qsymp.cpp b/src/SPIN/pair_spin_dipolar_long_qsymp.cpp index 63876ba97a..4b07b540bc 100644 --- a/src/SPIN/pair_spin_dipolar_long_qsymp.cpp +++ b/src/SPIN/pair_spin_dipolar_long_qsymp.cpp @@ -60,8 +60,12 @@ lockfixnvespin(NULL) lattice_flag = 0; hbar = force->hplanck/MY_2PI; // eV/(rad.THz) - mub = 5.78901e-5; // in eV/T - mu_0 = 1.2566370614e-6; // in T.m/A + //mub = 5.78901e-5; // in eV/T + //mu_0 = 1.2566370614e-6; // in T.m/A + mub = 9.274e-4; // in A.Ang^2 + mu_0 = 785.15; // in eV/Ang/A^2 + mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV.Ang^3 + //mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz From d5fe8857cc75dd1c140883f7005c9f669c084a82 Mon Sep 17 00:00:00 2001 From: julient31 Date: Fri, 5 Oct 2018 14:01:29 -0600 Subject: [PATCH 016/311] Commit JT 100518 - correction torque ewald_dipole - idem ewald_dipole_spin to check --- src/KSPACE/ewald_dipole.cpp | 8 ++++---- src/KSPACE/ewald_dipole_spin.cpp | 5 +---- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/KSPACE/ewald_dipole.cpp b/src/KSPACE/ewald_dipole.cpp index 5579ba3840..f2124deb4f 100644 --- a/src/KSPACE/ewald_dipole.cpp +++ b/src/KSPACE/ewald_dipole.cpp @@ -458,7 +458,7 @@ void EwaldDipole::compute(int eflag, int vflag) // compute field for torque calculation - partial2 = exprl*sfacrl_all[k] - expim*sfacim_all[k]; + partial2 = exprl*sfacrl_all[k] + expim*sfacim_all[k]; tk[i][0] += partial2*eg[k][0]; tk[i][1] += partial2*eg[k][1]; tk[i][2] += partial2*eg[k][2]; @@ -493,9 +493,9 @@ void EwaldDipole::compute(int eflag, int vflag) f[i][0] += muscale * ek[i][0]; f[i][1] += muscale * ek[i][1]; if (slabflag != 2) f[i][2] += muscale * ek[i][2]; - t[i][0] += -mu[i][1]*tk[i][2] + mu[i][2]*tk[i][1]; - t[i][1] += -mu[i][2]*tk[i][0] + mu[i][0]*tk[i][2]; - if (slabflag != 2) t[i][2] += -mu[i][0]*tk[i][1] + mu[i][1]*tk[i][0]; + t[i][0] -= muscale * (mu[i][1]*tk[i][2] - mu[i][2]*tk[i][1]); + t[i][1] -= muscale * (mu[i][2]*tk[i][0] - mu[i][0]*tk[i][2]); + if (slabflag != 2) t[i][2] -= muscale * (mu[i][0]*tk[i][1] - mu[i][1]*tk[i][0]); } // sum global energy across Kspace vevs and add in volume-dependent term diff --git a/src/KSPACE/ewald_dipole_spin.cpp b/src/KSPACE/ewald_dipole_spin.cpp index df1acb337d..3554f66f36 100644 --- a/src/KSPACE/ewald_dipole_spin.cpp +++ b/src/KSPACE/ewald_dipole_spin.cpp @@ -434,7 +434,7 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) // compute field for torque calculation - partial2 = exprl*sfacrl_all[k] - expim*sfacim_all[k]; + partial2 = exprl*sfacrl_all[k] + expim*sfacim_all[k]; tk[i][0] += partial2*eg[k][0]; tk[i][1] += partial2*eg[k][1]; tk[i][2] += partial2*eg[k][2]; @@ -478,9 +478,6 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) fm_long[i][1] += spscale2 * tk[i][1]; if (slabflag != 2) fm_long[i][2] += spscale2 * tk[i][3]; } - - //printf("test f_l: %g %g %g \n",f[0][0],f[0][1],f[0][2]); - //printf("test fm_l: %g %g %g \n",fm_long[0][0],fm_long[0][1],fm_long[0][2]); // sum global energy across Kspace vevs and add in volume-dependent term // taking the re-part of struct_fact_i x struct_fact_j From 9727fdc47305b9ce29ec099a6a1d138892e38898 Mon Sep 17 00:00:00 2001 From: julient31 Date: Thu, 8 Nov 2018 16:17:43 -0700 Subject: [PATCH 017/311] Commit JT 110818 - correct bug (match ewald/disp results for vir) - started correct mag. part --- examples/SPIN/pppm_spin/data.2 | 13 ++++ examples/SPIN/pppm_spin/in.spin.2 | 75 +++++++++++++++++++++ examples/SPIN/pppm_spin/in.spin.cut_comp | 72 +++++++++++++++++++++ examples/SPIN/pppm_spin/in.spin.pppm_spin | 10 +-- src/KSPACE/ewald_dipole.cpp | 28 ++++---- src/KSPACE/ewald_dipole_spin.cpp | 30 +++++---- src/SPIN/pair_spin_dipolar_cut.cpp | 79 +++++++++++------------ 7 files changed, 233 insertions(+), 74 deletions(-) create mode 100644 examples/SPIN/pppm_spin/data.2 create mode 100644 examples/SPIN/pppm_spin/in.spin.2 create mode 100644 examples/SPIN/pppm_spin/in.spin.cut_comp diff --git a/examples/SPIN/pppm_spin/data.2 b/examples/SPIN/pppm_spin/data.2 new file mode 100644 index 0000000000..426e3a9cb4 --- /dev/null +++ b/examples/SPIN/pppm_spin/data.2 @@ -0,0 +1,13 @@ +RANDOM INITIALIZATION FOR STOCKMAYER FLUID +2 atoms +1 atom types + + -3.0 3.0 xlo xhi + -3.0 3.0 ylo yhi + -3.0 3.0 zlo zhi + #30.0 30.0 0.0 xy xz yz + +Atoms + +1 1 1.73 0.0 0.0 0.0 0.0 0.0 1.0 +2 1 1.73 0.0 2.5 0.0 0.0 0.0 1.0 diff --git a/examples/SPIN/pppm_spin/in.spin.2 b/examples/SPIN/pppm_spin/in.spin.2 new file mode 100644 index 0000000000..29f3203694 --- /dev/null +++ b/examples/SPIN/pppm_spin/in.spin.2 @@ -0,0 +1,75 @@ +# two magnetic atoms in a 3d box + +clear +units metal +atom_style spin + +dimension 3 +#boundary p p p +atom_modify map array + +read_data ../examples/SPIN/pppm_spin/data.2 + + +mass 1 58.93 +#set group all spin/random 31 1.72 + +#velocity all create 100 4928459 rot yes dist gaussian + +pair_style spin/dipolar/cut 4.0 +pair_coeff * * long 2.6 +#pair_style hybrid/overlay spin/exchange 4.0 spin/dipolar/long 8.0 +#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/dipolar/long 8.0 +#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/dipolar/long/qsymp 8.0 +#pair_coeff * * eam/alloy ../examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy Co +#pair_coeff * * spin/exchange exchange 4.0 0.1 1.135028015e-05 1.064568567 +#pair_coeff * * spin/dipolar/long long 8.0 + +#neighbor 0.1 bin +#neigh_modify every 10 check yes delay 20 +neighbor 0.3 bin +neigh_modify delay 0 +#neigh_modify every 1 delay 10 check yes page 100000000 one 10000000 + +#kspace_style pppm/dipole/spin 1.0e-4 +#kspace_style ewald/dipole/spin 1.0e-4 +#kspace_modify compute yes +#kspace_modify compute yes gewald 0.1 + +fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 +fix 2 all langevin/spin 0.0 0.0 21 +#fix 3 all nve/spin lattice yes +fix 3 all nve/spin lattice no + +timestep 0.0001 + +thermo_style custom step temp pe ke etotal press +thermo_modify format float %20.16g +thermo 1 + +#compute peratom all pe/atom +#compute pe all reduce sum c_peratom +#thermo_style custom step temp pe c_pe + +#compute peratom2 all stress/atom +#compute peratom2 all stress/atom NULL +#compute p all reduce sum c_peratom2[1] c_peratom2[2] c_peratom2[3] c_peratom2[4] c_peratom2[5] c_peratom2[6] +#variable press equal -(c_p[1]+c_p[2]+c_p[3])/(3*vol) +#variable pxx equal -c_p[1]/vol +#variable pyy equal -c_p[2]/vol +#variable pzz equal -c_p[3]/vol +#variable pxy equal -c_p[4]/vol +#variable pxz equal -c_p[5]/vol +#variable pyz equal -c_p[6]/vol +#thermo_style custom step temp etotal pe c_pe press v_press pxx v_pxx pyy v_pyy pzz v_pzz pxy v_pxy pxz v_pxz pyz v_pyz +#thermo_style custom step etotal pe press v_press v_pxx v_pyy v_pzz v_pxy v_pxz v_pyz +#thermo_style custom step temp etotal press v_press + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 1 all custom 1 dump.equil id type x y z c_outsp[1] c_outsp[2] c_outsp[3] +#c_outsp[5] c_outsp[6] c_outsp[7] +#dump_modify 1 format line "%d %d %20.15g %20.15g %20.15g %20.15g %20.15g %20.15g" scale yes + +#pair_modify compute no + +run 1 diff --git a/examples/SPIN/pppm_spin/in.spin.cut_comp b/examples/SPIN/pppm_spin/in.spin.cut_comp new file mode 100644 index 0000000000..3d01c56878 --- /dev/null +++ b/examples/SPIN/pppm_spin/in.spin.cut_comp @@ -0,0 +1,72 @@ +# bcc iron in a 3d periodic box + +clear +units metal +atom_style spin + +dimension 3 +boundary p p p +atom_modify map array + +lattice bcc 2.8665 +region box block 0.0 5.0 0.0 5.0 0.0 5.0 +create_box 1 box +create_atoms 1 box + +mass 1 58.93 +#set group all spin 2.2 0.0 0.0 1.0 +set group all spin/random 31 2.2 + +#pair_style spin/dipolar/cut 5.0 +#pair_coeff * * long 5.0 +pair_style spin/dipolar/long 4.0 +pair_coeff * * long 4.0 + +#neighbor 0.1 bin +#neigh_modify every 10 check yes delay 20 +neighbor 0.3 bin +neigh_modify delay 0 +#neigh_modify every 1 delay 10 check yes page 100000000 one 10000000 + +#kspace_style pppm/dipole/spin 1.0e-4 +kspace_style ewald/dipole/spin 1.0e-4 +kspace_modify compute yes +#kspace_modify compute yes gewald 0.1 + +fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 +fix 2 all langevin/spin 0.0 0.1 21 +#fix 3 all nve/spin lattice yes +fix 3 all nve/spin lattice no + +timestep 0.0001 + +thermo_style custom step temp pe ke etotal press +thermo_modify format float %20.16g +thermo 50 + +#compute peratom all pe/atom +#compute pe all reduce sum c_peratom +#thermo_style custom step temp pe c_pe + +#compute peratom2 all stress/atom +#compute peratom2 all stress/atom NULL +#compute p all reduce sum c_peratom2[1] c_peratom2[2] c_peratom2[3] c_peratom2[4] c_peratom2[5] c_peratom2[6] +#variable press equal -(c_p[1]+c_p[2]+c_p[3])/(3*vol) +#variable pxx equal -c_p[1]/vol +#variable pyy equal -c_p[2]/vol +#variable pzz equal -c_p[3]/vol +#variable pxy equal -c_p[4]/vol +#variable pxz equal -c_p[5]/vol +#variable pyz equal -c_p[6]/vol +#thermo_style custom step temp etotal pe c_pe press v_press pxx v_pxx pyy v_pyy pzz v_pzz pxy v_pxy pxz v_pxz pyz v_pyz +#thermo_style custom step etotal pe press v_press v_pxx v_pyy v_pzz v_pxy v_pxz v_pyz +#thermo_style custom step temp etotal press v_press + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 50 all custom 1 dump.equil id type x y z c_outsp[1] c_outsp[2] c_outsp[3] +#c_outsp[5] c_outsp[6] c_outsp[7] +#dump_modify 1 format line "%d %d %20.15g %20.15g %20.15g %20.15g %20.15g %20.15g" scale yes + +#pair_modify compute no + +run 10000 diff --git a/examples/SPIN/pppm_spin/in.spin.pppm_spin b/examples/SPIN/pppm_spin/in.spin.pppm_spin index 6762fe6fab..78dfbb56a0 100644 --- a/examples/SPIN/pppm_spin/in.spin.pppm_spin +++ b/examples/SPIN/pppm_spin/in.spin.pppm_spin @@ -19,14 +19,15 @@ create_atoms 1 box mass 1 58.93 -#set group all spin/random 31 1.72 -set group all spin 1.72 0.0 0.0 1.0 +set group all spin/random 31 1.72 +#set group all spin 1.72 0.0 0.0 1.0 velocity all create 100 4928459 rot yes dist gaussian pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/dipolar/long 8.0 #pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/dipolar/long/qsymp 8.0 pair_coeff * * eam/alloy ../examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy Co -pair_coeff * * spin/exchange exchange 4.0 0.3593 1.135028015e-05 1.064568567 +#pair_coeff * * spin/exchange exchange 4.0 0.3593 1.135028015e-05 1.064568567 +pair_coeff * * spin/exchange exchange 4.0 0.0 1.135028015e-05 1.064568567 #pair_coeff * * spin/dipolar/long/qsymp long 8.0 pair_coeff * * spin/dipolar/long long 8.0 @@ -34,7 +35,7 @@ neighbor 0.1 bin neigh_modify every 10 check yes delay 20 kspace_style pppm/dipole/spin 1.0e-4 -#kspace_modify mesh 32 32 32 +kspace_modify compute yes #fix 1 all precession/spin zeeman 1.0 0.0 0.0 1.0 fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 @@ -55,6 +56,7 @@ variable emag equal c_out_mag[5] variable tmag equal c_out_mag[6] thermo_style custom step time v_magnorm v_emag temp etotal +thermo_modify format float %20.16g thermo 10 compute outsp all property/atom spx spy spz sp fmx fmy fmz diff --git a/src/KSPACE/ewald_dipole.cpp b/src/KSPACE/ewald_dipole.cpp index f2124deb4f..92470eb4a8 100644 --- a/src/KSPACE/ewald_dipole.cpp +++ b/src/KSPACE/ewald_dipole.cpp @@ -439,8 +439,7 @@ void EwaldDipole::compute(int eflag, int vflag) for (i = 0; i < nlocal; i++) { - vcik[0] = vcik[1] = vcik[2] = 0.0; - vcik[3] = vcik[4] = vcik[5] = 0.0; + for (j = 0; j<6; j++) vcik[j] = 0.0; // calculating re and im of exp(i*k*ri) @@ -458,29 +457,28 @@ void EwaldDipole::compute(int eflag, int vflag) // compute field for torque calculation - partial2 = exprl*sfacrl_all[k] + expim*sfacim_all[k]; - tk[i][0] += partial2*eg[k][0]; - tk[i][1] += partial2*eg[k][1]; - tk[i][2] += partial2*eg[k][2]; + partial_peratom = exprl*sfacrl_all[k] + expim*sfacim_all[k]; + tk[i][0] += partial_peratom * eg[k][0]; + tk[i][1] += partial_peratom * eg[k][1]; + tk[i][2] += partial_peratom * eg[k][2]; // total and per-atom virial correction (dipole only) - vc[k][0] += vcik[0] = partial2 * mu[i][0] * kx; - vc[k][1] += vcik[1] = partial2 * mu[i][1] * ky; - vc[k][2] += vcik[2] = partial2 * mu[i][2] * kz; - vc[k][3] += vcik[3] = partial2 * mu[i][0] * ky; - vc[k][4] += vcik[4] = partial2 * mu[i][0] * kz; - vc[k][5] += vcik[5] = partial2 * mu[i][1] * kz; + vc[k][0] += vcik[0] = -(partial_peratom * mu[i][0] * eg[k][0]); + vc[k][1] += vcik[1] = -(partial_peratom * mu[i][1] * eg[k][1]); + vc[k][2] += vcik[2] = -(partial_peratom * mu[i][2] * eg[k][2]); + vc[k][3] += vcik[3] = -(partial_peratom * mu[i][0] * eg[k][1]); + vc[k][4] += vcik[4] = -(partial_peratom * mu[i][0] * eg[k][2]); + vc[k][5] += vcik[5] = -(partial_peratom * mu[i][1] * eg[k][2]); // taking re-part of struct_fact x exp(i*k*ri) // (for per-atom energy and virial calc.) if (evflag_atom) { - partial_peratom = exprl*sfacrl_all[k] + expim*sfacim_all[k]; if (eflag_atom) eatom[i] += muk[k][i]*ug[k]*partial_peratom; if (vflag_atom) for (j = 0; j < 6; j++) - vatom[i][j] += ug[k] * (vg[k][j]*partial_peratom - vcik[j]); + vatom[i][j] += (ug[k]*muk[k][i]*vg[k][j]*partial_peratom - vcik[j]); } } } @@ -517,7 +515,7 @@ void EwaldDipole::compute(int eflag, int vflag) double uk, vk; for (k = 0; k < kcount; k++) { uk = ug[k] * (sfacrl_all[k]*sfacrl_all[k] + sfacim_all[k]*sfacim_all[k]); - for (j = 0; j < 6; j++) virial[j] += uk*vg[k][j] + ug[k]*vc[k][j]; + for (j = 0; j < 6; j++) virial[j] += uk*vg[k][j] - vc[k][j]; } for (j = 0; j < 6; j++) virial[j] *= muscale; } diff --git a/src/KSPACE/ewald_dipole_spin.cpp b/src/KSPACE/ewald_dipole_spin.cpp index 3554f66f36..4313f7b57b 100644 --- a/src/KSPACE/ewald_dipole_spin.cpp +++ b/src/KSPACE/ewald_dipole_spin.cpp @@ -428,13 +428,14 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) // taking im of struct_fact x exp(i*k*ri) (for force calc.) partial = (muk[k][i])*(expim*sfacrl_all[k] - exprl*sfacim_all[k]); - ek[i][0] += partial*eg[k][0]; - ek[i][1] += partial*eg[k][1]; - ek[i][2] += partial*eg[k][2]; + ek[i][0] += partial * eg[k][0]; + ek[i][1] += partial * eg[k][1]; + ek[i][2] += partial * eg[k][2]; // compute field for torque calculation - partial2 = exprl*sfacrl_all[k] + expim*sfacim_all[k]; + //partial2 = exprl*sfacrl_all[k] + expim*sfacim_all[k]; + partial_peratom = exprl*sfacrl_all[k] + expim*sfacim_all[k]; tk[i][0] += partial2*eg[k][0]; tk[i][1] += partial2*eg[k][1]; tk[i][2] += partial2*eg[k][2]; @@ -445,22 +446,23 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) spy = sp[i][1]*sp[i][3]; spz = sp[i][2]*sp[i][3]; - vc[k][0] += vcik[0] = partial2 * spx * kx; - vc[k][1] += vcik[1] = partial2 * spy * ky; - vc[k][2] += vcik[2] = partial2 * spz * kz; - vc[k][3] += vcik[3] = partial2 * spx * ky; - vc[k][4] += vcik[4] = partial2 * spx * kz; - vc[k][5] += vcik[5] = partial2 * spy * kz; + vc[k][0] += vcik[0] = -(partial_peratom * spx * eg[k][0]); + vc[k][1] += vcik[1] = -(partial_peratom * spy * eg[k][1]); + vc[k][2] += vcik[2] = -(partial_peratom * spz * eg[k][2]); + vc[k][3] += vcik[3] = -(partial_peratom * spx * eg[k][1]); + vc[k][4] += vcik[4] = -(partial_peratom * spx * eg[k][2]); + vc[k][5] += vcik[5] = -(partial_peratom * spy * eg[k][2]); // taking re-part of struct_fact x exp(i*k*ri) // (for per-atom energy and virial calc.) if (evflag_atom) { - partial_peratom = exprl*sfacrl_all[k] + expim*sfacim_all[k]; + //partial_peratom = exprl*sfacrl_all[k] + expim*sfacim_all[k]; if (eflag_atom) eatom[i] += muk[k][i]*ug[k]*partial_peratom; if (vflag_atom) for (j = 0; j < 6; j++) - vatom[i][j] += ug[k] * (vg[k][j]*partial_peratom - vcik[j]); + vatom[i][j] += (ug[k]*muk[k][i]*vg[k][j]*partial_peratom - vcik[j]); + //vatom[i][j] += ug[k] * (vg[k][j]*partial_peratom - vcik[j]); } } } @@ -498,7 +500,7 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) double uk, vk; for (k = 0; k < kcount; k++) { uk = ug[k] * (sfacrl_all[k]*sfacrl_all[k] + sfacim_all[k]*sfacim_all[k]); - for (j = 0; j < 6; j++) virial[j] += uk*vg[k][j] + ug[k]*vc[k][j]; + for (j = 0; j < 6; j++) virial[j] += uk*vg[k][j] - vc[k][j]; } for (j = 0; j < 6; j++) virial[j] *= spscale; } @@ -529,7 +531,7 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) } /* ---------------------------------------------------------------------- - compute the + compute the struc. factors and mu dot k products ------------------------------------------------------------------------- */ void EwaldDipoleSpin::eik_dot_r() diff --git a/src/SPIN/pair_spin_dipolar_cut.cpp b/src/SPIN/pair_spin_dipolar_cut.cpp index 2c44b25fbf..b8927d62e9 100644 --- a/src/SPIN/pair_spin_dipolar_cut.cpp +++ b/src/SPIN/pair_spin_dipolar_cut.cpp @@ -65,17 +65,12 @@ lockfixnvespin(NULL) lattice_flag = 0; hbar = force->hplanck/MY_2PI; // eV/(rad.THz) - //mub = 5.78901e-5; // in eV/T - //mu_0 = 1.2566370614e-6; // in T.m/A mub = 9.274e-4; // in A.Ang^2 mu_0 = 785.15; // in eV/Ang/A^2 mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV.Ang^3 - //mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz - //printf("hbar: %g, mub2mu0hbinv: %g \n",hbar,mub2mu0hbinv); - } /* ---------------------------------------------------------------------- @@ -103,6 +98,9 @@ void PairSpinDipolarCut::settings(int narg, char **arg) if (strcmp(update->unit_style,"metal") != 0) error->all(FLERR,"Spin simulations require metal unit style"); + if (!atom->sp) + error->all(FLERR,"Pair/spin style requires atom attribute sp"); + cut_spin_long_global = force->numeric(FLERR,arg[0]); // reset cutoffs that have been explicitly set @@ -234,7 +232,7 @@ void PairSpinDipolarCut::compute(int eflag, int vflag) int i,j,ii,jj,inum,jnum,itype,jtype; double rinv,r2inv,r3inv,rsq; double evdwl,ecoul; - double xi[3],rij[3]; + double xi[3],rij[3],eij[3]; double spi[4],spj[4],fi[3],fmi[3]; double local_cut2; int *ilist,*jlist,*numneigh,**firstneigh; @@ -282,6 +280,7 @@ void PairSpinDipolarCut::compute(int eflag, int vflag) spj[2] = sp[j][2]; spj[3] = sp[j][3]; + evdwl = 0.0; fi[0] = fi[1] = fi[2] = 0.0; fmi[0] = fmi[1] = fmi[2] = 0.0; @@ -289,16 +288,19 @@ void PairSpinDipolarCut::compute(int eflag, int vflag) rij[1] = x[j][1] - xi[1]; rij[2] = x[j][2] - xi[2]; rsq = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; + rinv = 1.0/sqrt(rsq); + eij[0] = rij[0]*rinv; + eij[1] = rij[1]*rinv; + eij[2] = rij[2]*rinv; local_cut2 = cut_spin_long[itype][jtype]*cut_spin_long[itype][jtype]; if (rsq < local_cut2) { r2inv = 1.0/rsq; - rinv = sqrt(r2inv); r3inv = r2inv*rinv; - compute_dipolar(i,j,rij,fmi,spi,spj,r3inv); - if (lattice_flag) compute_dipolar_mech(i,j,rij,fmi,spi,spj,r2inv); + compute_dipolar(i,j,eij,fmi,spi,spj,r3inv); + if (lattice_flag) compute_dipolar_mech(i,j,eij,fi,spi,spj,r2inv); } // force accumulation @@ -318,13 +320,11 @@ void PairSpinDipolarCut::compute(int eflag, int vflag) if (eflag) { if (rsq <= local_cut2) { - evdwl -= spi[0]*fmi[0] + spi[1]*fmi[1] + - spi[2]*fmi[2]; + evdwl -= (spi[0]*fmi[0] + spi[1]*fmi[1] + spi[2]*fmi[2]); evdwl *= hbar; } } else evdwl = 0.0; - if (evflag) ev_tally_xyz(i,j,nlocal,newton_pair, evdwl,ecoul,fi[0],fi[1],fi[2],rij[0],rij[1],rij[2]); @@ -342,7 +342,7 @@ void PairSpinDipolarCut::compute_single_pair(int ii, double fmi[3]) { int i,j,jj,jnum,itype,jtype; double rsq,rinv,r2inv,r3inv; - double xi[3],rij[3]; + double xi[3],rij[3],eij[3]; double spi[4],spj[4]; double local_cut2; int *ilist,*jlist,*numneigh,**firstneigh; @@ -384,44 +384,41 @@ void PairSpinDipolarCut::compute_single_pair(int ii, double fmi[3]) rij[1] = x[j][1] - xi[1]; rij[2] = x[j][2] - xi[2]; rsq = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; + rinv = 1.0/sqrt(rsq); + eij[0] = rij[0]*rinv; + eij[1] = rij[1]*rinv; + eij[2] = rij[2]*rinv; local_cut2 = cut_spin_long[itype][jtype]*cut_spin_long[itype][jtype]; if (rsq < local_cut2) { r2inv = 1.0/rsq; - rinv = sqrt(r2inv); r3inv = r2inv*rinv; // compute dipolar interaction - compute_dipolar(i,j,rij,fmi,spi,spj,r3inv); + compute_dipolar(i,j,eij,fmi,spi,spj,r3inv); } } - - //printf("test fm: %g, %g, %g \n",fmi[0],fmi[1],fmi[2]); - - //fmi[0] *= mub2mu0hbinv; - //fmi[1] *= mub2mu0hbinv; - //fmi[2] *= mub2mu0hbinv; } /* ---------------------------------------------------------------------- compute dipolar interaction between spins i and j ------------------------------------------------------------------------- */ -void PairSpinDipolarCut::compute_dipolar(int i, int j, double rij[3], +void PairSpinDipolarCut::compute_dipolar(int i, int j, double eij[3], double fmi[3], double spi[4], double spj[4], double r3inv) { double sjdotr; - double gigjri3,pre; + double gigjiri3,pre; - sjdotr = spj[0]*rij[0] + spj[1]*rij[1] + spj[2]*rij[2]; - gigjri3 = (spi[3] * spj[3])*r3inv; - pre = mub2mu0hbinv * gigjri3 / 4.0 / MY_PI; + sjdotr = spj[0]*eij[0] + spj[1]*eij[1] + spj[2]*eij[2]; + gigjiri3 = (spi[3] * spj[3])*r3inv; + pre = mub2mu0hbinv * gigjiri3; - fmi[0] += pre * gigjri3 * (3.0 * sjdotr *rij[0] - spj[0]); - fmi[1] += pre * gigjri3 * (3.0 * sjdotr *rij[1] - spj[1]); - fmi[2] += pre * gigjri3 * (3.0 * sjdotr *rij[2] - spj[2]); + fmi[0] += pre * (3.0 * sjdotr *eij[0] - spj[0]); + fmi[1] += pre * (3.0 * sjdotr *eij[1] - spj[1]); + fmi[2] += pre * (3.0 * sjdotr *eij[2] - spj[2]); } /* ---------------------------------------------------------------------- @@ -429,25 +426,25 @@ void PairSpinDipolarCut::compute_dipolar(int i, int j, double rij[3], atom i and atom j ------------------------------------------------------------------------- */ -void PairSpinDipolarCut::compute_dipolar_mech(int i, int j, double rij[3], +void PairSpinDipolarCut::compute_dipolar_mech(int i, int j, double eij[3], double fi[3], double spi[3], double spj[3], double r2inv) { - double sdots,sidotr,sjdotr,b2,b3; + double sisj,sieij,sjeij; double gigjri4,bij,pre; - gigjri4 = (spi[3] * spj[3])/r2inv/r2inv; - sdots = spi[0]*spj[0] + spi[1]*spj[1] + spi[2]*spj[2]; - sidotr = spi[0]*rij[0] + spi[1]*rij[1] + spi[2]*rij[2]; - sjdotr = spj[0]*rij[0] + spj[1]*rij[1] + spj[2]*rij[2]; + gigjri4 = (spi[3] * spj[3])*r2inv*r2inv; + sisj = spi[0]*spj[0] + spi[1]*spj[1] + spi[2]*spj[2]; + sieij = spi[0]*eij[0] + spi[1]*eij[1] + spi[2]*eij[2]; + sjeij = spj[0]*eij[0] + spj[1]*eij[1] + spj[2]*eij[2]; + + bij = sisj - 5.0*sieij*sjeij; + pre = mub2mu0*gigjri4; - bij = sdots - 5.0 * sidotr*sjdotr; - pre = mub2mu0 * bij / 4.0 / MY_PI; - fi[0] += pre * (rij[0] * bij + (sjdotr*spi[0] + sidotr*spj[0])); - fi[1] += pre * (rij[1] * bij + (sjdotr*spi[1] + sidotr*spj[1])); - fi[2] += pre * (rij[2] * bij + (sjdotr*spi[2] + sidotr*spj[2])); + fi[0] += pre * (eij[0] * bij + (sjeij*spi[0] + sieij*spj[0])); + fi[1] += pre * (eij[1] * bij + (sjeij*spi[1] + sieij*spj[1])); + fi[2] += pre * (eij[2] * bij + (sjeij*spi[2] + sieij*spj[2])); } - /* ---------------------------------------------------------------------- allocate all arrays ------------------------------------------------------------------------- */ From d66a1ac054222c06cb95285f364127e6bb9ee815 Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 13 Nov 2018 17:03:32 -0700 Subject: [PATCH 018/311] Commit JT 111318 - corrections pair/spin/dipolar/long --- examples/SPIN/pppm_spin/in.dipole.pppm_dipole | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/SPIN/pppm_spin/in.dipole.pppm_dipole b/examples/SPIN/pppm_spin/in.dipole.pppm_dipole index 86ac5198b0..d029d0a97c 100644 --- a/examples/SPIN/pppm_spin/in.dipole.pppm_dipole +++ b/examples/SPIN/pppm_spin/in.dipole.pppm_dipole @@ -28,7 +28,7 @@ pair_coeff * * 0.0 0.0 #kspace_style pppm/disp 1.0e-4 #kspace_style pppm/dipole 1.0e-4 kspace_style ewald/dipole 1.0e-4 -#kspace_modify gewald 0.1 +#kspace_modify compute yes gewald 0.1 neighbor 0.3 bin neigh_modify every 2 delay 4 check yes From ddd5e61254d0f2b263ae0fe2bd30ab77470d66e8 Mon Sep 17 00:00:00 2001 From: julient31 Date: Wed, 14 Nov 2018 09:46:16 -0700 Subject: [PATCH 019/311] Commit JT 111418 - removed muk table (size kmax3d, mem fault) --- src/KSPACE/ewald_dipole.cpp | 91 +++++++++++++++-------------- src/KSPACE/ewald_dipole.h | 2 +- src/KSPACE/ewald_dipole_spin.cpp | 98 ++++++++++++++++---------------- 3 files changed, 95 insertions(+), 96 deletions(-) diff --git a/src/KSPACE/ewald_dipole.cpp b/src/KSPACE/ewald_dipole.cpp index 92470eb4a8..0cd5c95a9b 100644 --- a/src/KSPACE/ewald_dipole.cpp +++ b/src/KSPACE/ewald_dipole.cpp @@ -45,11 +45,10 @@ using namespace MathSpecial; /* ---------------------------------------------------------------------- */ EwaldDipole::EwaldDipole(LAMMPS *lmp, int narg, char **arg) : Ewald(lmp, narg, arg), - muk(NULL), tk(NULL), vc(NULL) + tk(NULL), vc(NULL) { ewaldflag = dipoleflag = 1; group_group_enable = 0; - muk = NULL; tk = NULL; vc = NULL; } @@ -60,7 +59,6 @@ EwaldDipole::EwaldDipole(LAMMPS *lmp, int narg, char **arg) : Ewald(lmp, narg, a EwaldDipole::~EwaldDipole() { - memory->destroy(muk); memory->destroy(tk); memory->destroy(vc); } @@ -326,14 +324,12 @@ void EwaldDipole::setup() memory->destroy(vc); memory->destroy3d_offset(cs,-kmax_created); memory->destroy3d_offset(sn,-kmax_created); - memory->destroy(muk); nmax = atom->nmax; memory->create(ek,nmax,3,"ewald_dipole:ek"); memory->create(tk,nmax,3,"ewald_dipole:tk"); memory->create(vc,kmax3d,6,"ewald_dipole:tk"); memory->create3d_offset(cs,-kmax,kmax,3,nmax,"ewald_dipole:cs"); memory->create3d_offset(sn,-kmax,kmax,3,nmax,"ewald_dipole:sn"); - memory->create(muk,kmax3d,nmax,"ewald_dipole:muk"); kmax_created = kmax; } @@ -393,14 +389,12 @@ void EwaldDipole::compute(int eflag, int vflag) memory->destroy(vc); memory->destroy3d_offset(cs,-kmax_created); memory->destroy3d_offset(sn,-kmax_created); - memory->destroy(muk); nmax = atom->nmax; memory->create(ek,nmax,3,"ewald_dipole:ek"); memory->create(tk,nmax,3,"ewald_dipole:tk"); memory->create(vc,kmax3d,6,"ewald_dipole:tk"); memory->create3d_offset(cs,-kmax,kmax,3,nmax,"ewald_dipole:cs"); memory->create3d_offset(sn,-kmax,kmax,3,nmax,"ewald_dipole:sn"); - memory->create(muk,kmax3d,nmax,"ewald_dipole:muk"); kmax_created = kmax; } @@ -425,6 +419,7 @@ void EwaldDipole::compute(int eflag, int vflag) double cypz,sypz,exprl,expim; double partial,partial2,partial_peratom; double vcik[6]; + double mudotk; for (i = 0; i < nlocal; i++) { ek[i][0] = ek[i][1] = ek[i][2] = 0.0; @@ -440,6 +435,9 @@ void EwaldDipole::compute(int eflag, int vflag) for (i = 0; i < nlocal; i++) { for (j = 0; j<6; j++) vcik[j] = 0.0; + + // re-evaluating mu dot k + mudotk = mu[i][0]*kx*unitk[0] + mu[i][1]*ky*unitk[1] + mu[i][2]*kz*unitk[2]; // calculating re and im of exp(i*k*ri) @@ -450,7 +448,7 @@ void EwaldDipole::compute(int eflag, int vflag) // taking im of struct_fact x exp(i*k*ri) (for force calc.) - partial = (muk[k][i])*(expim*sfacrl_all[k] - exprl*sfacim_all[k]); + partial = (mudotk)*(expim*sfacrl_all[k] - exprl*sfacim_all[k]); ek[i][0] += partial * eg[k][0]; ek[i][1] += partial * eg[k][1]; ek[i][2] += partial * eg[k][2]; @@ -475,10 +473,10 @@ void EwaldDipole::compute(int eflag, int vflag) // (for per-atom energy and virial calc.) if (evflag_atom) { - if (eflag_atom) eatom[i] += muk[k][i]*ug[k]*partial_peratom; + if (eflag_atom) eatom[i] += mudotk*ug[k]*partial_peratom; if (vflag_atom) for (j = 0; j < 6; j++) - vatom[i][j] += (ug[k]*muk[k][i]*vg[k][j]*partial_peratom - vcik[j]); + vatom[i][j] += (ug[k]*mudotk*vg[k][j]*partial_peratom - vcik[j]); } } } @@ -552,6 +550,7 @@ void EwaldDipole::eik_dot_r() double cstr1,sstr1,cstr2,sstr2,cstr3,sstr3,cstr4,sstr4; double sqk,clpm,slpm; double mux, muy, muz; + double mudotk; double **x = atom->x; double **mu = atom->mu; @@ -582,9 +581,9 @@ void EwaldDipole::eik_dot_r() sn[1][ic][i] = sin(unitk[ic]*x[i][ic]); cs[-1][ic][i] = cs[1][ic][i]; sn[-1][ic][i] = -sn[1][ic][i]; - muk[n][i] = (mu[i][ic]*unitk[ic]); - cstr1 += muk[n][i]*cs[1][ic][i]; - sstr1 += muk[n][i]*sn[1][ic][i]; + mudotk = (mu[i][ic]*unitk[ic]); + cstr1 += mudotk*cs[1][ic][i]; + sstr1 += mudotk*sn[1][ic][i]; } sfacrl[n] = cstr1; sfacim[n++] = sstr1; @@ -606,9 +605,9 @@ void EwaldDipole::eik_dot_r() cs[m-1][ic][i]*sn[1][ic][i]; cs[-m][ic][i] = cs[m][ic][i]; sn[-m][ic][i] = -sn[m][ic][i]; - muk[n][i] = (mu[i][ic]*m*unitk[ic]); - cstr1 += muk[n][i]*cs[m][ic][i]; - sstr1 += muk[n][i]*sn[m][ic][i]; + mudotk = (mu[i][ic]*m*unitk[ic]); + cstr1 += mudotk*cs[m][ic][i]; + sstr1 += mudotk*sn[m][ic][i]; } sfacrl[n] = cstr1; sfacim[n++] = sstr1; @@ -631,14 +630,14 @@ void EwaldDipole::eik_dot_r() muy = mu[i][1]; // dir 1: (k,l,0) - muk[n][i] = (mux*k*unitk[0] + muy*l*unitk[1]); - cstr1 += muk[n][i]*(cs[k][0][i]*cs[l][1][i]-sn[k][0][i]*sn[l][1][i]); - sstr1 += muk[n][i]*(sn[k][0][i]*cs[l][1][i]+cs[k][0][i]*sn[l][1][i]); + mudotk = (mux*k*unitk[0] + muy*l*unitk[1]); + cstr1 += mudotk*(cs[k][0][i]*cs[l][1][i]-sn[k][0][i]*sn[l][1][i]); + sstr1 += mudotk*(sn[k][0][i]*cs[l][1][i]+cs[k][0][i]*sn[l][1][i]); // dir 2: (k,-l,0) - muk[n+1][i] = (mux*k*unitk[0] - muy*l*unitk[1]); - cstr2 += muk[n+1][i]*(cs[k][0][i]*cs[l][1][i]+sn[k][0][i]*sn[l][1][i]); - sstr2 += muk[n+1][i]*(sn[k][0][i]*cs[l][1][i]-cs[k][0][i]*sn[l][1][i]); + mudotk = (mux*k*unitk[0] - muy*l*unitk[1]); + cstr2 += mudotk*(cs[k][0][i]*cs[l][1][i]+sn[k][0][i]*sn[l][1][i]); + sstr2 += mudotk*(sn[k][0][i]*cs[l][1][i]-cs[k][0][i]*sn[l][1][i]); } sfacrl[n] = cstr1; sfacim[n++] = sstr1; @@ -663,14 +662,14 @@ void EwaldDipole::eik_dot_r() muz = mu[i][2]; // dir 1: (0,l,m) - muk[n][i] = (muy*l*unitk[1] + muz*m*unitk[2]); - cstr1 += muk[n][i]*(cs[l][1][i]*cs[m][2][i] - sn[l][1][i]*sn[m][2][i]); - sstr1 += muk[n][i]*(sn[l][1][i]*cs[m][2][i] + cs[l][1][i]*sn[m][2][i]); + mudotk = (muy*l*unitk[1] + muz*m*unitk[2]); + cstr1 += mudotk*(cs[l][1][i]*cs[m][2][i] - sn[l][1][i]*sn[m][2][i]); + sstr1 += mudotk*(sn[l][1][i]*cs[m][2][i] + cs[l][1][i]*sn[m][2][i]); // dir 2: (0,l,-m) - muk[n+1][i] = (muy*l*unitk[1] - muz*m*unitk[2]); - cstr2 += muk[n+1][i]*(cs[l][1][i]*cs[m][2][i]+sn[l][1][i]*sn[m][2][i]); - sstr2 += muk[n+1][i]*(sn[l][1][i]*cs[m][2][i]-cs[l][1][i]*sn[m][2][i]); + mudotk = (muy*l*unitk[1] - muz*m*unitk[2]); + cstr2 += mudotk*(cs[l][1][i]*cs[m][2][i]+sn[l][1][i]*sn[m][2][i]); + sstr2 += mudotk*(sn[l][1][i]*cs[m][2][i]-cs[l][1][i]*sn[m][2][i]); } sfacrl[n] = cstr1; sfacim[n++] = sstr1; @@ -695,14 +694,14 @@ void EwaldDipole::eik_dot_r() muz = mu[i][2]; // dir 1: (k,0,m) - muk[n][i] = (mux*k*unitk[0] + muz*m*unitk[2]); - cstr1 += muk[n][i]*(cs[k][0][i]*cs[m][2][i]-sn[k][0][i]*sn[m][2][i]); - sstr1 += muk[n][i]*(sn[k][0][i]*cs[m][2][i]+cs[k][0][i]*sn[m][2][i]); + mudotk = (mux*k*unitk[0] + muz*m*unitk[2]); + cstr1 += mudotk*(cs[k][0][i]*cs[m][2][i]-sn[k][0][i]*sn[m][2][i]); + sstr1 += mudotk*(sn[k][0][i]*cs[m][2][i]+cs[k][0][i]*sn[m][2][i]); // dir 2: (k,0,-m) - muk[n+1][i] = (mux*k*unitk[0] - muz*m*unitk[2]); - cstr2 += muk[n+1][i]*(cs[k][0][i]*cs[m][2][i]+sn[k][0][i]*sn[m][2][i]); - sstr2 += muk[n+1][i]*(sn[k][0][i]*cs[m][2][i]-cs[k][0][i]*sn[m][2][i]); + mudotk = (mux*k*unitk[0] - muz*m*unitk[2]); + cstr2 += mudotk*(cs[k][0][i]*cs[m][2][i]+sn[k][0][i]*sn[m][2][i]); + sstr2 += mudotk*(sn[k][0][i]*cs[m][2][i]-cs[k][0][i]*sn[m][2][i]); } sfacrl[n] = cstr1; sfacim[n++] = sstr1; @@ -734,32 +733,32 @@ void EwaldDipole::eik_dot_r() muz = mu[i][2]; // dir 1: (k,l,m) - muk[n][i] = (mux*k*unitk[0] + muy*l*unitk[1] + muz*m*unitk[2]); + mudotk = (mux*k*unitk[0] + muy*l*unitk[1] + muz*m*unitk[2]); clpm = cs[l][1][i]*cs[m][2][i] - sn[l][1][i]*sn[m][2][i]; slpm = sn[l][1][i]*cs[m][2][i] + cs[l][1][i]*sn[m][2][i]; - cstr1 += muk[n][i]*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); - sstr1 += muk[n][i]*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); + cstr1 += mudotk*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); + sstr1 += mudotk*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); // dir 2: (k,-l,m) - muk[n+1][i] = (mux*k*unitk[0] - muy*l*unitk[1] + muz*m*unitk[2]); + mudotk = (mux*k*unitk[0] - muy*l*unitk[1] + muz*m*unitk[2]); clpm = cs[l][1][i]*cs[m][2][i] + sn[l][1][i]*sn[m][2][i]; slpm = -sn[l][1][i]*cs[m][2][i] + cs[l][1][i]*sn[m][2][i]; - cstr2 += muk[n+1][i]*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); - sstr2 += muk[n+1][i]*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); + cstr2 += mudotk*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); + sstr2 += mudotk*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); // dir 3: (k,l,-m) - muk[n+2][i] = (mux*k*unitk[0] + muy*l*unitk[1] - muz*m*unitk[2]); + mudotk = (mux*k*unitk[0] + muy*l*unitk[1] - muz*m*unitk[2]); clpm = cs[l][1][i]*cs[m][2][i] + sn[l][1][i]*sn[m][2][i]; slpm = sn[l][1][i]*cs[m][2][i] - cs[l][1][i]*sn[m][2][i]; - cstr3 += muk[n+2][i]*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); - sstr3 += muk[n+2][i]*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); + cstr3 += mudotk*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); + sstr3 += mudotk*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); // dir 4: (k,-l,-m) - muk[n+3][i] = (mux*k*unitk[0] - muy*l*unitk[1] - muz*m*unitk[2]); + mudotk = (mux*k*unitk[0] - muy*l*unitk[1] - muz*m*unitk[2]); clpm = cs[l][1][i]*cs[m][2][i] - sn[l][1][i]*sn[m][2][i]; slpm = -sn[l][1][i]*cs[m][2][i] - cs[l][1][i]*sn[m][2][i]; - cstr4 += muk[n+3][i]*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); - sstr4 += muk[n+3][i]*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); + cstr4 += mudotk*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); + sstr4 += mudotk*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); } sfacrl[n] = cstr1; sfacim[n++] = sstr1; diff --git a/src/KSPACE/ewald_dipole.h b/src/KSPACE/ewald_dipole.h index 0a57f86d00..77c0af11c2 100644 --- a/src/KSPACE/ewald_dipole.h +++ b/src/KSPACE/ewald_dipole.h @@ -34,7 +34,7 @@ class EwaldDipole : public Ewald { protected: double musum,musqsum,mu2; - double **muk; // mu_i dot k + //double **muk; // mu_i dot k double **tk; // field for torque double **vc; // virial per k diff --git a/src/KSPACE/ewald_dipole_spin.cpp b/src/KSPACE/ewald_dipole_spin.cpp index 4313f7b57b..e6cfbfbaa6 100644 --- a/src/KSPACE/ewald_dipole_spin.cpp +++ b/src/KSPACE/ewald_dipole_spin.cpp @@ -318,14 +318,12 @@ void EwaldDipoleSpin::setup() memory->destroy(vc); memory->destroy3d_offset(cs,-kmax_created); memory->destroy3d_offset(sn,-kmax_created); - memory->destroy(muk); nmax = atom->nmax; memory->create(ek,nmax,3,"ewald_dipole_spin:ek"); memory->create(tk,nmax,3,"ewald_dipole_spin:tk"); memory->create(vc,kmax3d,6,"ewald_dipole_spin:tk"); memory->create3d_offset(cs,-kmax,kmax,3,nmax,"ewald_dipole_spin:cs"); memory->create3d_offset(sn,-kmax,kmax,3,nmax,"ewald_dipole_spin:sn"); - memory->create(muk,kmax3d,nmax,"ewald_dipole_spin:muk"); kmax_created = kmax; } @@ -369,14 +367,12 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) memory->destroy(vc); memory->destroy3d_offset(cs,-kmax_created); memory->destroy3d_offset(sn,-kmax_created); - memory->destroy(muk); nmax = atom->nmax; memory->create(ek,nmax,3,"ewald_dipole_spin:ek"); memory->create(tk,nmax,3,"ewald_dipole_spin:tk"); memory->create(vc,kmax3d,6,"ewald_dipole_spin:tk"); memory->create3d_offset(cs,-kmax,kmax,3,nmax,"ewald_dipole_spin:cs"); memory->create3d_offset(sn,-kmax,kmax,3,nmax,"ewald_dipole_spin:sn"); - memory->create(muk,kmax3d,nmax,"ewald_dipole_spin:muk"); kmax_created = kmax; } @@ -401,6 +397,7 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) double cypz,sypz,exprl,expim; double partial,partial2,partial_peratom; double vcik[6]; + double mudotk; for (i = 0; i < nlocal; i++) { ek[i][0] = ek[i][1] = ek[i][2] = 0.0; @@ -415,8 +412,14 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) for (i = 0; i < nlocal; i++) { - vcik[0] = vcik[1] = vcik[2] = 0.0; - vcik[3] = vcik[4] = vcik[5] = 0.0; + for (j = 0; j<6; j++) vcik[j] = 0.0; + + // re-evaluating sp dot k + + spx = sp[i][0]*sp[i][3]; + spy = sp[i][1]*sp[i][3]; + spz = sp[i][2]*sp[i][3]; + mudotk = spx*kx*unitk[0] + spy*ky*unitk[1] + spz*kz*unitk[2]; // calculating re and im of exp(i*k*ri) @@ -427,7 +430,7 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) // taking im of struct_fact x exp(i*k*ri) (for force calc.) - partial = (muk[k][i])*(expim*sfacrl_all[k] - exprl*sfacim_all[k]); + partial = mudotk*(expim*sfacrl_all[k] - exprl*sfacim_all[k]); ek[i][0] += partial * eg[k][0]; ek[i][1] += partial * eg[k][1]; ek[i][2] += partial * eg[k][2]; @@ -442,10 +445,6 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) // total and per-atom virial correction - spx = sp[i][0]*sp[i][3]; - spy = sp[i][1]*sp[i][3]; - spz = sp[i][2]*sp[i][3]; - vc[k][0] += vcik[0] = -(partial_peratom * spx * eg[k][0]); vc[k][1] += vcik[1] = -(partial_peratom * spy * eg[k][1]); vc[k][2] += vcik[2] = -(partial_peratom * spz * eg[k][2]); @@ -458,10 +457,10 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) if (evflag_atom) { //partial_peratom = exprl*sfacrl_all[k] + expim*sfacim_all[k]; - if (eflag_atom) eatom[i] += muk[k][i]*ug[k]*partial_peratom; + if (eflag_atom) eatom[i] += mudotk*ug[k]*partial_peratom; if (vflag_atom) for (j = 0; j < 6; j++) - vatom[i][j] += (ug[k]*muk[k][i]*vg[k][j]*partial_peratom - vcik[j]); + vatom[i][j] += (ug[k]*mudotk*vg[k][j]*partial_peratom - vcik[j]); //vatom[i][j] += ug[k] * (vg[k][j]*partial_peratom - vcik[j]); } } @@ -540,6 +539,7 @@ void EwaldDipoleSpin::eik_dot_r() double cstr1,sstr1,cstr2,sstr2,cstr3,sstr3,cstr4,sstr4; double sqk,clpm,slpm; double spx, spy, spz, spi; + double mudotk; double **x = atom->x; double **sp = atom->sp; @@ -571,9 +571,9 @@ void EwaldDipoleSpin::eik_dot_r() cs[-1][ic][i] = cs[1][ic][i]; sn[-1][ic][i] = -sn[1][ic][i]; spi = sp[i][ic]*sp[i][3]; - muk[n][i] = (spi*unitk[ic]); - cstr1 += muk[n][i]*cs[1][ic][i]; - sstr1 += muk[n][i]*sn[1][ic][i]; + mudotk = (spi*unitk[ic]); + cstr1 += mudotk*cs[1][ic][i]; + sstr1 += mudotk*sn[1][ic][i]; } sfacrl[n] = cstr1; sfacim[n++] = sstr1; @@ -596,9 +596,9 @@ void EwaldDipoleSpin::eik_dot_r() cs[-m][ic][i] = cs[m][ic][i]; sn[-m][ic][i] = -sn[m][ic][i]; spi = sp[i][ic]*sp[i][3]; - muk[n][i] = (spi*m*unitk[ic]); - cstr1 += muk[n][i]*cs[m][ic][i]; - sstr1 += muk[n][i]*sn[m][ic][i]; + mudotk = (spi*m*unitk[ic]); + cstr1 += mudotk*cs[m][ic][i]; + sstr1 += mudotk*sn[m][ic][i]; } sfacrl[n] = cstr1; sfacim[n++] = sstr1; @@ -621,14 +621,14 @@ void EwaldDipoleSpin::eik_dot_r() spy = sp[i][1]*sp[i][3]; // dir 1: (k,l,0) - muk[n][i] = (spx*k*unitk[0] + spy*l*unitk[1]); - cstr1 += muk[n][i]*(cs[k][0][i]*cs[l][1][i]-sn[k][0][i]*sn[l][1][i]); - sstr1 += muk[n][i]*(sn[k][0][i]*cs[l][1][i]+cs[k][0][i]*sn[l][1][i]); + mudotk = (spx*k*unitk[0] + spy*l*unitk[1]); + cstr1 += mudotk*(cs[k][0][i]*cs[l][1][i]-sn[k][0][i]*sn[l][1][i]); + sstr1 += mudotk*(sn[k][0][i]*cs[l][1][i]+cs[k][0][i]*sn[l][1][i]); // dir 2: (k,-l,0) - muk[n+1][i] = (spx*k*unitk[0] - spy*l*unitk[1]); - cstr2 += muk[n+1][i]*(cs[k][0][i]*cs[l][1][i]+sn[k][0][i]*sn[l][1][i]); - sstr2 += muk[n+1][i]*(sn[k][0][i]*cs[l][1][i]-cs[k][0][i]*sn[l][1][i]); + mudotk = (spx*k*unitk[0] - spy*l*unitk[1]); + cstr2 += mudotk*(cs[k][0][i]*cs[l][1][i]+sn[k][0][i]*sn[l][1][i]); + sstr2 += mudotk*(sn[k][0][i]*cs[l][1][i]-cs[k][0][i]*sn[l][1][i]); } sfacrl[n] = cstr1; sfacim[n++] = sstr1; @@ -653,14 +653,14 @@ void EwaldDipoleSpin::eik_dot_r() spz = sp[i][2]*sp[i][3]; // dir 1: (0,l,m) - muk[n][i] = (spy*l*unitk[1] + spz*m*unitk[2]); - cstr1 += muk[n][i]*(cs[l][1][i]*cs[m][2][i] - sn[l][1][i]*sn[m][2][i]); - sstr1 += muk[n][i]*(sn[l][1][i]*cs[m][2][i] + cs[l][1][i]*sn[m][2][i]); + mudotk = (spy*l*unitk[1] + spz*m*unitk[2]); + cstr1 += mudotk*(cs[l][1][i]*cs[m][2][i] - sn[l][1][i]*sn[m][2][i]); + sstr1 += mudotk*(sn[l][1][i]*cs[m][2][i] + cs[l][1][i]*sn[m][2][i]); // dir 2: (0,l,-m) - muk[n+1][i] = (spy*l*unitk[1] - spz*m*unitk[2]); - cstr2 += muk[n+1][i]*(cs[l][1][i]*cs[m][2][i]+sn[l][1][i]*sn[m][2][i]); - sstr2 += muk[n+1][i]*(sn[l][1][i]*cs[m][2][i]-cs[l][1][i]*sn[m][2][i]); + mudotk = (spy*l*unitk[1] - spz*m*unitk[2]); + cstr2 += mudotk*(cs[l][1][i]*cs[m][2][i]+sn[l][1][i]*sn[m][2][i]); + sstr2 += mudotk*(sn[l][1][i]*cs[m][2][i]-cs[l][1][i]*sn[m][2][i]); } sfacrl[n] = cstr1; sfacim[n++] = sstr1; @@ -685,14 +685,14 @@ void EwaldDipoleSpin::eik_dot_r() spz = sp[i][2]*sp[i][3]; // dir 1: (k,0,m) - muk[n][i] = (spx*k*unitk[0] + spz*m*unitk[2]); - cstr1 += muk[n][i]*(cs[k][0][i]*cs[m][2][i]-sn[k][0][i]*sn[m][2][i]); - sstr1 += muk[n][i]*(sn[k][0][i]*cs[m][2][i]+cs[k][0][i]*sn[m][2][i]); + mudotk = (spx*k*unitk[0] + spz*m*unitk[2]); + cstr1 += mudotk*(cs[k][0][i]*cs[m][2][i]-sn[k][0][i]*sn[m][2][i]); + sstr1 += mudotk*(sn[k][0][i]*cs[m][2][i]+cs[k][0][i]*sn[m][2][i]); // dir 2: (k,0,-m) - muk[n+1][i] = (spx*k*unitk[0] - spz*m*unitk[2]); - cstr2 += muk[n+1][i]*(cs[k][0][i]*cs[m][2][i]+sn[k][0][i]*sn[m][2][i]); - sstr2 += muk[n+1][i]*(sn[k][0][i]*cs[m][2][i]-cs[k][0][i]*sn[m][2][i]); + mudotk = (spx*k*unitk[0] - spz*m*unitk[2]); + cstr2 += mudotk*(cs[k][0][i]*cs[m][2][i]+sn[k][0][i]*sn[m][2][i]); + sstr2 += mudotk*(sn[k][0][i]*cs[m][2][i]-cs[k][0][i]*sn[m][2][i]); } sfacrl[n] = cstr1; sfacim[n++] = sstr1; @@ -724,32 +724,32 @@ void EwaldDipoleSpin::eik_dot_r() spz = sp[i][2]*sp[i][3]; // dir 1: (k,l,m) - muk[n][i] = (spx*k*unitk[0] + spy*l*unitk[1] + spz*m*unitk[2]); + mudotk = (spx*k*unitk[0] + spy*l*unitk[1] + spz*m*unitk[2]); clpm = cs[l][1][i]*cs[m][2][i] - sn[l][1][i]*sn[m][2][i]; slpm = sn[l][1][i]*cs[m][2][i] + cs[l][1][i]*sn[m][2][i]; - cstr1 += muk[n][i]*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); - sstr1 += muk[n][i]*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); + cstr1 += mudotk*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); + sstr1 += mudotk*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); // dir 2: (k,-l,m) - muk[n+1][i] = (spx*k*unitk[0] - spy*l*unitk[1] + spz*m*unitk[2]); + mudotk = (spx*k*unitk[0] - spy*l*unitk[1] + spz*m*unitk[2]); clpm = cs[l][1][i]*cs[m][2][i] + sn[l][1][i]*sn[m][2][i]; slpm = -sn[l][1][i]*cs[m][2][i] + cs[l][1][i]*sn[m][2][i]; - cstr2 += muk[n+1][i]*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); - sstr2 += muk[n+1][i]*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); + cstr2 += mudotk*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); + sstr2 += mudotk*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); // dir 3: (k,l,-m) - muk[n+2][i] = (spx*k*unitk[0] + spy*l*unitk[1] - spz*m*unitk[2]); + mudotk = (spx*k*unitk[0] + spy*l*unitk[1] - spz*m*unitk[2]); clpm = cs[l][1][i]*cs[m][2][i] + sn[l][1][i]*sn[m][2][i]; slpm = sn[l][1][i]*cs[m][2][i] - cs[l][1][i]*sn[m][2][i]; - cstr3 += muk[n+2][i]*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); - sstr3 += muk[n+2][i]*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); + cstr3 += mudotk*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); + sstr3 += mudotk*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); // dir 4: (k,-l,-m) - muk[n+3][i] = (spx*k*unitk[0] - spy*l*unitk[1] - spz*m*unitk[2]); + mudotk = (spx*k*unitk[0] - spy*l*unitk[1] - spz*m*unitk[2]); clpm = cs[l][1][i]*cs[m][2][i] - sn[l][1][i]*sn[m][2][i]; slpm = -sn[l][1][i]*cs[m][2][i] - cs[l][1][i]*sn[m][2][i]; - cstr4 += muk[n+3][i]*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); - sstr4 += muk[n+3][i]*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); + cstr4 += mudotk*(cs[k][0][i]*clpm - sn[k][0][i]*slpm); + sstr4 += mudotk*(sn[k][0][i]*clpm + cs[k][0][i]*slpm); } sfacrl[n] = cstr1; sfacim[n++] = sstr1; From c59b3439c682430e063270b42fa58b51e2ec167d Mon Sep 17 00:00:00 2001 From: Cyril Falvo Date: Tue, 3 Jul 2018 16:07:15 +0200 Subject: [PATCH 020/311] changes the values of some parameters in REBO in accordance to the original Brenner paper --- potentials/CH.rebo | 37595 +++++++++++++++++++++++++++++++++++ src/MANYBODY/pair_rebo.cpp | 264 +- src/MANYBODY/pair_rebo.h | 1 + 3 files changed, 37855 insertions(+), 5 deletions(-) create mode 100644 potentials/CH.rebo diff --git a/potentials/CH.rebo b/potentials/CH.rebo new file mode 100644 index 0000000000..08b1b19dc2 --- /dev/null +++ b/potentials/CH.rebo @@ -0,0 +1,37595 @@ +# DATE: 2018-7-3 CONTRIBUTOR: Cyril Falvo, cyril.falvo@u-psud.fr +# REBO2 Brenner potential modified from CH.airebo +# Cite as D. W. Brenner, O. A. Shenderova, J. A. Harrison, S. J. Stuart, B. Ni, and S. B. Sinnott, +# "A second- generation reactive empirical bond order (rebo) potential energy expression for hydrocarbons.", +# J. Phys. Cond. Mat., 14:783, 2002. + +1.7 rcmin_CC +1.3 rcmin_CH +1.1 rcmin_HH +2.0 rcmax_CC +1.8 rcmax_CH +1.7 rcmax_HH +2.0 rcmaxp_CC +1.6 rcmaxp_CH +1.7 rcmaxp_HH +0.1 smin +2.0 Nmin +3.0 Nmax +3.2 NCmin +3.7 NCmax +0.3134602960833 Q_CC +0.340775728 Q_CH +0.370471487045 Q_HH +4.7465390606595 alpha_CC +4.10254983 alpha_CH +3.536298648 alpha_HH +10953.544162170 A_CC +149.94098723 A_CH +32.817355747 A_HH +12388.79197798 BIJc_CC1 +17.56740646509 BIJc_CC2 +30.71493208065 BIJc_CC3 +32.3551866587 BIJc_CH1 +0.0 BIJc_CH2 +0.0 BIJc_CH3 +29.632593 BIJc_HH1 +0.0 BIJc_HH2 +0.0 BIJc_HH3 +4.7204523127 Beta_CC1 +1.4332132499 Beta_CC2 +1.3826912506 Beta_CC3 +1.434458059249837 Beta_CH1 +0.0 Beta_CH2 +0.0 Beta_CH3 +1.71589217 Beta_HH1 +1.0 Beta_HH2 +1.0 Beta_HH3 +0.0 rho_CC +1.09 rho_CH +0.7415887 rho_HH +3.4 rcLJmin_CC +3.025 rcLJmin_CH +2.65 rcLJmin_HH +3.816370964 rcLJmax_CC +3.395447696 rcLJmax_CH +2.974524428 rcLJmax_HH +0.77 bLJmin_CC +0.75 bLJmin_CH +0.32 bLJmin_HH +0.81 bLJmax_CC +0.9 bLJmax_CH +0.42 bLJmax_HH +0.002843732471143 epsilon_CC +0.002064935027177 epsilon_CH +0.001499422575693 epsilon_HH +3.4 sigma_CC +3.025 sigma_CH +2.65 sigma_HH +0.3078851086 epsilonT_CCCC +0.1786600912 epsilonT_CCCH +0.1249753356 epsilonT_HCCH + +# gC1 and gC2 + +5 +-1.0 +-0.6666666667 +-0.5 +-0.3333333333 +1.0 + + 0.2816950000 + 1.0627430000 + 2.1363075000 + 2.5334145000 + 1.5544035000 + 0.3862485000 + 0.2827390000 + 1.0718770000 + 2.1681365000 + 2.5885710000 + 1.6019100000 + 0.4025160000 + 0.6900250000 + 5.4601600000 + 23.0108000000 + 54.9086400000 + 68.6124000000 + 34.7051520000 + 0.2718560918 + 0.4892740137 + -0.4328177539 + -0.5616817383 + 1.2708702246 + -0.0375008379 + + 0.2816950000 + 1.0627430000 + 2.1363075000 + 2.5334145000 + 1.5544035000 + 0.3862485000 + 0.2827390000 + 1.0718770000 + 2.1681365000 + 2.5885710000 + 1.6019100000 + 0.4025160000 + 0.6900250000 + 5.4601600000 + 23.0108000000 + 54.9086400000 + 68.6124000000 + 34.7051520000 + 0.3754514434 + 1.4072691309 + 2.2551320117 + 2.0288747461 + 1.4269207324 + 0.5063519355 + +# gH + +4 +-1.0 +-0.8333333333 +-0.5 +1.0 + + 270.4568000026 + 1549.6358000143 + 3781.7719000316 + 4582.1544000348 + 2721.4308000191 + 630.6336000042 + 16.9534406250 + -21.0823875000 + -102.4683000000 + -210.6432299999 + -229.8471299999 + -94.9946400000 + 19.0650249321 + 2.0177562840 + -2.5664219198 + 3.2913322346 + -2.6535615062 + 0.8376699753 + +# pCC + +4 +0.0 +4.0 +0.0 +4.0 + + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0986400000 + 0.0657600000 + 0.0000000000 + 0.0000000000 + 0.0657600000 + -0.0438400000 + -0.0025000000 + 0.0060000000 + -0.0045000000 + 0.0010000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2339100000 + -0.6402960000 + 0.4802220000 + -0.1067160000 + -0.1559400000 + 0.4268640000 + -0.3201480000 + 0.0711440000 + 0.4650000000 + -0.5985000000 + 0.2493750000 + -0.0332500000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.9074060000 + 2.4787080000 + -1.0327950000 + 0.1377060000 + 1.2716040000 + -1.6524720000 + 0.6885300000 + -0.0918040000 + -1.2900000000 + 1.1610000000 + -0.3386250000 + 0.0322500000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.8700000000 + -3.4830000000 + 1.0158750000 + -0.0967500000 + -2.5800000000 + 2.3220000000 + -0.6772500000 + 0.0645000000 + -0.1380150000 + 0.0000000000 + 0.5932650000 + -0.3955100000 + 0.3312360000 + 0.0000000000 + -1.5027480000 + 1.0018320000 + -0.2484270000 + 0.0000000000 + 1.1270610000 + -0.7513740000 + 0.0552060000 + 0.0000000000 + -0.2504580000 + 0.1669720000 + -0.3654800000 + 1.0205280000 + -0.7653960000 + 0.1700880000 + 1.0582800000 + -2.9471040000 + 2.2103280000 + -0.4911840000 + -0.7937100000 + 2.2103280000 + -1.6577460000 + 0.3683880000 + 0.1763800000 + -0.4911840000 + 0.3683880000 + -0.0818640000 + 0.6832080000 + -0.9109440000 + 0.3795600000 + -0.0506080000 + -2.0496240000 + 2.7328320000 + -1.1386800000 + 0.1518240000 + 1.5372180000 + -2.0496240000 + 0.8540100000 + -0.1138680000 + -0.3416040000 + 0.4554720000 + -0.1897800000 + 0.0253040000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.7452810000 + 0.0000000000 + -2.4934230000 + 1.6622820000 + -0.9937080000 + 0.0000000000 + 3.3245640000 + -2.2163760000 + 0.4140450000 + 0.0000000000 + -1.3852350000 + 0.9234900000 + -0.0552060000 + 0.0000000000 + 0.1846980000 + -0.1231320000 + 0.3434400000 + -1.0303200000 + 0.7727400000 + -0.1717200000 + -0.4579200000 + 1.3737600000 + -1.0303200000 + 0.2289600000 + 0.1908000000 + -0.5724000000 + 0.4293000000 + -0.0954000000 + -0.0254400000 + 0.0763200000 + -0.0572400000 + 0.0127200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + +# pCH + +4 +0.0 +4.0 +0.0 +4.0 + + 0.0000000000 + 0.0000000000 + 0.6280110000 + -0.4186740000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0300000000 + 0.0000000000 + -3.1001400000 + 2.0667600000 + -0.0200000000 + 0.0000000000 + 2.0667600000 + -1.3778400000 + -1.1595980000 + 3.2854440000 + -2.4640830000 + 0.5475740000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4966950000 + -3.6001800000 + 2.7001350000 + -0.6000300000 + -0.3311300000 + 2.4001200000 + -1.8000900000 + 0.4000200000 + -6.7698340000 + 8.6212080000 + -3.5921700000 + 0.4789560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 44.5208070000 + -58.1453640000 + 24.2272350000 + -3.2302980000 + -29.6805380000 + 38.7635760000 + -16.1514900000 + 2.1535320000 + 24.3142400000 + -21.8828160000 + 6.3824880000 + -0.6078560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -72.9427200000 + 65.6484480000 + -19.1474640000 + 1.8235680000 + 48.6284800000 + -43.7656320000 + 12.7649760000 + -1.2157120000 + -0.6502100000 + 0.0000000000 + -1.0558290000 + 0.7038860000 + 1.5845040000 + 0.0000000000 + 1.5611040000 + -1.0407360000 + -1.1883780000 + 0.0000000000 + -1.1708280000 + 0.7805520000 + 0.2640840000 + 0.0000000000 + 0.2601840000 + -0.1734560000 + 9.9867120000 + -26.3732760000 + 19.7799570000 + -4.3955460000 + -26.3537880000 + 68.3007840000 + -51.2255880000 + 11.3834640000 + 19.7653410000 + -51.2255880000 + 38.4191910000 + -8.5375980000 + -4.3922980000 + 11.3834640000 + -8.5375980000 + 1.8972440000 + -32.2817400000 + 43.0423200000 + -17.9343000000 + 2.3912400000 + 96.8452200000 + -129.1269600000 + 53.8029000000 + -7.1737200000 + -72.6339150000 + 96.8452200000 + -40.3521750000 + 5.3802900000 + 16.1408700000 + -21.5211600000 + 8.9671500000 + -1.1956200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -5.3172460000 + 0.0000000000 + 40.2945870000 + -26.8630580000 + 6.6795480000 + 0.0000000000 + -52.4957760000 + 34.9971840000 + -2.7831450000 + 0.0000000000 + 21.8732400000 + -14.5821600000 + 0.3710860000 + 0.0000000000 + -2.9164320000 + 1.9442880000 + -32.4571320000 + 97.3713960000 + -73.0285470000 + 16.2285660000 + 43.2761760000 + -129.8285280000 + 97.3713960000 + -21.6380880000 + -18.0317400000 + 54.0952200000 + -40.5714150000 + 9.0158700000 + 2.4042320000 + -7.2126960000 + 5.4095220000 + -1.2021160000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 24.6068000000 + 0.0000000000 + -73.8204000000 + 49.2136000000 + -22.1461200000 + 0.0000000000 + 66.4383600000 + -44.2922400000 + 6.4592850000 + 0.0000000000 + -19.3778550000 + 12.9185700000 + -0.6151700000 + 0.0000000000 + 1.8455100000 + -1.2303400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + +# piCC + +6 +0.0 +4.0 +0.0 +4.0 +0.0 +9.0 + + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1952414550000000 + -0.1301609700000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1301609700000000 + 0.0867739800000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1952414550000000 + -0.1301609700000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2460512699999999 + -0.1640341799999999 + 0.0000000000000000 + 0.0000000000000000 + -0.1640341799999999 + 0.1093561200000001 + 0.0000000000000000 + 0.0000000000000000 + -0.1301609700000000 + 0.0867739800000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1640341799999999 + 0.1093561200000001 + 0.0000000000000000 + 0.0000000000000000 + 0.1093561200000001 + -0.0729040800000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1859428215000000 + 0.6024559355999999 + -0.4518419517000000 + 0.1004093226000000 + 0.1239618810000000 + -0.4016372904000000 + 0.3012279677999999 + -0.0669395484000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1859428215000000 + 0.6024559355999999 + -0.4518419517000000 + 0.1004093226000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3234498210000000 + 0.9186318863999997 + -0.6208630397999997 + 0.1076980643999998 + 0.2156332139999999 + -0.6124212575999999 + 0.4139086932000001 + -0.0717987096000001 + 0.1239618810000000 + -0.4016372904000000 + 0.3012279677999999 + -0.0669395484000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2156332139999999 + -0.6124212575999999 + 0.4139086932000001 + -0.0717987096000001 + -0.1437554760000001 + 0.4082808384000002 + -0.2759391288000001 + 0.0478658064000000 + 0.1388410212000000 + -0.1785098844000000 + 0.0743791185000000 + -0.0099172158000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4016472399000000 + 0.5355296532000000 + -0.2231373555000000 + 0.0297516474000000 + 0.2677648266000000 + -0.3570197688000000 + 0.1487582370000000 + -0.0198344316000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4016472399000000 + 0.5355296532000000 + -0.2231373555000000 + 0.0297516474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 4.5450778986000007 + -5.3987902596000001 + 2.0451633165000001 + -0.2545255422000000 + -3.0300519324000001 + 3.5991935063999998 + -1.3634422110000000 + 0.1696836948000000 + 0.2677648266000000 + -0.3570197688000000 + 0.1487582370000000 + -0.0198344316000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0300519324000001 + 3.5991935063999998 + -1.3634422110000000 + 0.1696836948000000 + 2.0200346216000002 + -2.3994623376000002 + 0.9089614740000000 + -0.1131224632000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1170126711000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0520056316000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1170126711000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0520056316000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1170126711000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0520056316000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1170126711000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0520056316000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1170126711000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0520056316000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1170126711000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0520056316000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1101605377500000 + -0.0734403585000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1081921266000000 + 0.0721280844000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0811440949500000 + -0.0540960633000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0180320211000000 + 0.0120213474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.5308662927499996 + 1.0205775285000001 + 0.0000000000000000 + 0.0000000000000000 + 4.2922496105999990 + -2.8614997404000002 + 0.0000000000000000 + 0.0000000000000000 + -3.1601247079499992 + 2.1067498053000002 + 0.0000000000000000 + 0.0000000000000000 + 0.6759999350999999 + -0.4506666234000001 + 0.0000000000000000 + 0.0000000000000000 + 1.0205775285000001 + -0.6803850190000000 + 0.0000000000000000 + 0.0000000000000000 + -2.8614997404000002 + 1.9076664936000003 + 0.0000000000000000 + 0.0000000000000000 + 2.1067498053000002 + -1.4044998702000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4506666234000001 + 0.3004444156000000 + -0.3953362375000001 + 1.0369354002000000 + -0.7777015501500000 + 0.1728225667000000 + 0.8000527127999999 + -2.0066802120000000 + 1.5050101590000000 + -0.3344467020000000 + -0.6000395345999999 + 1.5050101590000000 + -1.1287576192500000 + 0.2508350265000000 + 0.1333421188000000 + -0.3344467020000000 + 0.2508350265000000 + -0.0557411170000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.3103306184999992 + -9.0968349185999990 + 6.7318116889499997 + -1.4555961530999999 + -8.5868161127999993 + 23.8242035591999937 + -17.5957091693999956 + 3.7890715931999996 + 6.3613620845999996 + -17.6319026693999987 + 13.0195943770499980 + -2.8024286948999997 + -1.3786360187999998 + 3.8132005931999995 + -2.8144931948999998 + 0.6052619321999999 + -2.2068870789999999 + 6.0645566123999997 + -4.4878744592999995 + 0.9703974353999998 + 5.7245440751999999 + -15.8828023728000005 + 11.7304727795999995 + -2.5260477287999996 + -4.2409080563999995 + 11.7546017795999980 + -8.6797295846999987 + 1.8682857965999997 + 0.9190906791999999 + -2.5421337287999997 + 1.8763287965999997 + -0.4035079547999999 + 1.4805008319000001 + -1.9673896319999999 + 0.8197456799999999 + -0.1092994240000000 + -3.5413013375999998 + 4.7217351167999997 + -1.9673896319999997 + 0.2623186176000000 + 2.6559760031999997 + -3.5413013375999993 + 1.4755422239999998 + -0.1967389632000000 + -0.5902168896000000 + 0.7869558527999999 + -0.3278982720000000 + 0.0437197696000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -19.2295206957000033 + 24.4584372960000032 + -9.9185720400000008 + 1.2982590720000002 + 48.8229586128000079 + -61.7340105504000007 + 24.9051738960000009 + -3.2480382528000007 + -36.6172189596000024 + 46.3005079128000006 + -18.6788804219999989 + 2.4360286896000005 + 8.1371597688000001 + -10.2890017584000013 + 4.1508623160000004 + -0.5413397088000000 + 12.8196804638000010 + -16.3056248640000021 + 6.6123813600000005 + -0.8655060480000000 + -32.5486390752000005 + 41.1560070336000052 + -16.6034492640000018 + 2.1653588352000002 + 24.4114793064000004 + -30.8670052752000004 + 12.4525869480000004 + -1.6240191264000001 + -5.4247731792000007 + 6.8593345056000006 + -2.7672415440000000 + 0.3608931392000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.2914572557999993 + -3.1368362039999997 + 0.9712843094999998 + -0.0996618390000000 + -7.9931075507999978 + 7.5284068895999994 + -2.3310823427999994 + 0.2391884136000000 + 5.9948306630999983 + -5.6463051671999986 + 1.7483117570999998 + -0.1793913102000000 + -1.3321845917999997 + 1.2547344815999997 + -0.3885137237999999 + 0.0398647356000000 + -2.1943048371999994 + 2.0912241359999992 + -0.6475228729999998 + 0.0664412260000000 + 5.3287383671999988 + -5.0189379263999987 + 1.5540548951999997 + -0.1594589424000000 + -3.9965537753999993 + 3.7642034447999992 + -1.1655411713999997 + 0.1195942068000000 + 0.8881230611999998 + -0.8364896543999999 + 0.2590091492000000 + -0.0265764904000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 51.2174335277999973 + -34.7252003400000007 + 7.7793458265000002 + -0.5762478390000000 + -125.8865034036000026 + 85.2980168160000147 + -19.1108755836000022 + 1.4156204136000001 + 98.0036935526999997 + -66.4204326120000133 + 14.8837136877000020 + -1.1024973102000000 + -23.3736279005999990 + 15.8476161360000010 + -3.5521839306000000 + 0.2631247356000000 + -34.1449556852000029 + 23.1501335600000040 + -5.1862305510000013 + 0.3841652260000000 + 83.9243356024000065 + -56.8653445440000098 + 12.7405837224000020 + -0.9437469424000001 + -65.3357957018000093 + 44.2802884080000041 + -9.9224757918000019 + 0.7349982068000001 + 15.5824186004000005 + -10.5650774240000018 + 2.3681226204000003 + -0.1754164904000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 18.8699219402999923 + -9.8715457799999946 + 1.7195853929999991 + -0.0996618419999999 + -45.3977355935999753 + 23.6917098719999899 + -4.1270049431999976 + 0.2391884207999999 + 34.0686926951999851 + -17.7687824039999924 + 3.0952537073999986 + -0.1793913155999999 + -7.5798832655999968 + 3.9486183119999980 + -0.6878341571999995 + 0.0398647368000000 + -12.5799479601999984 + 6.5810305199999988 + -1.1463902619999997 + 0.0664412280000000 + 30.2651570623999930 + -15.7944732479999974 + 2.7513366287999990 + -0.1594589472000000 + -22.7124617967999924 + 11.8458549359999967 + -2.0635024715999997 + 0.1195942104000000 + 5.0532555103999988 + -2.6324122079999994 + 0.4585561047999999 + -0.0265764912000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0187635363000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1549554239999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1366075680000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0394199040000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0125090242000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1033036160000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0910717120000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0262799360000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0187635363000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1549554239999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1366075680000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0394199040000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0125090242000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1033036160000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0910717120000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0262799360000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0187635363000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1549554239999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1366075680000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0394199040000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0125090242000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1033036160000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0910717120000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0262799360000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.0321606498499998 + 4.6881070998999999 + 0.0000000000000000 + 0.0000000000000000 + 9.1366163297999989 + -6.0910775531999999 + 0.0000000000000000 + 0.0000000000000000 + -3.8069234707500001 + 2.5379489805000000 + 0.0000000000000000 + 0.0000000000000000 + 0.5075897961000000 + -0.3383931974000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 24.1765592188500023 + -16.1177061459000015 + 0.0000000000000000 + 0.0000000000000000 + -30.8078686818000023 + 20.5385791212000015 + 0.0000000000000000 + 0.0000000000000000 + 12.6594244507500004 + -8.4396163005000009 + 0.0000000000000000 + 0.0000000000000000 + -1.6721732601000001 + 1.1147821734000001 + 0.0000000000000000 + 0.0000000000000000 + -16.1177061459000015 + 10.7451374305999998 + 0.0000000000000000 + 0.0000000000000000 + 20.5385791212000015 + -13.6923860807999986 + 0.0000000000000000 + 0.0000000000000000 + -8.4396163005000009 + 5.6264108669999997 + 0.0000000000000000 + 0.0000000000000000 + 1.1147821734000001 + -0.7431881155999999 + 1.7964189073000001 + -9.9371338973999990 + 7.4528504230499992 + -1.6561889829000001 + -2.4750911663999995 + 13.2495118631999986 + -9.9371338973999990 + 2.2082519771999998 + 1.0312879859999999 + -5.5206299429999994 + 4.1404724572499996 + -0.9201049905000001 + -0.1375050648000000 + 0.7360839924000000 + -0.5520629942999999 + 0.1226806654000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -44.4148786822999924 + 125.9369562125999806 + -94.4527171594499890 + 20.9894927020999980 + 57.1409193383999963 + -161.7845013575999928 + 121.3383760181999946 + -26.9640835595999988 + -23.5724663909999990 + 66.7014588990000021 + -50.0260941742499909 + 11.1169098164999998 + 3.1219955187999995 + -8.8305278531999996 + 6.6228958898999997 + -1.4717546421999999 + 30.4859639041999984 + -86.0604782867999916 + 64.5453587151000079 + -14.3434130477999986 + -39.2202895175999942 + 110.5595581391999929 + -82.9196686044000018 + 18.4265930231999988 + 16.1842872989999975 + -45.5939825580000004 + 34.1954869185000021 + -7.5989970929999995 + -2.1439049731999997 + 6.0371976743999998 + -4.5278982558000003 + 1.0061996123999999 + 41.0697356006999996 + -54.7530359903999937 + 22.8137649960000033 + -3.0418353327999998 + -52.4181452760000042 + 69.8908603680000056 + -29.1211918200000000 + 3.8828255760000001 + 21.8408938650000017 + -29.1211918200000000 + 12.1338299250000006 + -1.6178439899999999 + -2.9121191820000001 + 3.8828255760000001 + -1.6178439899999999 + 0.2157125320000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -58.7754249068999997 + 72.4365406656000062 + -30.1818919440000002 + 4.0242522591999998 + 71.7688591056000007 + -88.1435659967999925 + 36.7264858320000016 + -4.8968647776000003 + -29.9036912940000015 + 36.7264858320000016 + -15.3027024300000001 + 2.0403603240000003 + 3.9871588392000001 + -4.8968647776000003 + 2.0403603240000003 + -0.2720480432000001 + 34.4529747782000015 + -41.9835046752000025 + 17.4931269480000005 + -2.3324169264000001 + -41.7636522936000034 + 50.6527056287999997 + -21.1052940120000017 + 2.8140392016000000 + 17.4015217890000002 + -21.1052940120000017 + 8.7938725049999995 + -1.1725163339999998 + -2.3202029051999999 + 2.8140392016000000 + -1.1725163339999998 + 0.1563355111999999 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -22.5910445969999856 + 16.9389155015999862 + -5.2449352712999966 + 0.5381739305999996 + 29.8518848603999807 + -22.5852206687999839 + 6.9932470283999955 + -0.7175652407999995 + -12.4382853584999911 + 9.4105086119999921 + -2.9138529284999981 + 0.2989855169999998 + 1.6584380477999987 + -1.2547344815999988 + 0.3885137237999997 + -0.0398647356000000 + 15.0606963979999851 + -11.2926103343999884 + 3.4966235141999964 + -0.3587826203999996 + -19.9012565735999800 + 15.0568137791999828 + -4.6621646855999952 + 0.4783768271999995 + 8.2921902389999929 + -6.2736724079999924 + 1.9425686189999980 + -0.1993236779999998 + -1.1056253651999990 + 0.8364896543999990 + -0.2590091491999997 + 0.0265764904000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 132.0402867341999809 + -94.3691021639999832 + 21.4156989368999930 + -1.5863480693999996 + -133.2574315811999668 + 96.4624295519999748 + -21.9475812491999918 + 1.6257467591999992 + 44.7574818254999798 + -32.8519189799999864 + 7.4931545204999956 + -0.5550484829999996 + -5.0106466433999977 + 3.7277438639999976 + -0.8522720693999993 + 0.0631312643999999 + -88.0268578227999967 + 62.9127347760000006 + -14.2771326246000001 + 1.0575653796000002 + 88.8382877207999968 + -64.3082863680000116 + 14.6317208328000028 + -1.0838311728000001 + -29.8383212170000043 + 21.9012793200000040 + -4.9954363470000018 + 0.3700323220000001 + 3.3404310956000010 + -2.4851625760000013 + 0.5681813796000004 + -0.0420875096000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -104.3657106932998886 + 53.3063472119999489 + -9.2857611221999896 + 0.5381739467999993 + 139.1294649887998673 + -71.0751296159999271 + 12.3810148295999856 + -0.7175652623999991 + -58.0317834119999389 + 29.6146373399999696 + -5.1587561789999938 + 0.2989855259999996 + 7.7430087215999910 + -3.9486183119999954 + 0.6878341571999992 + -0.0398647367999999 + 69.5771404621999920 + -35.5375648079999991 + 6.1905074148000008 + -0.3587826312000001 + -92.7529766592000016 + 47.3834197440000082 + -8.2540098864000022 + 0.4783768416000003 + 38.6878556080000138 + -19.7430915600000105 + 3.4391707860000027 + -0.1993236840000002 + -5.1620058144000041 + 2.6324122080000025 + -0.4585561048000005 + 0.0265764912000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5694553116999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.4011244799999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.4783081999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2025453600000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.7129702077999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.2674163199999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9855388000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1350302400000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5694553116999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.4011244799999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.4783081999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2025453600000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.7129702077999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.2674163199999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9855388000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1350302400000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5694553116999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.4011244799999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.4783081999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2025453600000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.7129702077999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.2674163199999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9855388000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1350302400000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1796984025000000 + 0.1197989350000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.5390952075000000 + -0.3593968050000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3593968050000000 + 0.2395978700000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0598994675000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.7523780425000002 + -15.7744311360000005 + 11.8308233519999995 + -2.6290718559999999 + -6.7580597519999994 + 16.2193434048000000 + -12.1645075536000000 + 2.7032239007999999 + 1.9711007609999998 + -4.7306418263999994 + 3.5479813698000000 + -0.7884403043999999 + -0.1877238820000000 + 0.4505373168000000 + -0.3379029876000000 + 0.0750895528000000 + -7.0045704549999996 + 16.5234516479999982 + -12.3925887360000004 + 2.7539086080000001 + 6.7580597519999994 + -16.2193434048000000 + 12.1645075536000000 + -2.7032239007999999 + -1.9711007609999998 + 4.7306418263999994 + -3.5479813698000000 + 0.7884403043999999 + 0.1877238820000000 + -0.4505373168000000 + 0.3379029876000000 + -0.0750895528000000 + 1.7561266437000007 + -2.3348907144000020 + 0.9728711310000014 + -0.1297161508000003 + -0.0000000000000012 + 0.0000000000000029 + -0.0000000000000020 + 0.0000000000000004 + 0.0000000000000005 + -0.0000000000000012 + 0.0000000000000008 + -0.0000000000000002 + -0.0000000000000001 + 0.0000000000000002 + -0.0000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -46.0039935710999970 + 61.0691501591999995 + -25.4454792330000004 + 3.3927305643999999 + 36.4935226607999965 + -48.6580302144000001 + 20.2741792560000000 + -2.7032239007999999 + -10.6439441093999996 + 14.1919254792000000 + -5.9133022830000002 + 0.7884403043999999 + 1.0137089628000000 + -1.3516119503999999 + 0.5631716460000000 + -0.0750895528000000 + 44.1854485514000146 + -58.7342594448000099 + 24.4726081020000059 + -3.2630144136000014 + -36.4935226608000107 + 48.6580302144000143 + -20.2741792560000071 + 2.7032239008000012 + 10.6439441094000031 + -14.1919254792000071 + 5.9133022830000037 + -0.7884403044000006 + -1.0137089628000004 + 1.3516119504000006 + -0.5631716460000002 + 0.0750895528000001 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1101605377500000 + -0.0734403585000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.5308662927499996 + 1.0205775285000001 + 0.0000000000000000 + 0.0000000000000000 + 1.0205775285000001 + -0.6803850190000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1081921266000000 + 0.0721280844000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 4.2922496105999990 + -2.8614997404000002 + 0.0000000000000000 + 0.0000000000000000 + -2.8614997404000002 + 1.9076664936000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0811440949500000 + -0.0540960633000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.1601247079499992 + 2.1067498053000002 + 0.0000000000000000 + 0.0000000000000000 + 2.1067498053000002 + -1.4044998702000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0180320211000000 + 0.0120213474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6759999350999999 + -0.4506666234000001 + 0.0000000000000000 + 0.0000000000000000 + -0.4506666234000001 + 0.3004444156000000 + -0.3953362375000001 + 1.0369354002000000 + -0.7777015501500000 + 0.1728225667000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.3103306184999992 + -9.0968349185999990 + 6.7318116889499997 + -1.4555961531000001 + -2.2068870789999999 + 6.0645566123999997 + -4.4878744593000004 + 0.9703974354000000 + 0.8000527127999999 + -2.0066802120000000 + 1.5050101590000000 + -0.3344467020000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.5868161127999993 + 23.8242035591999972 + -17.5957091693999992 + 3.7890715932000001 + 5.7245440751999999 + -15.8828023728000005 + 11.7304727795999995 + -2.5260477288000001 + -0.6000395345999999 + 1.5050101590000000 + -1.1287576192500000 + 0.2508350265000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.3613620845999996 + -17.6319026693999987 + 13.0195943770500016 + -2.8024286949000006 + -4.2409080564000003 + 11.7546017796000015 + -8.6797295847000004 + 1.8682857965999999 + 0.1333421188000000 + -0.3344467020000000 + 0.2508350265000000 + -0.0557411170000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.3786360188000000 + 3.8132005932000004 + -2.8144931949000003 + 0.6052619322000001 + 0.9190906792000001 + -2.5421337288000001 + 1.8763287966000000 + -0.4035079547999999 + 1.4805008319000001 + -1.9673896319999999 + 0.8197456799999999 + -0.1092994240000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -19.2295206957000033 + 24.4584372960000032 + -9.9185720400000008 + 1.2982590720000002 + 12.8196804638000010 + -16.3056248640000021 + 6.6123813600000005 + -0.8655060480000000 + -3.5413013375999998 + 4.7217351167999997 + -1.9673896319999997 + 0.2623186176000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 48.8229586128000079 + -61.7340105504000007 + 24.9051738960000009 + -3.2480382528000007 + -32.5486390752000005 + 41.1560070336000052 + -16.6034492640000018 + 2.1653588352000002 + 2.6559760031999997 + -3.5413013375999993 + 1.4755422239999998 + -0.1967389632000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -36.6172189596000024 + 46.3005079128000006 + -18.6788804219999989 + 2.4360286896000005 + 24.4114793064000004 + -30.8670052752000004 + 12.4525869480000004 + -1.6240191264000001 + -0.5902168896000000 + 0.7869558527999999 + -0.3278982720000000 + 0.0437197696000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 8.1371597688000001 + -10.2890017584000013 + 4.1508623160000004 + -0.5413397088000000 + -5.4247731792000007 + 6.8593345056000006 + -2.7672415440000000 + 0.3608931392000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.2914572557999993 + -3.1368362039999997 + 0.9712843094999998 + -0.0996618390000000 + -2.1943048371999994 + 2.0912241359999992 + -0.6475228729999998 + 0.0664412260000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.9931075507999978 + 7.5284068895999994 + -2.3310823427999994 + 0.2391884136000000 + 5.3287383671999988 + -5.0189379263999987 + 1.5540548951999997 + -0.1594589424000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.9948306630999983 + -5.6463051671999986 + 1.7483117570999998 + -0.1793913102000000 + -3.9965537753999993 + 3.7642034447999992 + -1.1655411713999997 + 0.1195942068000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.3321845917999997 + 1.2547344815999997 + -0.3885137237999999 + 0.0398647356000000 + 0.8881230611999998 + -0.8364896543999999 + 0.2590091492000000 + -0.0265764904000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 51.2174335277999973 + -34.7252003400000007 + 7.7793458265000002 + -0.5762478390000000 + -34.1449556852000029 + 23.1501335600000040 + -5.1862305510000013 + 0.3841652260000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -125.8865034036000026 + 85.2980168160000147 + -19.1108755836000022 + 1.4156204136000001 + 83.9243356024000065 + -56.8653445440000098 + 12.7405837224000020 + -0.9437469424000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 98.0036935526999997 + -66.4204326120000133 + 14.8837136877000020 + -1.1024973102000000 + -65.3357957018000093 + 44.2802884080000041 + -9.9224757918000019 + 0.7349982068000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -23.3736279005999990 + 15.8476161360000010 + -3.5521839306000000 + 0.2631247356000000 + 15.5824186004000005 + -10.5650774240000018 + 2.3681226204000003 + -0.1754164904000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 18.8699219402999923 + -9.8715457799999946 + 1.7195853929999991 + -0.0996618419999999 + -12.5799479601999984 + 6.5810305199999988 + -1.1463902619999997 + 0.0664412280000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -45.3977355935999753 + 23.6917098719999899 + -4.1270049431999976 + 0.2391884207999999 + 30.2651570623999930 + -15.7944732479999974 + 2.7513366287999990 + -0.1594589472000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 34.0686926951999851 + -17.7687824039999924 + 3.0952537073999986 + -0.1793913155999999 + -22.7124617967999924 + 11.8458549359999967 + -2.0635024715999997 + 0.1195942104000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5798832655999968 + 3.9486183119999980 + -0.6878341571999995 + 0.0398647368000000 + 5.0532555103999988 + -2.6324122079999994 + 0.4585561047999999 + -0.0265764912000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0187635363000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0125090242000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1549554239999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1033036160000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1366075680000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0910717120000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0394199040000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0262799360000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0187635363000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0125090242000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1549554239999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1033036160000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1366075680000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0910717120000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0394199040000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0262799360000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0187635363000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0125090242000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1549554239999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1033036160000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1366075680000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0910717120000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0394199040000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0262799360000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 4.2228846869999987 + -2.8152564579999999 + 0.0000000000000000 + 0.0000000000000000 + -11.0322309923999988 + 7.3548206615999998 + 0.0000000000000000 + 0.0000000000000000 + 8.1954232442999988 + -5.4636154962000010 + 0.0000000000000000 + 0.0000000000000000 + -1.7862051654000000 + 1.1908034436000001 + 0.0000000000000000 + 0.0000000000000000 + -11.0322309923999988 + 7.3548206615999998 + 0.0000000000000000 + 0.0000000000000000 + 29.4624929663999993 + -19.6416619776000019 + 0.0000000000000000 + 0.0000000000000000 + -21.8606197247999994 + 14.5737464832000008 + 0.0000000000000000 + 0.0000000000000000 + 4.7529154943999998 + -3.1686103296000003 + 0.0000000000000000 + 0.0000000000000000 + 8.1954232442999988 + -5.4636154962000010 + 0.0000000000000000 + 0.0000000000000000 + -21.8606197247999994 + 14.5737464832000008 + 0.0000000000000000 + 0.0000000000000000 + 16.2182772935999999 + -10.8121848624000023 + 0.0000000000000000 + 0.0000000000000000 + -3.5253116208000002 + 2.3502077472000003 + 0.0000000000000000 + 0.0000000000000000 + -1.7862051654000000 + 1.1908034436000001 + 0.0000000000000000 + 0.0000000000000000 + 4.7529154943999998 + -3.1686103296000003 + 0.0000000000000000 + 0.0000000000000000 + -3.5253116208000002 + 2.3502077472000003 + 0.0000000000000000 + 0.0000000000000000 + 0.7659025824000001 + -0.5106017216000001 + -6.4539249160000001 + 18.7708587479999949 + -13.9570580609999997 + 3.0477524580000002 + 17.1048773232000002 + -49.5868839695999952 + 36.8269049772000017 + -8.0223086616000003 + -12.7236579923999980 + 36.8751629771999987 + -27.3839287329000030 + 5.9642314962000009 + 2.7808128872000002 + -8.0544806615999995 + 5.9803174962000005 + -1.3020514436000004 + 17.1048773232000002 + -49.5868839695999952 + 36.8269049772000017 + -8.0223086616000003 + -45.7490319551999889 + 132.4958518656000024 + -98.2821148992000104 + 21.3561259776000014 + 33.9967739664000064 + -98.4268888992000086 + 73.0028361744000023 + -15.8595944832000022 + -7.4148386592000008 + 21.4526419776000026 + -15.9078524832000010 + 3.4543543296000006 + -12.7236579923999997 + 36.8751629771999987 + -27.3839287329000030 + 5.9642314962000009 + 33.9967739663999993 + -98.4268888992000086 + 73.0028361744000165 + -15.8595944832000004 + -25.2613304747999976 + 73.1114166744000045 + -54.2205646307999984 + 11.7765708624000016 + 5.5086289944000004 + -15.9319814832000013 + 11.8127643624000012 + -2.5645157472000006 + 2.7808128872000002 + -8.0544806615999995 + 5.9803174962000005 + -1.3020514436000004 + -7.4148386592000008 + 21.4526419776000026 + -15.9078524832000010 + 3.4543543296000006 + 5.5086289944000004 + -15.9319814832000013 + 11.8127643624000012 + -2.5645157472000006 + -1.2008064432000003 + 3.4704403296000006 + -2.5725587472000004 + 0.5582257216000001 + 39.8894121000000013 + -50.7093326999999903 + 20.7656306250000000 + -2.7364611499999998 + -107.5650035999999830 + 136.5474131999999940 + -55.8049815000000038 + 7.3437953999999994 + 80.6737526999999801 + -102.4105598999999955 + 41.8537361250000046 + -5.5078465500000000 + -17.9275005999999983 + 22.7579021999999966 + -9.3008302500000006 + 1.2239659000000001 + -107.5650035999999972 + 136.5474131999999940 + -55.8049815000000038 + 7.3437953999999994 + 288.7152523199999905 + -365.7688358399999515 + 149.1343596000000105 + -19.5939748799999975 + -216.5364392399999645 + 274.3266268799999921 + -111.8507697000000007 + 14.6954811599999999 + 48.1192087200000032 + -60.9614726399999967 + 24.8557266000000006 + -3.2656624800000000 + 80.6737526999999943 + -102.4105598999999955 + 41.8537361250000046 + -5.5078465500000000 + -216.5364392400000213 + 274.3266268799999921 + -111.8507697000000007 + 14.6954811599999999 + 162.4023294299999804 + -205.7449701599999798 + 83.8880772750000006 + -11.0216108699999999 + -36.0894065399999988 + 45.7211044800000010 + -18.6417949500000013 + 2.4492468600000001 + -17.9275005999999983 + 22.7579021999999966 + -9.3008302500000006 + 1.2239659000000001 + 48.1192087200000032 + -60.9614726399999967 + 24.8557266000000006 + -3.2656624800000000 + -36.0894065399999988 + 45.7211044800000010 + -18.6417949500000013 + 2.4492468600000001 + 8.0198681199999999 + -10.1602454400000006 + 4.1426211000000004 + -0.5442770800000001 + -11.9141455994999941 + 11.5908520439999947 + -3.4999733044999992 + 0.3484810289999999 + 31.2390159023999878 + -30.3275138687999863 + 9.1769633783999964 + -0.9160839407999998 + -23.4292619267999918 + 22.7456354015999942 + -6.8827225337999982 + 0.6870629555999997 + 5.2065026503999983 + -5.0545856447999986 + 1.5294938963999996 + -0.1526806568000000 + 31.2390159023999843 + -30.3275138687999899 + 9.1769633783999964 + -0.9160839407999998 + -81.3681242063999548 + 78.8087587967999639 + -23.8895779823999916 + 2.3899521887999993 + 61.0260931547999803 + -59.1065690975999729 + 17.9171834867999920 + -1.7924641415999993 + -13.5613540343999954 + 13.1347931327999969 + -3.9815963303999986 + 0.3983253647999999 + -23.4292619267999882 + 22.7456354015999906 + -6.8827225337999982 + 0.6870629555999997 + 61.0260931547999803 + -59.1065690975999729 + 17.9171834867999955 + -1.7924641415999993 + -45.7695698660999852 + 44.3299268231999832 + -13.4378876150999957 + 1.3443481061999996 + 10.1710155257999979 + -9.8510948495999990 + 2.9861972477999990 + -0.2987440236000000 + 5.2065026503999983 + -5.0545856447999986 + 1.5294938963999996 + -0.1526806568000000 + -13.5613540343999954 + 13.1347931327999969 + -3.9815963303999986 + 0.3983253647999999 + 10.1710155257999979 + -9.8510948495999990 + 2.9861972477999990 + -0.2987440236000000 + -2.2602256723999994 + 2.1891321887999995 + -0.6635993883999999 + 0.0663875608000000 + -135.7455229915000245 + 92.5172767399999998 + -20.7448023915000022 + 1.5366520290000003 + 370.6031730607999748 + -252.4316724479999721 + 56.5982632008000053 + -4.1924639408000006 + -282.7374677955999687 + 192.5863143359999867 + -43.1827734005999986 + 3.1987239556000002 + 64.9572541768000065 + -44.2469854080000005 + 9.9224278667999997 + -0.7349946568000001 + 370.6031730607999748 + -252.4316724480000289 + 56.5982632008000053 + -4.1924639408000006 + -1001.6410292688001391 + 681.9045713280002019 + -152.8863145488000157 + 11.3249121888000026 + 765.5860359516002518 + -521.2161084960000608 + 116.8669639116000099 + -8.6568121415999997 + -176.5103475448000268 + 120.1758818880000064 + -26.9492044248000013 + 1.9962373648000000 + -282.7374677955999687 + 192.5863143359999867 + -43.1827734005999986 + 3.1987239556000002 + 765.5860359516000244 + -521.2161084960000608 + 116.8669639116000099 + -8.6568121415999997 + -584.9559749637001005 + 398.2528413720000344 + -89.3018939337000006 + 6.6149551062000000 + 134.7753046586000210 + -91.7631914159999980 + 20.5789413186000019 + -1.5243660235999998 + 64.9572541768000065 + -44.2469854080000005 + 9.9224278667999997 + -0.7349946568000001 + -176.5103475448000268 + 120.1758818880000064 + -26.9492044248000013 + 1.9962373648000000 + 134.7753046586000210 + -91.7631914159999980 + 20.5789413186000019 + -1.5243660235999998 + -31.0134205908000027 + 21.1168336479999965 + -4.7362260707999999 + 0.3508315608000000 + -49.4848264664999746 + 26.2405983299999868 + -4.5854146104999991 + 0.2657560369999998 + 133.8931721307999396 + -70.8746726159999696 + 12.3806633795999943 + -0.7175439623999997 + -100.4470670980999500 + 53.1560044619999772 + -9.2854975346999957 + 0.5381579717999998 + 22.3336540217999939 + -11.8124454359999937 + 2.0634438965999995 + -0.1195906604000000 + 133.8931721307999396 + -70.8746726159999696 + 12.3806633795999943 + -0.7175439623999997 + -357.7270527887998810 + 189.0525821759999303 + -33.0151960655999872 + 1.9134562463999991 + 268.3768535915999109 + -141.7894366319999335 + 24.7613970491999922 + -1.4350921847999993 + -59.6755514647999803 + 31.5087636959999884 + -5.5025326775999988 + 0.3189093743999999 + -100.4470670980999643 + 53.1560044619999914 + -9.2854975346999957 + 0.5381579717999998 + 268.3768535915999109 + -141.7894366319999335 + 24.7613970491999922 + -1.4350921847999993 + -201.3438131936999298 + 106.3420774739999501 + -18.5710477868999924 + 1.0763191385999997 + 44.7702575985999829 + -23.6315727719999913 + 4.1268995081999993 + -0.2391820307999999 + 22.3336540217999939 + -11.8124454359999937 + 2.0634438965999995 + -0.1195906604000000 + -59.6755514647999803 + 31.5087636959999884 + -5.5025326775999988 + 0.3189093743999999 + 44.7702575985999829 + -23.6315727719999913 + 4.1268995081999993 + -0.2391820307999999 + -9.9549879107999981 + 5.2514606159999992 + -0.9170887795999998 + 0.0531515624000000 + 0.7858877775000047 + -0.0838432500000021 + 0.0001730625000003 + -0.0000088750000000 + -1.8374687780000103 + 0.2012238000000045 + -0.0004153500000007 + 0.0000213000000000 + 1.3509135835000063 + -0.1509178500000028 + 0.0003115125000004 + -0.0000159750000000 + -0.2881194630000009 + 0.0335373000000004 + -0.0000692250000000 + 0.0000035500000000 + -1.8374687780000101 + 0.2012238000000045 + -0.0004153500000007 + 0.0000213000000000 + 4.2207095280000200 + -0.4829371200000090 + 0.0009968400000013 + -0.0000511200000001 + -3.0839681460000103 + 0.3622028400000043 + -0.0007476300000006 + 0.0000383400000000 + 0.6490755880000003 + -0.0804895199999999 + 0.0001661399999999 + -0.0000085200000000 + 1.3509135835000063 + -0.1509178500000028 + 0.0003115125000004 + -0.0000159750000000 + -3.0839681460000108 + 0.3622028400000043 + -0.0007476300000006 + 0.0000383400000000 + 2.2518031095000022 + -0.2716521300000003 + 0.0005607224999999 + -0.0000287550000000 + -0.4732126909999979 + 0.0603671399999987 + -0.0001246049999998 + 0.0000063900000000 + -0.2881194630000009 + 0.0335373000000004 + -0.0000692250000000 + 0.0000035500000000 + 0.6490755880000003 + -0.0804895199999999 + 0.0001661399999999 + -0.0000085200000000 + -0.4732126909999979 + 0.0603671399999987 + -0.0001246049999998 + 0.0000063900000000 + 0.0991165979999985 + -0.0134149199999992 + 0.0000276899999999 + -0.0000014200000000 + 0.7871924025000062 + -0.0842160000000026 + 0.0001996875000003 + -0.0000088750000000 + -1.8405998780000177 + 0.2021184000000074 + -0.0004792500000010 + 0.0000213000000000 + 1.3532619085000168 + -0.1515888000000072 + 0.0003594375000010 + -0.0000159750000000 + -0.2886413130000054 + 0.0336864000000023 + -0.0000798750000003 + 0.0000035500000000 + -1.8405998780000132 + 0.2021184000000054 + -0.0004792500000007 + 0.0000213000000000 + 4.2282241680000388 + -0.4850841600000161 + 0.0011502000000022 + -0.0000511200000001 + -3.0896041260000380 + 0.3638131200000160 + -0.0008626500000022 + 0.0000383400000001 + 0.6503280280000123 + -0.0808473600000053 + 0.0001917000000008 + -0.0000085200000000 + 1.3532619085000075 + -0.1515888000000030 + 0.0003594375000004 + -0.0000159750000000 + -3.0896041260000238 + 0.3638131200000099 + -0.0008626500000014 + 0.0000383400000001 + 2.2560300945000247 + -0.2728598400000106 + 0.0006469875000015 + -0.0000287550000001 + -0.4741520210000086 + 0.0606355200000037 + -0.0001437750000005 + 0.0000063900000000 + -0.2886413130000007 + 0.0336864000000003 + -0.0000798750000000 + 0.0000035500000000 + 0.6503280280000028 + -0.0808473600000012 + 0.0001917000000002 + -0.0000085200000000 + -0.4741520210000038 + 0.0606355200000017 + -0.0001437750000003 + 0.0000063900000000 + 0.0993253380000016 + -0.0134745600000007 + 0.0000319500000001 + -0.0000014200000000 + -46.8607035974999846 + 17.1221579999999953 + -2.0678986874999996 + 0.0827161250000000 + 112.5143505220000009 + -41.0931791999999874 + 4.9629568499999985 + -0.1985187000000000 + -84.4129508914999889 + 30.8198843999999923 + -3.7222176374999982 + 0.1488890250000000 + 18.7705170869999911 + -6.8488631999999967 + 0.8271594749999995 + -0.0330864500000000 + 112.5143505219999867 + -41.0931791999999945 + 4.9629568499999994 + -0.1985187000000000 + -270.2236567919999288 + 98.6236300799999697 + -11.9110964399999943 + 0.4764448799999998 + 202.7493065939999042 + -73.9677225599999701 + 8.9333223299999958 + -0.3573336599999999 + -45.0916521319999788 + 16.4372716799999949 + -1.9851827399999988 + 0.0794074800000000 + -84.4129508914999889 + 30.8198843999999923 + -3.7222176374999991 + 0.1488890250000000 + 202.7493065939999610 + -73.9677225599999844 + 8.9333223299999975 + -0.3573336599999999 + -152.1231529454999531 + 55.4757919199999776 + -6.6999917474999968 + 0.2680002449999999 + 33.8323330989999818 + -12.3279537599999927 + 1.4888870549999993 + -0.0595556100000000 + 18.7705170869999982 + -6.8488631999999985 + 0.8271594750000000 + -0.0330864500000000 + -45.0916521319999930 + 16.4372716799999985 + -1.9851827399999995 + 0.0794074800000000 + 33.8323330989999960 + -12.3279537599999962 + 1.4888870549999995 + -0.0595556100000000 + -7.5243380219999976 + 2.7395452799999989 + -0.3308637899999998 + 0.0132345800000000 + 0.0000000000000000 + 0.0000000000000000 + -32.6217780473999994 + 21.7478520315999972 + 0.0000000000000000 + 0.0000000000000000 + 42.1036102331999942 + -28.0690734888000009 + 0.0000000000000000 + 0.0000000000000000 + -17.3069209304999987 + 11.5379472869999997 + 0.0000000000000000 + 0.0000000000000000 + 2.2865894573999999 + -1.5243929716000000 + 0.0000000000000000 + 0.0000000000000000 + 80.7563291291999974 + -53.8375527528000006 + 0.0000000000000000 + 0.0000000000000000 + -103.7670803135999904 + 69.1780535423999936 + 0.0000000000000000 + 0.0000000000000000 + 42.5275334640000011 + -28.3516889759999984 + 0.0000000000000000 + 0.0000000000000000 + -5.6073377951999994 + 3.7382251968000002 + 0.0000000000000000 + 0.0000000000000000 + -60.5672468468999909 + 40.3781645645999987 + 0.0000000000000000 + 0.0000000000000000 + 77.8253102351999928 + -51.8835401567999952 + 0.0000000000000000 + 0.0000000000000000 + -31.8956500979999973 + 21.2637667320000006 + 0.0000000000000000 + 0.0000000000000000 + 4.2055033464000005 + -2.8036688975999997 + 0.0000000000000000 + 0.0000000000000000 + 13.4593881881999984 + -8.9729254587999989 + 0.0000000000000000 + 0.0000000000000000 + -17.2945133855999984 + 11.5296755904000001 + 0.0000000000000000 + 0.0000000000000000 + 7.0879222439999996 + -4.7252814960000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9345562992000001 + 0.6230375328000000 + 44.2256531812000020 + -132.2389900727999930 + 99.1792425546000089 + -22.0398316788000024 + -57.1087958436000065 + 170.7439982111999939 + -128.0579986584000096 + 28.4573330352000013 + 23.4803316015000050 + -70.1983325880000137 + 52.6487494410000068 + -11.6997220980000023 + -3.1027108802000005 + 9.2757776784000008 + -6.9568332588000015 + 1.5459629464000002 + -138.5907206816000041 + 397.2227929391999623 + -297.9170947044000286 + 66.2037988232000032 + 178.4133265968000046 + -511.2056480831998897 + 383.4042360623999457 + -85.2009413472000006 + -73.3938860820000087 + 210.1673533679999650 + -157.6255150260000164 + 35.0278922279999989 + 9.7018514776000000 + -27.7703137824000024 + 20.8277353368000036 + -4.6283856304000004 + 105.4788598592000142 + -301.6030611396000722 + 226.2022958546999973 + -50.2671768566000026 + -135.7846198235999964 + 388.1433357647999856 + -291.1075018236000460 + 64.6905559607999976 + 55.8681749264999965 + -159.6001399019999667 + 119.7001049265000034 + -26.6000233170000016 + -7.3860899902000003 + 21.0910186536000026 + -15.8182639902000002 + 3.5151697756000004 + -23.2462882296000011 + 66.5586023016000041 + -49.9189517261999995 + 11.0931003835999995 + 29.9256277248000018 + -85.6571172480000058 + 64.2428379360000008 + -14.2761862080000022 + -12.3115115519999989 + 35.2179655199999999 + -26.4134741400000017 + 5.8696609200000003 + 1.6275348736000002 + -4.6537287359999997 + 3.4902965520000002 + -0.7756214560000001 + -50.0478950811999894 + 64.5349948775999991 + -26.8895811989999984 + 3.5852774931999991 + 69.5343934043999923 + -89.6509583711999767 + 37.3545659879999903 + -4.9806087983999987 + -28.9726639184999897 + 37.3545659879999903 + -15.5644024949999960 + 2.0752536659999996 + 3.8630218557999996 + -4.9806087983999987 + 2.0752536659999996 + -0.2767004887999999 + 183.1902844943999753 + -243.4800953951999531 + 101.4500397479999805 + -13.5266719663999986 + -250.0931194127999788 + 331.8487242623999691 + -138.2703017759999966 + 18.4360402367999967 + 104.2054664220000006 + -138.2703017759999966 + 57.6126257399999915 + -7.6816834319999989 + -13.8940621895999961 + 18.4360402367999967 + -7.6816834319999989 + 1.0242244575999997 + -151.8031018499999618 + 201.5326388519999909 + -83.9719328549999915 + 11.1962577139999979 + 206.0974818899999832 + -273.2155583040000124 + 113.8398159599999957 + -15.1786421279999963 + -85.8739507874999930 + 113.8398159599999815 + -47.4332566499999970 + 6.3244342199999988 + 11.4498601049999991 + -15.1786421279999963 + 6.3244342199999988 + -0.8432578959999998 + 35.4079979087999988 + -46.8875383343999914 + 19.5364743059999952 + -2.6048632407999994 + -47.9516943455999893 + 63.4177924127999972 + -26.4240801719999965 + 3.5232106895999991 + 19.9798726439999967 + -26.4240801719999965 + 11.0100334049999979 + -1.4680044539999997 + -2.6639830191999998 + 3.5232106895999991 + -1.4680044539999997 + 0.1957339271999999 + 42.6442853668999575 + -40.0053803687999618 + 11.9066088158999897 + -1.1642323157999992 + -56.7584044271999559 + 53.3405071583999586 + -15.8754784211999898 + 1.5523097543999986 + 23.6493351779999799 + -22.2252113159999816 + 6.6147826754999954 + -0.6467957309999994 + -3.1532446903999967 + 2.9633615087999976 + -0.8819710233999991 + 0.0862394307999999 + -120.2324494991998876 + 109.5640452863999030 + -32.7718093751999717 + 3.2246967023999971 + 159.8769737135998525 + -146.0853937151998707 + 43.6957458335999576 + -4.2995956031999967 + -66.6154057139999480 + 60.8689140479999509 + -18.2065607639999811 + 1.7914981679999984 + 8.8820540951999920 + -8.1158552063999920 + 2.4275414351999975 + -0.2388664223999998 + 89.9558741243999265 + -82.1730339647999273 + 24.5788570313999770 + -2.4185225267999977 + -119.6268492851999099 + 109.5640452863999030 + -32.7718093751999717 + 3.2246967023999975 + 49.8445205354999530 + -45.6516855359999596 + 13.6549205729999876 + -1.3436236259999990 + -6.6459360713999933 + 6.0868914047999940 + -1.8206560763999984 + 0.1791498167999998 + -19.8930995831999802 + 18.2606742143999838 + -5.4619682291999947 + 0.5374494503999995 + 26.4589082855999749 + -24.3475656191999761 + 7.2826243055999935 + -0.7165992671999993 + -11.0245451189999901 + 10.1448190079999918 + -3.0344267939999972 + 0.2985830279999998 + 1.4699393491999986 + -1.3526425343999988 + 0.4045902391999996 + -0.0398110704000000 + -184.9754434746999721 + 126.2750600519999864 + -28.5549122366999981 + 2.1151786841999995 + 189.3135113616000069 + -129.2160267359999750 + 29.2643043155999933 + -2.1677262455999999 + -64.5253657339999904 + 44.0523311399999926 + -9.9912321314999986 + 0.7400912689999999 + 7.3273586311999983 + -5.0036281519999983 + 1.1364106841999997 + -0.0841785692000000 + 549.7599647855997773 + -378.5554258559998857 + 85.6643485175999899 + -6.3455072976000002 + -561.1830773327999395 + 387.2884078079999881 + -87.7923953568000002 + 6.5031403967999992 + 190.7604902219999872 + -132.0071299200000112 + 29.9734807320000023 + -2.2202578319999997 + -21.6066616295999978 + 14.9909026559999994 + -3.4092032976000000 + 0.2525335776000000 + -412.5384365891999892 + 283.9165693919999285 + -64.2482613882000066 + 4.7591304731999999 + 421.1681889995999200 + -290.4663058559999627 + 65.8442965176000001 + -4.8773552975999994 + -143.1874014164999949 + 99.0053474399999942 + -22.4801105490000026 + 1.6651933740000002 + 16.2206007222000004 + -11.2431769920000004 + 2.5569024732000005 + -0.1894001832000000 + 91.7723027975999912 + -63.0925709760000046 + 14.2773914196000007 + -1.0575845496000000 + -93.7177668888000142 + 64.5480679679999980 + -14.6320658928000018 + 1.0838567328000002 + 31.8714375370000056 + -22.0011883200000042 + 4.9955801220000016 + -0.3700429720000001 + -3.6115132716000011 + 2.4984837760000009 + -0.5682005496000003 + 0.0420889296000000 + 130.2289587202998575 + -70.6241013659999197 + 12.3802240670999844 + -0.7175173373999989 + -173.8642248983998115 + 94.1654684879999024 + -16.5069654227999791 + 0.9566897831999988 + 72.5249910409999359 + -39.2356118699999570 + 6.8779022594999919 + -0.3986207429999995 + -9.6772489387999912 + 5.2314149159999950 + -0.9170536345999990 + 0.0531494323999999 + -395.8553984243995956 + 212.1429210479998346 + -37.1411466587999683 + 2.1525807671999981 + 528.3530069471995603 + -282.8572280639997985 + 49.5215288783999625 + -2.8701076895999975 + -220.3917782279998789 + 117.8571783599999208 + -20.6339703659999856 + 1.1958782039999993 + 29.4073208303999856 + -15.7142904479999928 + 2.7511960487999989 + -0.1594504272000000 + 296.6730858182997963 + -159.1071907859998760 + 27.8558599940999869 + -1.6144355753999990 + -395.9838742103997902 + 212.1429210479998915 + -37.1411466587999826 + 2.1525807671999990 + 165.1767999209999402 + -88.3928837699999690 + 15.4754777744999963 + -0.8969086529999999 + -22.0398861227999987 + 11.7857178359999999 + -2.0633970366000001 + 0.1195878204000000 + -65.8302577373999753 + 35.3571535079999890 + -6.1901911097999989 + 0.3587634612000000 + 87.8715804911999783 + -47.1428713439999996 + 8.2535881464000003 + -0.4783512816000001 + -36.6539405380000005 + 19.6428630600000034 + -3.4389950610000017 + 0.1993130340000001 + 4.8908171384000028 + -2.6190484080000020 + 0.4585326748000005 + -0.0265750712000000 + -5.5045576885001175 + 0.4527535500000591 + -0.0009345375000100 + 0.0000479250000006 + 7.1137969800001573 + -0.6036714000000785 + 0.0012460500000132 + -0.0000639000000007 + -2.8825180750000672 + 0.2515297500000336 + -0.0005191875000056 + 0.0000266250000003 + 0.3770856100000094 + -0.0335373000000047 + 0.0000692250000008 + -0.0000035500000000 + 11.3420452620003189 + -1.0866085200001598 + 0.0022428900000267 + -0.0001150200000015 + -14.5769179680004157 + 1.4488113600002079 + -0.0029905200000346 + 0.0001533600000019 + 5.8290238200001756 + -0.6036714000000871 + 0.0012460500000144 + -0.0000639000000008 + -0.7554527760000237 + 0.0804895200000117 + -0.0001661400000019 + 0.0000085200000001 + -8.7249969465002888 + 0.8149563900001421 + -0.0016821675000234 + 0.0000862650000013 + 11.2135694760003659 + -1.0866085200001803 + 0.0022428900000296 + -0.0001150200000016 + -4.4888016150001500 + 0.4527535500000732 + -0.0009345375000119 + 0.0000479250000006 + 0.5821940820000193 + -0.0603671400000094 + 0.0001246050000015 + -0.0000063900000001 + 2.0359828770000856 + -0.1811014200000415 + 0.0003738150000067 + -0.0000191700000004 + -2.6167403280001054 + 0.2414685600000509 + -0.0004984200000082 + 0.0000255600000004 + 1.0495264700000413 + -0.1006119000000198 + 0.0002076750000032 + -0.0000106500000002 + -0.1363117960000050 + 0.0134149200000024 + -0.0000276900000004 + 0.0000014200000000 + -5.5116026635001862 + 0.4547664000000811 + -0.0010783125000117 + 0.0000479250000006 + 7.1231902800002480 + -0.6063552000001071 + 0.0014377500000154 + -0.0000639000000007 + -2.8864319500001070 + 0.2526480000000459 + -0.0005990625000066 + 0.0000266250000003 + 0.3776074600000149 + -0.0336864000000064 + 0.0000798750000009 + -0.0000035500000000 + 11.3589532020005066 + -1.0914393600002181 + 0.0025879500000312 + -0.0001150200000015 + -14.5994618880006595 + 1.4552524800002826 + -0.0034506000000403 + 0.0001533600000019 + 5.8384171200002770 + -0.6063552000001183 + 0.0014377500000168 + -0.0000639000000008 + -0.7567052160000375 + 0.0808473600000159 + -0.0001917000000022 + 0.0000085200000001 + -8.7376779015004544 + 0.8185795200001927 + -0.0019409625000273 + 0.0000862650000013 + 11.2304774160005767 + -1.0914393600002443 + 0.0025879500000344 + -0.0001150200000016 + -4.4958465900002356 + 0.4547664000000990 + -0.0010783125000139 + 0.0000479250000006 + 0.5831334120000303 + -0.0606355200000127 + 0.0001437750000018 + -0.0000063900000001 + 2.0388008670001336 + -0.1819065600000558 + 0.0004313250000078 + -0.0000191700000004 + -2.6204976480001649 + 0.2425420800000685 + -0.0005751000000095 + 0.0000255600000004 + 1.0510920200000642 + -0.1010592000000266 + 0.0002396250000037 + -0.0000106500000002 + -0.1365205360000077 + 0.0134745600000031 + -0.0000319500000004 + 0.0000014200000000 + 251.7870357364997460 + -92.4596531999998916 + 11.1666529124999840 + -0.4466670749999995 + -335.9416609199996060 + 123.2795375999998271 + -14.8888705499999823 + 0.5955560999999993 + 140.0572560499998076 + -51.3664739999999256 + 6.2036960624999917 + -0.2481483749999996 + -18.6815509399999762 + 6.8488631999999914 + -0.8271594749999989 + 0.0330864500000000 + -606.1577789579991986 + 221.9031676799996831 + -26.7999669899999589 + 1.0720009799999985 + 808.7561809919991447 + -295.8708902399996532 + 35.7332893199999475 + -1.4293346399999980 + -337.2264340799995921 + 123.2795375999998413 + -14.8888705499999787 + 0.5955560999999991 + 44.9852749439999400 + -16.4372716799999807 + 1.9851827399999973 + -0.0794074799999999 + 454.3998712184992428 + -166.4273757599997339 + 20.0999752424999656 + -0.8040007349999987 + -606.2862547439991658 + 221.9031676799996831 + -26.7999669899999589 + 1.0720009799999983 + 252.8027918099996327 + -92.4596531999998632 + 11.1666529124999840 + -0.4466670749999994 + -33.7233517079999530 + 12.3279537599999820 + -1.4888870549999980 + 0.0595556099999999 + -100.8806544929998097 + 36.9838612799999282 + -4.4666611649999908 + 0.1786668299999996 + 134.6054428319997385 + -49.3118150399999138 + 5.9555482199999883 + -0.2382224399999995 + -56.1263831799999053 + 20.5465895999999653 + -2.4814784249999957 + 0.0992593499999998 + 7.4871428239999887 + -2.7395452799999958 + 0.3308637899999995 + -0.0132345800000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3353203725000000 + 0.2235469150000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.8047688940000000 + -0.5365125960000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6035766705000000 + 0.4023844470000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1341281490000000 + -0.0894187660000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 56.1396151825000089 + -135.0033327360000044 + 101.2524995520000033 + -22.5005554560000007 + -49.5027190080000068 + 118.8065256192000163 + -89.1048942144000051 + 19.8010876031999992 + 14.4382930439999981 + -34.6519033056000012 + 25.9889274792000009 + -5.7753172175999996 + -1.3750755280000000 + 3.3001812671999997 + -2.4751359503999999 + 0.5500302112000000 + -125.9664885020000042 + 302.9633875199999693 + -227.2225406400000054 + 50.4938979200000020 + 110.2406780160000039 + -264.5776272383999412 + 198.4332204287999843 + -44.0962712064000044 + -32.1535310880000011 + 77.1684746111999971 + -57.8763559583999978 + 12.8614124351999983 + 3.0622410560000000 + -7.3493785343999996 + 5.5120339008000006 + -1.2248964224000001 + 90.0868110965000000 + -216.6912079679999863 + 162.5184059759999968 + -36.1152013279999977 + -78.7312587600000029 + 188.9550210239999899 + -141.7162657679999995 + 31.4925035040000019 + 22.9632838050000032 + -55.1118811320000077 + 41.3339108490000058 + -9.1853135219999995 + -2.1869794100000002 + 5.2487505839999997 + -3.9365629379999998 + 0.8747917640000000 + -20.5720296569999981 + 49.4801736959999943 + -37.1101302719999921 + 8.2466956160000002 + 17.9932997519999986 + -43.1839194047999939 + 32.3879395535999990 + -7.1973199008000002 + -5.2480457610000002 + 12.5953098263999994 + -9.4464823697999982 + 2.0992183043999999 + 0.4998138820000000 + -1.1995533167999999 + 0.8996649876000000 + -0.1999255528000000 + -157.0620940015000429 + 216.2579120640000099 + -90.1074633599999970 + 12.0143284479999988 + 141.4799946432000013 + -194.6321208576000004 + 81.0967170240000002 + -10.8128956031999994 + -41.2649984375999992 + 56.7677019167999930 + -23.6532091320000006 + 3.1537612175999996 + 3.9299998511999998 + -5.4064478016000006 + 2.2526865840000001 + -0.3003582112000000 + 311.4225038820000009 + -432.5158241280000198 + 180.2149267199999656 + -24.0286568960000011 + -280.7129412863999391 + 389.2642417152000007 + -162.1934340479999719 + 21.6257912063999989 + 81.8746078751999846 + -113.5354038336000144 + 47.3064182640000013 + -6.3075224351999992 + -7.7975817024000005 + 10.8128956032000012 + -4.5053731680000002 + 0.6007164224000000 + -192.3943393994999838 + 270.3223900799999342 + -112.6343291999999963 + 15.0179105600000007 + 173.4794213039999988 + -243.2901510719999578 + 101.3708962799999824 + -13.5161195039999988 + -50.5981645469999961 + 70.9596273960000019 + -29.5665114150000008 + 3.9422015220000004 + 4.8188728140000006 + -6.7580597520000003 + 2.8158582299999999 + -0.3754477640000000 + 37.9715111430000007 + -54.0644780160000025 + 22.5268658399999993 + -3.0035821120000001 + -34.2464746608000041 + 48.6580302144000001 + -20.2741792560000036 + 2.7032239008000003 + 9.9885551094000000 + -14.1919254791999983 + 5.9133022830000002 + -0.7884403044000000 + -0.9512909627999999 + 1.3516119504000002 + -0.5631716460000000 + 0.0750895528000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352400000000010 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769450000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215560000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473690000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352400000000010 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769450000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215560000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473690000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352400000000010 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769450000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215560000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473690000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352400000000010 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769450000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215560000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473690000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352400000000010 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769450000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215560000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473690000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352400000000010 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769450000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215560000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473690000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.0321606498499998 + 4.6881070998999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 24.1765592188499987 + -16.1177061459000015 + 0.0000000000000000 + 0.0000000000000000 + -16.1177061459000015 + 10.7451374305999998 + 0.0000000000000000 + 0.0000000000000000 + 9.1366163297999989 + -6.0910775531999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -30.8078686817999952 + 20.5385791212000015 + 0.0000000000000000 + 0.0000000000000000 + 20.5385791212000015 + -13.6923860808000022 + 0.0000000000000000 + 0.0000000000000000 + -3.8069234707500001 + 2.5379489805000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 12.6594244507499987 + -8.4396163005000009 + 0.0000000000000000 + 0.0000000000000000 + -8.4396163005000009 + 5.6264108670000006 + 0.0000000000000000 + 0.0000000000000000 + 0.5075897961000000 + -0.3383931974000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.6721732600999999 + 1.1147821734000001 + 0.0000000000000000 + 0.0000000000000000 + 1.1147821734000001 + -0.7431881156000000 + 1.7964189073000001 + -9.9371338973999990 + 7.4528504230499992 + -1.6561889829000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -44.4148786822999995 + 125.9369562125999948 + -94.4527171594500032 + 20.9894927021000015 + 30.4859639041999984 + -86.0604782868000200 + 64.5453587151000079 + -14.3434130477999986 + -2.4750911663999995 + 13.2495118631999986 + -9.9371338973999990 + 2.2082519771999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 57.1409193383999963 + -161.7845013575999928 + 121.3383760181999946 + -26.9640835595999988 + -39.2202895176000013 + 110.5595581392000071 + -82.9196686044000160 + 18.4265930231999988 + 1.0312879859999999 + -5.5206299429999994 + 4.1404724572499996 + -0.9201049905000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -23.5724663909999990 + 66.7014588990000021 + -50.0260941742499980 + 11.1169098164999998 + 16.1842872989999975 + -45.5939825580000075 + 34.1954869185000021 + -7.5989970929999995 + -0.1375050648000000 + 0.7360839924000000 + -0.5520629942999999 + 0.1226806654000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1219955187999999 + -8.8305278531999996 + 6.6228958898999997 + -1.4717546422000001 + -2.1439049731999997 + 6.0371976743999998 + -4.5278982558000003 + 1.0061996123999999 + 41.0697356006999996 + -54.7530359903999937 + 22.8137649960000033 + -3.0418353327999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -58.7754249068999925 + 72.4365406655999919 + -30.1818919439999931 + 4.0242522591999990 + 34.4529747782000015 + -41.9835046751999954 + 17.4931269480000005 + -2.3324169264000001 + -52.4181452760000042 + 69.8908603680000056 + -29.1211918200000000 + 3.8828255760000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 71.7688591055999865 + -88.1435659967999783 + 36.7264858319999945 + -4.8968647775999994 + -41.7636522935999963 + 50.6527056287999997 + -21.1052940120000017 + 2.8140392016000000 + 21.8408938650000017 + -29.1211918200000000 + 12.1338299250000006 + -1.6178439899999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -29.9036912939999979 + 36.7264858319999945 + -15.3027024299999965 + 2.0403603239999999 + 17.4015217890000002 + -21.1052940120000017 + 8.7938725049999995 + -1.1725163340000000 + -2.9121191820000001 + 3.8828255760000001 + -1.6178439899999999 + 0.2157125320000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.9871588391999992 + -4.8968647775999994 + 2.0403603239999999 + -0.2720480432000000 + -2.3202029051999999 + 2.8140392016000000 + -1.1725163340000000 + 0.1563355112000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -22.5910445969999856 + 16.9389155015999862 + -5.2449352712999966 + 0.5381739305999996 + 15.0606963979999851 + -11.2926103343999884 + 3.4966235141999964 + -0.3587826203999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 29.8518848603999807 + -22.5852206687999839 + 6.9932470283999955 + -0.7175652407999995 + -19.9012565735999800 + 15.0568137791999828 + -4.6621646855999952 + 0.4783768271999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.4382853584999911 + 9.4105086119999921 + -2.9138529284999981 + 0.2989855169999998 + 8.2921902389999929 + -6.2736724079999924 + 1.9425686189999980 + -0.1993236779999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.6584380477999987 + -1.2547344815999988 + 0.3885137237999997 + -0.0398647356000000 + -1.1056253651999990 + 0.8364896543999990 + -0.2590091491999997 + 0.0265764904000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 132.0402867341999809 + -94.3691021639999832 + 21.4156989368999930 + -1.5863480693999996 + -88.0268578227999967 + 62.9127347760000006 + -14.2771326246000001 + 1.0575653796000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -133.2574315811999668 + 96.4624295519999748 + -21.9475812491999918 + 1.6257467591999992 + 88.8382877207999968 + -64.3082863680000116 + 14.6317208328000028 + -1.0838311728000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 44.7574818254999798 + -32.8519189799999864 + 7.4931545204999956 + -0.5550484829999996 + -29.8383212170000043 + 21.9012793200000040 + -4.9954363470000018 + 0.3700323220000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.0106466433999977 + 3.7277438639999976 + -0.8522720693999993 + 0.0631312643999999 + 3.3404310956000010 + -2.4851625760000013 + 0.5681813796000004 + -0.0420875096000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -104.3657106932998886 + 53.3063472119999489 + -9.2857611221999896 + 0.5381739467999993 + 69.5771404621999920 + -35.5375648079999991 + 6.1905074148000008 + -0.3587826312000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 139.1294649887998673 + -71.0751296159999271 + 12.3810148295999856 + -0.7175652623999991 + -92.7529766592000016 + 47.3834197440000082 + -8.2540098864000022 + 0.4783768416000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -58.0317834119999389 + 29.6146373399999696 + -5.1587561789999938 + 0.2989855259999996 + 38.6878556080000138 + -19.7430915600000105 + 3.4391707860000027 + -0.1993236840000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.7430087215999910 + -3.9486183119999954 + 0.6878341571999992 + -0.0398647367999999 + -5.1620058144000041 + 2.6324122080000025 + -0.4585561048000005 + 0.0265764912000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5694553116999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.7129702077999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.4011244799999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.2674163199999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.4783081999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9855388000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2025453600000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1350302400000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5694553116999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.7129702077999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.4011244799999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.2674163199999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.4783081999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9855388000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2025453600000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1350302400000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5694553116999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.7129702077999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.4011244799999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.2674163199999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.4783081999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9855388000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2025453600000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1350302400000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.6217780473999994 + 21.7478520315999972 + 0.0000000000000000 + 0.0000000000000000 + 80.7563291291999974 + -53.8375527528000006 + 0.0000000000000000 + 0.0000000000000000 + -60.5672468468999909 + 40.3781645645999987 + 0.0000000000000000 + 0.0000000000000000 + 13.4593881881999984 + -8.9729254587999989 + 0.0000000000000000 + 0.0000000000000000 + 42.1036102331999942 + -28.0690734887999973 + 0.0000000000000000 + 0.0000000000000000 + -103.7670803135999904 + 69.1780535423999936 + 0.0000000000000000 + 0.0000000000000000 + 77.8253102351999928 + -51.8835401567999952 + 0.0000000000000000 + 0.0000000000000000 + -17.2945133855999984 + 11.5296755904000001 + 0.0000000000000000 + 0.0000000000000000 + -17.3069209304999987 + 11.5379472869999997 + 0.0000000000000000 + 0.0000000000000000 + 42.5275334640000011 + -28.3516889759999984 + 0.0000000000000000 + 0.0000000000000000 + -31.8956500979999973 + 21.2637667320000006 + 0.0000000000000000 + 0.0000000000000000 + 7.0879222439999996 + -4.7252814960000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2865894573999999 + -1.5243929716000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6073377951999994 + 3.7382251968000002 + 0.0000000000000000 + 0.0000000000000000 + 4.2055033464000005 + -2.8036688975999997 + 0.0000000000000000 + 0.0000000000000000 + -0.9345562992000001 + 0.6230375328000000 + 44.2256531812000020 + -132.2389900727999930 + 99.1792425546000089 + -22.0398316788000024 + -138.5907206816000041 + 397.2227929391999623 + -297.9170947044000286 + 66.2037988232000032 + 105.4788598592000000 + -301.6030611396000722 + 226.2022958547000258 + -50.2671768566000026 + -23.2462882296000011 + 66.5586023016000041 + -49.9189517262000066 + 11.0931003835999995 + -57.1087958435999994 + 170.7439982111999939 + -128.0579986583999812 + 28.4573330352000013 + 178.4133265968000046 + -511.2056480832000034 + 383.4042360624000594 + -85.2009413472000006 + -135.7846198235999964 + 388.1433357647999856 + -291.1075018236000460 + 64.6905559607999976 + 29.9256277248000018 + -85.6571172480000058 + 64.2428379360000008 + -14.2761862080000022 + 23.4803316015000014 + -70.1983325879999995 + 52.6487494410000068 + -11.6997220980000023 + -73.3938860819999945 + 210.1673533680000219 + -157.6255150260000164 + 35.0278922279999989 + 55.8681749265000036 + -159.6001399020000235 + 119.7001049265000034 + -26.6000233170000016 + -12.3115115520000007 + 35.2179655199999999 + -26.4134741400000017 + 5.8696609200000003 + -3.1027108802000001 + 9.2757776784000008 + -6.9568332588000015 + 1.5459629464000002 + 9.7018514776000000 + -27.7703137823999988 + 20.8277353368000000 + -4.6283856304000004 + -7.3860899902000003 + 21.0910186535999991 + -15.8182639902000002 + 3.5151697756000004 + 1.6275348736000002 + -4.6537287359999997 + 3.4902965520000002 + -0.7756214560000001 + -50.0478950811999823 + 64.5349948775999849 + -26.8895811989999878 + 3.5852774931999987 + 183.1902844943999753 + -243.4800953951999247 + 101.4500397479999805 + -13.5266719663999968 + -151.8031018499999618 + 201.5326388519999625 + -83.9719328549999773 + 11.1962577139999979 + 35.4079979087999988 + -46.8875383343999914 + 19.5364743059999952 + -2.6048632407999994 + 69.5343934043999639 + -89.6509583711999625 + 37.3545659879999832 + -4.9806087983999978 + -250.0931194127999504 + 331.8487242623999123 + -138.2703017759999398 + 18.4360402367999932 + 206.0974818899999548 + -273.2155583039999556 + 113.8398159599999815 + -15.1786421279999963 + -47.9516943455999893 + 63.4177924127999830 + -26.4240801719999965 + 3.5232106895999991 + -28.9726639184999897 + 37.3545659879999832 + -15.5644024949999924 + 2.0752536659999992 + 104.2054664219999722 + -138.2703017759999682 + 57.6126257399999844 + -7.6816834319999980 + -85.8739507874999788 + 113.8398159599999815 + -47.4332566499999899 + 6.3244342199999988 + 19.9798726439999967 + -26.4240801719999965 + 11.0100334049999979 + -1.4680044539999997 + 3.8630218557999982 + -4.9806087983999978 + 2.0752536659999992 + -0.2767004887999999 + -13.8940621895999961 + 18.4360402367999932 + -7.6816834319999980 + 1.0242244575999997 + 11.4498601049999973 + -15.1786421279999963 + 6.3244342199999988 + -0.8432578959999998 + -2.6639830191999998 + 3.5232106895999991 + -1.4680044539999997 + 0.1957339272000000 + 42.6442853668999931 + -40.0053803687999974 + 11.9066088159000003 + -1.1642323158000001 + -120.2324494991999728 + 109.5640452863999741 + -32.7718093751999930 + 3.2246967023999997 + 89.9558741243999833 + -82.1730339647999841 + 24.5788570313999983 + -2.4185225267999999 + -19.8930995831999979 + 18.2606742143999980 + -5.4619682291999991 + 0.5374494503999999 + -56.7584044271999986 + 53.3405071583999941 + -15.8754784212000004 + 1.5523097544000002 + 159.8769737135999662 + -146.0853937151999560 + 43.6957458335999860 + -4.2995956031999993 + -119.6268492851999810 + 109.5640452863999741 + -32.7718093751999930 + 3.2246967023999993 + 26.4589082855999962 + -24.3475656191999974 + 7.2826243055999988 + -0.7165992671999999 + 23.6493351779999976 + -22.2252113159999993 + 6.6147826754999990 + -0.6467957310000000 + -66.6154057139999907 + 60.8689140479999864 + -18.2065607639999953 + 1.7914981679999997 + 49.8445205354999885 + -45.6516855359999880 + 13.6549205729999983 + -1.3436236259999998 + -11.0245451189999990 + 10.1448190079999989 + -3.0344267939999998 + 0.2985830280000000 + -3.1532446904000002 + 2.9633615088000003 + -0.8819710234000000 + 0.0862394308000000 + 8.8820540951999991 + -8.1158552063999991 + 2.4275414351999998 + -0.2388664223999999 + -6.6459360713999995 + 6.0868914047999993 + -1.8206560763999997 + 0.1791498168000000 + 1.4699393491999997 + -1.3526425343999997 + 0.4045902391999999 + -0.0398110704000000 + -184.9754434747000289 + 126.2750600520000148 + -28.5549122367000052 + 2.1151786842000004 + 549.7599647856001184 + -378.5554258559999994 + 85.6643485176000183 + -6.3455072976000011 + -412.5384365892000460 + 283.9165693920000422 + -64.2482613882000066 + 4.7591304732000008 + 91.7723027976000196 + -63.0925709760000046 + 14.2773914196000042 + -1.0575845496000000 + 189.3135113616000353 + -129.2160267360000034 + 29.2643043156000076 + -2.1677262455999999 + -561.1830773328000532 + 387.2884078080000450 + -87.7923953568000144 + 6.5031403968000010 + 421.1681889996000336 + -290.4663058560000763 + 65.8442965176000143 + -4.8773552976000012 + -93.7177668888000142 + 64.5480679680000122 + -14.6320658928000036 + 1.0838567328000002 + -64.5253657340000046 + 44.0523311400000068 + -9.9912321315000003 + 0.7400912690000001 + 190.7604902220000156 + -132.0071299200000112 + 29.9734807320000058 + -2.2202578320000006 + -143.1874014165000233 + 99.0053474400000084 + -22.4801105490000026 + 1.6651933740000002 + 31.8714375370000056 + -22.0011883200000042 + 4.9955801220000016 + -0.3700429720000001 + 7.3273586312000010 + -5.0036281520000010 + 1.1364106842000001 + -0.0841785692000000 + -21.6066616296000049 + 14.9909026560000029 + -3.4092032976000008 + 0.2525335776000001 + 16.2206007222000039 + -11.2431769920000022 + 2.5569024732000005 + -0.1894001832000000 + -3.6115132716000002 + 2.4984837760000005 + -0.5682005496000001 + 0.0420889296000000 + 130.2289587202999428 + -70.6241013659999624 + 12.3802240670999915 + -0.7175173373999993 + -395.8553984243998229 + 212.1429210479999199 + -37.1411466587999826 + 2.1525807671999990 + 296.6730858182999100 + -159.1071907859999612 + 27.8558599940999905 + -1.6144355753999995 + -65.8302577373999895 + 35.3571535079999961 + -6.1901911097999989 + 0.3587634612000000 + -173.8642248983998968 + 94.1654684879999451 + -16.5069654227999898 + 0.9566897831999992 + 528.3530069471997876 + -282.8572280639999121 + 49.5215288783999910 + -2.8701076895999988 + -395.9838742103999607 + 212.1429210479999483 + -37.1411466587999897 + 2.1525807671999995 + 87.8715804911999925 + -47.1428713439999996 + 8.2535881464000003 + -0.4783512816000000 + 72.5249910409999643 + -39.2356118699999783 + 6.8779022594999955 + -0.3986207429999997 + -220.3917782279999642 + 117.8571783599999776 + -20.6339703659999927 + 1.1958782039999996 + 165.1767999209999687 + -88.3928837699999974 + 15.4754777744999981 + -0.8969086529999999 + -36.6539405380000005 + 19.6428630599999998 + -3.4389950610000004 + 0.1993130340000000 + -9.6772489387999947 + 5.2314149159999976 + -0.9170536345999994 + 0.0531494324000000 + 29.4073208303999962 + -15.7142904479999963 + 2.7511960487999998 + -0.1594504272000000 + -22.0398861227999987 + 11.7857178359999999 + -2.0633970366000001 + 0.1195878204000000 + 4.8908171384000010 + -2.6190484080000003 + 0.4585326748000001 + -0.0265750712000000 + -5.5045576884998377 + 0.4527535499999218 + -0.0009345374999876 + 0.0000479249999993 + 11.3420452619995764 + -1.0866085199997961 + 0.0022428899999674 + -0.0001150199999983 + -8.7249969464996404 + 0.8149563899998263 + -0.0016821674999721 + 0.0000862649999985 + 2.0359828769999018 + -0.1811014199999522 + 0.0003738149999923 + -0.0000191699999996 + 7.1137969799997833 + -0.6036713999998966 + 0.0012460499999836 + -0.0000638999999991 + -14.5769179679994441 + 1.4488113599997343 + -0.0029905199999576 + 0.0001533599999978 + 11.2135694759995364 + -1.0866085199997786 + 0.0022428899999646 + -0.0001150199999981 + -2.6167403279998775 + 0.2414685599999410 + -0.0004984199999905 + 0.0000255599999995 + -2.8825180749999051 + 0.2515297499999547 + -0.0005191874999928 + 0.0000266249999996 + 5.8290238199997608 + -0.6036713999998863 + 0.0012460499999820 + -0.0000638999999990 + -4.4888016149998080 + 0.4527535499999084 + -0.0009345374999855 + 0.0000479249999992 + 1.0495264699999514 + -0.1006118999999768 + 0.0002076749999963 + -0.0000106499999998 + 0.3770856099999864 + -0.0335372999999935 + 0.0000692249999990 + -0.0000035499999999 + -0.7554527759999667 + 0.0804895199999842 + -0.0001661399999975 + 0.0000085199999999 + 0.5821940819999744 + -0.0603671399999879 + 0.0001246049999981 + -0.0000063899999999 + -0.1363117959999940 + 0.0134149199999972 + -0.0000276899999996 + 0.0000014200000000 + -5.5116026634997457 + 0.4547663999998953 + -0.0010783124999857 + 0.0000479249999993 + 11.3589532019993378 + -1.0914393599997261 + 0.0025879499999623 + -0.0001150199999983 + -8.7376779014994366 + 0.8185795199997661 + -0.0019409624999676 + 0.0000862649999985 + 2.0388008669998454 + -0.1819065599999353 + 0.0004313249999910 + -0.0000191699999996 + 7.1231902799996636 + -0.6063551999998610 + 0.0014377499999810 + -0.0000638999999991 + -14.5994618879991389 + 1.4552524799996427 + -0.0034505999999509 + 0.0001533599999978 + 11.2304774159992817 + -1.0914393599997021 + 0.0025879499999590 + -0.0001150199999981 + -2.6204976479998088 + 0.2425420799999205 + -0.0005750999999890 + 0.0000255599999995 + -2.8864319499998530 + 0.2526479999999392 + -0.0005990624999917 + 0.0000266249999996 + 5.8384171199996304 + -0.6063551999998473 + 0.0014377499999791 + -0.0000638999999990 + -4.4958465899997018 + 0.4547663999998769 + -0.0010783124999832 + 0.0000479249999992 + 1.0510920199999245 + -0.1010591999999689 + 0.0002396249999957 + -0.0000106499999998 + 0.3776074599999789 + -0.0336863999999913 + 0.0000798749999988 + -0.0000035499999999 + -0.7567052159999486 + 0.0808473599999789 + -0.0001916999999971 + 0.0000085199999999 + 0.5831334119999604 + -0.0606355199999838 + 0.0001437749999978 + -0.0000063899999999 + -0.1365205359999907 + 0.0134745599999963 + -0.0000319499999995 + 0.0000014200000000 + 251.7870357365003713 + -92.4596532000001332 + 11.1666529125000178 + -0.4466670750000007 + -606.1577789580009039 + 221.9031676800003083 + -26.7999669900000406 + 1.0720009800000017 + 454.3998712185007207 + -166.4273757600003023 + 20.0999752425000366 + -0.8040007350000014 + -100.8806544930002360 + 36.9838612800000845 + -4.4666611650000103 + 0.1786668300000004 + -335.9416609200004586 + 123.2795376000001681 + -14.8888705500000214 + 0.5955561000000008 + 808.7561809920013047 + -295.8708902400004490 + 35.7332893200000541 + -1.4293346400000022 + -606.2862547440010985 + 221.9031676800003652 + -26.7999669900000441 + 1.0720009800000017 + 134.6054428320002785 + -49.3118150400000985 + 5.9555482200000114 + -0.2382224400000005 + 140.0572560500002055 + -51.3664740000000748 + 6.2036960625000095 + -0.2481483750000004 + -337.2264340800005584 + 123.2795376000001966 + -14.8888705500000231 + 0.5955561000000009 + 252.8027918100004001 + -92.4596532000001616 + 11.1666529125000178 + -0.4466670750000007 + -56.1263831800001043 + 20.5465896000000399 + -2.4814784250000046 + 0.0992593500000002 + -18.6815509400000295 + 6.8488632000000109 + -0.8271594750000013 + 0.0330864500000001 + 44.9852749440000750 + -16.4372716800000234 + 1.9851827400000031 + -0.0794074800000001 + -33.7233517080000524 + 12.3279537600000193 + -1.4888870550000024 + 0.0595556100000001 + 7.4871428240000135 + -2.7395452800000046 + 0.3308637900000005 + -0.0132345800000000 + 0.0000000000000000 + 0.0000000000000000 + 204.6814854389999709 + -136.4543236259999901 + 0.0000000000000000 + 0.0000000000000000 + -270.4943405699999630 + 180.3295603799999753 + 0.0000000000000000 + 0.0000000000000000 + 112.7059752374999988 + -75.1373168249999992 + 0.0000000000000000 + 0.0000000000000000 + -15.0274633649999991 + 10.0183089100000000 + 0.0000000000000000 + 0.0000000000000000 + -270.4943405699999630 + 180.3295603799999753 + 0.0000000000000000 + 0.0000000000000000 + 357.4400451840000414 + -238.2933634559999803 + 0.0000000000000000 + 0.0000000000000000 + -148.9333521599999983 + 99.2889014399999894 + 0.0000000000000000 + 0.0000000000000000 + 19.8577802880000007 + -13.2385201919999993 + 0.0000000000000000 + 0.0000000000000000 + 112.7059752374999988 + -75.1373168249999992 + 0.0000000000000000 + 0.0000000000000000 + -148.9333521599999983 + 99.2889014399999894 + 0.0000000000000000 + 0.0000000000000000 + 62.0555634000000040 + -41.3703755999999956 + 0.0000000000000000 + 0.0000000000000000 + -8.2740751199999991 + 5.5160500800000003 + 0.0000000000000000 + 0.0000000000000000 + -15.0274633649999991 + 10.0183089100000000 + 0.0000000000000000 + 0.0000000000000000 + 19.8577802880000007 + -13.2385201919999993 + 0.0000000000000000 + 0.0000000000000000 + -8.2740751199999991 + 5.5160500800000003 + 0.0000000000000000 + 0.0000000000000000 + 1.1032100160000000 + -0.7354733440000000 + -221.1055395120000071 + 694.3984831799999711 + -520.7988623850000067 + 115.7330805300000094 + 278.7592949099999373 + -885.4177802399999564 + 664.0633351800000810 + -147.5696300400000212 + -112.8727612125000093 + 361.0594071000000440 + -270.7945553250000330 + 60.1765678499999979 + 14.7584174950000016 + -47.4421726800000059 + 35.5816295099999991 + -7.9070287800000010 + 278.7592949099999942 + -885.4177802400001838 + 664.0633351800000810 + -147.5696300400000212 + -351.5299650720000955 + 1129.6239523200001713 + -847.2179642400000148 + 188.2706587200000001 + 142.2576037800000108 + -460.5649308000000133 + 345.4236981000000242 + -76.7608218000000022 + -18.5931725040000018 + 60.5098382400000006 + -45.3823786800000022 + 10.0849730400000013 + -112.8727612125000093 + 361.0594071000000440 + -270.7945553250000330 + 60.1765678499999979 + 142.2576037800000108 + -460.5649308000000133 + 345.4236981000000242 + -76.7608218000000022 + -57.5184953249999964 + 187.6888395000000003 + -140.7666296250000073 + 31.2814732499999977 + 7.5130877100000006 + -24.6506705999999980 + 18.4880029500000020 + -4.1084451000000000 + 14.7584174950000016 + -47.4421726800000059 + 35.5816295099999991 + -7.9070287800000001 + -18.5931725040000018 + 60.5098382400000006 + -45.3823786800000022 + 10.0849730399999995 + 7.5130877100000006 + -24.6506705999999980 + 18.4880029499999985 + -4.1084451000000000 + -0.9809390280000001 + 3.2368216800000003 + -2.4276162599999997 + 0.5394702800000000 + 191.0667307679999567 + -232.3364261399999577 + 96.8068442249999919 + -12.9075792299999978 + -257.3214441299999748 + 309.7819015199999626 + -129.0757922999999892 + 17.2101056399999948 + 107.8726573874999985 + -129.0757922999999892 + 53.7815801249999978 + -7.1708773499999996 + -14.4412777849999969 + 17.2101056399999983 + -7.1708773499999996 + 0.9561169799999999 + -257.3214441299999748 + 309.7819015199999058 + -129.0757922999999892 + 17.2101056399999948 + 346.2666576479999776 + -413.0425353599999312 + 172.1010563999999761 + -22.9468075199999966 + -145.1204170199999908 + 172.1010564000000045 + -71.7087734999999924 + 9.5611698000000001 + 19.4242905360000009 + -22.9468075200000001 + 9.5611698000000001 + -1.2748226400000000 + 107.8726573874999701 + -129.0757922999999892 + 53.7815801249999907 + -7.1708773499999987 + -145.1204170199999908 + 172.1010563999999761 + -71.7087734999999924 + 9.5611697999999983 + 60.8179416749999930 + -71.7087734999999924 + 29.8786556250000004 + -3.9838207499999996 + -8.1402678900000005 + 9.5611698000000001 + -3.9838207500000000 + 0.5311760999999999 + -14.4412777849999969 + 17.2101056399999948 + -7.1708773499999987 + 0.9561169799999998 + 19.4242905359999973 + -22.9468075199999966 + 9.5611697999999983 + -1.2748226399999998 + -8.1402678900000005 + 9.5611697999999983 + -3.9838207499999996 + 0.5311760999999999 + 1.0895302519999999 + -1.2748226400000000 + 0.5311760999999999 + -0.0708234800000000 + -91.7268526394999384 + 94.0688623799999277 + -26.5321536524999857 + 2.4120022049999981 + 119.7366670799999042 + -125.4251498399999036 + 35.3762048699999738 + -3.2160029399999974 + -49.2348889499999558 + 52.2604790999999622 + -14.7400853624999861 + 1.3400012249999991 + 6.5063950599999956 + -6.9680638799999954 + 1.9653447149999987 + -0.1786668299999999 + 119.7366670799999042 + -125.4251498399999036 + 35.3762048699999738 + -3.2160029399999974 + -156.4774906319998422 + 167.2335331199998905 + -47.1682731599999627 + 4.2880039199999960 + 64.3563114299999484 + -69.6806387999999401 + 19.6534471499999839 + -1.7866682999999985 + -8.5059399239999927 + 9.2907518399999933 + -2.6204596199999983 + 0.2382224399999998 + -49.2348889499999558 + 52.2604790999999622 + -14.7400853624999897 + 1.3400012249999991 + 64.3563114299999484 + -69.6806387999999401 + 19.6534471499999839 + -1.7866682999999985 + -26.4640285124999792 + 29.0335994999999798 + -8.1889363124999939 + 0.7444451249999995 + 3.4973281349999974 + -3.8711465999999977 + 1.0918581749999994 + -0.0992593499999999 + 6.5063950599999956 + -6.9680638799999954 + 1.9653447149999987 + -0.1786668299999999 + -8.5059399239999927 + 9.2907518399999933 + -2.6204596199999983 + 0.2382224399999998 + 3.4973281349999974 + -3.8711465999999977 + 1.0918581749999994 + -0.0992593499999999 + -0.4621492179999996 + 0.5161528799999997 + -0.1455810899999999 + 0.0132345800000000 + 24.0740975205001106 + -2.4277887000000864 + 0.0034937325000216 + -0.0002587950000018 + -34.6645998000001612 + 3.2370516000001230 + -0.0046583100000299 + 0.0003450600000024 + 15.0989722500000738 + -1.3487715000000551 + 0.0019409625000130 + -0.0001437750000010 + -2.0714531000000118 + 0.1798362000000081 + -0.0002587950000018 + 0.0000191700000001 + -34.6645998000001612 + 3.2370516000001235 + -0.0046583100000299 + 0.0003450600000024 + 49.3908652080002355 + -4.3160688000001688 + 0.0062110800000399 + -0.0004600800000031 + -21.4221701700001006 + 1.7983620000000724 + -0.0025879500000166 + 0.0001917000000013 + 2.9311909560000142 + -0.2397816000000101 + 0.0003450600000022 + -0.0000255600000002 + 15.0989722500000720 + -1.3487715000000551 + 0.0019409625000130 + -0.0001437750000010 + -21.4221701700001006 + 1.7983620000000724 + -0.0025879500000166 + 0.0001917000000013 + 9.2770054875000412 + -0.7493175000000296 + 0.0010783125000066 + -0.0000798750000005 + -1.2681430650000054 + 0.0999090000000038 + -0.0001437750000008 + 0.0000106500000001 + -2.0714531000000118 + 0.1798362000000081 + -0.0002587950000018 + 0.0000191700000001 + 2.9311909560000142 + -0.2397816000000101 + 0.0003450600000022 + -0.0000255600000002 + -1.2681430650000054 + 0.0999090000000038 + -0.0001437750000008 + 0.0000106500000001 + 0.1732469420000007 + -0.0133212000000004 + 0.0000191700000001 + -0.0000014200000000 + 24.0935071455002721 + -2.4355525500001534 + 0.0042701175000289 + -0.0002587950000018 + -34.6904793000003693 + 3.2474034000002079 + -0.0056934900000389 + 0.0003450600000024 + 15.1097553750001588 + -1.3530847500000884 + 0.0023722875000164 + -0.0001437750000010 + -2.0728908500000220 + 0.1804113000000122 + -0.0003163050000022 + 0.0000191700000001 + -34.6904793000003622 + 3.2474034000002079 + -0.0056934900000389 + 0.0003450600000024 + 49.4253712080004988 + -4.3298712000002757 + 0.0075913200000511 + -0.0004600800000031 + -21.4365476700002091 + 1.8041130000001138 + -0.0031630500000209 + 0.0001917000000013 + 2.9331079560000273 + -0.2405484000000150 + 0.0004217400000027 + -0.0000255600000002 + 15.1097553750001588 + -1.3530847500000884 + 0.0023722875000164 + -0.0001437750000010 + -21.4365476700002091 + 1.8041130000001140 + -0.0031630500000209 + 0.0001917000000013 + 9.2829961125000828 + -0.7517137500000454 + 0.0013179375000082 + -0.0000798750000005 + -1.2689418150000105 + 0.1002285000000056 + -0.0001757250000010 + 0.0000106500000001 + -2.0728908500000220 + 0.1804113000000122 + -0.0003163050000022 + 0.0000191700000001 + 2.9331079560000273 + -0.2405484000000150 + 0.0004217400000027 + -0.0000255600000002 + -1.2689418150000105 + 0.1002285000000056 + -0.0001757250000010 + 0.0000106500000001 + 0.1733534420000013 + -0.0133638000000006 + 0.0000234300000001 + -0.0000014200000000 + 24.1214570055004529 + -2.4448691700002163 + 0.0050465025000343 + -0.0002587950000018 + -34.7277457800006175 + 3.2598255600002939 + -0.0067286700000462 + 0.0003450600000024 + 15.1252830750002651 + -1.3582606500001246 + 0.0028036125000195 + -0.0001437750000010 + -2.0749612100000361 + 0.1811014200000171 + -0.0003738150000026 + 0.0000191700000001 + -34.7277457800006175 + 3.2598255600002939 + -0.0067286700000462 + 0.0003450600000024 + 49.4750598480008250 + -4.3464340800003880 + 0.0089715600000605 + -0.0004600800000031 + -21.4572512700003450 + 1.8110142000001597 + -0.0037381500000247 + 0.0001917000000013 + 2.9358684360000451 + -0.2414685600000209 + 0.0004984200000032 + -0.0000255600000002 + 15.1252830750002616 + -1.3582606500001246 + 0.0028036125000195 + -0.0001437750000010 + -21.4572512700003450 + 1.8110142000001597 + -0.0037381500000247 + 0.0001917000000013 + 9.2916226125001380 + -0.7545892500000633 + 0.0015575625000096 + -0.0000798750000005 + -1.2700920150000172 + 0.1006119000000078 + -0.0002076750000012 + 0.0000106500000001 + -2.0749612100000361 + 0.1811014200000171 + -0.0003738150000026 + 0.0000191700000001 + 2.9358684360000451 + -0.2414685600000209 + 0.0004984200000032 + -0.0000255600000002 + -1.2700920150000172 + 0.1006119000000078 + -0.0002076750000012 + 0.0000106500000001 + 0.1735068020000020 + -0.0134149200000009 + 0.0000276900000001 + -0.0000014200000000 + 24.1594998705007029 + -2.4557385600002908 + 0.0058228875000397 + -0.0002587950000018 + -34.7784696000009532 + 3.2743180800003930 + -0.0077638500000534 + 0.0003450600000024 + 15.1464180000004074 + -1.3642992000001666 + 0.0032349375000225 + -0.0001437750000010 + -2.0777792000000561 + 0.1819065600000228 + -0.0004313250000031 + 0.0000191700000001 + -34.7784696000009532 + 3.2743180800003930 + -0.0077638500000534 + 0.0003450600000024 + 49.5426916080012703 + -4.3657574400005181 + 0.0103518000000699 + -0.0004600800000031 + -21.4854311700005276 + 1.8190656000002128 + -0.0043132500000285 + 0.0001917000000013 + 2.9396257560000691 + -0.2425420800000277 + 0.0005751000000037 + -0.0000255600000002 + 15.1464180000004074 + -1.3642992000001666 + 0.0032349375000225 + -0.0001437750000010 + -21.4854311700005276 + 1.8190656000002128 + -0.0043132500000285 + 0.0001917000000013 + 9.3033642375002099 + -0.7579440000000840 + 0.0017971875000111 + -0.0000798750000005 + -1.2716575650000261 + 0.1010592000000103 + -0.0002396250000013 + 0.0000106500000001 + -2.0777792000000561 + 0.1819065600000228 + -0.0004313250000031 + 0.0000191700000001 + 2.9396257560000691 + -0.2425420800000277 + 0.0005751000000037 + -0.0000255600000002 + -1.2716575650000261 + 0.1010592000000103 + -0.0002396250000013 + 0.0000106500000001 + 0.1737155420000029 + -0.0134745600000011 + 0.0000319500000001 + -0.0000014200000000 + -1365.2531474894988150 + 499.2821272799995995 + -60.2999257274999536 + 2.4120022049999981 + 1817.7717268799983685 + -665.7095030399993902 + 80.3999009699999192 + -3.2160029399999974 + -756.7494971999993822 + 277.3789595999998028 + -33.4999587374999663 + 1.3400012249999991 + 100.8416761599999063 + -36.9838612799999709 + 4.4666611649999961 + -0.1786668299999999 + 1817.7717268799983685 + -665.7095030399995039 + 80.3999009699999192 + -3.2160029399999974 + -2420.5242370319979273 + 887.6126707199993007 + -107.1998679599999207 + 4.2880039199999960 + 1007.7091224299991836 + -369.8386127999996802 + 44.6666116499999646 + -1.7866682999999985 + -134.2863147239999080 + 49.3118150399999564 + -5.9555482199999954 + 0.2382224399999998 + -756.7494971999992686 + 277.3789595999998028 + -33.4999587374999663 + 1.3400012249999991 + 1007.7091224299990699 + -369.8386127999996802 + 44.6666116499999646 + -1.7866682999999985 + -419.5276997624996511 + 154.0994219999998904 + -18.6110881874999841 + 0.7444451249999995 + 55.9058176349999627 + -20.5465895999999830 + 2.4814784249999979 + -0.0992593499999999 + 100.8416761599999063 + -36.9838612799999709 + 4.4666611649999961 + -0.1786668299999999 + -134.2863147239999080 + 49.3118150399999564 + -5.9555482199999954 + 0.2382224399999998 + 55.9058176349999627 + -20.5465895999999830 + 2.4814784249999979 + -0.0992593499999999 + -7.4499478179999956 + 2.7395452799999984 + -0.3308637899999998 + 0.0132345800000000 + 0.0000000000000000 + 0.0000000000000000 + 1.8107300115000000 + -1.2071533409999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.4143066819999999 + 1.6095377879999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.0059611175000001 + -0.6706407450000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1341281490000000 + 0.0894187660000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 225.3083766705000244 + -539.2915199999999913 + 404.4686400000000503 + -89.8819200000000080 + -202.2343199999999968 + 485.3623680000000604 + -364.0217760000000453 + 80.8937280000000101 + 58.9850100000000026 + -141.5640239999999892 + 106.1730180000000132 + -23.5940039999999982 + -5.6176200000000005 + 13.4822880000000005 + -10.1117160000000013 + 2.2470479999999999 + -262.9603688939999984 + 629.1734400000000278 + -471.8800800000000208 + 104.8622400000000141 + 235.9400400000000104 + -566.2560960000000705 + 424.6920720000000529 + -94.3760159999999928 + -68.8158449999999959 + 165.1580280000000300 + -123.8685210000000154 + 27.5263379999999991 + 6.5538900000000009 + -15.7293360000000000 + 11.7970019999999991 + -2.6215560000000000 + 100.2041203725000003 + -239.6851199999999835 + 179.7638400000000161 + -39.9475199999999973 + -89.8819200000000080 + 215.7166080000000079 + -161.7874560000000201 + 35.9527679999999989 + 26.2155599999999964 + -62.9173439999999999 + 47.1880080000000035 + -10.4862240000000000 + -2.4967199999999998 + 5.9921279999999992 + -4.4940959999999999 + 0.9986880000000000 + -12.5283093829999999 + 29.9606400000000015 + -22.4704800000000020 + 4.9934399999999997 + 11.2352400000000010 + -26.9645760000000010 + 20.2234320000000025 + -4.4940959999999999 + -3.2769449999999996 + 7.8646680000000000 + -5.8985010000000004 + 1.3107780000000000 + 0.3120900000000000 + -0.7490160000000000 + 0.5617620000000000 + -0.1248360000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888939999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880079999999964 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803724999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763839999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888939999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880079999999964 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803724999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763839999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888939999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880079999999964 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803724999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763839999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888939999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880079999999964 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803724999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763839999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888939999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880079999999964 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803724999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763839999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888939999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880079999999964 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803724999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763839999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888939999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880079999999964 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803724999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763839999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1796984025000000 + 0.1197989350000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.5390952075000000 + -0.3593968050000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3593968050000000 + 0.2395978700000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0598994675000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.7523780425000002 + -15.7744311360000005 + 11.8308233519999995 + -2.6290718559999999 + -7.0045704549999996 + 16.5234516479999982 + -12.3925887360000004 + 2.7539086080000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -6.7580597519999994 + 16.2193434048000000 + -12.1645075536000000 + 2.7032239007999999 + 6.7580597519999994 + -16.2193434048000000 + 12.1645075536000000 + -2.7032239007999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.9711007609999998 + -4.7306418263999994 + 3.5479813698000000 + -0.7884403043999999 + -1.9711007609999998 + 4.7306418263999994 + -3.5479813698000000 + 0.7884403043999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1877238820000000 + 0.4505373168000000 + -0.3379029876000000 + 0.0750895528000000 + 0.1877238820000000 + -0.4505373168000000 + 0.3379029876000000 + -0.0750895528000000 + 1.7561266437000007 + -2.3348907144000020 + 0.9728711310000014 + -0.1297161508000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -46.0039935710999970 + 61.0691501591999995 + -25.4454792330000004 + 3.3927305643999999 + 44.1854485514000146 + -58.7342594448000099 + 24.4726081020000059 + -3.2630144136000014 + -0.0000000000000012 + 0.0000000000000029 + -0.0000000000000020 + 0.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 36.4935226607999965 + -48.6580302144000001 + 20.2741792560000000 + -2.7032239007999999 + -36.4935226608000107 + 48.6580302144000143 + -20.2741792560000071 + 2.7032239008000012 + 0.0000000000000005 + -0.0000000000000012 + 0.0000000000000008 + -0.0000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -10.6439441093999996 + 14.1919254792000000 + -5.9133022830000002 + 0.7884403043999999 + 10.6439441094000031 + -14.1919254792000071 + 5.9133022830000037 + -0.7884403044000006 + -0.0000000000000001 + 0.0000000000000002 + -0.0000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.0137089628000000 + -1.3516119503999999 + 0.5631716460000000 + -0.0750895528000000 + -1.0137089628000004 + 1.3516119504000006 + -0.5631716460000002 + 0.0750895528000001 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3353203725000000 + 0.2235469150000000 + 0.0000000000000000 + 0.0000000000000000 + 0.8047688940000000 + -0.5365125960000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6035766705000000 + 0.4023844470000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1341281490000000 + -0.0894187660000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 56.1396151825000018 + -135.0033327360000044 + 101.2524995520000033 + -22.5005554560000007 + -125.9664885020000042 + 302.9633875199999693 + -227.2225406399999770 + 50.4938979199999949 + 90.0868110964999858 + -216.6912079679999579 + 162.5184059759999968 + -36.1152013279999977 + -20.5720296569999981 + 49.4801736959999943 + -37.1101302719999921 + 8.2466956160000002 + -49.5027190080000068 + 118.8065256192000163 + -89.1048942144000051 + 19.8010876031999992 + 110.2406780160000039 + -264.5776272383999412 + 198.4332204287999843 + -44.0962712064000044 + -78.7312587600000029 + 188.9550210239999615 + -141.7162657679999711 + 31.4925035039999983 + 17.9932997519999986 + -43.1839194047999939 + 32.3879395535999990 + -7.1973199008000002 + 14.4382930439999981 + -34.6519033056000012 + 25.9889274792000009 + -5.7753172175999996 + -32.1535310880000011 + 77.1684746111999971 + -57.8763559583999978 + 12.8614124351999983 + 22.9632838049999997 + -55.1118811319999935 + 41.3339108489999987 + -9.1853135219999995 + -5.2480457610000002 + 12.5953098263999994 + -9.4464823697999982 + 2.0992183043999999 + -1.3750755280000000 + 3.3001812671999997 + -2.4751359503999999 + 0.5500302112000000 + 3.0622410560000000 + -7.3493785343999996 + 5.5120339008000006 + -1.2248964224000001 + -2.1869794100000002 + 5.2487505839999997 + -3.9365629379999998 + 0.8747917640000000 + 0.4998138820000000 + -1.1995533167999999 + 0.8996649876000000 + -0.1999255528000000 + -157.0620940015000429 + 216.2579120640000099 + -90.1074633599999970 + 12.0143284479999988 + 311.4225038820000009 + -432.5158241280000198 + 180.2149267199999940 + -24.0286568960000011 + -192.3943393995000122 + 270.3223900799999910 + -112.6343292000000105 + 15.0179105600000007 + 37.9715111430000007 + -54.0644780160000025 + 22.5268658399999993 + -3.0035821120000001 + 141.4799946432000013 + -194.6321208576000004 + 81.0967170240000002 + -10.8128956031999994 + -280.7129412863999960 + 389.2642417152000007 + -162.1934340480000003 + 21.6257912063999989 + 173.4794213039999988 + -243.2901510719999862 + 101.3708962799999966 + -13.5161195040000006 + -34.2464746608000041 + 48.6580302144000001 + -20.2741792560000036 + 2.7032239008000003 + -41.2649984375999992 + 56.7677019167999930 + -23.6532091319999971 + 3.1537612175999996 + 81.8746078751999988 + -113.5354038336000144 + 47.3064182640000013 + -6.3075224351999992 + -50.5981645469999961 + 70.9596273959999877 + -29.5665114149999972 + 3.9422015219999995 + 9.9885551094000000 + -14.1919254791999983 + 5.9133022830000002 + -0.7884403044000000 + 3.9299998511999998 + -5.4064478016000006 + 2.2526865840000001 + -0.3003582112000000 + -7.7975817024000005 + 10.8128956032000012 + -4.5053731680000002 + 0.6007164224000000 + 4.8188728140000006 + -6.7580597520000003 + 2.8158582299999999 + -0.3754477640000000 + -0.9512909628000000 + 1.3516119504000002 + -0.5631716460000000 + 0.0750895528000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473689999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352399999999992 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999980 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769449999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215559999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553889999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473689999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352399999999992 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999980 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769449999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215559999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553889999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473689999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352399999999992 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999980 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769449999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215559999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553889999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473689999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352399999999992 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999980 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769449999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215559999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553889999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473689999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352399999999992 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999980 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769449999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215559999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553889999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473689999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352399999999992 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999980 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769449999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215559999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553889999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.8107300115000000 + -1.2071533409999999 + 0.0000000000000000 + 0.0000000000000000 + -2.4143066819999999 + 1.6095377879999999 + 0.0000000000000000 + 0.0000000000000000 + 1.0059611175000001 + -0.6706407450000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1341281490000000 + 0.0894187660000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 225.3083766704999960 + -539.2915199999999913 + 404.4686400000000503 + -89.8819200000000080 + -262.9603688939999984 + 629.1734400000000278 + -471.8800800000000208 + 104.8622400000000141 + 100.2041203725000003 + -239.6851200000000119 + 179.7638400000000161 + -39.9475200000000044 + -12.5283093829999999 + 29.9606400000000015 + -22.4704800000000020 + 4.9934399999999997 + -202.2343199999999968 + 485.3623680000000036 + -364.0217760000000453 + 80.8937280000000101 + 235.9400400000000104 + -566.2560960000000705 + 424.6920720000000529 + -94.3760160000000070 + -89.8819200000000080 + 215.7166080000000079 + -161.7874560000000201 + 35.9527680000000061 + 11.2352400000000010 + -26.9645760000000010 + 20.2234320000000025 + -4.4940959999999999 + 58.9850100000000026 + -141.5640239999999892 + 106.1730180000000132 + -23.5940039999999982 + -68.8158449999999959 + 165.1580280000000016 + -123.8685210000000154 + 27.5263379999999991 + 26.2155600000000035 + -62.9173440000000070 + 47.1880080000000035 + -10.4862240000000000 + -3.2769449999999996 + 7.8646680000000000 + -5.8985010000000004 + 1.3107780000000000 + -5.6176200000000005 + 13.4822880000000005 + -10.1117160000000013 + 2.2470479999999999 + 6.5538900000000009 + -15.7293360000000000 + 11.7970019999999991 + -2.6215560000000000 + -2.4967199999999998 + 5.9921279999999992 + -4.4940959999999999 + 0.9986880000000000 + 0.3120900000000000 + -0.7490160000000000 + 0.5617620000000000 + -0.1248360000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888940000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803725000022 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880080000000035 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763840000000030 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888940000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803725000022 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880080000000035 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763840000000030 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888940000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803725000022 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880080000000035 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763840000000030 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888940000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803725000022 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880080000000035 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763840000000030 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888940000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803725000022 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880080000000035 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763840000000030 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888940000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803725000022 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880080000000035 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763840000000030 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888940000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803725000022 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880080000000035 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763840000000030 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + +# piCH + +6 +0.0 +4.0 +0.0 +4.0 +0.0 +9.0 + + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.3500000000000001 + 0.9000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000000 + -0.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000000 + -0.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + -0.6000000000000001 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -63.4499999999999886 + 80.9999999999999858 + -33.7499999999999929 + 4.4999999999999991 + 42.2999999999999972 + -53.9999999999999858 + 22.4999999999999964 + -2.9999999999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 42.2999999999999972 + -53.9999999999999858 + 22.4999999999999964 + -2.9999999999999996 + -28.1999999999999957 + 36.0000000000000000 + -15.0000000000000000 + 2.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 179.5499999999999545 + -161.9999999999999716 + 47.2499999999999929 + -4.4999999999999991 + -119.6999999999999886 + 107.9999999999999716 + -31.4999999999999964 + 2.9999999999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -119.6999999999999886 + 107.9999999999999716 + -31.4999999999999964 + 2.9999999999999996 + 79.7999999999999972 + -72.0000000000000000 + 21.0000000000000000 + -2.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.8000000000000003 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + -5.4000000000000004 + 3.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 4.0500000000000007 + -2.7000000000000002 + 0.0000000000000000 + 0.0000000000000000 + -0.9000000000000000 + 0.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.6000000000000005 + -2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + -2.7000000000000002 + 1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.6000000000000001 + -0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.1499999999999986 + 45.0000000000000000 + -33.7500000000000000 + 7.5000000000000000 + 43.2000000000000028 + -108.0000000000000000 + 81.0000000000000000 + -18.0000000000000000 + -32.3999999999999986 + 81.0000000000000000 + -60.7500000000000000 + 13.5000000000000000 + 7.2000000000000002 + -18.0000000000000000 + 13.5000000000000000 + -3.0000000000000000 + 12.0999999999999996 + -30.0000000000000000 + 22.5000000000000000 + -5.0000000000000000 + -28.8000000000000007 + 72.0000000000000000 + -54.0000000000000000 + 12.0000000000000000 + 21.6000000000000014 + -54.0000000000000000 + 40.5000000000000000 + -9.0000000000000000 + -4.7999999999999998 + 12.0000000000000000 + -9.0000000000000000 + 2.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 80.8499999999999943 + -108.0000000000000000 + 45.0000000000000000 + -6.0000000000000000 + -244.8000000000000114 + 324.0000000000000000 + -135.0000000000000000 + 18.0000000000000000 + 183.5999999999999943 + -243.0000000000000000 + 101.2500000000000000 + -13.5000000000000000 + -40.7999999999999972 + 54.0000000000000000 + -22.5000000000000000 + 3.0000000000000000 + -53.9000000000000057 + 72.0000000000000000 + -30.0000000000000000 + 4.0000000000000000 + 163.1999999999999886 + -216.0000000000000000 + 90.0000000000000000 + -12.0000000000000000 + -122.4000000000000057 + 162.0000000000000000 + -67.5000000000000000 + 9.0000000000000000 + 27.1999999999999993 + -36.0000000000000000 + 15.0000000000000000 + -2.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 60.6000000000000369 + -54.0000000000000284 + 15.7500000000000107 + -1.5000000000000011 + -1.8000000000001068 + 0.0000000000000999 + -0.0000000000000306 + 0.0000000000000031 + 1.3500000000000831 + -0.0000000000000759 + 0.0000000000000226 + -0.0000000000000022 + -0.3000000000000198 + 0.0000000000000173 + -0.0000000000000049 + 0.0000000000000004 + -40.4000000000000270 + 36.0000000000000213 + -10.5000000000000036 + 1.0000000000000004 + 1.2000000000000515 + -0.0000000000000426 + 0.0000000000000111 + -0.0000000000000009 + -0.9000000000000317 + 0.0000000000000253 + -0.0000000000000062 + 0.0000000000000004 + 0.2000000000000040 + -0.0000000000000027 + 0.0000000000000004 + 0.0000000000000000 + -3.9810265070966766 + 2.7143362548386434 + -0.6107256573386948 + 0.0452389375806441 + 9.5544636170320238 + -6.5144070116127439 + 1.4657415776128673 + -0.1085734501935457 + -7.1658477127740188 + 4.8858052587095582 + -1.0993061832096505 + 0.0814300876451593 + 1.5924106028386709 + -1.0857345019354574 + 0.2442902629354779 + -0.0180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 12.5430795212900357 + -8.1430087645159333 + 1.8321769720160854 + -0.1357168127419323 + -30.4633908510960865 + 19.5432210348382434 + -4.3972247328386054 + 0.3257203505806374 + 22.8475431383220666 + -14.6574157761286834 + 3.2979185496289536 + -0.2442902629354781 + -5.0772318085160153 + 3.2572035058063742 + -0.7328707888064342 + 0.0542867250967729 + -8.3620530141933571 + 5.4286725096772885 + -1.2214513146773900 + 0.0904778751612881 + 20.3089272340640541 + -13.0288140232254914 + 2.9314831552257354 + -0.2171469003870915 + -15.2316954255480397 + 9.7716105174191163 + -2.1986123664193014 + 0.1628601752903186 + 3.3848212056773415 + -2.1714690038709143 + 0.4885805258709557 + -0.0361911500645152 + -0.0226194687903220 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0542867250967729 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0407150438225796 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6678584063709662 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.9628601752903188 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.4721451314677392 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3085734501935460 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9814300876451594 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0226194687903220 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0542867250967729 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0407150438225796 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6678584063709662 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.9628601752903188 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.4721451314677392 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3085734501935460 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9814300876451594 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0226194687903220 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0542867250967729 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0407150438225796 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6678584063709662 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.9628601752903188 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.4721451314677392 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3085734501935460 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9814300876451594 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0226194687903220 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0542867250967729 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0407150438225796 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6678584063709662 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.9628601752903188 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.4721451314677392 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3085734501935460 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9814300876451594 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -25.2000000000000028 + 16.8000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 32.4000000000000057 + -21.6000000000000014 + 0.0000000000000000 + 0.0000000000000000 + -13.5000000000000000 + 9.0000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 1.8000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 16.8000000000000007 + -11.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + -21.6000000000000014 + 14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 9.0000000000000018 + -6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 82.3499999999999943 + -217.8000000000000114 + 163.3499999999999943 + -36.2999999999999972 + -110.6999999999999886 + 291.6000000000000227 + -218.6999999999999886 + 48.6000000000000085 + 46.1250000000000000 + -121.5000000000000000 + 91.1250000000000000 + -20.2500000000000036 + -6.1500000000000004 + 16.2000000000000028 + -12.1500000000000021 + 2.7000000000000002 + -54.8999999999999986 + 145.1999999999999886 + -108.9000000000000057 + 24.1999999999999993 + 73.7999999999999972 + -194.4000000000000341 + 145.8000000000000114 + -32.3999999999999986 + -30.7500000000000000 + 81.0000000000000000 + -60.7500000000000000 + 13.5000000000000000 + 4.0999999999999996 + -10.8000000000000007 + 8.0999999999999996 + -1.7999999999999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 9.7500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.6250000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.7500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -6.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 9.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.7500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1460.4000000000000909 + 1306.8000000000001819 + -381.1499999999999773 + 36.2999999999999972 + 1954.8000000000001819 + -1749.6000000000001364 + 510.3000000000000114 + -48.6000000000000085 + -814.5000000000001137 + 729.0000000000001137 + -212.6250000000000000 + 20.2500000000000036 + 108.5999999999999943 + -97.2000000000000028 + 28.3500000000000014 + -2.7000000000000002 + 973.5999999999999091 + -871.2000000000000455 + 254.0999999999999943 + -24.2000000000000028 + -1303.2000000000000455 + 1166.4000000000000909 + -340.2000000000000455 + 32.4000000000000057 + 543.0000000000000000 + -486.0000000000000568 + 141.7500000000000000 + -13.5000000000000000 + -72.4000000000000057 + 64.8000000000000114 + -18.8999999999999986 + 1.8000000000000000 + 21.4975431383220581 + -14.6574157761286745 + 3.2979185496289514 + -0.2442902629354779 + -28.6633908510960751 + 19.5432210348382327 + -4.3972247328386018 + 0.3257203505806372 + 11.9430795212900307 + -8.1430087645159297 + 1.8321769720160841 + -0.1357168127419322 + -1.5924106028386709 + 1.0857345019354574 + -0.2442902629354779 + 0.0180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -72.8926294149661658 + 43.9722473283860253 + -9.8937556488868559 + 0.7328707888064337 + 96.7901725532882438 + -58.6296631045147052 + 13.1916741985158090 + -0.9771610517419118 + -40.3292385638700992 + 24.4290262935477962 + -5.4965309160482541 + 0.4071504382257967 + 5.3772318085160133 + -3.2572035058063733 + 0.7328707888064341 + -0.0542867250967729 + 48.5950862766441105 + -29.3148315522573526 + 6.5958370992579045 + -0.4885805258709559 + -64.5267817021921530 + 39.0864420696764654 + -8.7944494656772036 + 0.6514407011612744 + 26.8861590425800614 + -16.2860175290318594 + 3.6643539440321682 + -0.2714336254838643 + -3.5848212056773412 + 2.1714690038709143 + -0.4885805258709557 + 0.0361911500645152 + 0.1221451314677389 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1628601752903186 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0678584063709661 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.7664353944032172 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2885805258709571 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.7035752191128983 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.8442902629354787 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5257203505806380 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1357168127419324 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1221451314677389 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1628601752903186 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0678584063709661 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.7664353944032172 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2885805258709571 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.7035752191128983 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.8442902629354787 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5257203505806380 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1357168127419324 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1221451314677389 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1628601752903186 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0678584063709661 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.7664353944032172 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2885805258709571 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.7035752191128983 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.8442902629354787 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5257203505806380 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1357168127419324 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1221451314677389 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1628601752903186 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0678584063709661 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.7664353944032172 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2885805258709571 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.7035752191128983 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.8442902629354787 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5257203505806380 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1357168127419324 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9000000000000000 + 0.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6000000000000001 + -0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6749999999999999 + 0.8999999999999997 + -0.6749999999999997 + 0.1499999999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4499999999999999 + -0.5999999999999998 + 0.4499999999999998 + -0.1000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3750000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.6999999999999975 + -5.3999999999999968 + 1.5749999999999993 + -0.1499999999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.7999999999999985 + 3.5999999999999988 + -1.0499999999999998 + 0.1000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.8000000000000003 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.4000000000000004 + 3.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 3.6000000000000005 + -2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 4.0500000000000007 + -2.7000000000000002 + 0.0000000000000000 + 0.0000000000000000 + -2.7000000000000002 + 1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9000000000000000 + 0.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.6000000000000001 + -0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.1499999999999986 + 45.0000000000000000 + -33.7500000000000000 + 7.5000000000000000 + 12.0999999999999996 + -30.0000000000000000 + 22.5000000000000000 + -5.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + -108.0000000000000000 + 81.0000000000000000 + -18.0000000000000000 + -28.8000000000000007 + 72.0000000000000000 + -54.0000000000000000 + 12.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.3999999999999986 + 81.0000000000000000 + -60.7500000000000000 + 13.5000000000000000 + 21.6000000000000014 + -54.0000000000000000 + 40.5000000000000000 + -9.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000002 + -18.0000000000000000 + 13.5000000000000000 + -3.0000000000000000 + -4.7999999999999998 + 12.0000000000000000 + -9.0000000000000000 + 2.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 80.8499999999999943 + -108.0000000000000000 + 45.0000000000000000 + -6.0000000000000000 + -53.9000000000000057 + 72.0000000000000000 + -30.0000000000000000 + 4.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -244.8000000000000114 + 324.0000000000000000 + -135.0000000000000000 + 18.0000000000000000 + 163.1999999999999886 + -216.0000000000000000 + 90.0000000000000000 + -12.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 183.5999999999999943 + -243.0000000000000000 + 101.2500000000000000 + -13.5000000000000000 + -122.4000000000000057 + 162.0000000000000000 + -67.5000000000000000 + 9.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.7999999999999972 + 54.0000000000000000 + -22.5000000000000000 + 3.0000000000000000 + 27.1999999999999993 + -36.0000000000000000 + 15.0000000000000000 + -2.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 60.6000000000000369 + -54.0000000000000284 + 15.7500000000000107 + -1.5000000000000011 + -40.4000000000000270 + 36.0000000000000213 + -10.5000000000000036 + 1.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000001068 + 0.0000000000000999 + -0.0000000000000306 + 0.0000000000000031 + 1.2000000000000515 + -0.0000000000000426 + 0.0000000000000111 + -0.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3500000000000831 + -0.0000000000000759 + 0.0000000000000226 + -0.0000000000000022 + -0.9000000000000317 + 0.0000000000000253 + -0.0000000000000062 + 0.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000198 + 0.0000000000000173 + -0.0000000000000049 + 0.0000000000000004 + 0.2000000000000040 + -0.0000000000000027 + 0.0000000000000004 + 0.0000000000000000 + -3.9810265070966766 + 2.7143362548386434 + -0.6107256573386948 + 0.0452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 12.5430795212900303 + -8.1430087645159297 + 1.8321769720160841 + -0.1357168127419322 + -8.3620530141933536 + 5.4286725096772868 + -1.2214513146773895 + 0.0904778751612881 + 9.5544636170320238 + -6.5144070116127439 + 1.4657415776128673 + -0.1085734501935457 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -30.4633908510960723 + 19.5432210348382327 + -4.3972247328386018 + 0.3257203505806372 + 20.3089272340640505 + -13.0288140232254879 + 2.9314831552257345 + -0.2171469003870915 + -7.1658477127740188 + 4.8858052587095582 + -1.0993061832096505 + 0.0814300876451593 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 22.8475431383220560 + -14.6574157761286745 + 3.2979185496289514 + -0.2442902629354779 + -15.2316954255480361 + 9.7716105174191163 + -2.1986123664193009 + 0.1628601752903186 + 1.5924106028386709 + -1.0857345019354574 + 0.2442902629354779 + -0.0180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.0772318085160126 + 3.2572035058063720 + -0.7328707888064336 + 0.0542867250967729 + 3.3848212056773415 + -2.1714690038709148 + 0.4885805258709558 + -0.0361911500645152 + -0.0226194687903220 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6678584063709662 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0542867250967729 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.9628601752903188 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3085734501935460 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0407150438225796 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.4721451314677392 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9814300876451594 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0226194687903220 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6678584063709662 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0542867250967729 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.9628601752903188 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3085734501935460 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0407150438225796 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.4721451314677392 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9814300876451594 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0226194687903220 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6678584063709662 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0542867250967729 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.9628601752903188 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3085734501935460 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0407150438225796 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.4721451314677392 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9814300876451594 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0226194687903220 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6678584063709662 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0542867250967729 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.9628601752903188 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3085734501935460 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0407150438225796 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.4721451314677392 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9814300876451594 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.4000000000000004 + 1.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + -4.8000000000000007 + 0.0000000000000000 + 0.0000000000000000 + -5.4000000000000004 + 3.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 1.2000000000000002 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + -4.8000000000000007 + 0.0000000000000000 + 0.0000000000000000 + -21.6000000000000014 + 14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 16.2000000000000028 + -10.8000000000000007 + 0.0000000000000000 + 0.0000000000000000 + -3.6000000000000005 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + -5.4000000000000004 + 3.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 16.2000000000000028 + -10.8000000000000007 + 0.0000000000000000 + 0.0000000000000000 + -12.1500000000000021 + 8.1000000000000014 + 0.0000000000000000 + 0.0000000000000000 + 2.7000000000000002 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 1.2000000000000002 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.6000000000000005 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 2.7000000000000002 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + -0.6000000000000001 + 0.4000000000000000 + 49.2000000000000028 + -120.0000000000000000 + 90.0000000000000000 + -20.0000000000000000 + -132.6000000000000227 + 324.0000000000000000 + -243.0000000000000000 + 54.0000000000000000 + 99.4500000000000171 + -243.0000000000000000 + 182.2500000000000000 + -40.5000000000000000 + -22.1000000000000014 + 54.0000000000000000 + -40.5000000000000000 + 9.0000000000000000 + -132.5999999999999943 + 324.0000000000000000 + -243.0000000000000000 + 54.0000000000000000 + 352.8000000000000114 + -864.0000000000000000 + 648.0000000000000000 + -144.0000000000000000 + -264.6000000000000227 + 648.0000000000000000 + -486.0000000000000000 + 108.0000000000000000 + 58.7999999999999972 + -144.0000000000000000 + 108.0000000000000000 + -24.0000000000000000 + 99.4500000000000028 + -243.0000000000000000 + 182.2500000000000000 + -40.5000000000000000 + -264.6000000000000227 + 648.0000000000000000 + -486.0000000000000000 + 108.0000000000000000 + 198.4499999999999886 + -486.0000000000000000 + 364.5000000000000000 + -81.0000000000000000 + -44.1000000000000014 + 108.0000000000000000 + -81.0000000000000000 + 18.0000000000000000 + -22.1000000000000014 + 54.0000000000000000 + -40.5000000000000000 + 9.0000000000000000 + 58.7999999999999972 + -144.0000000000000000 + 108.0000000000000000 + -24.0000000000000000 + -44.1000000000000014 + 108.0000000000000000 + -81.0000000000000000 + 18.0000000000000000 + 9.8000000000000007 + -24.0000000000000000 + 18.0000000000000000 + -4.0000000000000000 + -102.7999999999999972 + 144.0000000000000000 + -60.0000000000000000 + 8.0000000000000000 + 311.3999999999999773 + -432.0000000000000000 + 180.0000000000000000 + -24.0000000000000000 + -233.5499999999999829 + 324.0000000000000000 + -135.0000000000000000 + 18.0000000000000000 + 51.8999999999999986 + -72.0000000000000000 + 30.0000000000000000 + -4.0000000000000000 + 311.3999999999999773 + -432.0000000000000000 + 180.0000000000000000 + -24.0000000000000000 + -943.2000000000000455 + 1296.0000000000000000 + -540.0000000000000000 + 72.0000000000000000 + 707.3999999999999773 + -972.0000000000000000 + 405.0000000000000000 + -54.0000000000000000 + -157.1999999999999886 + 216.0000000000000000 + -90.0000000000000000 + 12.0000000000000000 + -233.5499999999999829 + 324.0000000000000000 + -135.0000000000000000 + 18.0000000000000000 + 707.4000000000000909 + -972.0000000000000000 + 405.0000000000000000 + -54.0000000000000000 + -530.5499999999999545 + 729.0000000000000000 + -303.7500000000000000 + 40.5000000000000000 + 117.9000000000000057 + -162.0000000000000000 + 67.5000000000000000 + -9.0000000000000000 + 51.8999999999999986 + -72.0000000000000000 + 30.0000000000000000 + -4.0000000000000000 + -157.1999999999999886 + 216.0000000000000000 + -90.0000000000000000 + 12.0000000000000000 + 117.9000000000000057 + -162.0000000000000000 + 67.5000000000000000 + -9.0000000000000000 + -26.1999999999999993 + 36.0000000000000000 + -15.0000000000000000 + 2.0000000000000000 + -480.8000000000000114 + 432.0000000000000000 + -126.0000000000000000 + 12.0000000000000000 + 1202.4000000000000909 + -1080.0000000000000000 + 315.0000000000000568 + -30.0000000000000036 + -901.8000000000000682 + 810.0000000000001137 + -236.2500000000000000 + 22.5000000000000036 + 200.4000000000000341 + -180.0000000000000284 + 52.5000000000000071 + -5.0000000000000000 + 1202.4000000000003183 + -1080.0000000000002274 + 315.0000000000000568 + -30.0000000000000071 + -2887.2000000000007276 + 2592.0000000000004547 + -756.0000000000001137 + 72.0000000000000142 + 2165.4000000000005457 + -1944.0000000000002274 + 567.0000000000000000 + -54.0000000000000071 + -481.2000000000000455 + 432.0000000000000568 + -126.0000000000000142 + 12.0000000000000000 + -901.8000000000000682 + 810.0000000000002274 + -236.2500000000000284 + 22.5000000000000036 + 2165.4000000000005457 + -1944.0000000000004547 + 567.0000000000000000 + -54.0000000000000071 + -1624.0500000000001819 + 1458.0000000000002274 + -425.2500000000000568 + 40.5000000000000071 + 360.9000000000000341 + -324.0000000000000568 + 94.5000000000000000 + -9.0000000000000000 + 200.4000000000000341 + -180.0000000000000284 + 52.5000000000000071 + -5.0000000000000000 + -481.2000000000000455 + 432.0000000000000568 + -126.0000000000000142 + 12.0000000000000000 + 360.9000000000000341 + -324.0000000000000568 + 94.5000000000000000 + -9.0000000000000000 + -80.2000000000000028 + 72.0000000000000000 + -21.0000000000000000 + 2.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.0500000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.0500000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.0500000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.0500000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.0500000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 33.6000000000000014 + -22.3999999999999986 + 0.0000000000000000 + 0.0000000000000000 + -43.2000000000000028 + 28.8000000000000043 + 0.0000000000000000 + 0.0000000000000000 + 18.0000000000000000 + -12.0000000000000018 + 0.0000000000000000 + 0.0000000000000000 + -2.4000000000000004 + 1.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + -100.8000000000000114 + 67.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 129.6000000000000227 + -86.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + -54.0000000000000000 + 36.0000000000000071 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + -4.8000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 75.6000000000000085 + -50.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + -97.2000000000000171 + 64.8000000000000114 + 0.0000000000000000 + 0.0000000000000000 + 40.5000000000000000 + -27.0000000000000036 + 0.0000000000000000 + 0.0000000000000000 + -5.4000000000000004 + 3.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + -16.8000000000000007 + 11.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 21.6000000000000014 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + -9.0000000000000018 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 1.2000000000000002 + -0.8000000000000000 + -109.8000000000000114 + 290.3999999999999773 + -217.7999999999999829 + 48.3999999999999986 + 147.5999999999999943 + -388.8000000000000114 + 291.6000000000000227 + -64.7999999999999972 + -61.5000000000000000 + 162.0000000000000000 + -121.5000000000000000 + 27.0000000000000000 + 8.1999999999999993 + -21.6000000000000014 + 16.1999999999999993 + -3.6000000000000001 + 329.4000000000000341 + -871.2000000000000455 + 653.3999999999999773 + -145.1999999999999886 + -442.8000000000000114 + 1166.4000000000000909 + -874.8000000000000682 + 194.4000000000000341 + 184.5000000000000000 + -486.0000000000000568 + 364.5000000000000000 + -81.0000000000000000 + -24.6000000000000014 + 64.8000000000000114 + -48.6000000000000085 + 10.8000000000000007 + -247.0499999999999829 + 653.4000000000000909 + -490.0499999999999545 + 108.9000000000000057 + 332.0999999999999659 + -874.8000000000000682 + 656.1000000000000227 + -145.8000000000000114 + -138.3750000000000000 + 364.5000000000000568 + -273.3750000000000000 + 60.7500000000000000 + 18.4499999999999993 + -48.6000000000000085 + 36.4500000000000028 + -8.0999999999999996 + 54.8999999999999986 + -145.1999999999999886 + 108.9000000000000057 + -24.1999999999999993 + -73.7999999999999972 + 194.4000000000000341 + -145.8000000000000114 + 32.3999999999999986 + 30.7500000000000000 + -81.0000000000000000 + 60.7500000000000000 + -13.5000000000000000 + -4.0999999999999996 + 10.8000000000000007 + -8.0999999999999996 + 1.7999999999999998 + -13.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 18.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 39.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -54.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 22.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -29.2500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 40.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -16.8750000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -9.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.7500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1947.2000000000000455 + -1742.3999999999998636 + 508.1999999999999318 + -48.3999999999999986 + -2606.4000000000005457 + 2332.8000000000001819 + -680.3999999999999773 + 64.8000000000000114 + 1086.0000000000000000 + -972.0000000000001137 + 283.5000000000000000 + -27.0000000000000036 + -144.8000000000000114 + 129.5999999999999943 + -37.7999999999999972 + 3.6000000000000005 + -5841.6000000000003638 + 5227.2000000000007276 + -1524.5999999999999091 + 145.1999999999999886 + 7819.2000000000007276 + -6998.4000000000005457 + 2041.2000000000002728 + -194.4000000000000341 + -3258.0000000000004547 + 2916.0000000000004547 + -850.5000000000000000 + 81.0000000000000142 + 434.4000000000000341 + -388.8000000000000114 + 113.4000000000000057 + -10.8000000000000007 + 4381.2000000000007276 + -3920.4000000000005457 + 1143.4500000000000455 + -108.9000000000000057 + -5864.4000000000014552 + 5248.8000000000001819 + -1530.9000000000000909 + 145.8000000000000114 + 2443.5000000000004547 + -2187.0000000000004547 + 637.8750000000000000 + -60.7500000000000142 + -325.8000000000000114 + 291.6000000000000227 + -85.0500000000000114 + 8.1000000000000014 + -973.5999999999999091 + 871.2000000000000455 + -254.0999999999999943 + 24.2000000000000028 + 1303.2000000000000455 + -1166.4000000000000909 + 340.2000000000000455 + -32.4000000000000057 + -543.0000000000000000 + 486.0000000000000568 + -141.7500000000000000 + 13.5000000000000000 + 72.4000000000000057 + -64.8000000000000114 + 18.8999999999999986 + -1.8000000000000000 + 11.1999999999999993 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000014 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000036 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.1999999999999993 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000014 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000036 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.1999999999999993 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000014 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000036 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.1999999999999993 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000014 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000036 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.1999999999999993 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000014 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000036 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.2000000000000002 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.6000000000000005 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.7000000000000002 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6000000000000001 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.8999999999999998 + -1.1999999999999997 + 0.8999999999999996 + -0.1999999999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.6999999999999993 + 3.5999999999999988 + -2.6999999999999988 + 0.5999999999999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.0249999999999995 + -2.6999999999999988 + 2.0249999999999995 + -0.4499999999999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4499999999999999 + 0.5999999999999998 + -0.4499999999999998 + 0.1000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.1250000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5999999999999961 + 7.1999999999999966 + -2.0999999999999992 + 0.1999999999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 22.7999999999999901 + -21.5999999999999908 + 6.2999999999999972 + -0.5999999999999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.0999999999999943 + 16.1999999999999922 + -4.7249999999999979 + 0.4499999999999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.7999999999999985 + -3.5999999999999988 + 1.0499999999999998 + -0.1000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -25.2000000000000028 + 16.8000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 16.8000000000000007 + -11.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 32.4000000000000057 + -21.6000000000000014 + 0.0000000000000000 + 0.0000000000000000 + -21.6000000000000014 + 14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.5000000000000000 + 9.0000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 9.0000000000000018 + -6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.8000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 82.3499999999999943 + -217.8000000000000114 + 163.3499999999999943 + -36.2999999999999972 + -54.8999999999999986 + 145.1999999999999886 + -108.9000000000000057 + 24.1999999999999993 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -110.6999999999999886 + 291.6000000000000227 + -218.6999999999999886 + 48.6000000000000085 + 73.7999999999999972 + -194.4000000000000341 + 145.8000000000000114 + -32.3999999999999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 46.1250000000000000 + -121.5000000000000000 + 91.1250000000000000 + -20.2500000000000036 + -30.7500000000000000 + 81.0000000000000000 + -60.7500000000000000 + 13.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -6.1500000000000004 + 16.2000000000000028 + -12.1500000000000021 + 2.7000000000000002 + 4.0999999999999996 + -10.8000000000000007 + 8.0999999999999996 + -1.7999999999999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 9.7500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -6.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 9.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.6250000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.7500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.7500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1460.4000000000000909 + 1306.8000000000001819 + -381.1499999999999773 + 36.2999999999999972 + 973.5999999999999091 + -871.2000000000000455 + 254.0999999999999943 + -24.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1954.8000000000001819 + -1749.6000000000001364 + 510.3000000000000114 + -48.6000000000000085 + -1303.2000000000000455 + 1166.4000000000000909 + -340.2000000000000455 + 32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -814.5000000000001137 + 729.0000000000001137 + -212.6250000000000000 + 20.2500000000000036 + 543.0000000000000000 + -486.0000000000000568 + 141.7500000000000000 + -13.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 108.5999999999999943 + -97.2000000000000028 + 28.3500000000000014 + -2.7000000000000002 + -72.4000000000000057 + 64.8000000000000114 + -18.8999999999999986 + 1.8000000000000000 + 21.4975431383220581 + -14.6574157761286745 + 3.2979185496289514 + -0.2442902629354779 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -72.8926294149661658 + 43.9722473283860253 + -9.8937556488868559 + 0.7328707888064337 + 48.5950862766441105 + -29.3148315522573526 + 6.5958370992579045 + -0.4885805258709559 + -28.6633908510960751 + 19.5432210348382327 + -4.3972247328386018 + 0.3257203505806372 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 96.7901725532882438 + -58.6296631045147052 + 13.1916741985158090 + -0.9771610517419118 + -64.5267817021921530 + 39.0864420696764654 + -8.7944494656772036 + 0.6514407011612744 + 11.9430795212900307 + -8.1430087645159297 + 1.8321769720160841 + -0.1357168127419322 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.3292385638700992 + 24.4290262935477962 + -5.4965309160482541 + 0.4071504382257967 + 26.8861590425800614 + -16.2860175290318594 + 3.6643539440321682 + -0.2714336254838643 + -1.5924106028386709 + 1.0857345019354574 + -0.2442902629354779 + 0.0180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.3772318085160133 + -3.2572035058063733 + 0.7328707888064341 + -0.0542867250967729 + -3.5848212056773412 + 2.1714690038709143 + -0.4885805258709557 + 0.0361911500645152 + 0.1221451314677389 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.7664353944032172 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.8442902629354787 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1628601752903186 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2885805258709571 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5257203505806380 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0678584063709661 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.7035752191128983 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1357168127419324 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1221451314677389 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.7664353944032172 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.8442902629354787 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1628601752903186 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2885805258709571 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5257203505806380 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0678584063709661 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.7035752191128983 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1357168127419324 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1221451314677389 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.7664353944032172 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.8442902629354787 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1628601752903186 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2885805258709571 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5257203505806380 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0678584063709661 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.7035752191128983 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1357168127419324 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1221451314677389 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.7664353944032172 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.8442902629354787 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1628601752903186 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2885805258709571 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5257203505806380 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0678584063709661 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.7035752191128983 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1357168127419324 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 33.6000000000000014 + -22.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + -100.8000000000000114 + 67.2000000000000171 + 0.0000000000000000 + 0.0000000000000000 + 75.6000000000000085 + -50.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + -16.8000000000000007 + 11.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + -43.2000000000000028 + 28.8000000000000043 + 0.0000000000000000 + 0.0000000000000000 + 129.6000000000000227 + -86.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + -97.2000000000000171 + 64.8000000000000114 + 0.0000000000000000 + 0.0000000000000000 + 21.6000000000000014 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 18.0000000000000000 + -12.0000000000000018 + 0.0000000000000000 + 0.0000000000000000 + -54.0000000000000071 + 36.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 40.5000000000000000 + -27.0000000000000036 + 0.0000000000000000 + 0.0000000000000000 + -9.0000000000000018 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + -2.4000000000000004 + 1.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + -4.8000000000000007 + 0.0000000000000000 + 0.0000000000000000 + -5.4000000000000004 + 3.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 1.2000000000000002 + -0.8000000000000000 + -109.7999999999999829 + 290.3999999999999773 + -217.7999999999999829 + 48.3999999999999986 + 329.4000000000000341 + -871.2000000000000455 + 653.4000000000000909 + -145.1999999999999886 + -247.0499999999999829 + 653.4000000000000909 + -490.0499999999999545 + 108.9000000000000057 + 54.8999999999999986 + -145.1999999999999886 + 108.9000000000000057 + -24.1999999999999993 + 147.5999999999999943 + -388.8000000000000114 + 291.6000000000000227 + -64.8000000000000114 + -442.8000000000000114 + 1166.4000000000000909 + -874.8000000000000682 + 194.4000000000000341 + 332.0999999999999659 + -874.8000000000000682 + 656.1000000000000227 + -145.8000000000000114 + -73.7999999999999972 + 194.4000000000000341 + -145.8000000000000114 + 32.3999999999999986 + -61.4999999999999929 + 162.0000000000000284 + -121.5000000000000000 + 27.0000000000000000 + 184.5000000000000000 + -486.0000000000000568 + 364.5000000000000000 + -81.0000000000000000 + -138.3750000000000000 + 364.5000000000000568 + -273.3750000000000000 + 60.7500000000000000 + 30.7500000000000000 + -81.0000000000000000 + 60.7500000000000000 + -13.5000000000000000 + 8.1999999999999993 + -21.6000000000000014 + 16.1999999999999993 + -3.6000000000000001 + -24.6000000000000014 + 64.8000000000000114 + -48.6000000000000085 + 10.8000000000000007 + 18.4499999999999993 + -48.6000000000000085 + 36.4500000000000028 + -8.0999999999999996 + -4.0999999999999996 + 10.8000000000000007 + -8.0999999999999996 + 1.7999999999999998 + -13.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 39.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -29.2500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 18.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -54.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 40.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -9.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 22.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -16.8750000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.7500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1947.2000000000000455 + -1742.3999999999998636 + 508.2000000000000455 + -48.3999999999999986 + -5841.6000000000003638 + 5227.2000000000007276 + -1524.5999999999999091 + 145.1999999999999886 + 4381.2000000000007276 + -3920.4000000000000909 + 1143.4500000000000455 + -108.9000000000000199 + -973.5999999999999091 + 871.2000000000000455 + -254.0999999999999943 + 24.2000000000000028 + -2606.4000000000005457 + 2332.8000000000001819 + -680.3999999999999773 + 64.8000000000000114 + 7819.2000000000007276 + -6998.4000000000005457 + 2041.2000000000000455 + -194.4000000000000341 + -5864.4000000000014552 + 5248.8000000000001819 + -1530.9000000000000909 + 145.8000000000000114 + 1303.2000000000000455 + -1166.4000000000000909 + 340.2000000000000455 + -32.4000000000000057 + 1086.0000000000000000 + -972.0000000000001137 + 283.5000000000000000 + -27.0000000000000036 + -3258.0000000000004547 + 2916.0000000000004547 + -850.5000000000000000 + 81.0000000000000142 + 2443.5000000000004547 + -2187.0000000000004547 + 637.8750000000000000 + -60.7500000000000142 + -543.0000000000000000 + 486.0000000000000568 + -141.7500000000000000 + 13.5000000000000000 + -144.8000000000000114 + 129.5999999999999943 + -37.7999999999999972 + 3.6000000000000005 + 434.4000000000000341 + -388.8000000000000114 + 113.4000000000000057 + -10.8000000000000007 + -325.8000000000000114 + 291.6000000000000227 + -85.0500000000000114 + 8.1000000000000014 + 72.4000000000000057 + -64.8000000000000114 + 18.8999999999999986 + -1.8000000000000000 + 11.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000085 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000085 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000085 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000085 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000085 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9000000000000000 + 0.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.6000000000000001 + -0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6749999999999999 + 0.8999999999999997 + -0.6749999999999997 + 0.1499999999999999 + 0.4499999999999999 + -0.5999999999999998 + 0.4499999999999998 + -0.1000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3750000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.6999999999999975 + -5.3999999999999968 + 1.5749999999999993 + -0.1499999999999999 + -3.7999999999999985 + 3.5999999999999988 + -1.0499999999999998 + 0.1000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.2000000000000002 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.6000000000000005 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 2.7000000000000002 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + -0.6000000000000001 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.8999999999999998 + -1.1999999999999997 + 0.8999999999999996 + -0.1999999999999999 + -2.6999999999999993 + 3.5999999999999988 + -2.6999999999999988 + 0.5999999999999998 + 2.0249999999999995 + -2.6999999999999988 + 2.0249999999999995 + -0.4499999999999998 + -0.4499999999999999 + 0.5999999999999998 + -0.4499999999999998 + 0.1000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.1250000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5999999999999961 + 7.1999999999999966 + -2.0999999999999992 + 0.1999999999999999 + 22.7999999999999901 + -21.5999999999999908 + 6.2999999999999972 + -0.5999999999999998 + -17.0999999999999943 + 16.1999999999999922 + -4.7249999999999979 + 0.4499999999999998 + 3.7999999999999985 + -3.5999999999999988 + 1.0499999999999998 + -0.1000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + +# piHH + +6 +0.0 +4.0 +0.0 +4.0 +0.0 +9.0 + + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.3727308659999999 + -2.2484872439999997 + 0.0000000000000000 + 0.0000000000000000 + -2.2484872439999997 + 1.4989914959999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.2484872439999997 + 1.4989914959999999 + 0.0000000000000000 + 0.0000000000000000 + 1.4989914959999999 + -0.9993276639999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4969744879999993 + 13.4909234639999980 + -10.1181925979999985 + 2.2484872439999997 + 2.9979829919999998 + -8.9939489759999987 + 6.7454617319999990 + -1.4989914959999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.9979829919999998 + -8.9939489759999987 + 6.7454617319999990 + -1.4989914959999999 + -1.9986553279999999 + 5.9959659839999997 + -4.4969744879999993 + 0.9993276639999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4969744879999993 + 2.9979829919999998 + 0.0000000000000000 + 0.0000000000000000 + 13.4909234639999980 + -8.9939489759999987 + 0.0000000000000000 + 0.0000000000000000 + -10.1181925979999985 + 6.7454617319999990 + 0.0000000000000000 + 0.0000000000000000 + 2.2484872439999997 + -1.4989914959999999 + 0.0000000000000000 + 0.0000000000000000 + 2.9979829919999998 + -1.9986553279999999 + 0.0000000000000000 + 0.0000000000000000 + -8.9939489759999987 + 5.9959659839999997 + 0.0000000000000000 + 0.0000000000000000 + 6.7454617319999990 + -4.4969744879999993 + 0.0000000000000000 + 0.0000000000000000 + -1.4989914959999999 + 0.9993276639999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.9959659839999997 + -17.9878979519999973 + 13.4909234639999980 + -2.9979829919999998 + -17.9878979519999973 + 53.9636938559999919 + -40.4727703919999939 + 8.9939489759999987 + 13.4909234639999980 + -40.4727703919999939 + 30.3545777939999937 + -6.7454617319999990 + -2.9979829919999998 + 8.9939489759999987 + -6.7454617319999990 + 1.4989914959999999 + -3.9973106559999998 + 11.9919319679999994 + -8.9939489759999987 + 1.9986553279999999 + 11.9919319679999994 + -35.9757959039999946 + 26.9818469279999960 + -5.9959659839999997 + -8.9939489759999987 + 26.9818469279999960 + -20.2363851959999970 + 4.4969744879999993 + 1.9986553279999999 + -5.9959659839999997 + 4.4969744879999993 + -0.9993276639999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4969744879999993 + 2.9979829919999998 + 0.0000000000000000 + 0.0000000000000000 + 2.9979829919999998 + -1.9986553279999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.4909234639999980 + -8.9939489759999987 + 0.0000000000000000 + 0.0000000000000000 + -8.9939489759999987 + 5.9959659839999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -10.1181925979999985 + 6.7454617319999990 + 0.0000000000000000 + 0.0000000000000000 + 6.7454617319999990 + -4.4969744879999993 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2484872439999997 + -1.4989914959999999 + 0.0000000000000000 + 0.0000000000000000 + -1.4989914959999999 + 0.9993276639999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.9959659839999997 + -17.9878979519999973 + 13.4909234639999980 + -2.9979829919999998 + -3.9973106559999998 + 11.9919319679999994 + -8.9939489759999987 + 1.9986553279999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9878979519999973 + 53.9636938559999919 + -40.4727703919999939 + 8.9939489759999987 + 11.9919319679999994 + -35.9757959039999946 + 26.9818469279999960 + -5.9959659839999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.4909234639999980 + -40.4727703919999939 + 30.3545777939999937 + -6.7454617319999990 + -8.9939489759999987 + 26.9818469279999960 + -20.2363851959999970 + 4.4969744879999993 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.9979829919999998 + 8.9939489759999987 + -6.7454617319999990 + 1.4989914959999999 + 1.9986553279999999 + -5.9959659839999997 + 4.4969744879999993 + -0.9993276639999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.9959659839999997 + -3.9973106559999998 + 0.0000000000000000 + 0.0000000000000000 + -17.9878979519999973 + 11.9919319679999994 + 0.0000000000000000 + 0.0000000000000000 + 13.4909234639999980 + -8.9939489759999987 + 0.0000000000000000 + 0.0000000000000000 + -2.9979829919999998 + 1.9986553279999999 + 0.0000000000000000 + 0.0000000000000000 + -17.9878979519999973 + 11.9919319679999994 + 0.0000000000000000 + 0.0000000000000000 + 53.9636938559999919 + -35.9757959039999946 + 0.0000000000000000 + 0.0000000000000000 + -40.4727703919999939 + 26.9818469279999960 + 0.0000000000000000 + 0.0000000000000000 + 8.9939489759999987 + -5.9959659839999997 + 0.0000000000000000 + 0.0000000000000000 + 13.4909234639999980 + -8.9939489759999987 + 0.0000000000000000 + 0.0000000000000000 + -40.4727703919999939 + 26.9818469279999960 + 0.0000000000000000 + 0.0000000000000000 + 30.3545777939999937 + -20.2363851959999970 + 0.0000000000000000 + 0.0000000000000000 + -6.7454617319999990 + 4.4969744879999993 + 0.0000000000000000 + 0.0000000000000000 + -2.9979829919999998 + 1.9986553279999999 + 0.0000000000000000 + 0.0000000000000000 + 8.9939489759999987 + -5.9959659839999997 + 0.0000000000000000 + 0.0000000000000000 + -6.7454617319999990 + 4.4969744879999993 + 0.0000000000000000 + 0.0000000000000000 + 1.4989914959999999 + -0.9993276639999999 + -7.9946213120000005 + 23.9838639359999988 + -17.9878979519999973 + 3.9973106559999998 + 23.9838639359999988 + -71.9515918079999892 + 53.9636938559999919 + -11.9919319679999994 + -17.9878979519999973 + 53.9636938559999919 + -40.4727703919999939 + 8.9939489759999987 + 3.9973106559999998 + -11.9919319679999994 + 8.9939489759999987 + -1.9986553279999999 + 23.9838639359999988 + -71.9515918079999892 + 53.9636938559999919 + -11.9919319679999994 + -71.9515918079999892 + 215.8547754239999108 + -161.8910815680000042 + 35.9757959039999946 + 53.9636938559999919 + -161.8910815679999473 + 121.4183111759999605 + -26.9818469279999960 + -11.9919319679999994 + 35.9757959039999946 + -26.9818469279999960 + 5.9959659839999997 + -17.9878979519999973 + 53.9636938559999919 + -40.4727703919999939 + 8.9939489759999987 + 53.9636938559999919 + -161.8910815679999473 + 121.4183111759999889 + -26.9818469279999960 + -40.4727703919999939 + 121.4183111759999747 + -91.0637333819999810 + 20.2363851959999970 + 8.9939489759999987 + -26.9818469279999960 + 20.2363851959999970 + -4.4969744879999993 + 3.9973106559999998 + -11.9919319679999994 + 8.9939489759999987 + -1.9986553279999999 + -11.9919319679999994 + 35.9757959039999946 + -26.9818469279999960 + 5.9959659839999997 + 8.9939489759999987 + -26.9818469279999960 + 20.2363851959999970 + -4.4969744879999993 + -1.9986553279999999 + 5.9959659839999997 + -4.4969744879999993 + 0.9993276639999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + +# Tij + +6 +0.0 +4.0 +0.0 +4.0 +0.0 +9.0 + + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -2.6355000000 + 1.7570000000 + 0.0000000000 + 0.0000000000 + 6.3252000000 + -4.2168000000 + 0.0000000000 + 0.0000000000 + -4.7439000000 + 3.1626000000 + 0.0000000000 + 0.0000000000 + 1.0542000000 + -0.7028000000 + 0.0000000000 + 0.0000000000 + 6.3252000000 + -4.2168000000 + 0.0000000000 + 0.0000000000 + -15.1804800000 + 10.1203200000 + 0.0000000000 + 0.0000000000 + 11.3853600000 + -7.5902400000 + 0.0000000000 + 0.0000000000 + -2.5300800000 + 1.6867200000 + 0.0000000000 + 0.0000000000 + -4.7439000000 + 3.1626000000 + 0.0000000000 + 0.0000000000 + 11.3853600000 + -7.5902400000 + 0.0000000000 + 0.0000000000 + -8.5390200000 + 5.6926800000 + 0.0000000000 + 0.0000000000 + 1.8975600000 + -1.2650400000 + 0.0000000000 + 0.0000000000 + 1.0542000000 + -0.7028000000 + 0.0000000000 + 0.0000000000 + -2.5300800000 + 1.6867200000 + 0.0000000000 + 0.0000000000 + 1.8975600000 + -1.2650400000 + 0.0000000000 + 0.0000000000 + -0.4216800000 + 0.2811200000 + 3.0080000000 + -9.3276000000 + 6.9957000000 + -1.5546000000 + -7.2192000000 + 22.3862400000 + -16.7896800000 + 3.7310400000 + 5.4144000000 + -16.7896800000 + 12.5922600000 + -2.7982800000 + -1.2032000000 + 3.7310400000 + -2.7982800000 + 0.6218400000 + -7.2192000000 + 22.3862400000 + -16.7896800000 + 3.7310400000 + 17.3260800000 + -53.7269760000 + 40.2952320000 + -8.9544960000 + -12.9945600000 + 40.2952320000 + -30.2214240000 + 6.7158720000 + 2.8876800000 + -8.9544960000 + 6.7158720000 + -1.4924160000 + 5.4144000000 + -16.7896800000 + 12.5922600000 + -2.7982800000 + -12.9945600000 + 40.2952320000 + -30.2214240000 + 6.7158720000 + 9.7459200000 + -30.2214240000 + 22.6660680000 + -5.0369040000 + -2.1657600000 + 6.7158720000 + -5.0369040000 + 1.1193120000 + -1.2032000000 + 3.7310400000 + -2.7982800000 + 0.6218400000 + 2.8876800000 + -8.9544960000 + 6.7158720000 + -1.4924160000 + -2.1657600000 + 6.7158720000 + -5.0369040000 + 1.1193120000 + 0.4812800000 + -1.4924160000 + 1.1193120000 + -0.2487360000 + -0.1012000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.5829120000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.3278880000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1012000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.5829120000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.3278880000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1012000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.5829120000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.3278880000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1012000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.5829120000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.3278880000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1012000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.5829120000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.3278880000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1012000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.5829120000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.3278880000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1012000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.5829120000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.3278880000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 14.2317000000 + -9.4878000000 + 0.0000000000 + 0.0000000000 + -18.9756000000 + 12.6504000000 + 0.0000000000 + 0.0000000000 + 7.9065000000 + -5.2710000000 + 0.0000000000 + 0.0000000000 + -1.0542000000 + 0.7028000000 + 0.0000000000 + 0.0000000000 + -34.1560800000 + 22.7707200000 + 0.0000000000 + 0.0000000000 + 45.5414400000 + -30.3609600000 + 0.0000000000 + 0.0000000000 + -18.9756000000 + 12.6504000000 + 0.0000000000 + 0.0000000000 + 2.5300800000 + -1.6867200000 + 0.0000000000 + 0.0000000000 + 25.6170600000 + -17.0780400000 + 0.0000000000 + 0.0000000000 + -34.1560800000 + 22.7707200000 + 0.0000000000 + 0.0000000000 + 14.2317000000 + -9.4878000000 + 0.0000000000 + 0.0000000000 + -1.8975600000 + 1.2650400000 + 0.0000000000 + 0.0000000000 + -5.6926800000 + 3.7951200000 + 0.0000000000 + 0.0000000000 + 7.5902400000 + -5.0601600000 + 0.0000000000 + 0.0000000000 + -3.1626000000 + 2.1084000000 + 0.0000000000 + 0.0000000000 + 0.4216800000 + -0.2811200000 + -16.2432000000 + 50.3690400000 + -37.7767800000 + 8.3948400000 + 21.6576000000 + -67.1587200000 + 50.3690400000 + -11.1931200000 + -9.0240000000 + 27.9828000000 + -20.9871000000 + 4.6638000000 + 1.2032000000 + -3.7310400000 + 2.7982800000 + -0.6218400000 + 38.9836800000 + -120.8856960000 + 90.6642720000 + -20.1476160000 + -51.9782400000 + 161.1809280000 + -120.8856960000 + 26.8634880000 + 21.6576000000 + -67.1587200000 + 50.3690400000 + -11.1931200000 + -2.8876800000 + 8.9544960000 + -6.7158720000 + 1.4924160000 + -29.2377600000 + 90.6642720000 + -67.9982040000 + 15.1107120000 + 38.9836800000 + -120.8856960000 + 90.6642720000 + -20.1476160000 + -16.2432000000 + 50.3690400000 + -37.7767800000 + 8.3948400000 + 2.1657600000 + -6.7158720000 + 5.0369040000 + -1.1193120000 + 6.4972800000 + -20.1476160000 + 15.1107120000 + -3.3579360000 + -8.6630400000 + 26.8634880000 + -20.1476160000 + 4.4772480000 + 3.6096000000 + -11.1931200000 + 8.3948400000 + -1.8655200000 + -0.4812800000 + 1.4924160000 + -1.1193120000 + 0.2487360000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 14.2317000000 + -9.4878000000 + 0.0000000000 + 0.0000000000 + -34.1560800000 + 22.7707200000 + 0.0000000000 + 0.0000000000 + 25.6170600000 + -17.0780400000 + 0.0000000000 + 0.0000000000 + -5.6926800000 + 3.7951200000 + 0.0000000000 + 0.0000000000 + -18.9756000000 + 12.6504000000 + 0.0000000000 + 0.0000000000 + 45.5414400000 + -30.3609600000 + 0.0000000000 + 0.0000000000 + -34.1560800000 + 22.7707200000 + 0.0000000000 + 0.0000000000 + 7.5902400000 + -5.0601600000 + 0.0000000000 + 0.0000000000 + 7.9065000000 + -5.2710000000 + 0.0000000000 + 0.0000000000 + -18.9756000000 + 12.6504000000 + 0.0000000000 + 0.0000000000 + 14.2317000000 + -9.4878000000 + 0.0000000000 + 0.0000000000 + -3.1626000000 + 2.1084000000 + 0.0000000000 + 0.0000000000 + -1.0542000000 + 0.7028000000 + 0.0000000000 + 0.0000000000 + 2.5300800000 + -1.6867200000 + 0.0000000000 + 0.0000000000 + -1.8975600000 + 1.2650400000 + 0.0000000000 + 0.0000000000 + 0.4216800000 + -0.2811200000 + -16.2432000000 + 50.3690400000 + -37.7767800000 + 8.3948400000 + 38.9836800000 + -120.8856960000 + 90.6642720000 + -20.1476160000 + -29.2377600000 + 90.6642720000 + -67.9982040000 + 15.1107120000 + 6.4972800000 + -20.1476160000 + 15.1107120000 + -3.3579360000 + 21.6576000000 + -67.1587200000 + 50.3690400000 + -11.1931200000 + -51.9782400000 + 161.1809280000 + -120.8856960000 + 26.8634880000 + 38.9836800000 + -120.8856960000 + 90.6642720000 + -20.1476160000 + -8.6630400000 + 26.8634880000 + -20.1476160000 + 4.4772480000 + -9.0240000000 + 27.9828000000 + -20.9871000000 + 4.6638000000 + 21.6576000000 + -67.1587200000 + 50.3690400000 + -11.1931200000 + -16.2432000000 + 50.3690400000 + -37.7767800000 + 8.3948400000 + 3.6096000000 + -11.1931200000 + 8.3948400000 + -1.8655200000 + 1.2032000000 + -3.7310400000 + 2.7982800000 + -0.6218400000 + -2.8876800000 + 8.9544960000 + -6.7158720000 + 1.4924160000 + 2.1657600000 + -6.7158720000 + 5.0369040000 + -1.1193120000 + -0.4812800000 + 1.4924160000 + -1.1193120000 + 0.2487360000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -76.8511800000 + 51.2341200000 + 0.0000000000 + 0.0000000000 + 102.4682400000 + -68.3121600000 + 0.0000000000 + 0.0000000000 + -42.6951000000 + 28.4634000000 + 0.0000000000 + 0.0000000000 + 5.6926800000 + -3.7951200000 + 0.0000000000 + 0.0000000000 + 102.4682400000 + -68.3121600000 + 0.0000000000 + 0.0000000000 + -136.6243200000 + 91.0828800000 + 0.0000000000 + 0.0000000000 + 56.9268000000 + -37.9512000000 + 0.0000000000 + 0.0000000000 + -7.5902400000 + 5.0601600000 + 0.0000000000 + 0.0000000000 + -42.6951000000 + 28.4634000000 + 0.0000000000 + 0.0000000000 + 56.9268000000 + -37.9512000000 + 0.0000000000 + 0.0000000000 + -23.7195000000 + 15.8130000000 + 0.0000000000 + 0.0000000000 + 3.1626000000 + -2.1084000000 + 0.0000000000 + 0.0000000000 + 5.6926800000 + -3.7951200000 + 0.0000000000 + 0.0000000000 + -7.5902400000 + 5.0601600000 + 0.0000000000 + 0.0000000000 + 3.1626000000 + -2.1084000000 + 0.0000000000 + 0.0000000000 + -0.4216800000 + 0.2811200000 + 87.7132800000 + -271.9928159999 + 203.9946120000 + -45.3321360000 + -116.9510400000 + 362.6570879999 + -271.9928159999 + 60.4428480000 + 48.7296000000 + -151.1071200000 + 113.3303400000 + -25.1845200000 + -6.4972800000 + 20.1476160000 + -15.1107120000 + 3.3579360000 + -116.9510400000 + 362.6570880000 + -271.9928160000 + 60.4428480000 + 155.9347200000 + -483.5427840000 + 362.6570880000 + -80.5904640000 + -64.9728000000 + 201.4761600000 + -151.1071200000 + 33.5793600000 + 8.6630400000 + -26.8634880000 + 20.1476160000 + -4.4772480000 + 48.7296000000 + -151.1071200000 + 113.3303400000 + -25.1845200000 + -64.9728000000 + 201.4761600000 + -151.1071200000 + 33.5793600000 + 27.0720000000 + -83.9484000000 + 62.9613000000 + -13.9914000000 + -3.6096000000 + 11.1931200000 + -8.3948400000 + 1.8655200000 + -6.4972800000 + 20.1476160000 + -15.1107120000 + 3.3579360000 + 8.6630400000 + -26.8634880000 + 20.1476160000 + -4.4772480000 + -3.6096000000 + 11.1931200000 + -8.3948400000 + 1.8655200000 + 0.4812800000 + -1.4924160000 + 1.1193120000 + -0.2487360000 + -2.9509920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -5.2462080000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.9108000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -2.9509920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -5.2462080000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.9108000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -2.9509920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -5.2462080000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.9108000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -2.9509920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -5.2462080000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.9108000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -2.9509920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -5.2462080000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.9108000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -2.9509920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -5.2462080000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.9108000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -2.9509920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -5.2462080000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.9108000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 diff --git a/src/MANYBODY/pair_rebo.cpp b/src/MANYBODY/pair_rebo.cpp index 1f31c0b0cd..10d1d83579 100644 --- a/src/MANYBODY/pair_rebo.cpp +++ b/src/MANYBODY/pair_rebo.cpp @@ -30,9 +30,263 @@ void PairREBO::settings(int narg, char **/*arg*/) cutlj = 0.0; ljflag = torflag = 0; - - // this one parameter for C-C interactions is different in REBO vs AIREBO - // see Favata, Micheletti, Ryu, Pugno, Comp Phys Comm (2016) - - PCCf_2_0 = 0.0; + PCCf_2_0 = -0.0276030; +} + +/* ---------------------------------------------------------------------- + initialize spline knot values +------------------------------------------------------------------------- */ + +void PairREBO::spline_init() +{ + int i,j,k; + + for (i = 0; i < 5; i++) { + for (j = 0; j < 5; j++) { + PCCf[i][j] = 0.0; + PCCdfdx[i][j] = 0.0; + PCCdfdy[i][j] = 0.0; + PCHf[i][j] = 0.0; + PCHdfdx[i][j] = 0.0; + PCHdfdy[i][j] = 0.0; + } + } + + PCCf[0][2] = 0.007860700254745; + PCCf[0][3] = 0.016125364564267; + PCCf[1][1] = 0.003026697473481; + PCCf[1][2] = 0.006326248241119; + PCCf[2][0] = 0.; + PCCf[2][1] = 0.003179530830731; + + PCHf[0][1] = 0.2093367328250380; + PCHf[0][2] = -0.064449615432525; + PCHf[0][3] = -0.303927546346162; + PCHf[1][0] = 0.010; + PCHf[1][1] = -0.1251234006287090; + PCHf[1][2] = -0.298905245783; + PCHf[2][0] = -0.1220421462782555; + PCHf[2][1] = -0.3005291724067579; + PCHf[3][0] = -0.307584705066; + + for (int nH = 0; nH < 4; nH++) { + for (int nC = 0; nC < 4; nC++) { + double y[4] = {0}, y1[4] = {0}, y2[4] = {0}; + y[0] = PCCf[nC][nH]; + y[1] = PCCf[nC][nH+1]; + y[2] = PCCf[nC+1][nH]; + y[3] = PCCf[nC+1][nH+1]; + Spbicubic_patch_coeffs(nC, nC+1, nH, nH+1, y, y1, y2, &pCC[nC][nH][0]); + y[0] = PCHf[nC][nH]; + y[1] = PCHf[nC][nH+1]; + y[2] = PCHf[nC+1][nH]; + y[3] = PCHf[nC+1][nH+1]; + Spbicubic_patch_coeffs(nC, nC+1, nH, nH+1, y, y1, y2, &pCH[nC][nH][0]); + } + } + + for (i = 0; i < 5; i++) { + for (j = 0; j < 5; j++) { + for (k = 0; k < 10; k++) { + piCCf[i][j][k] = 0.0; + piCCdfdx[i][j][k] = 0.0; + piCCdfdy[i][j][k] = 0.0; + piCCdfdz[i][j][k] = 0.0; + piCHf[i][j][k] = 0.0; + piCHdfdx[i][j][k] = 0.0; + piCHdfdy[i][j][k] = 0.0; + piCHdfdz[i][j][k] = 0.0; + piHHf[i][j][k] = 0.0; + piHHdfdx[i][j][k] = 0.0; + piHHdfdy[i][j][k] = 0.0; + piHHdfdz[i][j][k] = 0.0; + Tf[i][j][k] = 0.0; + Tdfdx[i][j][k] = 0.0; + Tdfdy[i][j][k] = 0.0; + Tdfdz[i][j][k] = 0.0; + } + } + } + + for (i = 3; i < 10; i++) piCCf[0][0][i] = 0.0049586079; + piCCf[1][0][1] = 0.021693495; + piCCf[0][1][1] = 0.021693495; + for (i = 2; i < 10; i++) piCCf[1][0][i] = 0.0049586079; + for (i = 2; i < 10; i++) piCCf[0][1][i] = 0.0049586079; + piCCf[1][1][1] = 0.05250; + piCCf[1][1][2] = -0.002088750; + for (i = 3; i < 10; i++) piCCf[1][1][i] = -0.00804280; + piCCf[2][0][1] = 0.024698831850; + piCCf[0][2][1] = 0.024698831850; + piCCf[2][0][2] = -0.00597133450; + piCCf[0][2][2] = -0.00597133450; + for (i = 3; i < 10; i++) piCCf[2][0][i] = 0.0049586079; + for (i = 3; i < 10; i++) piCCf[0][2][i] = 0.0049586079; + piCCf[2][1][1] = 0.00482478490; + piCCf[1][2][1] = 0.00482478490; + piCCf[2][1][2] = 0.0150; + piCCf[1][2][2] = 0.0150; + piCCf[2][1][3] = -0.010; + piCCf[1][2][3] = -0.010; + piCCf[2][1][4] = -0.01168893870; + piCCf[1][2][4] = -0.01168893870; + piCCf[2][1][5] = -0.013377877400; + piCCf[1][2][5] = -0.013377877400; + piCCf[2][1][6] = -0.015066816000; + piCCf[1][2][6] = -0.015066816000; + for (i = 7; i < 10; i++) piCCf[2][1][i] = -0.015066816000; + for (i = 7; i < 10; i++) piCCf[1][2][i] = -0.015066816000; + piCCf[2][2][1] = 0.0472247850; + piCCf[2][2][2] = 0.0110; + piCCf[2][2][3] = 0.0198529350; + piCCf[2][2][4] = 0.01654411250; + piCCf[2][2][5] = 0.013235290; + piCCf[2][2][6] = 0.00992646749999 ; + piCCf[2][2][7] = 0.006617644999; + piCCf[2][2][8] = 0.00330882250; + piCCf[3][0][1] = -0.05989946750; + piCCf[0][3][1] = -0.05989946750; + piCCf[3][0][2] = -0.05989946750; + piCCf[0][3][2] = -0.05989946750; + for (i = 3; i < 10; i++) piCCf[3][0][i] = 0.0049586079; + for (i = 3; i < 10; i++) piCCf[0][3][i] = 0.0049586079; + piCCf[3][1][2] = -0.0624183760; + piCCf[1][3][2] = -0.0624183760; + for (i = 3; i < 10; i++) piCCf[3][1][i] = -0.0624183760; + for (i = 3; i < 10; i++) piCCf[1][3][i] = -0.0624183760; + piCCf[3][2][1] = -0.02235469150; + piCCf[2][3][1] = -0.02235469150; + for (i = 2; i < 10; i++) piCCf[3][2][i] = -0.02235469150; + for (i = 2; i < 10; i++) piCCf[2][3][i] = -0.02235469150; + + piCCdfdx[2][1][1] = -0.026250; + piCCdfdx[2][1][5] = -0.0271880; + piCCdfdx[2][1][6] = -0.0271880; + for (i = 7; i < 10; i++) piCCdfdx[2][1][i] = -0.0271880; + piCCdfdx[1][3][2] = 0.0187723882; + for (i = 2; i < 10; i++) piCCdfdx[2][3][i] = 0.031209; + + piCCdfdy[1][2][1] = -0.026250; + piCCdfdy[1][2][5] = -0.0271880; + piCCdfdy[1][2][6] = -0.0271880; + for (i = 7; i < 10; i++) piCCdfdy[1][2][i] = -0.0271880; + piCCdfdy[3][1][2] = 0.0187723882; + for (i = 2; i < 10; i++) piCCdfdy[3][2][i] = 0.031209; + + piCCdfdz[1][1][2] = -0.0302715; + piCCdfdz[2][1][4] = -0.0100220; + piCCdfdz[1][2][4] = -0.0100220; + piCCdfdz[2][1][5] = -0.0100220; + piCCdfdz[1][2][5] = -0.0100220; + for (i = 4; i < 9; i++) piCCdfdz[2][2][i] = -0.0033090; + + // make top end of piCC flat instead of zero + i = 4; + for (j = 0; j < 4; j++){ + for (k = 1; k < 11; k++){ + piCCf[i][j][k] = piCCf[i-1][j][k]; + } + } + for (i = 0; i < 4; i++){ // also enforces some symmetry + for (j = i+1; j < 5; j++){ + for (k = 1; k < 11; k++){ + piCCf[i][j][k] = piCCf[j][i][k]; + } + } + } + for (k = 1; k < 11; k++) piCCf[4][4][k] = piCCf[3][4][k]; + k = 10; + for (i = 0; i < 5; i++){ + for (j = 0; j < 5; j++){ + piCCf[i][j][k] = piCCf[i][j][k-1]; + } + } + + piCHf[1][1][1] = -0.050; + piCHf[1][1][2] = -0.050; + piCHf[1][1][3] = -0.30; + for (i = 4; i < 10; i++) piCHf[1][1][i] = -0.050; + for (i = 5; i < 10; i++) piCHf[2][0][i] = -0.004523893758064; + for (i = 5; i < 10; i++) piCHf[0][2][i] = -0.004523893758064; + piCHf[2][1][2] = -0.250; + piCHf[1][2][2] = -0.250; + piCHf[2][1][3] = -0.250; + piCHf[1][2][3] = -0.250; + piCHf[3][1][1] = -0.10; + piCHf[1][3][1] = -0.10; + piCHf[3][1][2] = -0.125; + piCHf[1][3][2] = -0.125; + piCHf[3][1][3] = -0.125; + piCHf[1][3][3] = -0.125; + for (i = 4; i < 10; i++) piCHf[3][1][i] = -0.10; + for (i = 4; i < 10; i++) piCHf[1][3][i] = -0.10; + + // make top end of piCH flat instead of zero + // also enforces some symmetry + + i = 4; + for (j = 0; j < 4; j++){ + for (k = 1; k < 11; k++){ + piCHf[i][j][k] = piCHf[i-1][j][k]; + } + } + for (i = 0; i < 4; i++){ + for (j = i+1; j < 5; j++){ + for (k = 1; k < 11; k++){ + piCHf[i][j][k] = piCHf[j][i][k]; + } + } + } + for (k = 1; k < 11; k++) piCHf[4][4][k] = piCHf[3][4][k]; + k = 10; + for (i = 0; i < 5; i++){ + for (j = 0; j < 5; j++){ + piCHf[i][j][k] = piCHf[i][j][k-1]; + } + } + + piHHf[1][1][1] = 0.124915958; + + Tf[2][2][1] = -0.035140; + for (i = 2; i < 10; i++) Tf[2][2][i] = -0.0040480; + + for (int nH = 0; nH < 4; nH++) { + for (int nC = 0; nC < 4; nC++) { + // Note: Spline knot values exist up to "10", but are never used because + // they are clamped down to 9. + for (int nConj = 0; nConj < 9; nConj++) { + double y[8] = {0}, y1[8] = {0}, y2[8] = {0}, y3[8] = {0}; + #define FILL_KNOTS_TRI(dest, src) \ + dest[0] = src[nC+0][nH+0][nConj+0]; \ + dest[1] = src[nC+0][nH+0][nConj+1]; \ + dest[2] = src[nC+0][nH+1][nConj+0]; \ + dest[3] = src[nC+0][nH+1][nConj+1]; \ + dest[4] = src[nC+1][nH+0][nConj+0]; \ + dest[5] = src[nC+1][nH+0][nConj+1]; \ + dest[6] = src[nC+1][nH+1][nConj+0]; \ + dest[7] = src[nC+1][nH+1][nConj+1]; + FILL_KNOTS_TRI(y, piCCf) + FILL_KNOTS_TRI(y1, piCCdfdx) + FILL_KNOTS_TRI(y2, piCCdfdy) + FILL_KNOTS_TRI(y3, piCCdfdz) + Sptricubic_patch_coeffs(nC, nC+1, nH, nH+1, nConj, nConj+1, y, y1, y2, y3, &piCC[nC][nH][nConj][0]); + FILL_KNOTS_TRI(y, piCHf) + FILL_KNOTS_TRI(y1, piCHdfdx) + FILL_KNOTS_TRI(y2, piCHdfdy) + FILL_KNOTS_TRI(y3, piCHdfdz) + Sptricubic_patch_coeffs(nC, nC+1, nH, nH+1, nConj, nConj+1, y, y1, y2, y3, &piCH[nC][nH][nConj][0]); + FILL_KNOTS_TRI(y, piHHf) + FILL_KNOTS_TRI(y1, piHHdfdx) + FILL_KNOTS_TRI(y2, piHHdfdy) + FILL_KNOTS_TRI(y3, piHHdfdz) + Sptricubic_patch_coeffs(nC, nC+1, nH, nH+1, nConj, nConj+1, y, y1, y2, y3, &piHH[nC][nH][nConj][0]); + FILL_KNOTS_TRI(y, Tf) + FILL_KNOTS_TRI(y1, Tdfdx) + FILL_KNOTS_TRI(y2, Tdfdy) + FILL_KNOTS_TRI(y3, Tdfdz) + Sptricubic_patch_coeffs(nC, nC+1, nH, nH+1, nConj, nConj+1, y, y1, y2, y3, &Tijc[nC][nH][nConj][0]); + #undef FILL_KNOTS_TRI + } + } + } } diff --git a/src/MANYBODY/pair_rebo.h b/src/MANYBODY/pair_rebo.h index be1e1f0b55..9c1a12d4de 100644 --- a/src/MANYBODY/pair_rebo.h +++ b/src/MANYBODY/pair_rebo.h @@ -28,6 +28,7 @@ class PairREBO : public PairAIREBO { public: PairREBO(class LAMMPS *); void settings(int, char **); + void spline_init(); }; } From 1235e77199eaffa29257b6ad8483cd7e98bf88b6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 9 Nov 2018 15:18:01 -0500 Subject: [PATCH 021/311] implemented recommended change to remove global class member --- src/MANYBODY/pair_airebo.cpp | 7 +------ src/MANYBODY/pair_airebo.h | 1 - src/MANYBODY/pair_rebo.cpp | 1 - 3 files changed, 1 insertion(+), 8 deletions(-) diff --git a/src/MANYBODY/pair_airebo.cpp b/src/MANYBODY/pair_airebo.cpp index 067eb1634f..f2877647c0 100644 --- a/src/MANYBODY/pair_airebo.cpp +++ b/src/MANYBODY/pair_airebo.cpp @@ -168,10 +168,6 @@ void PairAIREBO::settings(int narg, char **arg) sigwid = sigcut - sigmin; } - // this one parameter for C-C interactions is different in AIREBO vs REBO - // see Favata, Micheletti, Ryu, Pugno, Comp Phys Comm (2016) - - PCCf_2_0 = -0.0276030; } /* ---------------------------------------------------------------------- @@ -4373,8 +4369,7 @@ void PairAIREBO::spline_init() // this one parameter for C-C interactions is different in REBO vs AIREBO // see Favata, Micheletti, Ryu, Pugno, Comp Phys Comm (2016) - PCCf[2][0] = PCCf_2_0; - + PCCf[2][0] = -0.0276030; PCCf[2][1] = 0.00317953083; PCHf[0][1] = 0.209336733; diff --git a/src/MANYBODY/pair_airebo.h b/src/MANYBODY/pair_airebo.h index c7c9b07357..579c342f1b 100644 --- a/src/MANYBODY/pair_airebo.h +++ b/src/MANYBODY/pair_airebo.h @@ -84,7 +84,6 @@ class PairAIREBO : public Pair { // spline knot values - double PCCf_2_0; double PCCf[5][5],PCCdfdx[5][5],PCCdfdy[5][5],PCHf[5][5]; double PCHdfdx[5][5],PCHdfdy[5][5]; double piCCf[5][5][11],piCCdfdx[5][5][11]; diff --git a/src/MANYBODY/pair_rebo.cpp b/src/MANYBODY/pair_rebo.cpp index 10d1d83579..5563e1222c 100644 --- a/src/MANYBODY/pair_rebo.cpp +++ b/src/MANYBODY/pair_rebo.cpp @@ -30,7 +30,6 @@ void PairREBO::settings(int narg, char **/*arg*/) cutlj = 0.0; ljflag = torflag = 0; - PCCf_2_0 = -0.0276030; } /* ---------------------------------------------------------------------- From dcffeb546fd297d5e5cc3af5b64fdfb48de9650b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 20 Nov 2018 13:48:49 -0500 Subject: [PATCH 022/311] update AIREBO/REBO examples and provide references for rebo and airebo with LJ and TORSION turned off --- examples/airebo/in.airebo-0-0 | 22 +++++ examples/airebo/in.rebo2 | 22 +++++ examples/airebo/log.29Jun18.airebo-0-0.g++.1 | 88 +++++++++++++++++++ examples/airebo/log.29Jun18.airebo-0-0.g++.4 | 88 +++++++++++++++++++ ...ebo-m.g++.1 => log.29Jun18.airebo-m.g++.1} | 24 ++--- ...ebo-m.g++.4 => log.29Jun18.airebo-m.g++.4} | 24 ++--- ....airebo.g++.1 => log.29Jun18.airebo.g++.1} | 24 ++--- ....airebo.g++.4 => log.29Jun18.airebo.g++.4} | 24 ++--- examples/airebo/log.29Jun18.rebo2.g++.1 | 88 +++++++++++++++++++ examples/airebo/log.29Jun18.rebo2.g++.4 | 88 +++++++++++++++++++ 10 files changed, 448 insertions(+), 44 deletions(-) create mode 100644 examples/airebo/in.airebo-0-0 create mode 100644 examples/airebo/in.rebo2 create mode 100644 examples/airebo/log.29Jun18.airebo-0-0.g++.1 create mode 100644 examples/airebo/log.29Jun18.airebo-0-0.g++.4 rename examples/airebo/{log.23Jun17.airebo-m.g++.1 => log.29Jun18.airebo-m.g++.1} (78%) rename examples/airebo/{log.23Jun17.airebo-m.g++.4 => log.29Jun18.airebo-m.g++.4} (78%) rename examples/airebo/{log.23Jun17.airebo.g++.1 => log.29Jun18.airebo.g++.1} (78%) rename examples/airebo/{log.23Jun17.airebo.g++.4 => log.29Jun18.airebo.g++.4} (78%) create mode 100644 examples/airebo/log.29Jun18.rebo2.g++.1 create mode 100644 examples/airebo/log.29Jun18.rebo2.g++.4 diff --git a/examples/airebo/in.airebo-0-0 b/examples/airebo/in.airebo-0-0 new file mode 100644 index 0000000000..edcb1561fb --- /dev/null +++ b/examples/airebo/in.airebo-0-0 @@ -0,0 +1,22 @@ +# AIREBO polyethelene benchmark + +units metal +atom_style atomic + +read_data data.airebo + +replicate 17 16 2 + +neighbor 0.5 bin +neigh_modify delay 5 every 1 + +pair_style airebo 3.0 0 0 +pair_coeff * * ../../potentials/CH.airebo C H + +velocity all create 300.0 761341 + +fix 1 all nve +timestep 0.0005 + +thermo 10 +run 100 diff --git a/examples/airebo/in.rebo2 b/examples/airebo/in.rebo2 new file mode 100644 index 0000000000..6834528ffb --- /dev/null +++ b/examples/airebo/in.rebo2 @@ -0,0 +1,22 @@ +# AIREBO polyethelene benchmark + +units metal +atom_style atomic + +read_data data.airebo + +replicate 17 16 2 + +neighbor 0.5 bin +neigh_modify delay 5 every 1 + +pair_style rebo +pair_coeff * * ../../potentials/CH.rebo C H + +velocity all create 300.0 761341 + +fix 1 all nve +timestep 0.0005 + +thermo 10 +run 100 diff --git a/examples/airebo/log.29Jun18.airebo-0-0.g++.1 b/examples/airebo/log.29Jun18.airebo-0-0.g++.1 new file mode 100644 index 0000000000..d61c8e8b34 --- /dev/null +++ b/examples/airebo/log.29Jun18.airebo-0-0.g++.1 @@ -0,0 +1,88 @@ +LAMMPS (29 Jun 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# AIREBO polyethelene benchmark + +units metal +atom_style atomic + +read_data data.airebo + orthogonal box = (-2.1 -2.1 0) to (2.1 2.1 25.579) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 60 atoms + +replicate 17 16 2 + orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) + 1 by 1 by 1 MPI processor grid + 32640 atoms + Time spent = 0.00136042 secs + +neighbor 0.5 bin +neigh_modify delay 5 every 1 + +pair_style airebo 3.0 0 0 +pair_coeff * * ../../potentials/CH.airebo C H +Reading potential file ../../potentials/CH.airebo with DATE: 2011-10-25 + +velocity all create 300.0 761341 + +fix 1 all nve +timestep 0.0005 + +thermo 10 +run 100 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.5 + ghost atom cutoff = 6.5 + binsize = 3.25, bins = 22 21 16 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair airebo, perpetual + attributes: full, newton on, ghost + pair build: full/bin/ghost + stencil: full/ghost/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 34.21 | 34.21 | 34.21 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 300 -138442.83 0 -137177.16 2463.0756 + 10 179.38448 -137931.29 0 -137174.48 15656.689 + 20 206.89283 -138047.05 0 -137174.19 -24047.407 + 30 150.81289 -137807.48 0 -137171.21 -16524.191 + 40 173.24289 -137902.32 0 -137171.42 -5721.7187 + 50 151.80722 -137812.37 0 -137171.91 3489.8954 + 60 199.06038 -138013.7 0 -137173.88 17887.024 + 70 217.84848 -138093.82 0 -137174.73 -12266.16 + 80 202.34667 -138029.28 0 -137175.59 -7623.6635 + 90 194.92367 -137997.12 0 -137174.75 -32277.173 + 100 185.2078 -137954.64 0 -137173.26 -6888.5104 +Loop time of 5.00753 on 1 procs for 100 steps with 32640 atoms + +Performance: 0.863 ns/day, 27.820 hours/ns, 19.970 timesteps/s +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 | 3.4898 | 3.4898 | 3.4898 | 0.0 | 69.69 +Neigh | 1.4697 | 1.4697 | 1.4697 | 0.0 | 29.35 +Comm | 0.015885 | 0.015885 | 0.015885 | 0.0 | 0.32 +Output | 0.00096607 | 0.00096607 | 0.00096607 | 0.0 | 0.02 +Modify | 0.021901 | 0.021901 | 0.021901 | 0.0 | 0.44 +Other | | 0.009297 | | | 0.19 + +Nlocal: 32640 ave 32640 max 32640 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 26460 ave 26460 max 26460 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 4.90213e+06 ave 4.90213e+06 max 4.90213e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 4902134 +Ave neighs/atom = 150.188 +Neighbor list builds = 9 +Dangerous builds = 0 +Total wall time: 0:00:05 diff --git a/examples/airebo/log.29Jun18.airebo-0-0.g++.4 b/examples/airebo/log.29Jun18.airebo-0-0.g++.4 new file mode 100644 index 0000000000..72d6fdd211 --- /dev/null +++ b/examples/airebo/log.29Jun18.airebo-0-0.g++.4 @@ -0,0 +1,88 @@ +LAMMPS (29 Jun 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# AIREBO polyethelene benchmark + +units metal +atom_style atomic + +read_data data.airebo + orthogonal box = (-2.1 -2.1 0) to (2.1 2.1 25.579) + 1 by 1 by 4 MPI processor grid + reading atoms ... + 60 atoms + +replicate 17 16 2 + orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) + 2 by 2 by 1 MPI processor grid + 32640 atoms + Time spent = 0.000609159 secs + +neighbor 0.5 bin +neigh_modify delay 5 every 1 + +pair_style airebo 3.0 0 0 +pair_coeff * * ../../potentials/CH.airebo C H +Reading potential file ../../potentials/CH.airebo with DATE: 2011-10-25 + +velocity all create 300.0 761341 + +fix 1 all nve +timestep 0.0005 + +thermo 10 +run 100 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.5 + ghost atom cutoff = 6.5 + binsize = 3.25, bins = 22 21 16 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair airebo, perpetual + attributes: full, newton on, ghost + pair build: full/bin/ghost + stencil: full/ghost/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 11.75 | 11.94 | 12.13 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 300 -138442.83 0 -137177.16 2463.0756 + 10 179.38448 -137931.29 0 -137174.48 15656.689 + 20 206.89283 -138047.05 0 -137174.19 -24047.407 + 30 150.81289 -137807.48 0 -137171.21 -16524.191 + 40 173.24289 -137902.32 0 -137171.42 -5721.7187 + 50 151.80722 -137812.37 0 -137171.91 3489.8954 + 60 199.06038 -138013.7 0 -137173.88 17887.024 + 70 217.84848 -138093.82 0 -137174.73 -12266.16 + 80 202.34667 -138029.28 0 -137175.59 -7623.6635 + 90 194.92367 -137997.12 0 -137174.75 -32277.173 + 100 185.2078 -137954.64 0 -137173.26 -6888.5104 +Loop time of 1.50369 on 4 procs for 100 steps with 32640 atoms + +Performance: 2.873 ns/day, 8.354 hours/ns, 66.503 timesteps/s +98.5% 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.92943 | 0.95749 | 0.97327 | 1.8 | 63.68 +Neigh | 0.456 | 0.46115 | 0.46657 | 0.7 | 30.67 +Comm | 0.048775 | 0.068415 | 0.10077 | 8.2 | 4.55 +Output | 0.00044918 | 0.00073665 | 0.0015814 | 0.0 | 0.05 +Modify | 0.0087936 | 0.0089477 | 0.0091038 | 0.1 | 0.60 +Other | | 0.006951 | | | 0.46 + +Nlocal: 8160 ave 8163 max 8157 min +Histogram: 1 1 0 0 0 0 0 0 1 1 +Nghost: 11605.8 ave 11615 max 11593 min +Histogram: 1 0 0 0 0 0 2 0 0 1 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 1.22553e+06 ave 1.22734e+06 max 1.22455e+06 min +Histogram: 2 0 0 1 0 0 0 0 0 1 + +Total # of neighbors = 4902134 +Ave neighs/atom = 150.188 +Neighbor list builds = 9 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/airebo/log.23Jun17.airebo-m.g++.1 b/examples/airebo/log.29Jun18.airebo-m.g++.1 similarity index 78% rename from examples/airebo/log.23Jun17.airebo-m.g++.1 rename to examples/airebo/log.29Jun18.airebo-m.g++.1 index 1483fcb4a6..ea587e9380 100644 --- a/examples/airebo/log.23Jun17.airebo-m.g++.1 +++ b/examples/airebo/log.29Jun18.airebo-m.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (23 Jun 2017) +LAMMPS (29 Jun 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -15,6 +16,7 @@ replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 1 by 1 by 1 MPI processor grid 32640 atoms + Time spent = 0.00136828 secs neighbor 0.5 bin neigh_modify delay 5 every 1 @@ -55,20 +57,20 @@ Step Temp E_pair E_mol TotEng Press 80 164.28396 -138709.5 0 -138016.4 -1524.7353 90 180.26403 -138776.42 0 -138015.9 -27143.467 100 164.05694 -138706.58 0 -138014.44 5157.5516 -Loop time of 117.672 on 1 procs for 100 steps with 32640 atoms +Loop time of 64.9938 on 1 procs for 100 steps with 32640 atoms -Performance: 0.037 ns/day, 653.734 hours/ns, 0.850 timesteps/s -99.3% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 0.066 ns/day, 361.077 hours/ns, 1.539 timesteps/s +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 | 108.31 | 108.31 | 108.31 | 0.0 | 92.04 -Neigh | 9.2199 | 9.2199 | 9.2199 | 0.0 | 7.84 -Comm | 0.052942 | 0.052942 | 0.052942 | 0.0 | 0.04 -Output | 0.0015149 | 0.0015149 | 0.0015149 | 0.0 | 0.00 -Modify | 0.060962 | 0.060962 | 0.060962 | 0.0 | 0.05 -Other | | 0.02656 | | | 0.02 +Pair | 60.289 | 60.289 | 60.289 | 0.0 | 92.76 +Neigh | 4.6445 | 4.6445 | 4.6445 | 0.0 | 7.15 +Comm | 0.025577 | 0.025577 | 0.025577 | 0.0 | 0.04 +Output | 0.00097752 | 0.00097752 | 0.00097752 | 0.0 | 0.00 +Modify | 0.022412 | 0.022412 | 0.022412 | 0.0 | 0.03 +Other | | 0.01114 | | | 0.02 Nlocal: 32640 ave 32640 max 32640 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -83,4 +85,4 @@ Total # of neighbors = 22210922 Ave neighs/atom = 680.482 Neighbor list builds = 8 Dangerous builds = 0 -Total wall time: 0:02:00 +Total wall time: 0:01:06 diff --git a/examples/airebo/log.23Jun17.airebo-m.g++.4 b/examples/airebo/log.29Jun18.airebo-m.g++.4 similarity index 78% rename from examples/airebo/log.23Jun17.airebo-m.g++.4 rename to examples/airebo/log.29Jun18.airebo-m.g++.4 index 3a3d922bcb..d93f6f7c85 100644 --- a/examples/airebo/log.23Jun17.airebo-m.g++.4 +++ b/examples/airebo/log.29Jun18.airebo-m.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (23 Jun 2017) +LAMMPS (29 Jun 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -15,6 +16,7 @@ replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 2 by 2 by 1 MPI processor grid 32640 atoms + Time spent = 0.000688076 secs neighbor 0.5 bin neigh_modify delay 5 every 1 @@ -55,20 +57,20 @@ Step Temp E_pair E_mol TotEng Press 80 164.28396 -138709.5 0 -138016.4 -1524.7353 90 180.26403 -138776.42 0 -138015.9 -27143.467 100 164.05694 -138706.58 0 -138014.44 5157.5516 -Loop time of 32.9268 on 4 procs for 100 steps with 32640 atoms +Loop time of 18.0388 on 4 procs for 100 steps with 32640 atoms -Performance: 0.131 ns/day, 182.927 hours/ns, 3.037 timesteps/s -99.4% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 0.239 ns/day, 100.216 hours/ns, 5.544 timesteps/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 | 28.045 | 28.537 | 29.42 | 10.4 | 86.67 -Neigh | 3.163 | 3.237 | 3.3761 | 4.7 | 9.83 -Comm | 0.09883 | 1.1206 | 1.6862 | 60.4 | 3.40 -Output | 0.00099325 | 0.0011329 | 0.0012462 | 0.3 | 0.00 -Modify | 0.016013 | 0.016726 | 0.017257 | 0.4 | 0.05 -Other | | 0.01459 | | | 0.04 +Pair | 15.983 | 16.085 | 16.285 | 2.9 | 89.17 +Neigh | 1.5975 | 1.6116 | 1.6215 | 0.8 | 8.93 +Comm | 0.11408 | 0.32424 | 0.43065 | 21.7 | 1.80 +Output | 0.00062895 | 0.0012782 | 0.0018394 | 1.2 | 0.01 +Modify | 0.0089653 | 0.0090135 | 0.0090837 | 0.0 | 0.05 +Other | | 0.007664 | | | 0.04 Nlocal: 8160 ave 8167 max 8153 min Histogram: 1 0 1 0 0 0 0 1 0 1 @@ -83,4 +85,4 @@ Total # of neighbors = 22210922 Ave neighs/atom = 680.482 Neighbor list builds = 8 Dangerous builds = 0 -Total wall time: 0:00:33 +Total wall time: 0:00:18 diff --git a/examples/airebo/log.23Jun17.airebo.g++.1 b/examples/airebo/log.29Jun18.airebo.g++.1 similarity index 78% rename from examples/airebo/log.23Jun17.airebo.g++.1 rename to examples/airebo/log.29Jun18.airebo.g++.1 index 0ef895dc28..12ba33cd95 100644 --- a/examples/airebo/log.23Jun17.airebo.g++.1 +++ b/examples/airebo/log.29Jun18.airebo.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (23 Jun 2017) +LAMMPS (29 Jun 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -15,6 +16,7 @@ replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 1 by 1 by 1 MPI processor grid 32640 atoms + Time spent = 0.00137973 secs neighbor 0.5 bin neigh_modify delay 5 every 1 @@ -55,20 +57,20 @@ Step Temp E_pair E_mol TotEng Press 80 157.16184 -138695.77 0 -138032.72 19824.698 90 196.15907 -138860.65 0 -138033.07 -7950.8462 100 178.31875 -138784.89 0 -138032.57 30997.671 -Loop time of 110.107 on 1 procs for 100 steps with 32640 atoms +Loop time of 58.178 on 1 procs for 100 steps with 32640 atoms -Performance: 0.039 ns/day, 611.705 hours/ns, 0.908 timesteps/s -99.5% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 0.074 ns/day, 323.211 hours/ns, 1.719 timesteps/s +99.0% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 100.76 | 100.76 | 100.76 | 0.0 | 91.51 -Neigh | 9.1909 | 9.1909 | 9.1909 | 0.0 | 8.35 -Comm | 0.058134 | 0.058134 | 0.058134 | 0.0 | 0.05 -Output | 0.0015941 | 0.0015941 | 0.0015941 | 0.0 | 0.00 -Modify | 0.062212 | 0.062212 | 0.062212 | 0.0 | 0.06 -Other | | 0.03123 | | | 0.03 +Pair | 53.477 | 53.477 | 53.477 | 0.0 | 91.92 +Neigh | 4.6405 | 4.6405 | 4.6405 | 0.0 | 7.98 +Comm | 0.025745 | 0.025745 | 0.025745 | 0.0 | 0.04 +Output | 0.00097823 | 0.00097823 | 0.00097823 | 0.0 | 0.00 +Modify | 0.022715 | 0.022715 | 0.022715 | 0.0 | 0.04 +Other | | 0.01117 | | | 0.02 Nlocal: 32640 ave 32640 max 32640 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -83,4 +85,4 @@ Total # of neighbors = 22217840 Ave neighs/atom = 680.694 Neighbor list builds = 8 Dangerous builds = 0 -Total wall time: 0:01:52 +Total wall time: 0:00:59 diff --git a/examples/airebo/log.23Jun17.airebo.g++.4 b/examples/airebo/log.29Jun18.airebo.g++.4 similarity index 78% rename from examples/airebo/log.23Jun17.airebo.g++.4 rename to examples/airebo/log.29Jun18.airebo.g++.4 index 486b48a004..36794642af 100644 --- a/examples/airebo/log.23Jun17.airebo.g++.4 +++ b/examples/airebo/log.29Jun18.airebo.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (23 Jun 2017) +LAMMPS (29 Jun 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -15,6 +16,7 @@ replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 2 by 2 by 1 MPI processor grid 32640 atoms + Time spent = 0.000712872 secs neighbor 0.5 bin neigh_modify delay 5 every 1 @@ -55,20 +57,20 @@ Step Temp E_pair E_mol TotEng Press 80 157.16184 -138695.77 0 -138032.72 19824.698 90 196.15907 -138860.65 0 -138033.07 -7950.8462 100 178.31875 -138784.89 0 -138032.57 30997.671 -Loop time of 30.1916 on 4 procs for 100 steps with 32640 atoms +Loop time of 16.4409 on 4 procs for 100 steps with 32640 atoms -Performance: 0.143 ns/day, 167.731 hours/ns, 3.312 timesteps/s -99.1% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 0.263 ns/day, 91.338 hours/ns, 6.082 timesteps/s +98.4% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 26.083 | 26.31 | 26.795 | 5.5 | 87.14 -Neigh | 3.1781 | 3.2134 | 3.2775 | 2.2 | 10.64 -Comm | 0.086296 | 0.63643 | 0.88995 | 40.2 | 2.11 -Output | 0.00074124 | 0.0010698 | 0.0013616 | 0.7 | 0.00 -Modify | 0.015335 | 0.016373 | 0.017565 | 0.8 | 0.05 -Other | | 0.01457 | | | 0.05 +Pair | 14.212 | 14.384 | 14.487 | 3.0 | 87.49 +Neigh | 1.5943 | 1.615 | 1.6263 | 1.0 | 9.82 +Comm | 0.30944 | 0.42389 | 0.61698 | 19.2 | 2.58 +Output | 0.00065231 | 0.00094843 | 0.0018184 | 0.0 | 0.01 +Modify | 0.0092347 | 0.0093143 | 0.0094111 | 0.1 | 0.06 +Other | | 0.007456 | | | 0.05 Nlocal: 8160 ave 8174 max 8146 min Histogram: 1 0 1 0 0 0 0 1 0 1 @@ -83,4 +85,4 @@ Total # of neighbors = 22217840 Ave neighs/atom = 680.694 Neighbor list builds = 8 Dangerous builds = 0 -Total wall time: 0:00:30 +Total wall time: 0:00:16 diff --git a/examples/airebo/log.29Jun18.rebo2.g++.1 b/examples/airebo/log.29Jun18.rebo2.g++.1 new file mode 100644 index 0000000000..54c87ab474 --- /dev/null +++ b/examples/airebo/log.29Jun18.rebo2.g++.1 @@ -0,0 +1,88 @@ +LAMMPS (29 Jun 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# AIREBO polyethelene benchmark + +units metal +atom_style atomic + +read_data data.airebo + orthogonal box = (-2.1 -2.1 0) to (2.1 2.1 25.579) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 60 atoms + +replicate 17 16 2 + orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) + 1 by 1 by 1 MPI processor grid + 32640 atoms + Time spent = 0.00153542 secs + +neighbor 0.5 bin +neigh_modify delay 5 every 1 + +pair_style rebo +pair_coeff * * ../../potentials/CH.rebo C H +Reading potential file ../../potentials/CH.rebo with DATE: 2018-7-3 + +velocity all create 300.0 761341 + +fix 1 all nve +timestep 0.0005 + +thermo 10 +run 100 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.5 + ghost atom cutoff = 6.5 + binsize = 3.25, bins = 22 21 16 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair rebo, perpetual + attributes: full, newton on, ghost + pair build: full/bin/ghost + stencil: full/ghost/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 34.21 | 34.21 | 34.21 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 300 -138442.83 0 -137177.16 2463.0748 + 10 179.37985 -137931.27 0 -137174.48 15655.936 + 20 206.87654 -138046.99 0 -137174.19 -24042.627 + 30 150.80122 -137807.43 0 -137171.21 -16524.118 + 40 173.24945 -137902.35 0 -137171.42 -5716.9118 + 50 151.80455 -137812.36 0 -137171.91 3480.4584 + 60 199.08777 -138013.82 0 -137173.88 17881.372 + 70 217.85748 -138093.86 0 -137174.73 -12270.999 + 80 202.37482 -138029.39 0 -137175.59 -7622.732 + 90 194.90628 -137997.05 0 -137174.75 -32267.471 + 100 185.17818 -137954.51 0 -137173.26 -6901.7499 +Loop time of 5.03541 on 1 procs for 100 steps with 32640 atoms + +Performance: 0.858 ns/day, 27.975 hours/ns, 19.859 timesteps/s +99.0% 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.5083 | 3.5083 | 3.5083 | 0.0 | 69.67 +Neigh | 1.4785 | 1.4785 | 1.4785 | 0.0 | 29.36 +Comm | 0.016176 | 0.016176 | 0.016176 | 0.0 | 0.32 +Output | 0.0009644 | 0.0009644 | 0.0009644 | 0.0 | 0.02 +Modify | 0.02224 | 0.02224 | 0.02224 | 0.0 | 0.44 +Other | | 0.009286 | | | 0.18 + +Nlocal: 32640 ave 32640 max 32640 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 26460 ave 26460 max 26460 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 4.90213e+06 ave 4.90213e+06 max 4.90213e+06 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 4902134 +Ave neighs/atom = 150.188 +Neighbor list builds = 9 +Dangerous builds = 0 +Total wall time: 0:00:05 diff --git a/examples/airebo/log.29Jun18.rebo2.g++.4 b/examples/airebo/log.29Jun18.rebo2.g++.4 new file mode 100644 index 0000000000..b7d63dd2e5 --- /dev/null +++ b/examples/airebo/log.29Jun18.rebo2.g++.4 @@ -0,0 +1,88 @@ +LAMMPS (29 Jun 2018) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) + using 1 OpenMP thread(s) per MPI task +# AIREBO polyethelene benchmark + +units metal +atom_style atomic + +read_data data.airebo + orthogonal box = (-2.1 -2.1 0) to (2.1 2.1 25.579) + 1 by 1 by 4 MPI processor grid + reading atoms ... + 60 atoms + +replicate 17 16 2 + orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) + 2 by 2 by 1 MPI processor grid + 32640 atoms + Time spent = 0.00151467 secs + +neighbor 0.5 bin +neigh_modify delay 5 every 1 + +pair_style rebo +pair_coeff * * ../../potentials/CH.rebo C H +Reading potential file ../../potentials/CH.rebo with DATE: 2018-7-3 + +velocity all create 300.0 761341 + +fix 1 all nve +timestep 0.0005 + +thermo 10 +run 100 +Neighbor list info ... + update every 1 steps, delay 5 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 6.5 + ghost atom cutoff = 6.5 + binsize = 3.25, bins = 22 21 16 + 1 neighbor lists, perpetual/occasional/extra = 1 0 0 + (1) pair rebo, perpetual + attributes: full, newton on, ghost + pair build: full/bin/ghost + stencil: full/ghost/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 11.75 | 11.94 | 12.13 Mbytes +Step Temp E_pair E_mol TotEng Press + 0 300 -138442.83 0 -137177.16 2463.0748 + 10 179.37985 -137931.27 0 -137174.48 15655.936 + 20 206.87654 -138046.99 0 -137174.19 -24042.627 + 30 150.80122 -137807.43 0 -137171.21 -16524.118 + 40 173.24945 -137902.35 0 -137171.42 -5716.9118 + 50 151.80455 -137812.36 0 -137171.91 3480.4584 + 60 199.08777 -138013.82 0 -137173.88 17881.372 + 70 217.85748 -138093.86 0 -137174.73 -12270.999 + 80 202.37482 -138029.39 0 -137175.59 -7622.732 + 90 194.90628 -137997.05 0 -137174.75 -32267.471 + 100 185.17818 -137954.51 0 -137173.26 -6901.7499 +Loop time of 1.49632 on 4 procs for 100 steps with 32640 atoms + +Performance: 2.887 ns/day, 8.313 hours/ns, 66.831 timesteps/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.93275 | 0.95717 | 0.97367 | 1.6 | 63.97 +Neigh | 0.45634 | 0.46084 | 0.46749 | 0.6 | 30.80 +Comm | 0.038283 | 0.062074 | 0.090508 | 7.6 | 4.15 +Output | 0.00046492 | 0.00072992 | 0.0015128 | 0.0 | 0.05 +Modify | 0.0088651 | 0.0090639 | 0.0093012 | 0.2 | 0.61 +Other | | 0.006436 | | | 0.43 + +Nlocal: 8160 ave 8163 max 8157 min +Histogram: 1 1 0 0 0 0 0 0 1 1 +Nghost: 11605.8 ave 11615 max 11593 min +Histogram: 1 0 0 0 0 0 2 0 0 1 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 1.22553e+06 ave 1.22735e+06 max 1.22455e+06 min +Histogram: 2 0 0 1 0 0 0 0 0 1 + +Total # of neighbors = 4902134 +Ave neighs/atom = 150.188 +Neighbor list builds = 9 +Dangerous builds = 0 +Total wall time: 0:00:01 From e51720a2def24ce3194d0cce4c4f020942b70018 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 20 Nov 2018 13:51:12 -0500 Subject: [PATCH 023/311] add code to detect inconistent use of AIREBO/REBO potential files --- doc/src/pair_airebo.txt | 17 ++++++++------- src/MANYBODY/pair_airebo.cpp | 35 +++++++++++++++++++++++++----- src/MANYBODY/pair_airebo.h | 6 +++-- src/MANYBODY/pair_airebo_morse.cpp | 4 +++- src/MANYBODY/pair_rebo.cpp | 4 +++- 5 files changed, 49 insertions(+), 17 deletions(-) diff --git a/doc/src/pair_airebo.txt b/doc/src/pair_airebo.txt index c090a39af7..4d5cf4528b 100644 --- a/doc/src/pair_airebo.txt +++ b/doc/src/pair_airebo.txt @@ -36,7 +36,7 @@ pair_style airebo/morse 3.0 pair_coeff * * ../potentials/CH.airebo-m H C :pre pair_style rebo -pair_coeff * * ../potentials/CH.airebo H C :pre +pair_coeff * * ../potentials/CH.rebo H C :pre [Description:] @@ -57,7 +57,8 @@ The {rebo} pair style computes the Reactive Empirical Bond Order (REBO) Potential of "(Brenner)"_#Brenner. Note that this is the so-called 2nd generation REBO from 2002, not the original REBO from 1990. As discussed below, 2nd generation REBO is closely related to the -initial AIREBO; it is just a subset of the potential energy terms. +initial AIREBO; it is just a subset of the potential energy terms +with a few slightly different parameters The AIREBO potential consists of three terms: @@ -113,12 +114,12 @@ various dihedral angle preferences in hydrocarbon configurations. :line Only a single pair_coeff command is used with the {airebo}, {airebo} -or {rebo} style which specifies an AIREBO or AIREBO-M potential file -with parameters for C and H. Note that the {rebo} style in LAMMPS -uses the same AIREBO-formatted potential file. These are mapped to -LAMMPS atom types by specifying N additional arguments after the -filename in the pair_coeff command, where N is the number of LAMMPS -atom types: +or {rebo} style which specifies an AIREBO, REBO, or AIREBO-M potential +file with parameters for C and H. Note that as of LAMMPS version +15 November 2018 the {rebo} style in LAMMPS uses its own potential +file (CH.rebo). These are mapped to LAMMPS atom types by specifying +N additional arguments after the filename in the pair_coeff command, +where N is the number of LAMMPS atom types: filename N element names = mapping of AIREBO elements to atom types :ul diff --git a/src/MANYBODY/pair_airebo.cpp b/src/MANYBODY/pair_airebo.cpp index f2877647c0..966a2514d6 100644 --- a/src/MANYBODY/pair_airebo.cpp +++ b/src/MANYBODY/pair_airebo.cpp @@ -49,7 +49,8 @@ using namespace MathSpecial; /* ---------------------------------------------------------------------- */ -PairAIREBO::PairAIREBO(LAMMPS *lmp) : Pair(lmp) +PairAIREBO::PairAIREBO(LAMMPS *lmp) + : Pair(lmp), variant(AIREBO) { single_enable = 0; restartinfo = 0; @@ -3368,14 +3369,38 @@ void PairAIREBO::read_file(char *filename) FILE *fp = force->open_potential(filename); if (fp == NULL) { char str[128]; - if (morseflag) - snprintf(str,128,"Cannot open AIREBO-M potential file %s",filename); - else + switch (variant) { + + case AIREBO: snprintf(str,128,"Cannot open AIREBO potential file %s",filename); + break; + + case REBO_2: + snprintf(str,128,"Cannot open REBO2 potential file %s",filename); + break; + + case AIREBO_M: + snprintf(str,128,"Cannot open AIREBO-M potential file %s",filename); + break; + + default: + snprintf(str,128,"Unknown REBO style variant %d",variant); + } error->one(FLERR,str); } - // skip initial comment lines + // skip initial comment line and check for potential file style identifier comment + + fgets(s,MAXLINE,fp); + fgets(s,MAXLINE,fp); + + if (((variant == AIREBO) && (strncmp(s,"# AIREBO ",9) != 0)) + || ((variant == REBO_2) && (strncmp(s,"# REBO2 ",8) != 0)) + || ((variant == AIREBO_M) && (strncmp(s,"# AIREBO-M ",11) != 0))) { + error->one(FLERR,"Potential file does not match AIREBO/REBO style variant"); + } + + // skip remaining comments while (1) { fgets(s,MAXLINE,fp); diff --git a/src/MANYBODY/pair_airebo.h b/src/MANYBODY/pair_airebo.h index 579c342f1b..31c99c4529 100644 --- a/src/MANYBODY/pair_airebo.h +++ b/src/MANYBODY/pair_airebo.h @@ -38,10 +38,12 @@ class PairAIREBO : public Pair { double init_one(int, int); double memory_usage(); - protected: + enum { AIREBO, REBO_2, AIREBO_M }; // for telling class variants apart in shared code + +protected: int *map; // 0 (C), 1 (H), or -1 (NULL) for each type - int me; + int me,variant; int ljflag,torflag; // 0/1 if LJ/Morse,torsion terms included int morseflag; // 1 if Morse instead of LJ for non-bonded diff --git a/src/MANYBODY/pair_airebo_morse.cpp b/src/MANYBODY/pair_airebo_morse.cpp index b501ed0982..a39f7df82e 100644 --- a/src/MANYBODY/pair_airebo_morse.cpp +++ b/src/MANYBODY/pair_airebo_morse.cpp @@ -19,7 +19,9 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -PairAIREBOMorse::PairAIREBOMorse(LAMMPS *lmp) : PairAIREBO(lmp) {} +PairAIREBOMorse::PairAIREBOMorse(LAMMPS *lmp) : PairAIREBO(lmp) { + variant = AIREBO_M; +} /* ---------------------------------------------------------------------- global settings diff --git a/src/MANYBODY/pair_rebo.cpp b/src/MANYBODY/pair_rebo.cpp index 5563e1222c..01331c912d 100644 --- a/src/MANYBODY/pair_rebo.cpp +++ b/src/MANYBODY/pair_rebo.cpp @@ -18,7 +18,9 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -PairREBO::PairREBO(LAMMPS *lmp) : PairAIREBO(lmp) {} +PairREBO::PairREBO(LAMMPS *lmp) : PairAIREBO(lmp) { + variant = REBO_2; +} /* ---------------------------------------------------------------------- global settings From 41ccf832bf83e11b1d3898e0437c9ab41d011f5c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 30 Dec 2018 04:30:58 -0500 Subject: [PATCH 024/311] update log files --- ...0-0.g++.1 => log.12Dec18.airebo-0-0.g++.1} | 31 +++++----- ...0-0.g++.4 => log.12Dec18.airebo-0-0.g++.4} | 33 ++++++----- ...ebo-m.g++.1 => log.12Dec18.airebo-m.g++.1} | 54 +++++++++--------- ...ebo-m.g++.4 => log.12Dec18.airebo-m.g++.4} | 54 +++++++++--------- ....airebo.g++.1 => log.12Dec18.airebo.g++.1} | 56 +++++++++---------- ....airebo.g++.4 => log.12Dec18.airebo.g++.4} | 56 +++++++++---------- ...18.rebo2.g++.1 => log.12Dec18.rebo2.g++.1} | 27 +++++---- ...18.rebo2.g++.4 => log.12Dec18.rebo2.g++.4} | 27 +++++---- 8 files changed, 167 insertions(+), 171 deletions(-) rename examples/airebo/{log.29Jun18.airebo-0-0.g++.1 => log.12Dec18.airebo-0-0.g++.1} (77%) rename examples/airebo/{log.29Jun18.airebo-0-0.g++.4 => log.12Dec18.airebo-0-0.g++.4} (76%) rename examples/airebo/{log.27Nov18.airebo-m.g++.1 => log.12Dec18.airebo-m.g++.1} (67%) rename examples/airebo/{log.27Nov18.airebo-m.g++.4 => log.12Dec18.airebo-m.g++.4} (67%) rename examples/airebo/{log.27Nov18.airebo.g++.1 => log.12Dec18.airebo.g++.1} (67%) rename examples/airebo/{log.27Nov18.airebo.g++.4 => log.12Dec18.airebo.g++.4} (66%) rename examples/airebo/{log.29Jun18.rebo2.g++.1 => log.12Dec18.rebo2.g++.1} (76%) rename examples/airebo/{log.29Jun18.rebo2.g++.4 => log.12Dec18.rebo2.g++.4} (76%) diff --git a/examples/airebo/log.29Jun18.airebo-0-0.g++.1 b/examples/airebo/log.12Dec18.airebo-0-0.g++.1 similarity index 77% rename from examples/airebo/log.29Jun18.airebo-0-0.g++.1 rename to examples/airebo/log.12Dec18.airebo-0-0.g++.1 index d61c8e8b34..7efacc2dd7 100644 --- a/examples/airebo/log.29Jun18.airebo-0-0.g++.1 +++ b/examples/airebo/log.12Dec18.airebo-0-0.g++.1 @@ -1,5 +1,4 @@ -LAMMPS (29 Jun 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +LAMMPS (12 Dec 2018) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -16,7 +15,7 @@ replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 1 by 1 by 1 MPI processor grid 32640 atoms - Time spent = 0.00136042 secs + Time spent = 0.00132823 secs neighbor 0.5 bin neigh_modify delay 5 every 1 @@ -46,31 +45,31 @@ Neighbor list info ... bin: standard Per MPI rank memory allocation (min/avg/max) = 34.21 | 34.21 | 34.21 Mbytes Step Temp E_pair E_mol TotEng Press - 0 300 -138442.83 0 -137177.16 2463.0756 - 10 179.38448 -137931.29 0 -137174.48 15656.689 - 20 206.89283 -138047.05 0 -137174.19 -24047.407 + 0 300 -138442.83 0 -137177.16 2463.0755 + 10 179.38448 -137931.29 0 -137174.48 15656.69 + 20 206.89283 -138047.06 0 -137174.19 -24047.407 30 150.81289 -137807.48 0 -137171.21 -16524.191 40 173.24289 -137902.32 0 -137171.42 -5721.7187 50 151.80722 -137812.37 0 -137171.91 3489.8954 - 60 199.06038 -138013.7 0 -137173.88 17887.024 + 60 199.06038 -138013.7 0 -137173.88 17887.025 70 217.84848 -138093.82 0 -137174.73 -12266.16 - 80 202.34667 -138029.28 0 -137175.59 -7623.6635 + 80 202.34667 -138029.28 0 -137175.59 -7623.6634 90 194.92367 -137997.12 0 -137174.75 -32277.173 100 185.2078 -137954.64 0 -137173.26 -6888.5104 -Loop time of 5.00753 on 1 procs for 100 steps with 32640 atoms +Loop time of 4.96876 on 1 procs for 100 steps with 32640 atoms -Performance: 0.863 ns/day, 27.820 hours/ns, 19.970 timesteps/s +Performance: 0.869 ns/day, 27.604 hours/ns, 20.126 timesteps/s 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 | 3.4898 | 3.4898 | 3.4898 | 0.0 | 69.69 -Neigh | 1.4697 | 1.4697 | 1.4697 | 0.0 | 29.35 -Comm | 0.015885 | 0.015885 | 0.015885 | 0.0 | 0.32 -Output | 0.00096607 | 0.00096607 | 0.00096607 | 0.0 | 0.02 -Modify | 0.021901 | 0.021901 | 0.021901 | 0.0 | 0.44 -Other | | 0.009297 | | | 0.19 +Pair | 3.4535 | 3.4535 | 3.4535 | 0.0 | 69.50 +Neigh | 1.4688 | 1.4688 | 1.4688 | 0.0 | 29.56 +Comm | 0.015106 | 0.015106 | 0.015106 | 0.0 | 0.30 +Output | 0.00098944 | 0.00098944 | 0.00098944 | 0.0 | 0.02 +Modify | 0.021631 | 0.021631 | 0.021631 | 0.0 | 0.44 +Other | | 0.008734 | | | 0.18 Nlocal: 32640 ave 32640 max 32640 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/airebo/log.29Jun18.airebo-0-0.g++.4 b/examples/airebo/log.12Dec18.airebo-0-0.g++.4 similarity index 76% rename from examples/airebo/log.29Jun18.airebo-0-0.g++.4 rename to examples/airebo/log.12Dec18.airebo-0-0.g++.4 index 72d6fdd211..e2afb10452 100644 --- a/examples/airebo/log.29Jun18.airebo-0-0.g++.4 +++ b/examples/airebo/log.12Dec18.airebo-0-0.g++.4 @@ -1,5 +1,4 @@ -LAMMPS (29 Jun 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +LAMMPS (12 Dec 2018) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -16,7 +15,7 @@ replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 2 by 2 by 1 MPI processor grid 32640 atoms - Time spent = 0.000609159 secs + Time spent = 0.000664234 secs neighbor 0.5 bin neigh_modify delay 5 every 1 @@ -46,31 +45,31 @@ Neighbor list info ... bin: standard Per MPI rank memory allocation (min/avg/max) = 11.75 | 11.94 | 12.13 Mbytes Step Temp E_pair E_mol TotEng Press - 0 300 -138442.83 0 -137177.16 2463.0756 - 10 179.38448 -137931.29 0 -137174.48 15656.689 - 20 206.89283 -138047.05 0 -137174.19 -24047.407 + 0 300 -138442.83 0 -137177.16 2463.0755 + 10 179.38448 -137931.29 0 -137174.48 15656.69 + 20 206.89283 -138047.06 0 -137174.19 -24047.407 30 150.81289 -137807.48 0 -137171.21 -16524.191 40 173.24289 -137902.32 0 -137171.42 -5721.7187 50 151.80722 -137812.37 0 -137171.91 3489.8954 - 60 199.06038 -138013.7 0 -137173.88 17887.024 + 60 199.06038 -138013.7 0 -137173.88 17887.025 70 217.84848 -138093.82 0 -137174.73 -12266.16 - 80 202.34667 -138029.28 0 -137175.59 -7623.6635 + 80 202.34667 -138029.28 0 -137175.59 -7623.6634 90 194.92367 -137997.12 0 -137174.75 -32277.173 100 185.2078 -137954.64 0 -137173.26 -6888.5104 -Loop time of 1.50369 on 4 procs for 100 steps with 32640 atoms +Loop time of 1.44469 on 4 procs for 100 steps with 32640 atoms -Performance: 2.873 ns/day, 8.354 hours/ns, 66.503 timesteps/s -98.5% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 2.990 ns/day, 8.026 hours/ns, 69.219 timesteps/s +99.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.92943 | 0.95749 | 0.97327 | 1.8 | 63.68 -Neigh | 0.456 | 0.46115 | 0.46657 | 0.7 | 30.67 -Comm | 0.048775 | 0.068415 | 0.10077 | 8.2 | 4.55 -Output | 0.00044918 | 0.00073665 | 0.0015814 | 0.0 | 0.05 -Modify | 0.0087936 | 0.0089477 | 0.0091038 | 0.1 | 0.60 -Other | | 0.006951 | | | 0.46 +Pair | 0.92215 | 0.93812 | 0.95363 | 1.6 | 64.94 +Neigh | 0.45592 | 0.45842 | 0.46002 | 0.2 | 31.73 +Comm | 0.016539 | 0.03352 | 0.050276 | 8.6 | 2.32 +Output | 0.00043154 | 0.00059217 | 0.001025 | 0.0 | 0.04 +Modify | 0.0087888 | 0.0090455 | 0.0095809 | 0.3 | 0.63 +Other | | 0.004989 | | | 0.35 Nlocal: 8160 ave 8163 max 8157 min Histogram: 1 1 0 0 0 0 0 0 1 1 diff --git a/examples/airebo/log.27Nov18.airebo-m.g++.1 b/examples/airebo/log.12Dec18.airebo-m.g++.1 similarity index 67% rename from examples/airebo/log.27Nov18.airebo-m.g++.1 rename to examples/airebo/log.12Dec18.airebo-m.g++.1 index 44d8b9d59c..8042130645 100644 --- a/examples/airebo/log.27Nov18.airebo-m.g++.1 +++ b/examples/airebo/log.12Dec18.airebo-m.g++.1 @@ -1,36 +1,36 @@ -LAMMPS (27 Nov 2018) +LAMMPS (12 Dec 2018) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark -units metal -atom_style atomic +units metal +atom_style atomic -read_data data.airebo +read_data data.airebo orthogonal box = (-2.1 -2.1 0) to (2.1 2.1 25.579) 1 by 1 by 1 MPI processor grid reading atoms ... 60 atoms -replicate 17 16 2 +replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 1 by 1 by 1 MPI processor grid 32640 atoms - Time spent = 0.00141144 secs + Time spent = 0.00136471 secs -neighbor 0.5 bin -neigh_modify delay 5 every 1 +neighbor 0.5 bin +neigh_modify delay 5 every 1 -pair_style airebo/morse 3.0 1 1 -pair_coeff * * ../../potentials/CH.airebo-m C H -Reading potential file ../../potentials/CH.airebo-m with DATE: 2016-03-15 +pair_style airebo/morse 3.0 1 1 +pair_coeff * * CH.airebo-m C H +Reading potential file CH.airebo-m with DATE: 2016-03-15 -velocity all create 300.0 761341 +velocity all create 300.0 761341 -fix 1 all nve -timestep 0.0005 +fix 1 all nve +timestep 0.0005 -thermo 10 -run 100 +thermo 10 +run 100 Neighbor list info ... update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -45,7 +45,7 @@ Neighbor list info ... bin: standard Per MPI rank memory allocation (min/avg/max) = 106.4 | 106.4 | 106.4 Mbytes Step Temp E_pair E_mol TotEng Press - 0 300 -139283.82 0 -138018.14 152.25271 + 0 300 -139283.82 0 -138018.14 152.25266 10 166.76148 -138718.75 0 -138015.19 17412.343 20 207.7293 -138891.79 0 -138015.4 -19395.339 30 138.54469 -138596.42 0 -138011.92 -11909.248 @@ -55,21 +55,21 @@ Step Temp E_pair E_mol TotEng Press 70 185.72779 -138799.18 0 -138015.61 -10803.744 80 164.28396 -138709.5 0 -138016.4 -1524.7353 90 180.26403 -138776.42 0 -138015.9 -27143.467 - 100 164.05694 -138706.58 0 -138014.44 5157.5516 -Loop time of 64.6107 on 1 procs for 100 steps with 32640 atoms + 100 164.05694 -138706.58 0 -138014.44 5157.5517 +Loop time of 64.5779 on 1 procs for 100 steps with 32640 atoms -Performance: 0.067 ns/day, 358.948 hours/ns, 1.548 timesteps/s -99.8% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 0.067 ns/day, 358.766 hours/ns, 1.549 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 59.916 | 59.916 | 59.916 | 0.0 | 92.73 -Neigh | 4.6347 | 4.6347 | 4.6347 | 0.0 | 7.17 -Comm | 0.025572 | 0.025572 | 0.025572 | 0.0 | 0.04 -Output | 0.00098896 | 0.00098896 | 0.00098896 | 0.0 | 0.00 -Modify | 0.022327 | 0.022327 | 0.022327 | 0.0 | 0.03 -Other | | 0.01076 | | | 0.02 +Pair | 59.905 | 59.905 | 59.905 | 0.0 | 92.76 +Neigh | 4.615 | 4.615 | 4.615 | 0.0 | 7.15 +Comm | 0.024453 | 0.024453 | 0.024453 | 0.0 | 0.04 +Output | 0.00099945 | 0.00099945 | 0.00099945 | 0.0 | 0.00 +Modify | 0.021971 | 0.021971 | 0.021971 | 0.0 | 0.03 +Other | | 0.01029 | | | 0.02 Nlocal: 32640 ave 32640 max 32640 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/airebo/log.27Nov18.airebo-m.g++.4 b/examples/airebo/log.12Dec18.airebo-m.g++.4 similarity index 67% rename from examples/airebo/log.27Nov18.airebo-m.g++.4 rename to examples/airebo/log.12Dec18.airebo-m.g++.4 index a4cc55211b..1aab3b3544 100644 --- a/examples/airebo/log.27Nov18.airebo-m.g++.4 +++ b/examples/airebo/log.12Dec18.airebo-m.g++.4 @@ -1,36 +1,36 @@ -LAMMPS (27 Nov 2018) +LAMMPS (12 Dec 2018) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark -units metal -atom_style atomic +units metal +atom_style atomic -read_data data.airebo +read_data data.airebo orthogonal box = (-2.1 -2.1 0) to (2.1 2.1 25.579) 1 by 1 by 4 MPI processor grid reading atoms ... 60 atoms -replicate 17 16 2 +replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 2 by 2 by 1 MPI processor grid 32640 atoms - Time spent = 0.000637531 secs + Time spent = 0.000692129 secs -neighbor 0.5 bin -neigh_modify delay 5 every 1 +neighbor 0.5 bin +neigh_modify delay 5 every 1 -pair_style airebo/morse 3.0 1 1 -pair_coeff * * ../../potentials/CH.airebo-m C H -Reading potential file ../../potentials/CH.airebo-m with DATE: 2016-03-15 +pair_style airebo/morse 3.0 1 1 +pair_coeff * * CH.airebo-m C H +Reading potential file CH.airebo-m with DATE: 2016-03-15 -velocity all create 300.0 761341 +velocity all create 300.0 761341 -fix 1 all nve -timestep 0.0005 +fix 1 all nve +timestep 0.0005 -thermo 10 -run 100 +thermo 10 +run 100 Neighbor list info ... update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -45,7 +45,7 @@ Neighbor list info ... bin: standard Per MPI rank memory allocation (min/avg/max) = 29.37 | 29.75 | 30.13 Mbytes Step Temp E_pair E_mol TotEng Press - 0 300 -139283.82 0 -138018.14 152.25271 + 0 300 -139283.82 0 -138018.14 152.25266 10 166.76148 -138718.75 0 -138015.19 17412.343 20 207.7293 -138891.79 0 -138015.4 -19395.339 30 138.54469 -138596.42 0 -138011.92 -11909.248 @@ -55,21 +55,21 @@ Step Temp E_pair E_mol TotEng Press 70 185.72779 -138799.18 0 -138015.61 -10803.744 80 164.28396 -138709.5 0 -138016.4 -1524.7353 90 180.26403 -138776.42 0 -138015.9 -27143.467 - 100 164.05694 -138706.58 0 -138014.44 5157.5516 -Loop time of 18.1922 on 4 procs for 100 steps with 32640 atoms + 100 164.05694 -138706.58 0 -138014.44 5157.5517 +Loop time of 17.8093 on 4 procs for 100 steps with 32640 atoms -Performance: 0.237 ns/day, 101.068 hours/ns, 5.497 timesteps/s -98.9% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 0.243 ns/day, 98.940 hours/ns, 5.615 timesteps/s +99.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 | 15.968 | 16.084 | 16.308 | 3.4 | 88.41 -Neigh | 1.6017 | 1.6334 | 1.7006 | 3.1 | 8.98 -Comm | 0.1603 | 0.45122 | 0.59951 | 26.0 | 2.48 -Output | 0.00042605 | 0.00073195 | 0.0016003 | 0.0 | 0.00 -Modify | 0.0092106 | 0.010544 | 0.014411 | 2.2 | 0.06 -Other | | 0.01193 | | | 0.07 +Pair | 15.932 | 16.012 | 16.082 | 1.5 | 89.91 +Neigh | 1.5933 | 1.6063 | 1.6173 | 0.7 | 9.02 +Comm | 0.098741 | 0.17402 | 0.2676 | 16.8 | 0.98 +Output | 0.00044513 | 0.00074279 | 0.0016048 | 0.0 | 0.00 +Modify | 0.0088906 | 0.0089375 | 0.008992 | 0.0 | 0.05 +Other | | 0.007106 | | | 0.04 Nlocal: 8160 ave 8167 max 8153 min Histogram: 1 0 1 0 0 0 0 1 0 1 diff --git a/examples/airebo/log.27Nov18.airebo.g++.1 b/examples/airebo/log.12Dec18.airebo.g++.1 similarity index 67% rename from examples/airebo/log.27Nov18.airebo.g++.1 rename to examples/airebo/log.12Dec18.airebo.g++.1 index 3713c8a8f8..ccc156c15b 100644 --- a/examples/airebo/log.27Nov18.airebo.g++.1 +++ b/examples/airebo/log.12Dec18.airebo.g++.1 @@ -1,36 +1,36 @@ -LAMMPS (27 Nov 2018) +LAMMPS (12 Dec 2018) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark -units metal -atom_style atomic +units metal +atom_style atomic -read_data data.airebo +read_data data.airebo orthogonal box = (-2.1 -2.1 0) to (2.1 2.1 25.579) 1 by 1 by 1 MPI processor grid reading atoms ... 60 atoms -replicate 17 16 2 +replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 1 by 1 by 1 MPI processor grid 32640 atoms - Time spent = 0.00144172 secs + Time spent = 0.0013268 secs -neighbor 0.5 bin -neigh_modify delay 5 every 1 +neighbor 0.5 bin +neigh_modify delay 5 every 1 -pair_style airebo 3.0 1 1 -pair_coeff * * ../../potentials/CH.airebo C H -Reading potential file ../../potentials/CH.airebo with DATE: 2011-10-25 +pair_style airebo 3.0 1 1 +pair_coeff * * CH.airebo C H +Reading potential file CH.airebo with DATE: 2011-10-25 -velocity all create 300.0 761341 +velocity all create 300.0 761341 -fix 1 all nve -timestep 0.0005 +fix 1 all nve +timestep 0.0005 -thermo 10 -run 100 +thermo 10 +run 100 Neighbor list info ... update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -45,31 +45,31 @@ Neighbor list info ... bin: standard Per MPI rank memory allocation (min/avg/max) = 106.4 | 106.4 | 106.4 Mbytes Step Temp E_pair E_mol TotEng Press - 0 300 -139300.72 0 -138035.04 7988.6647 + 0 300 -139300.72 0 -138035.04 7988.6646 10 161.34683 -138712.9 0 -138032.19 33228.921 20 208.59504 -138912.79 0 -138032.74 -3211.8806 30 139.7513 -138618.85 0 -138029.25 10878.143 40 142.14562 -138629.02 0 -138029.32 14601.302 - 50 114.23401 -138510.95 0 -138029 24691.125 + 50 114.23401 -138510.95 0 -138029 24691.124 60 164.92002 -138726 0 -138030.21 35125.541 70 162.15256 -138715.9 0 -138031.79 5658.7946 80 157.16184 -138695.77 0 -138032.72 19824.698 - 90 196.15907 -138860.65 0 -138033.07 -7950.8462 + 90 196.15907 -138860.65 0 -138033.07 -7950.8463 100 178.31875 -138784.89 0 -138032.57 30997.671 -Loop time of 57.9914 on 1 procs for 100 steps with 32640 atoms +Loop time of 57.482 on 1 procs for 100 steps with 32640 atoms -Performance: 0.074 ns/day, 322.174 hours/ns, 1.724 timesteps/s +Performance: 0.075 ns/day, 319.344 hours/ns, 1.740 timesteps/s 99.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 53.275 | 53.275 | 53.275 | 0.0 | 91.87 -Neigh | 4.6548 | 4.6548 | 4.6548 | 0.0 | 8.03 -Comm | 0.026622 | 0.026622 | 0.026622 | 0.0 | 0.05 -Output | 0.00097251 | 0.00097251 | 0.00097251 | 0.0 | 0.00 -Modify | 0.022773 | 0.022773 | 0.022773 | 0.0 | 0.04 -Other | | 0.01089 | | | 0.02 +Pair | 52.796 | 52.796 | 52.796 | 0.0 | 91.85 +Neigh | 4.6286 | 4.6286 | 4.6286 | 0.0 | 8.05 +Comm | 0.024035 | 0.024035 | 0.024035 | 0.0 | 0.04 +Output | 0.00098443 | 0.00098443 | 0.00098443 | 0.0 | 0.00 +Modify | 0.021958 | 0.021958 | 0.021958 | 0.0 | 0.04 +Other | | 0.01014 | | | 0.02 Nlocal: 32640 ave 32640 max 32640 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -84,4 +84,4 @@ Total # of neighbors = 22217840 Ave neighs/atom = 680.694 Neighbor list builds = 8 Dangerous builds = 0 -Total wall time: 0:00:59 +Total wall time: 0:00:58 diff --git a/examples/airebo/log.27Nov18.airebo.g++.4 b/examples/airebo/log.12Dec18.airebo.g++.4 similarity index 66% rename from examples/airebo/log.27Nov18.airebo.g++.4 rename to examples/airebo/log.12Dec18.airebo.g++.4 index 335690684a..fbdd9ed2e1 100644 --- a/examples/airebo/log.27Nov18.airebo.g++.4 +++ b/examples/airebo/log.12Dec18.airebo.g++.4 @@ -1,36 +1,36 @@ -LAMMPS (27 Nov 2018) +LAMMPS (12 Dec 2018) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark -units metal -atom_style atomic +units metal +atom_style atomic -read_data data.airebo +read_data data.airebo orthogonal box = (-2.1 -2.1 0) to (2.1 2.1 25.579) 1 by 1 by 4 MPI processor grid reading atoms ... 60 atoms -replicate 17 16 2 +replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 2 by 2 by 1 MPI processor grid 32640 atoms - Time spent = 0.00262594 secs + Time spent = 0.000614405 secs -neighbor 0.5 bin -neigh_modify delay 5 every 1 +neighbor 0.5 bin +neigh_modify delay 5 every 1 -pair_style airebo 3.0 1 1 -pair_coeff * * ../../potentials/CH.airebo C H -Reading potential file ../../potentials/CH.airebo with DATE: 2011-10-25 +pair_style airebo 3.0 1 1 +pair_coeff * * CH.airebo C H +Reading potential file CH.airebo with DATE: 2011-10-25 -velocity all create 300.0 761341 +velocity all create 300.0 761341 -fix 1 all nve -timestep 0.0005 +fix 1 all nve +timestep 0.0005 -thermo 10 -run 100 +thermo 10 +run 100 Neighbor list info ... update every 1 steps, delay 5 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -45,31 +45,31 @@ Neighbor list info ... bin: standard Per MPI rank memory allocation (min/avg/max) = 29.37 | 29.75 | 30.13 Mbytes Step Temp E_pair E_mol TotEng Press - 0 300 -139300.72 0 -138035.04 7988.6647 + 0 300 -139300.72 0 -138035.04 7988.6646 10 161.34683 -138712.9 0 -138032.19 33228.921 20 208.59504 -138912.79 0 -138032.74 -3211.8806 30 139.7513 -138618.85 0 -138029.25 10878.143 40 142.14562 -138629.02 0 -138029.32 14601.302 - 50 114.23401 -138510.95 0 -138029 24691.125 + 50 114.23401 -138510.95 0 -138029 24691.124 60 164.92002 -138726 0 -138030.21 35125.541 70 162.15256 -138715.9 0 -138031.79 5658.7946 80 157.16184 -138695.77 0 -138032.72 19824.698 - 90 196.15907 -138860.65 0 -138033.07 -7950.8462 + 90 196.15907 -138860.65 0 -138033.07 -7950.8463 100 178.31875 -138784.89 0 -138032.57 30997.671 -Loop time of 16.4395 on 4 procs for 100 steps with 32640 atoms +Loop time of 15.9743 on 4 procs for 100 steps with 32640 atoms -Performance: 0.263 ns/day, 91.331 hours/ns, 6.083 timesteps/s -98.5% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 0.270 ns/day, 88.746 hours/ns, 6.260 timesteps/s +99.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 | 14.263 | 14.349 | 14.483 | 2.3 | 87.28 -Neigh | 1.6071 | 1.6283 | 1.6636 | 1.7 | 9.90 -Comm | 0.26261 | 0.43435 | 0.52323 | 16.1 | 2.64 -Output | 0.00042105 | 0.0007121 | 0.001538 | 0.0 | 0.00 -Modify | 0.00898 | 0.009112 | 0.0093675 | 0.2 | 0.06 -Other | | 0.0184 | | | 0.11 +Pair | 14.13 | 14.185 | 14.258 | 1.3 | 88.80 +Neigh | 1.5945 | 1.6093 | 1.6237 | 0.9 | 10.07 +Comm | 0.075436 | 0.16329 | 0.23273 | 14.3 | 1.02 +Output | 0.00041533 | 0.00069332 | 0.0014405 | 0.0 | 0.00 +Modify | 0.0089853 | 0.0090484 | 0.0091338 | 0.1 | 0.06 +Other | | 0.007319 | | | 0.05 Nlocal: 8160 ave 8174 max 8146 min Histogram: 1 0 1 0 0 0 0 1 0 1 diff --git a/examples/airebo/log.29Jun18.rebo2.g++.1 b/examples/airebo/log.12Dec18.rebo2.g++.1 similarity index 76% rename from examples/airebo/log.29Jun18.rebo2.g++.1 rename to examples/airebo/log.12Dec18.rebo2.g++.1 index 54c87ab474..83c3a8ebea 100644 --- a/examples/airebo/log.29Jun18.rebo2.g++.1 +++ b/examples/airebo/log.12Dec18.rebo2.g++.1 @@ -1,5 +1,4 @@ -LAMMPS (29 Jun 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +LAMMPS (12 Dec 2018) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -16,7 +15,7 @@ replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 1 by 1 by 1 MPI processor grid 32640 atoms - Time spent = 0.00153542 secs + Time spent = 0.0013907 secs neighbor 0.5 bin neigh_modify delay 5 every 1 @@ -50,27 +49,27 @@ Step Temp E_pair E_mol TotEng Press 10 179.37985 -137931.27 0 -137174.48 15655.936 20 206.87654 -138046.99 0 -137174.19 -24042.627 30 150.80122 -137807.43 0 -137171.21 -16524.118 - 40 173.24945 -137902.35 0 -137171.42 -5716.9118 + 40 173.24945 -137902.35 0 -137171.42 -5716.9119 50 151.80455 -137812.36 0 -137171.91 3480.4584 60 199.08777 -138013.82 0 -137173.88 17881.372 70 217.85748 -138093.86 0 -137174.73 -12270.999 - 80 202.37482 -138029.39 0 -137175.59 -7622.732 + 80 202.37482 -138029.39 0 -137175.59 -7622.7319 90 194.90628 -137997.05 0 -137174.75 -32267.471 100 185.17818 -137954.51 0 -137173.26 -6901.7499 -Loop time of 5.03541 on 1 procs for 100 steps with 32640 atoms +Loop time of 4.96341 on 1 procs for 100 steps with 32640 atoms -Performance: 0.858 ns/day, 27.975 hours/ns, 19.859 timesteps/s -99.0% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 0.870 ns/day, 27.574 hours/ns, 20.147 timesteps/s +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 | 3.5083 | 3.5083 | 3.5083 | 0.0 | 69.67 -Neigh | 1.4785 | 1.4785 | 1.4785 | 0.0 | 29.36 -Comm | 0.016176 | 0.016176 | 0.016176 | 0.0 | 0.32 -Output | 0.0009644 | 0.0009644 | 0.0009644 | 0.0 | 0.02 -Modify | 0.02224 | 0.02224 | 0.02224 | 0.0 | 0.44 -Other | | 0.009286 | | | 0.18 +Pair | 3.4476 | 3.4476 | 3.4476 | 0.0 | 69.46 +Neigh | 1.4692 | 1.4692 | 1.4692 | 0.0 | 29.60 +Comm | 0.015226 | 0.015226 | 0.015226 | 0.0 | 0.31 +Output | 0.00098777 | 0.00098777 | 0.00098777 | 0.0 | 0.02 +Modify | 0.021646 | 0.021646 | 0.021646 | 0.0 | 0.44 +Other | | 0.008718 | | | 0.18 Nlocal: 32640 ave 32640 max 32640 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/airebo/log.29Jun18.rebo2.g++.4 b/examples/airebo/log.12Dec18.rebo2.g++.4 similarity index 76% rename from examples/airebo/log.29Jun18.rebo2.g++.4 rename to examples/airebo/log.12Dec18.rebo2.g++.4 index b7d63dd2e5..f38f484238 100644 --- a/examples/airebo/log.29Jun18.rebo2.g++.4 +++ b/examples/airebo/log.12Dec18.rebo2.g++.4 @@ -1,5 +1,4 @@ -LAMMPS (29 Jun 2018) -OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:87) +LAMMPS (12 Dec 2018) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -16,7 +15,7 @@ replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 2 by 2 by 1 MPI processor grid 32640 atoms - Time spent = 0.00151467 secs + Time spent = 0.000644684 secs neighbor 0.5 bin neigh_modify delay 5 every 1 @@ -50,27 +49,27 @@ Step Temp E_pair E_mol TotEng Press 10 179.37985 -137931.27 0 -137174.48 15655.936 20 206.87654 -138046.99 0 -137174.19 -24042.627 30 150.80122 -137807.43 0 -137171.21 -16524.118 - 40 173.24945 -137902.35 0 -137171.42 -5716.9118 + 40 173.24945 -137902.35 0 -137171.42 -5716.9119 50 151.80455 -137812.36 0 -137171.91 3480.4584 60 199.08777 -138013.82 0 -137173.88 17881.372 70 217.85748 -138093.86 0 -137174.73 -12270.999 - 80 202.37482 -138029.39 0 -137175.59 -7622.732 + 80 202.37482 -138029.39 0 -137175.59 -7622.7319 90 194.90628 -137997.05 0 -137174.75 -32267.471 100 185.17818 -137954.51 0 -137173.26 -6901.7499 -Loop time of 1.49632 on 4 procs for 100 steps with 32640 atoms +Loop time of 1.4517 on 4 procs for 100 steps with 32640 atoms -Performance: 2.887 ns/day, 8.313 hours/ns, 66.831 timesteps/s -98.6% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 2.976 ns/day, 8.065 hours/ns, 68.885 timesteps/s +99.4% 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.93275 | 0.95717 | 0.97367 | 1.6 | 63.97 -Neigh | 0.45634 | 0.46084 | 0.46749 | 0.6 | 30.80 -Comm | 0.038283 | 0.062074 | 0.090508 | 7.6 | 4.15 -Output | 0.00046492 | 0.00072992 | 0.0015128 | 0.0 | 0.05 -Modify | 0.0088651 | 0.0090639 | 0.0093012 | 0.2 | 0.61 -Other | | 0.006436 | | | 0.43 +Pair | 0.92079 | 0.93883 | 0.95524 | 1.6 | 64.67 +Neigh | 0.45826 | 0.46013 | 0.46316 | 0.3 | 31.70 +Comm | 0.02183 | 0.038046 | 0.052974 | 7.5 | 2.62 +Output | 0.00044131 | 0.00057179 | 0.00093198 | 0.0 | 0.04 +Modify | 0.0088243 | 0.0089917 | 0.0092998 | 0.2 | 0.62 +Other | | 0.005127 | | | 0.35 Nlocal: 8160 ave 8163 max 8157 min Histogram: 1 1 0 0 0 0 0 0 1 1 From 7a2d326103b111c6282e128d2c617a4af461237b Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 8 Jan 2019 09:19:49 -0700 Subject: [PATCH 025/311] Commit JT 010819 - commit before co --- examples/SPIN/cobalt_hcp/in.spin.cobalt_hcp | 10 +- examples/SPIN/iron/in.spin.iron | 8 +- examples/SPIN/pppm_spin/in.spin.cut_comp | 26 +----- .../SPIN/pppm_spin/in.spin.spin_dipolar_cut | 26 +++--- src/KSPACE/ewald_dipole.cpp | 2 - src/KSPACE/ewald_dipole.h | 1 - src/SPIN/pair_spin_dipolar_long.cpp | 91 +++++++++++-------- 7 files changed, 80 insertions(+), 84 deletions(-) diff --git a/examples/SPIN/cobalt_hcp/in.spin.cobalt_hcp b/examples/SPIN/cobalt_hcp/in.spin.cobalt_hcp index 35aa1df86c..0efa52435d 100644 --- a/examples/SPIN/cobalt_hcp/in.spin.cobalt_hcp +++ b/examples/SPIN/cobalt_hcp/in.spin.cobalt_hcp @@ -25,16 +25,18 @@ velocity all create 100 4928459 rot yes dist gaussian #pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/neel 4.0 pair_style hybrid/overlay eam/alloy spin/exchange 4.0 -pair_coeff * * eam/alloy Co_PurjaPun_2012.eam.alloy Co -pair_coeff * * spin/exchange exchange 4.0 0.3593 1.135028015e-05 1.064568567 +pair_coeff * * eam/alloy ../examples/SPIN/cobalt_hcp/Co_PurjaPun_2012.eam.alloy Co +#pair_coeff * * eam/alloy Co_PurjaPun_2012.eam.alloy Co +pair_coeff * * spin/exchange exchange 4.0 -0.3593 1.135028015e-05 1.064568567 #pair_coeff * * spin/neel neel 4.0 0.0048 0.234 1.168 2.6905 0.705 0.652 neighbor 0.1 bin neigh_modify every 10 check yes delay 20 #fix 1 all precession/spin zeeman 1.0 0.0 0.0 1.0 -fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 -fix 2 all langevin/spin 0.0 0.0 21 +fix 1 all precession/spin anisotropy 0.01 0.0 0.0 1.0 +#fix 2 all langevin/spin 0.0 0.0 21 +fix 2 all langevin/spin 0.0 0.1 21 fix 3 all nve/spin lattice yes timestep 0.0001 diff --git a/examples/SPIN/iron/in.spin.iron b/examples/SPIN/iron/in.spin.iron index c2d5082cb6..dab1616e70 100644 --- a/examples/SPIN/iron/in.spin.iron +++ b/examples/SPIN/iron/in.spin.iron @@ -19,11 +19,13 @@ create_atoms 1 box mass 1 55.845 -set group all spin/random 31 2.2 +#set group all spin/random 31 2.2 +set group all spin 2.2 0.0 0.0 1.0 velocity all create 100 4928459 rot yes dist gaussian pair_style hybrid/overlay eam/alloy spin/exchange 3.5 -pair_coeff * * eam/alloy Fe_Mishin2006.eam.alloy Fe +#pair_coeff * * eam/alloy Fe_Mishin2006.eam.alloy Fe +pair_coeff * * eam/alloy ../examples/SPIN/iron/Fe_Mishin2006.eam.alloy Fe pair_coeff * * spin/exchange exchange 3.4 0.02726 0.2171 1.841 neighbor 0.1 bin @@ -53,4 +55,4 @@ thermo 50 compute outsp all property/atom spx spy spz sp fmx fmy fmz dump 100 all custom 1 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] -run 50000 +run 50 diff --git a/examples/SPIN/pppm_spin/in.spin.cut_comp b/examples/SPIN/pppm_spin/in.spin.cut_comp index 3d01c56878..373c485c94 100644 --- a/examples/SPIN/pppm_spin/in.spin.cut_comp +++ b/examples/SPIN/pppm_spin/in.spin.cut_comp @@ -29,12 +29,12 @@ neigh_modify delay 0 #neigh_modify every 1 delay 10 check yes page 100000000 one 10000000 #kspace_style pppm/dipole/spin 1.0e-4 -kspace_style ewald/dipole/spin 1.0e-4 -kspace_modify compute yes +#kspace_style ewald/dipole/spin 1.0e-4 +#kspace_modify compute yes #kspace_modify compute yes gewald 0.1 fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 -fix 2 all langevin/spin 0.0 0.1 21 +fix 2 all langevin/spin 0.0 0.0 21 #fix 3 all nve/spin lattice yes fix 3 all nve/spin lattice no @@ -44,29 +44,9 @@ thermo_style custom step temp pe ke etotal press thermo_modify format float %20.16g thermo 50 -#compute peratom all pe/atom -#compute pe all reduce sum c_peratom -#thermo_style custom step temp pe c_pe - -#compute peratom2 all stress/atom -#compute peratom2 all stress/atom NULL -#compute p all reduce sum c_peratom2[1] c_peratom2[2] c_peratom2[3] c_peratom2[4] c_peratom2[5] c_peratom2[6] -#variable press equal -(c_p[1]+c_p[2]+c_p[3])/(3*vol) -#variable pxx equal -c_p[1]/vol -#variable pyy equal -c_p[2]/vol -#variable pzz equal -c_p[3]/vol -#variable pxy equal -c_p[4]/vol -#variable pxz equal -c_p[5]/vol -#variable pyz equal -c_p[6]/vol -#thermo_style custom step temp etotal pe c_pe press v_press pxx v_pxx pyy v_pyy pzz v_pzz pxy v_pxy pxz v_pxz pyz v_pyz -#thermo_style custom step etotal pe press v_press v_pxx v_pyy v_pzz v_pxy v_pxz v_pyz -#thermo_style custom step temp etotal press v_press - compute outsp all property/atom spx spy spz sp fmx fmy fmz dump 50 all custom 1 dump.equil id type x y z c_outsp[1] c_outsp[2] c_outsp[3] #c_outsp[5] c_outsp[6] c_outsp[7] #dump_modify 1 format line "%d %d %20.15g %20.15g %20.15g %20.15g %20.15g %20.15g" scale yes -#pair_modify compute no - run 10000 diff --git a/examples/SPIN/pppm_spin/in.spin.spin_dipolar_cut b/examples/SPIN/pppm_spin/in.spin.spin_dipolar_cut index b265c4413e..a3ca4288fc 100644 --- a/examples/SPIN/pppm_spin/in.spin.spin_dipolar_cut +++ b/examples/SPIN/pppm_spin/in.spin.spin_dipolar_cut @@ -21,16 +21,15 @@ mass 1 58.93 set group all spin/random 31 1.72 #set group all spin 1.72 0.0 0.0 1.0 -#velocity all create 100 4928459 rot yes dist gaussian +velocity all create 100 4928459 rot yes dist gaussian -#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/long 8.0 -#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/dipolar/cut 8.0 -pair_style spin/dipolar/cut 8.0 -#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 -#pair_coeff * * eam/alloy ../examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy Co -#pair_coeff * * spin/exchange exchange 4.0 0.3593 1.135028015e-05 1.064568567 -pair_coeff * * long 8.0 -#pair_coeff * * spin/long long 8.0 +pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/dipolar/cut 8.0 +#pair_style hybrid/overlay eam/alloy spin/dipolar/cut 8.0 +pair_coeff * * eam/alloy ../examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy Co +pair_coeff * * spin/exchange exchange 4.0 0.3593 1.135028015e-05 1.064568567 +pair_coeff * * spin/dipolar/cut long 8.0 +#pair_style spin/dipolar/cut 8.0 +#pair_coeff * * long 8.0 neighbor 0.1 bin neigh_modify every 10 check yes delay 20 @@ -38,8 +37,8 @@ neigh_modify every 10 check yes delay 20 #fix 1 all precession/spin zeeman 1.0 0.0 0.0 1.0 fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 fix 2 all langevin/spin 0.0 0.0 21 -#fix 3 all nve/spin lattice yes -fix 3 all nve/spin lattice no +fix 3 all nve/spin lattice yes +#fix 3 all nve/spin lattice no timestep 0.0001 @@ -55,10 +54,11 @@ variable emag equal c_out_mag[5] variable tmag equal c_out_mag[6] thermo_style custom step time v_magnorm v_emag temp etotal +thermo_modify format float %20.16g thermo 10 compute outsp all property/atom spx spy spz sp fmx fmy fmz dump 100 all custom 1 dump_cobalt_hcp.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] -#run 20000 -run 10 +run 20000 +#run 10 diff --git a/src/KSPACE/ewald_dipole.cpp b/src/KSPACE/ewald_dipole.cpp index 0cd5c95a9b..ebe17c82dd 100644 --- a/src/KSPACE/ewald_dipole.cpp +++ b/src/KSPACE/ewald_dipole.cpp @@ -561,8 +561,6 @@ void EwaldDipole::eik_dot_r() // loop on different k-directions // loop on n kpoints and nlocal atoms - // store (n x nlocal) tab. of values of (mu_i dot k) - // store n values of sum_j[ (mu_j dot k) exp(-k dot r_j) ] // (k,0,0), (0,l,0), (0,0,m) diff --git a/src/KSPACE/ewald_dipole.h b/src/KSPACE/ewald_dipole.h index 77c0af11c2..09a2896b56 100644 --- a/src/KSPACE/ewald_dipole.h +++ b/src/KSPACE/ewald_dipole.h @@ -34,7 +34,6 @@ class EwaldDipole : public Ewald { protected: double musum,musqsum,mu2; - //double **muk; // mu_i dot k double **tk; // field for torque double **vc; // virial per k diff --git a/src/SPIN/pair_spin_dipolar_long.cpp b/src/SPIN/pair_spin_dipolar_long.cpp index 140b92700c..ef79717f63 100644 --- a/src/SPIN/pair_spin_dipolar_long.cpp +++ b/src/SPIN/pair_spin_dipolar_long.cpp @@ -181,10 +181,14 @@ void PairSpinDipolarLong::init_style() // insure use of KSpace long-range solver, set g_ewald - if (force->kspace == NULL) - error->all(FLERR,"Pair style requires a KSpace style"); + //if (force->kspace == NULL) + // error->all(FLERR,"Pair style requires a KSpace style"); + + //g_ewald = force->kspace->g_ewald; + + // test case + g_ewald = 0.1; - g_ewald = force->kspace->g_ewald; } @@ -233,10 +237,11 @@ void PairSpinDipolarLong::compute(int eflag, int vflag) int i,j,ii,jj,inum,jnum,itype,jtype; double r,rinv,r2inv,rsq; double grij,expm2,t,erfc; - double bij[4]; double evdwl,ecoul; - double xi[3],rij[3]; - double spi[4],spj[4],fi[3],fmi[3]; + double bij[4]; + double xi[3],rij[3],eij[3]; + double spi[4],spj[4]; + double fi[3],fmi[3]; double local_cut2; double pre1,pre2,pre3; int *ilist,*jlist,*numneigh,**firstneigh; @@ -298,12 +303,16 @@ void PairSpinDipolarLong::compute(int eflag, int vflag) rij[1] = x[j][1] - xi[1]; rij[2] = x[j][2] - xi[2]; rsq = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; + rinv = 1.0/sqrt(rsq); + eij[0] = rij[0]*rinv; + eij[1] = rij[1]*rinv; + eij[2] = rij[2]*rinv; local_cut2 = cut_spin_long[itype][jtype]*cut_spin_long[itype][jtype]; if (rsq < local_cut2) { r2inv = 1.0/rsq; - rinv = sqrt(r2inv); + //rinv = sqrt(r2inv); r = sqrt(rsq); grij = g_ewald * r; @@ -316,18 +325,20 @@ void PairSpinDipolarLong::compute(int eflag, int vflag) bij[2] = (3.0*bij[1] + pre2*expm2) * r2inv; bij[3] = (5.0*bij[2] + pre3*expm2) * r2inv; - compute_long(i,j,rij,bij,fmi,spi,spj); - compute_long_mech(i,j,rij,bij,fmi,spi,spj); + compute_long(i,j,eij,bij,fmi,spi,spj); + compute_long_mech(i,j,eij,bij,fmi,spi,spj); + //compute_long(i,j,rij,bij,fmi,spi,spj); + //compute_long_mech(i,j,rij,bij,fmi,spi,spj); } // force accumulation - f[i][0] += fi[0] * mub2mu0; - f[i][1] += fi[1] * mub2mu0; - f[i][2] += fi[2] * mub2mu0; - fm[i][0] += fmi[0] * mub2mu0hbinv; - fm[i][1] += fmi[1] * mub2mu0hbinv; - fm[i][2] += fmi[2] * mub2mu0hbinv; + f[i][0] += fi[0]; + f[i][1] += fi[1]; + f[i][2] += fi[2]; + fm[i][0] += fmi[0]; + fm[i][1] += fmi[1]; + fm[i][2] += fmi[2]; if (newton_pair || j < nlocal) { f[j][0] -= fi[0]; @@ -360,7 +371,8 @@ void PairSpinDipolarLong::compute_single_pair(int ii, double fmi[3]) int i,j,jj,jnum,itype,jtype; double r,rinv,r2inv,rsq; double grij,expm2,t,erfc; - double bij[4],xi[3],rij[3]; + double bij[4]; + double xi[3],rij[3],eij[3]; double spi[4],spj[4]; double local_cut2; double pre1,pre2,pre3; @@ -411,12 +423,16 @@ void PairSpinDipolarLong::compute_single_pair(int ii, double fmi[3]) rij[1] = x[j][1] - xi[1]; rij[2] = x[j][2] - xi[2]; rsq = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; + rinv = 1.0/sqrt(rsq); + eij[0] = rij[0]*rinv; + eij[1] = rij[1]*rinv; + eij[2] = rij[2]*rinv; local_cut2 = cut_spin_long[itype][jtype]*cut_spin_long[itype][jtype]; if (rsq < local_cut2) { r2inv = 1.0/rsq; - rinv = sqrt(r2inv); + //rinv = sqrt(r2inv); r = sqrt(rsq); grij = g_ewald * r; @@ -429,7 +445,7 @@ void PairSpinDipolarLong::compute_single_pair(int ii, double fmi[3]) bij[2] = (3.0*bij[1] + pre2*expm2) * r2inv; bij[3] = (5.0*bij[2] + pre3*expm2) * r2inv; - compute_long(i,j,rij,bij,fmi,spi,spj); + compute_long(i,j,eij,bij,fmi,spi,spj); } } @@ -447,21 +463,22 @@ void PairSpinDipolarLong::compute_single_pair(int ii, double fmi[3]) compute dipolar interaction between spins i and j ------------------------------------------------------------------------- */ -void PairSpinDipolarLong::compute_long(int i, int j, double rij[3], +void PairSpinDipolarLong::compute_long(int i, int j, double eij[3], double bij[4], double fmi[3], double spi[4], double spj[4]) { - double sjdotr; + double sjeij,pre; double b1,b2,gigj; gigj = spi[3] * spj[3]; - sjdotr = spj[0]*rij[0] + spj[1]*rij[1] + spj[2]*rij[2]; + pre = gigj*mub2mu0hbinv; + sjeij = spj[0]*eij[0] + spj[1]*eij[1] + spj[2]*eij[2]; b1 = bij[1]; b2 = bij[2]; - fmi[0] += mub2mu0hbinv * gigj * (b2 * sjdotr *rij[0] - b1 * spj[0]); - fmi[1] += mub2mu0hbinv * gigj * (b2 * sjdotr *rij[1] - b1 * spj[1]); - fmi[2] += mub2mu0hbinv * gigj * (b2 * sjdotr *rij[2] - b1 * spj[2]); + fmi[0] += pre * (b2 * sjeij * eij[0] - b1 * spj[0]); + fmi[1] += pre * (b2 * sjeij * eij[1] - b1 * spj[1]); + fmi[2] += pre * (b2 * sjeij * eij[2] - b1 * spj[2]); } /* ---------------------------------------------------------------------- @@ -469,29 +486,27 @@ void PairSpinDipolarLong::compute_long(int i, int j, double rij[3], atom i and atom j ------------------------------------------------------------------------- */ -void PairSpinDipolarLong::compute_long_mech(int i, int j, double rij[3], +void PairSpinDipolarLong::compute_long_mech(int i, int j, double eij[3], double bij[4], double fi[3], double spi[3], double spj[3]) { - double sdots,sidotr,sjdotr,b2,b3; - double g1,g2,g1b2_g2b3,gigj; + double sisj,sieij,sjeij,b2,b3; + double g1,g2,g1b2_g2b3,gigj,pre; gigj = spi[3] * spj[3]; - sdots = spi[0]*spj[0] + spi[1]*spj[1] + spi[2]*spj[2]; - sidotr = spi[0]*rij[0] + spi[1]*rij[1] + spi[2]*rij[2]; - sjdotr = spj[0]*rij[0] + spj[1]*rij[1] + spj[2]*rij[2]; + pre = gigj*mub2mu0; + sisj = spi[0]*spj[0] + spi[1]*spj[1] + spi[2]*spj[2]; + sieij = spi[0]*eij[0] + spi[1]*eij[1] + spi[2]*eij[2]; + sjeij = spj[0]*eij[0] + spj[1]*eij[1] + spj[2]*eij[2]; b2 = bij[2]; b3 = bij[3]; - g1 = sdots; - g2 = -sidotr*sjdotr; + g1 = sisj; + g2 = -sieij*sjeij; g1b2_g2b3 = g1*b2 + g2*b3; - fi[0] += gigj * (rij[0] * g1b2_g2b3 + - b2 * (sjdotr*spi[0] + sidotr*spj[0])); - fi[1] += gigj * (rij[1] * g1b2_g2b3 + - b2 * (sjdotr*spi[1] + sidotr*spj[1])); - fi[2] += gigj * (rij[2] * g1b2_g2b3 + - b2 * (sjdotr*spi[2] + sidotr*spj[2])); + fi[0] += pre * (eij[0] * g1b2_g2b3 + b2 * (sjeij*spi[0] + sieij*spj[0])); + fi[1] += pre * (eij[1] * g1b2_g2b3 + b2 * (sjeij*spi[1] + sieij*spj[1])); + fi[2] += pre * (eij[2] * g1b2_g2b3 + b2 * (sjeij*spi[2] + sieij*spj[2])); } From 58905525bfa26e76ef85d87dadff706cb751d098 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Wed, 6 Feb 2019 14:42:37 -0700 Subject: [PATCH 026/311] Add team-based calcs to some KOKKOS package pair_styles --- src/KOKKOS/kokkos.cpp | 8 + src/KOKKOS/kokkos.h | 1 + src/KOKKOS/kokkos_type.h | 46 +++++ src/KOKKOS/pair_kokkos.h | 393 ++++++++++++++++++++++++++++++++++++++- 4 files changed, 439 insertions(+), 9 deletions(-) diff --git a/src/KOKKOS/kokkos.cpp b/src/KOKKOS/kokkos.cpp index 9973b5a688..5d041bcbb0 100644 --- a/src/KOKKOS/kokkos.cpp +++ b/src/KOKKOS/kokkos.cpp @@ -192,6 +192,7 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) forward_comm_on_host = 0; reverse_comm_on_host = 0; gpu_direct_flag = 1; + team_flag = 0; #if KOKKOS_USE_CUDA // only if we can safely detect, that GPU-direct is not available, change default @@ -228,6 +229,7 @@ void KokkosLMP::accelerator(int narg, char **arg) exchange_comm_classic = forward_comm_classic = reverse_comm_classic = 0; exchange_comm_on_host = forward_comm_on_host = reverse_comm_on_host = 0; gpu_direct_flag = 1; + team_flag = 0; int iarg = 0; while (iarg < narg) { @@ -317,6 +319,12 @@ void KokkosLMP::accelerator(int narg, char **arg) else if (strcmp(arg[iarg+1],"on") == 0) gpu_direct_flag = 1; else error->all(FLERR,"Illegal package kokkos command"); iarg += 2; + } else if (strcmp(arg[iarg],"team") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal package kokkos command"); + if (strcmp(arg[iarg+1],"off") == 0) team_flag = 0; + else if (strcmp(arg[iarg+1],"on") == 0) team_flag = 1; + else error->all(FLERR,"Illegal package kokkos command"); + iarg += 2; } else error->all(FLERR,"Illegal package kokkos command"); } diff --git a/src/KOKKOS/kokkos.h b/src/KOKKOS/kokkos.h index cd429d5c1c..a665329d70 100644 --- a/src/KOKKOS/kokkos.h +++ b/src/KOKKOS/kokkos.h @@ -36,6 +36,7 @@ class KokkosLMP : protected Pointers { int numa; int auto_sync; int gpu_direct_flag; + int team_flag; KokkosLMP(class LAMMPS *, int, char **); ~KokkosLMP(); diff --git a/src/KOKKOS/kokkos_type.h b/src/KOKKOS/kokkos_type.h index b88c92ff73..16d7c3cbd2 100644 --- a/src/KOKKOS/kokkos_type.h +++ b/src/KOKKOS/kokkos_type.h @@ -448,6 +448,52 @@ struct s_EV_FLOAT_REAX { }; typedef struct s_EV_FLOAT_REAX EV_FLOAT_REAX; +struct s_FEV_FLOAT { + F_FLOAT f[3]; + E_FLOAT evdwl; + E_FLOAT ecoul; + E_FLOAT v[6]; + KOKKOS_INLINE_FUNCTION + s_FEV_FLOAT() { + f[0] = 0; f[1] = 0; f[2] = 0; + evdwl = 0; + ecoul = 0; + v[0] = 0; v[1] = 0; v[2] = 0; + v[3] = 0; v[4] = 0; v[5] = 0; + } + + KOKKOS_INLINE_FUNCTION + void operator+=(const s_FEV_FLOAT &rhs) { + f[0] += rhs.f[0]; + f[1] += rhs.f[1]; + f[2] += rhs.f[2]; + evdwl += rhs.evdwl; + ecoul += rhs.ecoul; + v[0] += rhs.v[0]; + v[1] += rhs.v[1]; + v[2] += rhs.v[2]; + v[3] += rhs.v[3]; + v[4] += rhs.v[4]; + v[5] += rhs.v[5]; + } + + KOKKOS_INLINE_FUNCTION + void operator+=(const volatile s_FEV_FLOAT &rhs) volatile { + f[0] += rhs.f[0]; + f[1] += rhs.f[1]; + f[2] += rhs.f[2]; + evdwl += rhs.evdwl; + ecoul += rhs.ecoul; + v[0] += rhs.v[0]; + v[1] += rhs.v[1]; + v[2] += rhs.v[2]; + v[3] += rhs.v[3]; + v[4] += rhs.v[4]; + v[5] += rhs.v[5]; + } +}; +typedef struct s_FEV_FLOAT FEV_FLOAT; + #ifndef PREC_POS #define PREC_POS PRECISION #endif diff --git a/src/KOKKOS/pair_kokkos.h b/src/KOKKOS/pair_kokkos.h index ab616d2c07..8758b2f03c 100644 --- a/src/KOKKOS/pair_kokkos.h +++ b/src/KOKKOS/pair_kokkos.h @@ -86,6 +86,7 @@ struct PairComputeFunctor { NeighListKokkos* list_ptr): c(*c_ptr),list(*list_ptr) { // allocate duplicated memory + f = c.f; dup_f = Kokkos::Experimental::create_scatter_view::value >(c.f); dup_eatom = Kokkos::Experimental::create_scatter_view::value >(c.d_eatom); dup_vatom = Kokkos::Experimental::create_scatter_view::value >(c.d_vatom); @@ -255,6 +256,329 @@ struct PairComputeFunctor { return ev; } + // Use TeamPolicy, assume Newton off, Full Neighborlist, and no energy/virial + // Loop over neighbors of one atom without coulomb interaction + // This function is called in parallel + KOKKOS_FUNCTION + void compute_item_team(Kokkos::TeamPolicy<>::member_type team, + const NeighListKokkos &list, const NoCoulTag&) const { + + const int inum = team.league_size(); + const int atoms_per_team = team.team_size(); + const int firstatom = team.league_rank()*atoms_per_team; + const int lastatom = firstatom + atoms_per_team < inum ? firstatom + atoms_per_team : inum; + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, firstatom, lastatom), [&] (const int &ii) { + + const int i = list.d_ilist[ii]; + const X_FLOAT xtmp = c.x(i,0); + const X_FLOAT ytmp = c.x(i,1); + const X_FLOAT ztmp = c.x(i,2); + const int itype = c.type(i); + + const AtomNeighborsConst neighbors_i = list.get_neighbors_const(i); + const int jnum = list.d_numneigh[i]; + + t_scalar3 fsum; + + Kokkos::parallel_reduce(Kokkos::ThreadVectorRange(team,jnum), + [&] (const int jj, t_scalar3& ftmp) { + + int j = neighbors_i(jj); + const F_FLOAT factor_lj = c.special_lj[sbmask(j)]; + j &= NEIGHMASK; + const X_FLOAT delx = xtmp - c.x(j,0); + const X_FLOAT dely = ytmp - c.x(j,1); + const X_FLOAT delz = ztmp - c.x(j,2); + const int jtype = c.type(j); + const F_FLOAT rsq = delx*delx + dely*dely + delz*delz; + + if(rsq < (STACKPARAMS?c.m_cutsq[itype][jtype]:c.d_cutsq(itype,jtype))) { + + const F_FLOAT fpair = factor_lj*c.template compute_fpair(rsq,i,j,itype,jtype); + + ftmp.x += delx*fpair; + ftmp.y += dely*fpair; + ftmp.z += delz*fpair; + } + + },fsum); + + Kokkos::single(Kokkos::PerThread(team), [&] (){ + f(i,0) += fsum.x; + f(i,1) += fsum.y; + f(i,2) += fsum.z; + }); + + }); + } + + // Use TeamPolicy, assume Newton off, Full Neighborlist, and no energy/virial + // Loop over neighbors of one atom with coulomb interaction + // This function is called in parallel + KOKKOS_FUNCTION + void compute_item_team(Kokkos::TeamPolicy<>::member_type team, + const NeighListKokkos &list, const CoulTag& ) const { + + const int inum = team.league_size(); + const int atoms_per_team = team.team_size(); + int firstatom = team.league_rank()*atoms_per_team; + int lastatom = firstatom + atoms_per_team < inum ? firstatom + atoms_per_team : inum; + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, firstatom, lastatom), [&] (const int &ii) { + + const int i = list.d_ilist[ii]; + const X_FLOAT xtmp = c.x(i,0); + const X_FLOAT ytmp = c.x(i,1); + const X_FLOAT ztmp = c.x(i,2); + const int itype = c.type(i); + const F_FLOAT qtmp = c.q(i); + + const AtomNeighborsConst neighbors_i = list.get_neighbors_const(i); + const int jnum = list.d_numneigh[i]; + + t_scalar3 fsum; + + Kokkos::parallel_reduce(Kokkos::ThreadVectorRange(team,jnum), + [&] (const int jj, t_scalar3& ftmp) { + int j = neighbors_i(jj); + const F_FLOAT factor_lj = c.special_lj[sbmask(j)]; + const F_FLOAT factor_coul = c.special_coul[sbmask(j)]; + j &= NEIGHMASK; + const X_FLOAT delx = xtmp - c.x(j,0); + const X_FLOAT dely = ytmp - c.x(j,1); + const X_FLOAT delz = ztmp - c.x(j,2); + const int jtype = c.type(j); + const F_FLOAT rsq = delx*delx + dely*dely + delz*delz; + + if(rsq < (STACKPARAMS?c.m_cutsq[itype][jtype]:c.d_cutsq(itype,jtype))) { + + F_FLOAT fpair = F_FLOAT(); + + if(rsq < (STACKPARAMS?c.m_cut_ljsq[itype][jtype]:c.d_cut_ljsq(itype,jtype))) + fpair+=factor_lj*c.template compute_fpair(rsq,i,j,itype,jtype); + if(rsq < (STACKPARAMS?c.m_cut_coulsq[itype][jtype]:c.d_cut_coulsq(itype,jtype))) + fpair+=c.template compute_fcoul(rsq,i,j,itype,jtype,factor_coul,qtmp); + + ftmp.x += delx*fpair; + ftmp.y += dely*fpair; + ftmp.z += delz*fpair; + } + },fsum); + + Kokkos::single(Kokkos::PerThread(team), [&] (){ + f(i,0) += fsum.x; + f(i,1) += fsum.y; + f(i,2) += fsum.z; + }); + }); + } + + + // Use TeamPolicy, assume Newton off, Full Neighborlist, and energy/virial + // Loop over neighbors of one atom without coulomb interaction + // This function is called in parallel + KOKKOS_FUNCTION + EV_FLOAT compute_item_team_ev(Kokkos::TeamPolicy<>::member_type team, + const NeighListKokkos &list, const NoCoulTag&) const { + + EV_FLOAT ev; + + const int inum = team.league_size(); + const int atoms_per_team = team.team_size(); + const int firstatom = team.league_rank()*atoms_per_team; + const int lastatom = firstatom + atoms_per_team < inum ? firstatom + atoms_per_team : inum; + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, firstatom, lastatom), [&] (const int &ii) { + + + const int i = list.d_ilist[ii]; + const X_FLOAT xtmp = c.x(i,0); + const X_FLOAT ytmp = c.x(i,1); + const X_FLOAT ztmp = c.x(i,2); + const int itype = c.type(i); + + const AtomNeighborsConst neighbors_i = list.get_neighbors_const(i); + const int jnum = list.d_numneigh[i]; + + FEV_FLOAT fev; + + Kokkos::parallel_reduce(Kokkos::ThreadVectorRange(team,jnum), + [&] (const int jj, FEV_FLOAT& fev_tmp) { + + int j = neighbors_i(jj); + const F_FLOAT factor_lj = c.special_lj[sbmask(j)]; + j &= NEIGHMASK; + const X_FLOAT delx = xtmp - c.x(j,0); + const X_FLOAT dely = ytmp - c.x(j,1); + const X_FLOAT delz = ztmp - c.x(j,2); + const int jtype = c.type(j); + const F_FLOAT rsq = delx*delx + dely*dely + delz*delz; + + if(rsq < (STACKPARAMS?c.m_cutsq[itype][jtype]:c.d_cutsq(itype,jtype))) { + + const F_FLOAT fpair = factor_lj*c.template compute_fpair(rsq,i,j,itype,jtype); + + fev_tmp.f[0] += delx*fpair; + fev_tmp.f[1] += dely*fpair; + fev_tmp.f[2] += delz*fpair; + + F_FLOAT evdwl = 0.0; + if (c.eflag) { + evdwl = factor_lj * c.template compute_evdwl(rsq,i,j,itype,jtype); + fev.evdwl += 0.5*evdwl; + } + if (c.vflag_either) { + fev.v[0] += 0.5*delx*delx*fpair; + fev.v[1] += 0.5*dely*dely*fpair; + fev.v[2] += 0.5*delz*delz*fpair; + fev.v[3] += 0.5*delx*dely*fpair; + fev.v[4] += 0.5*delx*delz*fpair; + fev.v[5] += 0.5*dely*delz*fpair; + } + } + },fev); + + Kokkos::single(Kokkos::PerThread(team), [&] (){ + f(i,0) += fev.f[0]; + f(i,1) += fev.f[1]; + f(i,2) += fev.f[2]; + + if (c.eflag_global) + ev.evdwl += fev.evdwl; + + if (c.eflag_atom) + d_eatom(i,0) += fev.evdwl; + + if (c.vflag_global) { + ev.v[0] += fev.v[0]; + ev.v[1] += fev.v[1]; + ev.v[2] += fev.v[2]; + ev.v[3] += fev.v[3]; + ev.v[4] += fev.v[4]; + ev.v[5] += fev.v[5]; + } + + if (c.vflag_atom) { + d_vatom(i,0) += fev.v[0]; + d_vatom(i,1) += fev.v[1]; + d_vatom(i,2) += fev.v[2]; + d_vatom(i,3) += fev.v[3]; + d_vatom(i,4) += fev.v[4]; + d_vatom(i,5) += fev.v[5]; + } + }); + }); + return ev; + } + + // Use TeamPolicy, assume Newton off, Full Neighborlist, and energy/virial + // Loop over neighbors of one atom with coulomb interaction + // This function is called in parallel + KOKKOS_FUNCTION + EV_FLOAT compute_item_team_ev(Kokkos::TeamPolicy<>::member_type team, + const NeighListKokkos &list, const CoulTag& ) const { + + EV_FLOAT ev; + + const int inum = team.league_size(); + const int atoms_per_team = team.team_size(); + int firstatom = team.league_rank()*atoms_per_team; + int lastatom = firstatom + atoms_per_team < inum ? firstatom + atoms_per_team : inum; + Kokkos::parallel_for(Kokkos::TeamThreadRange(team, firstatom, lastatom), [&] (const int &ii) { + + const int i = list.d_ilist[ii]; + const X_FLOAT xtmp = c.x(i,0); + const X_FLOAT ytmp = c.x(i,1); + const X_FLOAT ztmp = c.x(i,2); + const int itype = c.type(i); + const F_FLOAT qtmp = c.q(i); + + const AtomNeighborsConst neighbors_i = list.get_neighbors_const(i); + const int jnum = list.d_numneigh[i]; + + FEV_FLOAT fev; + + Kokkos::parallel_reduce(Kokkos::ThreadVectorRange(team,jnum), + [&] (const int jj, FEV_FLOAT& fev_tmp) { + int j = neighbors_i(jj); + const F_FLOAT factor_lj = c.special_lj[sbmask(j)]; + const F_FLOAT factor_coul = c.special_coul[sbmask(j)]; + j &= NEIGHMASK; + const X_FLOAT delx = xtmp - c.x(j,0); + const X_FLOAT dely = ytmp - c.x(j,1); + const X_FLOAT delz = ztmp - c.x(j,2); + const int jtype = c.type(j); + const F_FLOAT rsq = delx*delx + dely*dely + delz*delz; + + if(rsq < (STACKPARAMS?c.m_cutsq[itype][jtype]:c.d_cutsq(itype,jtype))) { + + F_FLOAT fpair = F_FLOAT(); + + if(rsq < (STACKPARAMS?c.m_cut_ljsq[itype][jtype]:c.d_cut_ljsq(itype,jtype))) + fpair+=factor_lj*c.template compute_fpair(rsq,i,j,itype,jtype); + if(rsq < (STACKPARAMS?c.m_cut_coulsq[itype][jtype]:c.d_cut_coulsq(itype,jtype))) + fpair+=c.template compute_fcoul(rsq,i,j,itype,jtype,factor_coul,qtmp); + + fev.f[0] += delx*fpair; + fev.f[1] += dely*fpair; + fev.f[2] += delz*fpair; + + F_FLOAT evdwl = 0.0; + F_FLOAT ecoul = 0.0; + if (c.eflag) { + if(rsq < (STACKPARAMS?c.m_cut_ljsq[itype][jtype]:c.d_cut_ljsq(itype,jtype))) { + evdwl = factor_lj * c.template compute_evdwl(rsq,i,j,itype,jtype); + ev.evdwl += 0.5*evdwl; + } + if(rsq < (STACKPARAMS?c.m_cut_coulsq[itype][jtype]:c.d_cut_coulsq(itype,jtype))) { + ecoul = c.template compute_ecoul(rsq,i,j,itype,jtype,factor_coul,qtmp); + ev.ecoul += 0.5*ecoul; + } + } + if (c.vflag) { + fev.v[0] += 0.5*delx*delx*fpair; + fev.v[1] += 0.5*dely*dely*fpair; + fev.v[2] += 0.5*delz*delz*fpair; + fev.v[3] += 0.5*delx*dely*fpair; + fev.v[4] += 0.5*delx*delz*fpair; + fev.v[5] += 0.5*dely*delz*fpair; + } + } + },fev); + + Kokkos::single(Kokkos::PerThread(team), [&] (){ + f(i,0) += fev.f[0]; + f(i,1) += fev.f[1]; + f(i,2) += fev.f[2]; + + if (c.eflag_global) { + ev.evdwl += fev.evdwl; + ev.ecoul += fev.ecoul; + } + + if (c.eflag_atom) + d_eatom(i,0) += fev.evdwl + fev.ecoul; + + if (c.vflag_global) { + ev.v[0] += fev.v[0]; + ev.v[1] += fev.v[1]; + ev.v[2] += fev.v[2]; + ev.v[3] += fev.v[3]; + ev.v[4] += fev.v[4]; + ev.v[5] += fev.v[5]; + } + + if (c.vflag_atom) { + d_vatom(i,0) += fev.v[0]; + d_vatom(i,1) += fev.v[1]; + d_vatom(i,2) += fev.v[2]; + d_vatom(i,3) += fev.v[3]; + d_vatom(i,4) += fev.v[4]; + d_vatom(i,5) += fev.v[5]; + } + }); + }); + return ev; + } + KOKKOS_INLINE_FUNCTION void ev_tally(EV_FLOAT &ev, const int &i, const int &j, const F_FLOAT &epair, const F_FLOAT &fpair, const F_FLOAT &delx, @@ -355,6 +679,16 @@ struct PairComputeFunctor { else energy_virial += compute_item<1,0>(i,list,typename DoCoul::type()); } + + KOKKOS_INLINE_FUNCTION + void operator()(const typename Kokkos::TeamPolicy<>::member_type& team) const { + compute_item_team(team,list,typename DoCoul::type()); + } + + KOKKOS_INLINE_FUNCTION + void operator()(const typename Kokkos::TeamPolicy<>::member_type& team, value_type &energy_virial) const { + energy_virial += compute_item_team_ev(team,list,typename DoCoul::type()); + } }; template @@ -489,6 +823,15 @@ struct PairComputeFunctor { void operator()(const int i, value_type &energy_virial) const { energy_virial += compute_item<1,0>(i,list,typename DoCoul::type()); } + + KOKKOS_INLINE_FUNCTION + void operator()(const typename Kokkos::TeamPolicy<>::member_type& team) const + {} + + KOKKOS_INLINE_FUNCTION + void operator()(const typename Kokkos::TeamPolicy<>::member_type& team, value_type &energy_virial) const + {} + }; // Filter out Neighflags which are not supported for PairStyle @@ -507,20 +850,52 @@ EV_FLOAT pair_compute_neighlist (PairStyle* fpair, typename Kokkos::Impl::enable return ev; } +template +int GetTeamSize(FunctorStyle& functor, int team_size, int vector_length) { + int team_size_max = Kokkos::TeamPolicy<>::team_size_max(functor); + +#ifdef KOKKOS_ENABLE_CUDA + if(team_size*vector_length > team_size_max) + team_size = team_size_max/vector_length; +#else + team_size = 1; +#endif + return team_size; +} + // Submit ParallelFor for NEIGHFLAG=HALF,HALFTHREAD,FULL,N2 template EV_FLOAT pair_compute_neighlist (PairStyle* fpair, typename Kokkos::Impl::enable_if<(NEIGHFLAG&PairStyle::EnabledNeighFlags) != 0, NeighListKokkos*>::type list) { EV_FLOAT ev; - if(fpair->atom->ntypes > MAX_TYPES_STACKPARAMS) { - PairComputeFunctor ff(fpair,list); - if (fpair->eflag || fpair->vflag) Kokkos::parallel_reduce(list->inum,ff,ev); - else Kokkos::parallel_for(list->inum,ff); - ff.contribute(); + if (fpair->lmp->kokkos->team_flag) { + int vector_length = 8; + int atoms_per_team = 32; + + if(fpair->atom->ntypes > MAX_TYPES_STACKPARAMS) { + PairComputeFunctor ff(fpair,list); + atoms_per_team = GetTeamSize(ff, atoms_per_team, vector_length); + Kokkos::TeamPolicy > policy(list->inum,atoms_per_team,vector_length); + if (fpair->eflag || fpair->vflag) Kokkos::parallel_reduce(policy,ff,ev); + else Kokkos::parallel_for(policy,ff); + } else { + PairComputeFunctor ff(fpair,list); + atoms_per_team = GetTeamSize(ff, atoms_per_team, vector_length); + Kokkos::TeamPolicy > policy(list->inum,atoms_per_team,vector_length); + if (fpair->eflag || fpair->vflag) Kokkos::parallel_reduce(policy,ff,ev); + else Kokkos::parallel_for(policy,ff); + } } else { - PairComputeFunctor ff(fpair,list); - if (fpair->eflag || fpair->vflag) Kokkos::parallel_reduce(list->inum,ff,ev); - else Kokkos::parallel_for(list->inum,ff); - ff.contribute(); + if(fpair->atom->ntypes > MAX_TYPES_STACKPARAMS) { + PairComputeFunctor ff(fpair,list); + if (fpair->eflag || fpair->vflag) Kokkos::parallel_reduce(list->inum,ff,ev); + else Kokkos::parallel_for(list->inum,ff); + ff.contribute(); + } else { + PairComputeFunctor ff(fpair,list); + if (fpair->eflag || fpair->vflag) Kokkos::parallel_reduce(list->inum,ff,ev); + else Kokkos::parallel_for(list->inum,ff); + ff.contribute(); + } } return ev; } From 0a02097e20354223d2f0a0c52618d125c22f314d Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Mon, 25 Feb 2019 08:39:54 -0700 Subject: [PATCH 027/311] Add squashed comm forward for Kokkos --- src/KOKKOS/atom_vec_kokkos.cpp | 100 +++++++++++++++++++++++++++++++++ src/KOKKOS/atom_vec_kokkos.h | 7 +++ src/KOKKOS/comm_kokkos.cpp | 43 ++++++++++++-- src/KOKKOS/comm_kokkos.h | 6 ++ 4 files changed, 152 insertions(+), 4 deletions(-) diff --git a/src/KOKKOS/atom_vec_kokkos.cpp b/src/KOKKOS/atom_vec_kokkos.cpp index 83af437eba..6fda61bc31 100644 --- a/src/KOKKOS/atom_vec_kokkos.cpp +++ b/src/KOKKOS/atom_vec_kokkos.cpp @@ -267,6 +267,106 @@ int AtomVecKokkos::pack_comm_self(const int &n, const DAT::tdual_int_2d &list, c return n*3; } + +/* ---------------------------------------------------------------------- */ + +template +struct AtomVecKokkos_PackCommSelfSquash { + typedef DeviceType device_type; + + typename ArrayTypes::t_x_array_randomread _x; + typename ArrayTypes::t_x_array _xw; + typename ArrayTypes::t_int_2d_const _list; + typename ArrayTypes::t_int_2d_const _pbc; + typename ArrayTypes::t_int_1d_const _pbc_flag; + typename ArrayTypes::t_int_1d_const _firstrecv; + typename ArrayTypes::t_int_1d_const _sendnum_scan; + X_FLOAT _xprd,_yprd,_zprd,_xy,_xz,_yz; + + AtomVecKokkos_PackCommSelfSquash( + const typename DAT::tdual_x_array &x, + const typename DAT::tdual_int_2d &list, + const typename DAT::tdual_int_2d &pbc, + const typename DAT::tdual_int_1d &pbc_flag, + const typename DAT::tdual_int_1d &firstrecv, + const typename DAT::tdual_int_1d &sendnum_scan, + const X_FLOAT &xprd, const X_FLOAT &yprd, const X_FLOAT &zprd, + const X_FLOAT &xy, const X_FLOAT &xz, const X_FLOAT &yz): + _x(x.view()),_xw(x.view()), + _list(list.view()), + _pbc(pbc.view()), + _pbc_flag(pbc_flag.view()), + _firstrecv(firstrecv.view()), + _sendnum_scan(sendnum_scan.view()), + _xprd(xprd),_yprd(yprd),_zprd(zprd), + _xy(xy),_xz(xz),_yz(yz) {}; + + KOKKOS_INLINE_FUNCTION + void operator() (const int& ii) const { + + int iswap = 0; + while (ii >= _sendnum_scan[iswap]) iswap++; + int i = ii; + if (iswap > 1) + i = ii - _sendnum_scan[iswap-1]; + const int _nfirst = _firstrecv[iswap]; + + const int j = _list(iswap,i); + if (_pbc_flag(iswap) == 0) { + _xw(i+_nfirst,0) = _x(j,0); + _xw(i+_nfirst,1) = _x(j,1); + _xw(i+_nfirst,2) = _x(j,2); + } else { + if (TRICLINIC == 0) { + _xw(i+_nfirst,0) = _x(j,0) + _pbc(iswap,0)*_xprd; + _xw(i+_nfirst,1) = _x(j,1) + _pbc(iswap,1)*_yprd; + _xw(i+_nfirst,2) = _x(j,2) + _pbc(iswap,2)*_zprd; + } else { + _xw(i+_nfirst,0) = _x(j,0) + _pbc(iswap,0)*_xprd + _pbc(iswap,5)*_xy + _pbc(iswap,4)*_xz; + _xw(i+_nfirst,1) = _x(j,1) + _pbc(iswap,1)*_yprd + _pbc(iswap,3)*_yz; + _xw(i+_nfirst,2) = _x(j,2) + _pbc(iswap,2)*_zprd; + } + } + + } +}; + +/* ---------------------------------------------------------------------- */ + +int AtomVecKokkos::pack_comm_self_squash(const int &n, const DAT::tdual_int_2d &list, const DAT::tdual_int_1d &sendnum_scan, + const DAT::tdual_int_1d &firstrecv, const DAT::tdual_int_1d &pbc_flag, const DAT::tdual_int_2d &pbc) { + if(commKK->forward_comm_on_host) { + sync(Host,X_MASK); + modified(Host,X_MASK); + if(domain->triclinic) { + struct AtomVecKokkos_PackCommSelfSquash f(atomKK->k_x,list,pbc,pbc_flag,firstrecv,sendnum_scan, + domain->xprd,domain->yprd,domain->zprd, + domain->xy,domain->xz,domain->yz); + Kokkos::parallel_for(n,f); + } else { + struct AtomVecKokkos_PackCommSelfSquash f(atomKK->k_x,list,pbc,pbc_flag,firstrecv,sendnum_scan, + domain->xprd,domain->yprd,domain->zprd, + domain->xy,domain->xz,domain->yz); + Kokkos::parallel_for(n,f); + } + } else { + sync(Device,X_MASK); + modified(Device,X_MASK); + if(domain->triclinic) { + struct AtomVecKokkos_PackCommSelfSquash f(atomKK->k_x,list,pbc,pbc_flag,firstrecv,sendnum_scan, + domain->xprd,domain->yprd,domain->zprd, + domain->xy,domain->xz,domain->yz); + Kokkos::parallel_for(n,f); + } else { + struct AtomVecKokkos_PackCommSelfSquash f(atomKK->k_x,list,pbc,pbc_flag,firstrecv,sendnum_scan, + domain->xprd,domain->yprd,domain->zprd, + domain->xy,domain->xz,domain->yz); + Kokkos::parallel_for(n,f); + } + } + return n*3; +} + /* ---------------------------------------------------------------------- */ template diff --git a/src/KOKKOS/atom_vec_kokkos.h b/src/KOKKOS/atom_vec_kokkos.h index efe55c47ad..d8541ceb86 100644 --- a/src/KOKKOS/atom_vec_kokkos.h +++ b/src/KOKKOS/atom_vec_kokkos.h @@ -51,6 +51,13 @@ class AtomVecKokkos : public AtomVec { const int & iswap, const int nfirst, const int &pbc_flag, const int pbc[]); + virtual int + pack_comm_self_squash(const int &n, const DAT::tdual_int_2d &list, + const DAT::tdual_int_1d &sendnum_scan, + const DAT::tdual_int_1d &firstrecv, + const DAT::tdual_int_1d &pbc_flag, + const DAT::tdual_int_2d &pbc); + virtual int pack_comm_kokkos(const int &n, const DAT::tdual_int_2d &list, const int & iswap, const DAT::tdual_xfloat_2d &buf, diff --git a/src/KOKKOS/comm_kokkos.cpp b/src/KOKKOS/comm_kokkos.cpp index 1d31c07180..587f20a76d 100644 --- a/src/KOKKOS/comm_kokkos.cpp +++ b/src/KOKKOS/comm_kokkos.cpp @@ -242,10 +242,15 @@ void CommKokkos::forward_comm_device(int dummy) } } else { if (!ghost_velocity) { - if (sendnum[iswap]) - n = avec->pack_comm_self(sendnum[iswap],k_sendlist,iswap, - firstrecv[iswap],pbc_flag[iswap],pbc[iswap]); - DeviceType::fence(); + if (1) { + n = avec->pack_comm_self_squash(totalsend,k_sendlist,k_sendnum_scan, + k_firstrecv,k_pbc_flag,k_pbc); + } else { + if (sendnum[iswap]) + n = avec->pack_comm_self(sendnum[iswap],k_sendlist,iswap, + firstrecv[iswap],pbc_flag[iswap],pbc[iswap]); + DeviceType::fence(); + } } else { n = avec->pack_comm_vel_kokkos(sendnum[iswap],k_sendlist,iswap, k_buf_send,pbc_flag[iswap],pbc[iswap]); @@ -1036,6 +1041,36 @@ void CommKokkos::borders_device() { atomKK->sync(Host,TAG_MASK); atom->map_set(); } + + if (1) { + k_pbc = DAT::tdual_int_2d("comm:pbc",nswap,6); + k_pbc_flag = DAT::tdual_int_1d("comm:pbc_flag",nswap); + k_firstrecv = DAT::tdual_int_1d("comm:firstrecv",nswap); + k_sendnum_scan = DAT::tdual_int_1d("comm:sendnum_scan",nswap); + int scan = 0; + for (int iswap = 0; iswap < nswap; iswap++) { + scan += sendnum[iswap]; + k_sendnum_scan.h_view[iswap] = scan; + k_firstrecv.h_view[iswap] = firstrecv[iswap]; + k_pbc_flag.h_view[iswap] = pbc_flag[iswap]; + k_pbc.h_view(iswap,0) = pbc[iswap][0]; + k_pbc.h_view(iswap,1) = pbc[iswap][1]; + k_pbc.h_view(iswap,2) = pbc[iswap][2]; + k_pbc.h_view(iswap,3) = pbc[iswap][3]; + k_pbc.h_view(iswap,4) = pbc[iswap][4]; + k_pbc.h_view(iswap,5) = pbc[iswap][5]; + } + totalsend = scan; + k_pbc .modify(); + k_pbc_flag .modify(); + k_firstrecv .modify(); + k_sendnum_scan.modify(); + + k_pbc .sync(); + k_pbc_flag .sync(); + k_firstrecv .sync(); + k_sendnum_scan.sync(); + } } /* ---------------------------------------------------------------------- realloc the size of the send buffer as needed with BUFFACTOR and bufextra diff --git a/src/KOKKOS/comm_kokkos.h b/src/KOKKOS/comm_kokkos.h index f137655cb8..bf2ee8822f 100644 --- a/src/KOKKOS/comm_kokkos.h +++ b/src/KOKKOS/comm_kokkos.h @@ -63,6 +63,12 @@ class CommKokkos : public CommBrick { //double *buf_send; // send buffer for all comm //double *buf_recv; // recv buffer for all comm + DAT::tdual_int_2d k_pbc; + DAT::tdual_int_1d k_pbc_flag; + DAT::tdual_int_1d k_firstrecv; + DAT::tdual_int_1d k_sendnum_scan; + int totalsend; + int max_buf_pair; DAT::tdual_xfloat_1d k_buf_send_pair; DAT::tdual_xfloat_1d k_buf_recv_pair; From 85a14ebcb8fde53d5398671cb4f38990710d0346 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Mon, 25 Feb 2019 09:17:34 -0700 Subject: [PATCH 028/311] Fix issue with comm squash --- src/KOKKOS/atom_vec_kokkos.cpp | 3 ++- src/KOKKOS/comm_kokkos.cpp | 21 ++++++++++++--------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/KOKKOS/atom_vec_kokkos.cpp b/src/KOKKOS/atom_vec_kokkos.cpp index 6fda61bc31..5a1b1bde22 100644 --- a/src/KOKKOS/atom_vec_kokkos.cpp +++ b/src/KOKKOS/atom_vec_kokkos.cpp @@ -307,10 +307,11 @@ struct AtomVecKokkos_PackCommSelfSquash { int iswap = 0; while (ii >= _sendnum_scan[iswap]) iswap++; int i = ii; - if (iswap > 1) + if (iswap > 0) i = ii - _sendnum_scan[iswap-1]; const int _nfirst = _firstrecv[iswap]; + const int j = _list(iswap,i); if (_pbc_flag(iswap) == 0) { _xw(i+_nfirst,0) = _x(j,0); diff --git a/src/KOKKOS/comm_kokkos.cpp b/src/KOKKOS/comm_kokkos.cpp index 587f20a76d..c288a0e4a1 100644 --- a/src/KOKKOS/comm_kokkos.cpp +++ b/src/KOKKOS/comm_kokkos.cpp @@ -187,6 +187,13 @@ void CommKokkos::forward_comm_device(int dummy) k_sendlist.sync(); atomKK->sync(ExecutionSpaceFromDevice::space,X_MASK); + int comm_squash = 1; + if (comm_squash) { + n = avec->pack_comm_self_squash(totalsend,k_sendlist,k_sendnum_scan, + k_firstrecv,k_pbc_flag,k_pbc); + DeviceType::fence(); + } else { + for (int iswap = 0; iswap < nswap; iswap++) { if (sendproc[iswap] != me) { if (comm_x_only) { @@ -242,15 +249,10 @@ void CommKokkos::forward_comm_device(int dummy) } } else { if (!ghost_velocity) { - if (1) { - n = avec->pack_comm_self_squash(totalsend,k_sendlist,k_sendnum_scan, - k_firstrecv,k_pbc_flag,k_pbc); - } else { - if (sendnum[iswap]) - n = avec->pack_comm_self(sendnum[iswap],k_sendlist,iswap, - firstrecv[iswap],pbc_flag[iswap],pbc[iswap]); - DeviceType::fence(); - } + if (sendnum[iswap]) + n = avec->pack_comm_self(sendnum[iswap],k_sendlist,iswap, + firstrecv[iswap],pbc_flag[iswap],pbc[iswap]); + DeviceType::fence(); } else { n = avec->pack_comm_vel_kokkos(sendnum[iswap],k_sendlist,iswap, k_buf_send,pbc_flag[iswap],pbc[iswap]); @@ -260,6 +262,7 @@ void CommKokkos::forward_comm_device(int dummy) } } } + } } /* ---------------------------------------------------------------------- From 5d8e3c6cb4d054f963d9319373ab2b43116b7d82 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 28 Feb 2019 10:14:35 -0700 Subject: [PATCH 029/311] Optimize reneighbor for small systems --- src/KOKKOS/comm_kokkos.cpp | 27 +++++++++++++++------------ src/KOKKOS/comm_kokkos.h | 1 + src/KOKKOS/npair_kokkos.h | 4 ++-- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/KOKKOS/comm_kokkos.cpp b/src/KOKKOS/comm_kokkos.cpp index c288a0e4a1..c782305ef5 100644 --- a/src/KOKKOS/comm_kokkos.cpp +++ b/src/KOKKOS/comm_kokkos.cpp @@ -1046,10 +1046,16 @@ void CommKokkos::borders_device() { } if (1) { - k_pbc = DAT::tdual_int_2d("comm:pbc",nswap,6); - k_pbc_flag = DAT::tdual_int_1d("comm:pbc_flag",nswap); - k_firstrecv = DAT::tdual_int_1d("comm:firstrecv",nswap); - k_sendnum_scan = DAT::tdual_int_1d("comm:sendnum_scan",nswap); + if (nswap > k_pbc.extent(0)) { + k_pbc = DAT::tdual_int_2d("comm:pbc",nswap,6); + k_swap = DAT::tdual_int_2d("comm:swap",3,nswap); + k_pbc_flag .d_view = Kokkos::subview(k_swap.d_view,0,Kokkos::ALL); + k_firstrecv .d_view = Kokkos::subview(k_swap.d_view,1,Kokkos::ALL); + k_sendnum_scan.d_view = Kokkos::subview(k_swap.d_view,2,Kokkos::ALL); + k_pbc_flag .h_view = Kokkos::subview(k_swap.h_view,0,Kokkos::ALL); + k_firstrecv .h_view = Kokkos::subview(k_swap.h_view,1,Kokkos::ALL); + k_sendnum_scan.h_view = Kokkos::subview(k_swap.h_view,2,Kokkos::ALL); + } int scan = 0; for (int iswap = 0; iswap < nswap; iswap++) { scan += sendnum[iswap]; @@ -1064,15 +1070,12 @@ void CommKokkos::borders_device() { k_pbc.h_view(iswap,5) = pbc[iswap][5]; } totalsend = scan; - k_pbc .modify(); - k_pbc_flag .modify(); - k_firstrecv .modify(); - k_sendnum_scan.modify(); - k_pbc .sync(); - k_pbc_flag .sync(); - k_firstrecv .sync(); - k_sendnum_scan.sync(); + k_swap.modify(); + k_pbc.modify(); + + k_swap.sync(); + k_pbc.sync(); } } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/comm_kokkos.h b/src/KOKKOS/comm_kokkos.h index bf2ee8822f..cab8124231 100644 --- a/src/KOKKOS/comm_kokkos.h +++ b/src/KOKKOS/comm_kokkos.h @@ -63,6 +63,7 @@ class CommKokkos : public CommBrick { //double *buf_send; // send buffer for all comm //double *buf_recv; // recv buffer for all comm + DAT::tdual_int_2d k_swap; DAT::tdual_int_2d k_pbc; DAT::tdual_int_1d k_pbc_flag; DAT::tdual_int_1d k_firstrecv; diff --git a/src/KOKKOS/npair_kokkos.h b/src/KOKKOS/npair_kokkos.h index 970e40c9fc..373ddf799e 100644 --- a/src/KOKKOS/npair_kokkos.h +++ b/src/KOKKOS/npair_kokkos.h @@ -280,7 +280,7 @@ class NeighborKokkosExecute bboxlo[0] = _bboxlo[0]; bboxlo[1] = _bboxlo[1]; bboxlo[2] = _bboxlo[2]; bboxhi[0] = _bboxhi[0]; bboxhi[1] = _bboxhi[1]; bboxhi[2] = _bboxhi[2]; - resize = typename AT::t_int_scalar("NeighborKokkosFunctor::resize"); + resize = typename AT::t_int_scalar(Kokkos::view_alloc("NeighborKokkosFunctor::resize",Kokkos::WithoutInitializing)); #ifndef KOKKOS_USE_CUDA_UVM h_resize = Kokkos::create_mirror_view(resize); #else @@ -288,7 +288,7 @@ class NeighborKokkosExecute #endif h_resize() = 1; new_maxneighs = typename AT:: - t_int_scalar("NeighborKokkosFunctor::new_maxneighs"); + t_int_scalar(Kokkos::view_alloc("NeighborKokkosFunctor::new_maxneighs",Kokkos::WithoutInitializing)); #ifndef KOKKOS_USE_CUDA_UVM h_new_maxneighs = Kokkos::create_mirror_view(new_maxneighs); #else From ff7276e494082d9fca6f766469f826b378970836 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 7 Mar 2019 08:56:13 -0700 Subject: [PATCH 030/311] Clean up the fused comm --- src/KOKKOS/atom_vec_kokkos.cpp | 14 +++++++------- src/KOKKOS/atom_vec_kokkos.h | 10 +++++----- src/KOKKOS/comm_kokkos.cpp | 8 +++----- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/KOKKOS/atom_vec_kokkos.cpp b/src/KOKKOS/atom_vec_kokkos.cpp index 5a1b1bde22..076e3e52fa 100644 --- a/src/KOKKOS/atom_vec_kokkos.cpp +++ b/src/KOKKOS/atom_vec_kokkos.cpp @@ -271,7 +271,7 @@ int AtomVecKokkos::pack_comm_self(const int &n, const DAT::tdual_int_2d &list, c /* ---------------------------------------------------------------------- */ template -struct AtomVecKokkos_PackCommSelfSquash { +struct AtomVecKokkos_PackCommSelfFused { typedef DeviceType device_type; typename ArrayTypes::t_x_array_randomread _x; @@ -283,7 +283,7 @@ struct AtomVecKokkos_PackCommSelfSquash { typename ArrayTypes::t_int_1d_const _sendnum_scan; X_FLOAT _xprd,_yprd,_zprd,_xy,_xz,_yz; - AtomVecKokkos_PackCommSelfSquash( + AtomVecKokkos_PackCommSelfFused( const typename DAT::tdual_x_array &x, const typename DAT::tdual_int_2d &list, const typename DAT::tdual_int_2d &pbc, @@ -334,18 +334,18 @@ struct AtomVecKokkos_PackCommSelfSquash { /* ---------------------------------------------------------------------- */ -int AtomVecKokkos::pack_comm_self_squash(const int &n, const DAT::tdual_int_2d &list, const DAT::tdual_int_1d &sendnum_scan, +int AtomVecKokkos::pack_comm_self_fused(const int &n, const DAT::tdual_int_2d &list, const DAT::tdual_int_1d &sendnum_scan, const DAT::tdual_int_1d &firstrecv, const DAT::tdual_int_1d &pbc_flag, const DAT::tdual_int_2d &pbc) { if(commKK->forward_comm_on_host) { sync(Host,X_MASK); modified(Host,X_MASK); if(domain->triclinic) { - struct AtomVecKokkos_PackCommSelfSquash f(atomKK->k_x,list,pbc,pbc_flag,firstrecv,sendnum_scan, + struct AtomVecKokkos_PackCommSelfFused f(atomKK->k_x,list,pbc,pbc_flag,firstrecv,sendnum_scan, domain->xprd,domain->yprd,domain->zprd, domain->xy,domain->xz,domain->yz); Kokkos::parallel_for(n,f); } else { - struct AtomVecKokkos_PackCommSelfSquash f(atomKK->k_x,list,pbc,pbc_flag,firstrecv,sendnum_scan, + struct AtomVecKokkos_PackCommSelfFused f(atomKK->k_x,list,pbc,pbc_flag,firstrecv,sendnum_scan, domain->xprd,domain->yprd,domain->zprd, domain->xy,domain->xz,domain->yz); Kokkos::parallel_for(n,f); @@ -354,12 +354,12 @@ int AtomVecKokkos::pack_comm_self_squash(const int &n, const DAT::tdual_int_2d & sync(Device,X_MASK); modified(Device,X_MASK); if(domain->triclinic) { - struct AtomVecKokkos_PackCommSelfSquash f(atomKK->k_x,list,pbc,pbc_flag,firstrecv,sendnum_scan, + struct AtomVecKokkos_PackCommSelfFused f(atomKK->k_x,list,pbc,pbc_flag,firstrecv,sendnum_scan, domain->xprd,domain->yprd,domain->zprd, domain->xy,domain->xz,domain->yz); Kokkos::parallel_for(n,f); } else { - struct AtomVecKokkos_PackCommSelfSquash f(atomKK->k_x,list,pbc,pbc_flag,firstrecv,sendnum_scan, + struct AtomVecKokkos_PackCommSelfFused f(atomKK->k_x,list,pbc,pbc_flag,firstrecv,sendnum_scan, domain->xprd,domain->yprd,domain->zprd, domain->xy,domain->xz,domain->yz); Kokkos::parallel_for(n,f); diff --git a/src/KOKKOS/atom_vec_kokkos.h b/src/KOKKOS/atom_vec_kokkos.h index d8541ceb86..64fd238fc0 100644 --- a/src/KOKKOS/atom_vec_kokkos.h +++ b/src/KOKKOS/atom_vec_kokkos.h @@ -52,11 +52,11 @@ class AtomVecKokkos : public AtomVec { const int &pbc_flag, const int pbc[]); virtual int - pack_comm_self_squash(const int &n, const DAT::tdual_int_2d &list, - const DAT::tdual_int_1d &sendnum_scan, - const DAT::tdual_int_1d &firstrecv, - const DAT::tdual_int_1d &pbc_flag, - const DAT::tdual_int_2d &pbc); + pack_comm_self_fused(const int &n, const DAT::tdual_int_2d &list, + const DAT::tdual_int_1d &sendnum_scan, + const DAT::tdual_int_1d &firstrecv, + const DAT::tdual_int_1d &pbc_flag, + const DAT::tdual_int_2d &pbc); virtual int pack_comm_kokkos(const int &n, const DAT::tdual_int_2d &list, diff --git a/src/KOKKOS/comm_kokkos.cpp b/src/KOKKOS/comm_kokkos.cpp index c782305ef5..5aa2cbdfbe 100644 --- a/src/KOKKOS/comm_kokkos.cpp +++ b/src/KOKKOS/comm_kokkos.cpp @@ -187,11 +187,9 @@ void CommKokkos::forward_comm_device(int dummy) k_sendlist.sync(); atomKK->sync(ExecutionSpaceFromDevice::space,X_MASK); - int comm_squash = 1; - if (comm_squash) { - n = avec->pack_comm_self_squash(totalsend,k_sendlist,k_sendnum_scan, + if (comm->nprocs == 1) { + n = avec->pack_comm_self_fused(totalsend,k_sendlist,k_sendnum_scan, k_firstrecv,k_pbc_flag,k_pbc); - DeviceType::fence(); } else { for (int iswap = 0; iswap < nswap; iswap++) { @@ -1045,7 +1043,7 @@ void CommKokkos::borders_device() { atom->map_set(); } - if (1) { + if (comm->nprocs == 1) { if (nswap > k_pbc.extent(0)) { k_pbc = DAT::tdual_int_2d("comm:pbc",nswap,6); k_swap = DAT::tdual_int_2d("comm:swap",3,nswap); From e422e886de5a719a49c9974b92ce9193bcd1de1e Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 8 Mar 2019 11:33:29 -0700 Subject: [PATCH 031/311] Add error check for team on and full neighborlist --- src/KOKKOS/kokkos.cpp | 3 +++ src/KOKKOS/kokkos.h | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/src/KOKKOS/kokkos.cpp b/src/KOKKOS/kokkos.cpp index 6c87835195..efd3a75042 100644 --- a/src/KOKKOS/kokkos.cpp +++ b/src/KOKKOS/kokkos.cpp @@ -344,6 +344,9 @@ void KokkosLMP::accelerator(int narg, char **arg) force->newton = force->newton_pair = force->newton_bond = newtonflag; + if (team_flag && neighflag != FULL) + error->all(FLERR,"Must use KOKKOS package option 'neigh full' with 'team on'"); + neighbor->binsize_user = binsize; if (binsize <= 0.0) neighbor->binsizeflag = 0; else neighbor->binsizeflag = 1; diff --git a/src/KOKKOS/kokkos.h b/src/KOKKOS/kokkos.h index a665329d70..c70d7a31f5 100644 --- a/src/KOKKOS/kokkos.h +++ b/src/KOKKOS/kokkos.h @@ -86,4 +86,8 @@ U: Must use Kokkos half/thread or full neighbor list with threads or GPUs Using Kokkos half-neighbor lists with threading is not allowed. +E: Must use KOKKOS package option 'neigh full' with 'team on' + +The 'team on' option requires a full neighbor list + */ From aecef752e8beee76465feb03c05276235dd41952 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Mon, 11 Mar 2019 13:41:20 -0600 Subject: [PATCH 032/311] Remove unnecessary data movement in fix_nve_kokkos --- src/KOKKOS/fix_nve_kokkos.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/KOKKOS/fix_nve_kokkos.cpp b/src/KOKKOS/fix_nve_kokkos.cpp index 052bf411d6..6db8ff8c0f 100644 --- a/src/KOKKOS/fix_nve_kokkos.cpp +++ b/src/KOKKOS/fix_nve_kokkos.cpp @@ -113,8 +113,8 @@ void FixNVEKokkos::initial_integrate_rmass_item(int i) const template void FixNVEKokkos::final_integrate() { - atomKK->sync(execution_space,datamask_read); - atomKK->modified(execution_space,datamask_modify); + atomKK->sync(execution_space,V_MASK | F_MASK | MASK_MASK | RMASS_MASK | TYPE_MASK); + atomKK->modified(execution_space,V_MASK); v = atomKK->k_v.view(); f = atomKK->k_f.view(); From b51d06b3ea598eab8114337e136b3591a2e01582 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 12 Mar 2019 15:33:28 -0600 Subject: [PATCH 033/311] Change default binsize for Kokkos if running on GPUs --- src/KOKKOS/neighbor_kokkos.cpp | 9 +++++++++ src/KOKKOS/neighbor_kokkos.h | 1 + src/neighbor.cpp | 3 +++ src/neighbor.h | 1 + 4 files changed, 14 insertions(+) diff --git a/src/KOKKOS/neighbor_kokkos.cpp b/src/KOKKOS/neighbor_kokkos.cpp index 6cd5c4e6e5..7aaeda4b37 100644 --- a/src/KOKKOS/neighbor_kokkos.cpp +++ b/src/KOKKOS/neighbor_kokkos.cpp @@ -30,6 +30,7 @@ #include "style_nstencil.h" #include "style_npair.h" #include "style_ntopo.h" +#include "comm.h" using namespace LAMMPS_NS; @@ -359,6 +360,14 @@ void NeighborKokkos::modify_mol_intra_grow_kokkos(){ k_ex_mol_intra.modify(); } +/* ---------------------------------------------------------------------- */ +void NeighborKokkos::set_binsize_kokkos() { + if (!binsizeflag && lmp->kokkos->ngpu > 0) { + binsize_user = cutneighmax; + binsizeflag = 1; + } +} + /* ---------------------------------------------------------------------- */ void NeighborKokkos::init_topology() { diff --git a/src/KOKKOS/neighbor_kokkos.h b/src/KOKKOS/neighbor_kokkos.h index 5c98c4d26d..3829502c0d 100644 --- a/src/KOKKOS/neighbor_kokkos.h +++ b/src/KOKKOS/neighbor_kokkos.h @@ -87,6 +87,7 @@ class NeighborKokkos : public Neighbor { void modify_ex_group_grow_kokkos(); void modify_mol_group_grow_kokkos(); void modify_mol_intra_grow_kokkos(); + void set_binsize_kokkos(); }; } diff --git a/src/neighbor.cpp b/src/neighbor.cpp index 84494bfbc5..2dc65541e4 100644 --- a/src/neighbor.cpp +++ b/src/neighbor.cpp @@ -471,6 +471,9 @@ void Neighbor::init() error->warning(FLERR,"Neighbor exclusions used with KSpace solver " "may give inconsistent Coulombic energies"); + if (lmp->kokkos) + set_binsize_kokkos(); + // ------------------------------------------------------------------ // create pairwise lists // one-time call to init_styles() to scan style files and setup diff --git a/src/neighbor.h b/src/neighbor.h index 751beeae4b..ffe181313b 100644 --- a/src/neighbor.h +++ b/src/neighbor.h @@ -233,6 +233,7 @@ class Neighbor : protected Pointers { virtual void init_ex_bit_kokkos() {} virtual void init_ex_mol_bit_kokkos() {} virtual void grow_ex_mol_intra_kokkos() {} + virtual void set_binsize_kokkos() {} }; namespace NeighConst { From 0d73fe99fd94c35a3c894c4ab1d4c26ec51aea5b Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 12 Mar 2019 15:34:12 -0600 Subject: [PATCH 034/311] Update Kokkos docs --- doc/src/Speed_kokkos.txt | 4 ++-- doc/src/package.txt | 44 ++++++++++++++++++++-------------------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/doc/src/Speed_kokkos.txt b/doc/src/Speed_kokkos.txt index ef193d7401..d04f8ac6f1 100644 --- a/doc/src/Speed_kokkos.txt +++ b/doc/src/Speed_kokkos.txt @@ -242,13 +242,13 @@ pairwise and bonded interactions, along with threaded communication. When running on Maxwell or Kepler GPUs, this will typically be best. For Pascal GPUs, using "half" neighbor lists and setting the Newton flag to "on" may be faster. For many pair styles, setting the -neighbor binsize equal to the ghost atom cutoff will give speedup. +neighbor binsize equal to twice the CPU default value will give speedup, +which is the default when running on GPUs. Use the "-pk kokkos" "command-line switch"_Run_options.html to change the default "package kokkos"_package.html options. See its doc page for details and default settings. Experimenting with its options can provide a speed-up for specific calculations. For example: -mpirun -np 2 lmp_kokkos_cuda_openmpi -k on g 2 -sf kk -pk kokkos binsize 2.8 -in in.lj # Set binsize = neighbor ghost cutoff mpirun -np 2 lmp_kokkos_cuda_openmpi -k on g 2 -sf kk -pk kokkos newton on neigh half binsize 2.8 -in in.lj # Newton on, half neighbor list, set binsize = neighbor ghost cutoff :pre NOTE: For good performance of the KOKKOS package on GPUs, you must diff --git a/doc/src/package.txt b/doc/src/package.txt index c226d7942f..89cfd03f5f 100644 --- a/doc/src/package.txt +++ b/doc/src/package.txt @@ -450,20 +450,20 @@ computation is done, but less communication. However, when running in MPI-only mode with 1 thread per MPI task, a value of {on} will typically be faster, just as it is for non-accelerated pair styles. -The {binsize} keyword sets the size of bins used to bin atoms in -neighbor list builds. The same value can be set by the "neigh_modify -binsize"_neigh_modify.html command. Making it an option in the -package kokkos command allows it to be set from the command line. The -default value is 0.0, which means the LAMMPS default will be used, -which is bins = 1/2 the size of the pairwise cutoff + neighbor skin -distance. This is fine when neighbor lists are built on the CPU. For -GPU builds, a 2x larger binsize equal to the pairwise cutoff + -neighbor skin, is often faster, which can be set by this keyword. -Note that if you use a longer-than-usual pairwise cutoff, e.g. to -allow for a smaller fraction of KSpace work with a "long-range -Coulombic solver"_kspace_style.html because the GPU is faster at -performing pairwise interactions, then this rule of thumb may give too -large a binsize. +The {binsize} keyword sets the size of bins used to bin atoms in +neighbor list builds. The same value can be set by the "neigh_modify +binsize"_neigh_modify.html command. Making it an option in the package +kokkos command allows it to be set from the command line. The default +value for CPUs is 0.0, which means the LAMMPS default will be used, +which is bins = 1/2 the size of the pairwise cutoff + neighbor skin +distance. This is fine when neighbor lists are built on the CPU. For GPU +builds, a 2x larger binsize equal to the pairwise cutoff + neighbor skin +is often faster, which is the default. Note that if you use a +longer-than-usual pairwise cutoff, e.g. to allow for a smaller fraction +of KSpace work with a "long-range Coulombic solver"_kspace_style.html +because the GPU is faster at performing pairwise interactions, then this +rule of thumb may give too large a binsize and the default should be +overridden with a smaller value. The {comm} and {comm/exchange} and {comm/forward} and {comm/reverse} keywords determine whether the host or device performs the packing and unpacking of data @@ -623,14 +623,14 @@ not used, you must invoke the package intel command in your input script or or via the "-pk intel" "command-line switch"_Run_options.html. -For the KOKKOS package, the option defaults neigh = full, neigh/qeq = -full, newton = off, binsize = 0.0, and comm = device, gpu/direct = on. -When LAMMPS can safely detect, that GPU-direct is not available, the -default value of gpu/direct becomes "off". -These settings are made automatically by the required "-k on" -"command-line switch"_Run_options.html. You can change them by -using the package kokkos command in your input script or via the -"-pk kokkos command-line switch"_Run_options.html. +For the KOKKOS package, the option defaults neigh = full, neigh/qeq = +full, newton = off, binsize for CPUs = 0.0, binsize for GPUs = 2x LAMMPS +default value, and comm = device, gpu/direct = on. When LAMMPS can +safely detect, that GPU-direct is not available, the default value of +gpu/direct becomes "off". These settings are made automatically by the +required "-k on" "command-line switch"_Run_options.html. You can change +them by using the package kokkos command in your input script or via the +"-pk kokkos command-line switch"_Run_options.html. For the OMP package, the default is Nthreads = 0 and the option defaults are neigh = yes. These settings are made automatically if From 71a622724042151cb2c861a69ce1209cc0de58ff Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 14 Mar 2019 15:43:50 -0600 Subject: [PATCH 035/311] Optimize KOKKOS package for small system sizes --- src/KOKKOS/atom_vec_atomic_kokkos.cpp | 5 ++- src/KOKKOS/domain_kokkos.cpp | 12 ++++++ src/KOKKOS/npair_kokkos.cpp | 56 ++++++++++++++++----------- src/KOKKOS/npair_kokkos.h | 30 +++++++------- src/KOKKOS/pair_kokkos.h | 13 +++---- src/neighbor.h | 4 +- 6 files changed, 72 insertions(+), 48 deletions(-) diff --git a/src/KOKKOS/atom_vec_atomic_kokkos.cpp b/src/KOKKOS/atom_vec_atomic_kokkos.cpp index 6aba49e5f3..e3c1bee956 100644 --- a/src/KOKKOS/atom_vec_atomic_kokkos.cpp +++ b/src/KOKKOS/atom_vec_atomic_kokkos.cpp @@ -24,7 +24,7 @@ using namespace LAMMPS_NS; -#define DELTA 10000 +#define DELTA 10 /* ---------------------------------------------------------------------- */ @@ -55,7 +55,8 @@ AtomVecAtomicKokkos::AtomVecAtomicKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) void AtomVecAtomicKokkos::grow(int n) { - if (n == 0) nmax += DELTA; + int step = MAX(DELTA,nmax*0.01); + if (n == 0) nmax += step; else nmax = n; atomKK->nmax = nmax; if (nmax < 0 || nmax > MAXSMALLINT) diff --git a/src/KOKKOS/domain_kokkos.cpp b/src/KOKKOS/domain_kokkos.cpp index d9c1332778..4cf3e6ab52 100644 --- a/src/KOKKOS/domain_kokkos.cpp +++ b/src/KOKKOS/domain_kokkos.cpp @@ -17,6 +17,7 @@ #include "error.h" #include "force.h" #include "kspace.h" +#include "kokkos.h" using namespace LAMMPS_NS; @@ -339,6 +340,17 @@ struct DomainPBCFunctor { void DomainKokkos::pbc() { + + if (lmp->kokkos->exchange_comm_classic) { + + // reduce GPU data movement + + atomKK->sync(Host,X_MASK|V_MASK|MASK_MASK|IMAGE_MASK); + Domain::pbc(); + atomKK->modified(Host,X_MASK|V_MASK|MASK_MASK|IMAGE_MASK); + return; + } + double *lo,*hi,*period; int nlocal = atomKK->nlocal; diff --git a/src/KOKKOS/npair_kokkos.cpp b/src/KOKKOS/npair_kokkos.cpp index 5e1b7b0414..f2e73ac6e6 100644 --- a/src/KOKKOS/npair_kokkos.cpp +++ b/src/KOKKOS/npair_kokkos.cpp @@ -15,6 +15,7 @@ #include "atom_kokkos.h" #include "atom_masks.h" #include "domain_kokkos.h" +#include "update.h" #include "neighbor_kokkos.h" #include "nbin_kokkos.h" #include "nstencil.h" @@ -27,6 +28,16 @@ namespace LAMMPS_NS { template NPairKokkos::NPairKokkos(LAMMPS *lmp) : NPair(lmp) { + // use 1D view for scalars to reduce GPU memory operations + + d_scalars = typename AT::t_int_1d("neighbor:scalars",2); + h_scalars = HAT::t_int_1d("neighbor:scalars_mirror",2); + + d_resize = Kokkos::subview(d_scalars,0); + d_new_maxneighs = Kokkos::subview(d_scalars,1); + + h_resize = Kokkos::subview(h_scalars,0); + h_new_maxneighs = Kokkos::subview(h_scalars,1); } /* ---------------------------------------------------------------------- @@ -84,27 +95,30 @@ template void NPairKokkos::copy_stencil_info() { NPair::copy_stencil_info(); - nstencil = ns->nstencil; - int maxstencil = ns->get_maxstencil(); + if (neighbor->last_setup_bins == update->ntimestep) { + // copy stencil to device as it may have changed - if (maxstencil > k_stencil.extent(0)) - k_stencil = DAT::tdual_int_1d("neighlist:stencil",maxstencil); - for (int k = 0; k < maxstencil; k++) - k_stencil.h_view(k) = ns->stencil[k]; - k_stencil.modify(); - k_stencil.sync(); - if (GHOST) { - if (maxstencil > k_stencilxyz.extent(0)) - k_stencilxyz = DAT::tdual_int_1d_3("neighlist:stencilxyz",maxstencil); - for (int k = 0; k < maxstencil; k++) { - k_stencilxyz.h_view(k,0) = ns->stencilxyz[k][0]; - k_stencilxyz.h_view(k,1) = ns->stencilxyz[k][1]; - k_stencilxyz.h_view(k,2) = ns->stencilxyz[k][2]; + int maxstencil = ns->get_maxstencil(); + + if (maxstencil > k_stencil.extent(0)) + k_stencil = DAT::tdual_int_1d("neighlist:stencil",maxstencil); + for (int k = 0; k < maxstencil; k++) + k_stencil.h_view(k) = ns->stencil[k]; + k_stencil.modify(); + k_stencil.sync(); + if (GHOST) { + if (maxstencil > k_stencilxyz.extent(0)) + k_stencilxyz = DAT::tdual_int_1d_3("neighlist:stencilxyz",maxstencil); + for (int k = 0; k < maxstencil; k++) { + k_stencilxyz.h_view(k,0) = ns->stencilxyz[k][0]; + k_stencilxyz.h_view(k,1) = ns->stencilxyz[k][1]; + k_stencilxyz.h_view(k,2) = ns->stencilxyz[k][2]; + } + k_stencilxyz.modify(); + k_stencilxyz.sync(); } - k_stencilxyz.modify(); - k_stencilxyz.sync(); } } @@ -157,7 +171,7 @@ void NPairKokkos::build(NeighList *list_) bboxhi,bboxlo, domain->xperiodic,domain->yperiodic,domain->zperiodic, domain->xprd_half,domain->yprd_half,domain->zprd_half, - skin); + skin,d_resize,h_resize,d_new_maxneighs,h_new_maxneighs); k_cutneighsq.sync(); k_ex1_type.sync(); @@ -185,8 +199,7 @@ void NPairKokkos::build(NeighList *list_) data.h_new_maxneighs() = list->maxneighs; data.h_resize() = 0; - Kokkos::deep_copy(data.resize, data.h_resize); - Kokkos::deep_copy(data.new_maxneighs, data.h_new_maxneighs); + Kokkos::deep_copy(d_scalars, h_scalars); #ifdef KOKKOS_ENABLE_CUDA #define BINS_PER_BLOCK 2 const int factor = atoms_per_bin<64?2:1; @@ -245,10 +258,9 @@ void NPairKokkos::build(NeighList *list_) } } } - deep_copy(data.h_resize, data.resize); + Kokkos::deep_copy(h_scalars, d_scalars); if(data.h_resize()) { - deep_copy(data.h_new_maxneighs, data.new_maxneighs); list->maxneighs = data.h_new_maxneighs() * 1.2; list->d_neighbors = typename ArrayTypes::t_neighbors_2d("neighbors", list->d_neighbors.extent(0), list->maxneighs); data.neigh_list.d_neighbors = list->d_neighbors; diff --git a/src/KOKKOS/npair_kokkos.h b/src/KOKKOS/npair_kokkos.h index 6986fc5849..edf3d2a59f 100644 --- a/src/KOKKOS/npair_kokkos.h +++ b/src/KOKKOS/npair_kokkos.h @@ -95,6 +95,8 @@ namespace LAMMPS_NS { template class NPairKokkos : public NPair { + typedef ArrayTypes AT; + public: NPairKokkos(class LAMMPS *); ~NPairKokkos() {} @@ -105,6 +107,12 @@ class NPairKokkos : public NPair { private: int newton_pair; + typename AT::t_int_1d d_scalars; + HAT::t_int_1d h_scalars; + typename AT::t_int_scalar d_resize; + typename AT::t_int_scalar d_new_maxneighs; + HAT::t_int_scalar h_resize; + HAT::t_int_scalar h_new_maxneighs; // data from Neighbor class @@ -251,7 +259,11 @@ class NeighborKokkosExecute const X_FLOAT *_bboxhi, const X_FLOAT* _bboxlo, const int & _xperiodic, const int & _yperiodic, const int & _zperiodic, const int & _xprd_half, const int & _yprd_half, const int & _zprd_half, - const X_FLOAT _skin): + const X_FLOAT _skin, + const typename AT::t_int_scalar _resize, + const typename ArrayTypes::t_int_scalar _h_resize, + const typename AT::t_int_scalar _new_maxneighs, + const typename ArrayTypes::t_int_scalar _h_new_maxneighs): neigh_list(_neigh_list), cutneighsq(_cutneighsq), bincount(_bincount),c_bincount(_bincount),bins(_bins),c_bins(_bins), atom2bin(_atom2bin),c_atom2bin(_atom2bin), @@ -272,7 +284,8 @@ class NeighborKokkosExecute ex_mol_intra(_ex_mol_intra), xperiodic(_xperiodic),yperiodic(_yperiodic),zperiodic(_zperiodic), xprd_half(_xprd_half),yprd_half(_yprd_half),zprd_half(_zprd_half), - skin(_skin) { + skin(_skin),resize(_resize),h_resize(_h_resize), + new_maxneighs(_new_maxneighs),h_new_maxneighs(_h_new_maxneighs) { if (molecular == 2) moltemplate = 1; else moltemplate = 0; @@ -280,20 +293,7 @@ class NeighborKokkosExecute bboxlo[0] = _bboxlo[0]; bboxlo[1] = _bboxlo[1]; bboxlo[2] = _bboxlo[2]; bboxhi[0] = _bboxhi[0]; bboxhi[1] = _bboxhi[1]; bboxhi[2] = _bboxhi[2]; - resize = typename AT::t_int_scalar(Kokkos::view_alloc("NeighborKokkosFunctor::resize",Kokkos::WithoutInitializing)); -#ifndef KOKKOS_USE_CUDA_UVM - h_resize = Kokkos::create_mirror_view(resize); -#else - h_resize = resize; -#endif h_resize() = 1; - new_maxneighs = typename AT:: - t_int_scalar(Kokkos::view_alloc("NeighborKokkosFunctor::new_maxneighs",Kokkos::WithoutInitializing)); -#ifndef KOKKOS_USE_CUDA_UVM - h_new_maxneighs = Kokkos::create_mirror_view(new_maxneighs); -#else - h_new_maxneighs = new_maxneighs; -#endif h_new_maxneighs() = neigh_list.maxneighs; }; diff --git a/src/KOKKOS/pair_kokkos.h b/src/KOKKOS/pair_kokkos.h index 8758b2f03c..63502a1e27 100644 --- a/src/KOKKOS/pair_kokkos.h +++ b/src/KOKKOS/pair_kokkos.h @@ -274,7 +274,7 @@ struct PairComputeFunctor { const X_FLOAT ytmp = c.x(i,1); const X_FLOAT ztmp = c.x(i,2); const int itype = c.type(i); - + const AtomNeighborsConst neighbors_i = list.get_neighbors_const(i); const int jnum = list.d_numneigh[i]; @@ -388,13 +388,12 @@ struct PairComputeFunctor { const int lastatom = firstatom + atoms_per_team < inum ? firstatom + atoms_per_team : inum; Kokkos::parallel_for(Kokkos::TeamThreadRange(team, firstatom, lastatom), [&] (const int &ii) { - const int i = list.d_ilist[ii]; const X_FLOAT xtmp = c.x(i,0); const X_FLOAT ytmp = c.x(i,1); const X_FLOAT ztmp = c.x(i,2); const int itype = c.type(i); - + const AtomNeighborsConst neighbors_i = list.get_neighbors_const(i); const int jnum = list.d_numneigh[i]; @@ -875,14 +874,14 @@ EV_FLOAT pair_compute_neighlist (PairStyle* fpair, typename Kokkos::Impl::enable PairComputeFunctor ff(fpair,list); atoms_per_team = GetTeamSize(ff, atoms_per_team, vector_length); Kokkos::TeamPolicy > policy(list->inum,atoms_per_team,vector_length); - if (fpair->eflag || fpair->vflag) Kokkos::parallel_reduce(policy,ff,ev); - else Kokkos::parallel_for(policy,ff); + if (fpair->eflag || fpair->vflag) Kokkos::parallel_reduce(Kokkos::Experimental::require(policy,Kokkos::Experimental::WorkItemProperty::HintLightWeight),ff,ev); + else Kokkos::parallel_for(Kokkos::Experimental::require(policy,Kokkos::Experimental::WorkItemProperty::HintLightWeight),ff); } else { PairComputeFunctor ff(fpair,list); atoms_per_team = GetTeamSize(ff, atoms_per_team, vector_length); Kokkos::TeamPolicy > policy(list->inum,atoms_per_team,vector_length); - if (fpair->eflag || fpair->vflag) Kokkos::parallel_reduce(policy,ff,ev); - else Kokkos::parallel_for(policy,ff); + if (fpair->eflag || fpair->vflag) Kokkos::parallel_reduce(Kokkos::Experimental::require(policy,Kokkos::Experimental::WorkItemProperty::HintLightWeight),ff,ev); + else Kokkos::parallel_for(Kokkos::Experimental::require(policy,Kokkos::Experimental::WorkItemProperty::HintLightWeight),ff); } } else { if(fpair->atom->ntypes > MAX_TYPES_STACKPARAMS) { diff --git a/src/neighbor.h b/src/neighbor.h index 751beeae4b..6184731b61 100644 --- a/src/neighbor.h +++ b/src/neighbor.h @@ -126,6 +126,8 @@ class Neighbor : protected Pointers { bigint memory_usage(); + bigint last_setup_bins; // step of last neighbor::setup_bins() call + protected: int me,nprocs; int firsttime; // flag for calling init_styles() only once @@ -139,8 +141,6 @@ class Neighbor : protected Pointers { int fix_check; // # of fixes that induce reneigh int *fixchecklist; // which fixes to check - bigint last_setup_bins; // step of last neighbor::setup_bins() call - double triggersq; // trigger = build when atom moves this dist double **xhold; // atom coords at last neighbor build From 179026dd44108f78b600ecb957be5039bdcb7c82 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 14 Mar 2019 17:13:12 -0600 Subject: [PATCH 036/311] Reduce GPU data movement in npair_kokkos --- src/KOKKOS/npair_kokkos.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/KOKKOS/npair_kokkos.cpp b/src/KOKKOS/npair_kokkos.cpp index f2e73ac6e6..ecf4b2d5a5 100644 --- a/src/KOKKOS/npair_kokkos.cpp +++ b/src/KOKKOS/npair_kokkos.cpp @@ -187,7 +187,18 @@ void NPairKokkos::build(NeighList *list_) k_bincount.sync(); k_bins.sync(); k_atom2bin.sync(); - atomKK->sync(Device,X_MASK|RADIUS_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK|TAG_MASK|SPECIAL_MASK); + + if (atom->molecular) { + if (exclude) + atomKK->sync(Device,X_MASK|RADIUS_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK|TAG_MASK|SPECIAL_MASK); + else + atomKK->sync(Device,X_MASK|RADIUS_MASK|TYPE_MASK|TAG_MASK|SPECIAL_MASK); + } else { + if (exclude) + atomKK->sync(Device,X_MASK|RADIUS_MASK|TYPE_MASK|MASK_MASK); + else + atomKK->sync(Device,X_MASK|RADIUS_MASK|TYPE_MASK); + } data.special_flag[0] = special_flag[0]; data.special_flag[1] = special_flag[1]; From 8c4baac3f10b7d2c505a9ffe73c22bdd7e8656ee Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 15 Mar 2019 14:25:24 -0600 Subject: [PATCH 037/311] Only copy force on ghost atoms if newton on --- src/KOKKOS/atom_vec_atomic_kokkos.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/KOKKOS/atom_vec_atomic_kokkos.cpp b/src/KOKKOS/atom_vec_atomic_kokkos.cpp index e3c1bee956..80321fd2ea 100644 --- a/src/KOKKOS/atom_vec_atomic_kokkos.cpp +++ b/src/KOKKOS/atom_vec_atomic_kokkos.cpp @@ -21,6 +21,7 @@ #include "atom_masks.h" #include "memory_kokkos.h" #include "error.h" +#include "force.h" using namespace LAMMPS_NS; @@ -901,7 +902,14 @@ void AtomVecAtomicKokkos::sync(ExecutionSpace space, unsigned int mask) if (space == Device) { if (mask & X_MASK) atomKK->k_x.sync(); if (mask & V_MASK) atomKK->k_v.sync(); - if (mask & F_MASK) atomKK->k_f.sync(); + if (mask & F_MASK) { + if (!force || force->newton) { + atomKK->k_f.sync(); + } else { + auto k_f_nlocal = Kokkos::subview(atomKK->k_f,std::make_pair(0,atom->nlocal),Kokkos::ALL); + k_f_nlocal.sync(); + } + } if (mask & TAG_MASK) atomKK->k_tag.sync(); if (mask & TYPE_MASK) atomKK->k_type.sync(); if (mask & MASK_MASK) atomKK->k_mask.sync(); @@ -909,7 +917,14 @@ void AtomVecAtomicKokkos::sync(ExecutionSpace space, unsigned int mask) } else { if (mask & X_MASK) atomKK->k_x.sync(); if (mask & V_MASK) atomKK->k_v.sync(); - if (mask & F_MASK) atomKK->k_f.sync(); + if (mask & F_MASK) { + if (!force || force->newton) { + atomKK->k_f.sync(); + } else { + auto k_f_nlocal = Kokkos::subview(atomKK->k_f,std::make_pair(0,atom->nlocal),Kokkos::ALL); + k_f_nlocal.sync(); + } + } if (mask & TAG_MASK) atomKK->k_tag.sync(); if (mask & TYPE_MASK) atomKK->k_type.sync(); if (mask & MASK_MASK) atomKK->k_mask.sync(); From 36836598b1a4bbe76fac874274ae9d5f1dc635b9 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Mon, 18 Mar 2019 10:45:14 -0600 Subject: [PATCH 038/311] Reduce data transfer in exchange --- src/KOKKOS/comm_kokkos.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/KOKKOS/comm_kokkos.cpp b/src/KOKKOS/comm_kokkos.cpp index 5aa2cbdfbe..06807b08b9 100644 --- a/src/KOKKOS/comm_kokkos.cpp +++ b/src/KOKKOS/comm_kokkos.cpp @@ -57,10 +57,10 @@ CommKokkos::CommKokkos(LAMMPS *lmp) : CommBrick(lmp) memory->destroy(buf_recv); buf_recv = NULL; - k_exchange_sendlist = DAT:: - tdual_int_1d("comm:k_exchange_sendlist",100); - k_exchange_copylist = DAT:: - tdual_int_1d("comm:k_exchange_copylist",100); + k_exchange_lists = DAT:: + tdual_int_1d("comm:k_exchange_lists",2,100); + k_exchange_sendlist = Kokkos::subview(k_exchange_lists,0,KOKKOS::ALL); + k_exchange_copylist = Kokkos::subview(k_exchange_lists,1,KOKKOS::ALL); k_count = DAT::tdual_int_scalar("comm:k_count"); k_sendflag = DAT::tdual_int_1d("comm:k_sendflag",100); @@ -619,8 +619,9 @@ void CommKokkos::exchange_device() k_count.h_view()=k_exchange_sendlist.h_view.extent(0); } } - k_exchange_copylist.sync(); - k_exchange_sendlist.sync(); + + auto k_exchange_lists_short = Kokkos::subview(k_exchange_lists,KOKKOS::ALL,k_count.h_view()); + k_exchange_lists_short.template sync(); k_sendflag.sync(); int sendpos = nlocal-1; @@ -634,8 +635,8 @@ void CommKokkos::exchange_device() k_exchange_copylist.h_view(i) = -1; } - k_exchange_copylist.modify(); - k_exchange_copylist.sync(); + k_exchange_copylist_short.modify(); + k_exchange_copylist_short.sync(); nsend = k_count.h_view(); if (nsend > maxsend) grow_send_kokkos(nsend,1); nsend = From b50ef59a199346141ae06bea6e474fb5ade762bd Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Mon, 18 Mar 2019 13:17:32 -0600 Subject: [PATCH 039/311] Optimize Kokkos comm for small systems --- src/KOKKOS/comm_kokkos.cpp | 96 ++++++++++++++++++++------------------ src/KOKKOS/comm_kokkos.h | 2 + 2 files changed, 53 insertions(+), 45 deletions(-) diff --git a/src/KOKKOS/comm_kokkos.cpp b/src/KOKKOS/comm_kokkos.cpp index 06807b08b9..814824bc5b 100644 --- a/src/KOKKOS/comm_kokkos.cpp +++ b/src/KOKKOS/comm_kokkos.cpp @@ -57,10 +57,9 @@ CommKokkos::CommKokkos(LAMMPS *lmp) : CommBrick(lmp) memory->destroy(buf_recv); buf_recv = NULL; - k_exchange_lists = DAT:: - tdual_int_1d("comm:k_exchange_lists",2,100); - k_exchange_sendlist = Kokkos::subview(k_exchange_lists,0,KOKKOS::ALL); - k_exchange_copylist = Kokkos::subview(k_exchange_lists,1,KOKKOS::ALL); + k_exchange_lists = DAT::tdual_int_2d("comm:k_exchange_lists",2,100); + k_exchange_sendlist = Kokkos::subview(k_exchange_lists,0,Kokkos::ALL); + k_exchange_copylist = Kokkos::subview(k_exchange_lists,1,Kokkos::ALL); k_count = DAT::tdual_int_scalar("comm:k_count"); k_sendflag = DAT::tdual_int_1d("comm:k_sendflag",100); @@ -188,6 +187,8 @@ void CommKokkos::forward_comm_device(int dummy) atomKK->sync(ExecutionSpaceFromDevice::space,X_MASK); if (comm->nprocs == 1) { + k_swap.sync(); + k_pbc.sync(); n = avec->pack_comm_self_fused(totalsend,k_sendlist,k_sendnum_scan, k_firstrecv,k_pbc_flag,k_pbc); } else { @@ -620,8 +621,7 @@ void CommKokkos::exchange_device() } } - auto k_exchange_lists_short = Kokkos::subview(k_exchange_lists,KOKKOS::ALL,k_count.h_view()); - k_exchange_lists_short.template sync(); + k_exchange_lists.sync(); k_sendflag.sync(); int sendpos = nlocal-1; @@ -635,6 +635,7 @@ void CommKokkos::exchange_device() k_exchange_copylist.h_view(i) = -1; } + auto k_exchange_copylist_short = Kokkos::subview(k_exchange_copylist,k_count.h_view()); k_exchange_copylist_short.modify(); k_exchange_copylist_short.sync(); nsend = k_count.h_view(); @@ -749,14 +750,16 @@ void CommKokkos::borders() if (!exchange_comm_classic) { if (exchange_comm_on_host) borders_device(); else borders_device(); - return; + } else { + atomKK->sync(Host,ALL_MASK); + k_sendlist.sync(); + CommBrick::borders(); + k_sendlist.modify(); + atomKK->modified(Host,ALL_MASK); } - atomKK->sync(Host,ALL_MASK); - k_sendlist.sync(); - CommBrick::borders(); - k_sendlist.modify(); - atomKK->modified(Host,ALL_MASK); + if (comm->nprocs == 1 && !forward_comm_classic) + copy_pbc_info(); } /* ---------------------------------------------------------------------- */ @@ -1043,40 +1046,43 @@ void CommKokkos::borders_device() { atomKK->sync(Host,TAG_MASK); atom->map_set(); } - - if (comm->nprocs == 1) { - if (nswap > k_pbc.extent(0)) { - k_pbc = DAT::tdual_int_2d("comm:pbc",nswap,6); - k_swap = DAT::tdual_int_2d("comm:swap",3,nswap); - k_pbc_flag .d_view = Kokkos::subview(k_swap.d_view,0,Kokkos::ALL); - k_firstrecv .d_view = Kokkos::subview(k_swap.d_view,1,Kokkos::ALL); - k_sendnum_scan.d_view = Kokkos::subview(k_swap.d_view,2,Kokkos::ALL); - k_pbc_flag .h_view = Kokkos::subview(k_swap.h_view,0,Kokkos::ALL); - k_firstrecv .h_view = Kokkos::subview(k_swap.h_view,1,Kokkos::ALL); - k_sendnum_scan.h_view = Kokkos::subview(k_swap.h_view,2,Kokkos::ALL); - } - int scan = 0; - for (int iswap = 0; iswap < nswap; iswap++) { - scan += sendnum[iswap]; - k_sendnum_scan.h_view[iswap] = scan; - k_firstrecv.h_view[iswap] = firstrecv[iswap]; - k_pbc_flag.h_view[iswap] = pbc_flag[iswap]; - k_pbc.h_view(iswap,0) = pbc[iswap][0]; - k_pbc.h_view(iswap,1) = pbc[iswap][1]; - k_pbc.h_view(iswap,2) = pbc[iswap][2]; - k_pbc.h_view(iswap,3) = pbc[iswap][3]; - k_pbc.h_view(iswap,4) = pbc[iswap][4]; - k_pbc.h_view(iswap,5) = pbc[iswap][5]; - } - totalsend = scan; - - k_swap.modify(); - k_pbc.modify(); - - k_swap.sync(); - k_pbc.sync(); - } } + +/* ---------------------------------------------------------------------- + copy pbc info +------------------------------------------------------------------------- */ + +void CommKokkos::copy_pbc_info() +{ + if (nswap > k_pbc.extent(0)) { + k_pbc = DAT::tdual_int_2d("comm:pbc",nswap,6); + k_swap = DAT::tdual_int_2d("comm:swap",3,nswap); + k_pbc_flag .d_view = Kokkos::subview(k_swap.d_view,0,Kokkos::ALL); + k_firstrecv .d_view = Kokkos::subview(k_swap.d_view,1,Kokkos::ALL); + k_sendnum_scan.d_view = Kokkos::subview(k_swap.d_view,2,Kokkos::ALL); + k_pbc_flag .h_view = Kokkos::subview(k_swap.h_view,0,Kokkos::ALL); + k_firstrecv .h_view = Kokkos::subview(k_swap.h_view,1,Kokkos::ALL); + k_sendnum_scan.h_view = Kokkos::subview(k_swap.h_view,2,Kokkos::ALL); + } + int scan = 0; + for (int iswap = 0; iswap < nswap; iswap++) { + scan += sendnum[iswap]; + k_sendnum_scan.h_view[iswap] = scan; + k_firstrecv.h_view[iswap] = firstrecv[iswap]; + k_pbc_flag.h_view[iswap] = pbc_flag[iswap]; + k_pbc.h_view(iswap,0) = pbc[iswap][0]; + k_pbc.h_view(iswap,1) = pbc[iswap][1]; + k_pbc.h_view(iswap,2) = pbc[iswap][2]; + k_pbc.h_view(iswap,3) = pbc[iswap][3]; + k_pbc.h_view(iswap,4) = pbc[iswap][4]; + k_pbc.h_view(iswap,5) = pbc[iswap][5]; + } + totalsend = scan; + + k_swap.modify(); + k_pbc.modify(); +} + /* ---------------------------------------------------------------------- realloc the size of the send buffer as needed with BUFFACTOR and bufextra if flag = 1, realloc diff --git a/src/KOKKOS/comm_kokkos.h b/src/KOKKOS/comm_kokkos.h index cab8124231..194826f9df 100644 --- a/src/KOKKOS/comm_kokkos.h +++ b/src/KOKKOS/comm_kokkos.h @@ -58,6 +58,7 @@ class CommKokkos : public CommBrick { DAT::tdual_int_2d k_sendlist; DAT::tdual_int_scalar k_total_send; DAT::tdual_xfloat_2d k_buf_send,k_buf_recv; + DAT::tdual_int_2d k_exchange_lists; DAT::tdual_int_1d k_exchange_sendlist,k_exchange_copylist,k_sendflag; DAT::tdual_int_scalar k_count; //double *buf_send; // send buffer for all comm @@ -81,6 +82,7 @@ class CommKokkos : public CommBrick { void grow_recv_kokkos(int, ExecutionSpace space = Host); void grow_list(int, int); void grow_swap(int); + void copy_pbc_info(); }; } From e2d28f5160d9f58c1519ee40fd289c8918f1383a Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Mon, 18 Mar 2019 15:27:35 -0600 Subject: [PATCH 040/311] Only copy pbc info in comm setup --- src/KOKKOS/comm_kokkos.cpp | 52 +++++++++++++++++++++++--------------- src/KOKKOS/comm_kokkos.h | 3 ++- 2 files changed, 34 insertions(+), 21 deletions(-) diff --git a/src/KOKKOS/comm_kokkos.cpp b/src/KOKKOS/comm_kokkos.cpp index 814824bc5b..c6d8424c27 100644 --- a/src/KOKKOS/comm_kokkos.cpp +++ b/src/KOKKOS/comm_kokkos.cpp @@ -140,6 +140,31 @@ void CommKokkos::init() forward_comm_classic = true; } +/* ---------------------------------------------------------------------- */ + +void CommKokkos::setup() +{ + CommBrick::setup(); + + k_pbc_flag = DAT::tdual_int_1d("comm:pbc_flag",nswap); + k_pbc = DAT::tdual_int_2d("comm:pbc",nswap,6); + + for (int iswap = 0; iswap < nswap; iswap++) { + k_pbc_flag.h_view[iswap] = pbc_flag[iswap]; + k_pbc.h_view(iswap,0) = pbc[iswap][0]; + k_pbc.h_view(iswap,1) = pbc[iswap][1]; + k_pbc.h_view(iswap,2) = pbc[iswap][2]; + k_pbc.h_view(iswap,3) = pbc[iswap][3]; + k_pbc.h_view(iswap,4) = pbc[iswap][4]; + k_pbc.h_view(iswap,5) = pbc[iswap][5]; + } + k_pbc_flag.modify(); + k_pbc.modify(); + + k_pbc_flag.sync(); + k_pbc.sync(); +} + /* ---------------------------------------------------------------------- forward communication of atom coords every timestep other per-atom attributes may also be sent via pack/unpack routines @@ -759,7 +784,7 @@ void CommKokkos::borders() } if (comm->nprocs == 1 && !forward_comm_classic) - copy_pbc_info(); + copy_swap_info(); } /* ---------------------------------------------------------------------- */ @@ -1049,38 +1074,25 @@ void CommKokkos::borders_device() { } /* ---------------------------------------------------------------------- - copy pbc info + copy swap info ------------------------------------------------------------------------- */ -void CommKokkos::copy_pbc_info() +void CommKokkos::copy_swap_info() { - if (nswap > k_pbc.extent(0)) { - k_pbc = DAT::tdual_int_2d("comm:pbc",nswap,6); - k_swap = DAT::tdual_int_2d("comm:swap",3,nswap); - k_pbc_flag .d_view = Kokkos::subview(k_swap.d_view,0,Kokkos::ALL); - k_firstrecv .d_view = Kokkos::subview(k_swap.d_view,1,Kokkos::ALL); - k_sendnum_scan.d_view = Kokkos::subview(k_swap.d_view,2,Kokkos::ALL); - k_pbc_flag .h_view = Kokkos::subview(k_swap.h_view,0,Kokkos::ALL); - k_firstrecv .h_view = Kokkos::subview(k_swap.h_view,1,Kokkos::ALL); - k_sendnum_scan.h_view = Kokkos::subview(k_swap.h_view,2,Kokkos::ALL); + if (nswap > k_swap.extent(1)) { + k_swap = DAT::tdual_int_2d("comm:swap",2,nswap); + k_firstrecv = Kokkos::subview(k_swap,0,Kokkos::ALL); + k_sendnum_scan = Kokkos::subview(k_swap,1,Kokkos::ALL); } int scan = 0; for (int iswap = 0; iswap < nswap; iswap++) { scan += sendnum[iswap]; k_sendnum_scan.h_view[iswap] = scan; k_firstrecv.h_view[iswap] = firstrecv[iswap]; - k_pbc_flag.h_view[iswap] = pbc_flag[iswap]; - k_pbc.h_view(iswap,0) = pbc[iswap][0]; - k_pbc.h_view(iswap,1) = pbc[iswap][1]; - k_pbc.h_view(iswap,2) = pbc[iswap][2]; - k_pbc.h_view(iswap,3) = pbc[iswap][3]; - k_pbc.h_view(iswap,4) = pbc[iswap][4]; - k_pbc.h_view(iswap,5) = pbc[iswap][5]; } totalsend = scan; k_swap.modify(); - k_pbc.modify(); } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/comm_kokkos.h b/src/KOKKOS/comm_kokkos.h index 194826f9df..d5428c8b0c 100644 --- a/src/KOKKOS/comm_kokkos.h +++ b/src/KOKKOS/comm_kokkos.h @@ -33,6 +33,7 @@ class CommKokkos : public CommBrick { CommKokkos(class LAMMPS *); ~CommKokkos(); void init(); + void setup(); void forward_comm(int dummy = 0); // forward comm of atom coords void reverse_comm(); // reverse comm of atom coords @@ -82,7 +83,7 @@ class CommKokkos : public CommBrick { void grow_recv_kokkos(int, ExecutionSpace space = Host); void grow_list(int, int); void grow_swap(int); - void copy_pbc_info(); + void copy_swap_info(); }; } From 08273c40d7489c7015b600ff7b9b5f4a7d029313 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 19 Mar 2019 14:29:45 -0600 Subject: [PATCH 041/311] Fix compile issue in comm_kokkos --- src/KOKKOS/comm_kokkos.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/KOKKOS/comm_kokkos.cpp b/src/KOKKOS/comm_kokkos.cpp index c6d8424c27..4396637153 100644 --- a/src/KOKKOS/comm_kokkos.cpp +++ b/src/KOKKOS/comm_kokkos.cpp @@ -661,8 +661,8 @@ void CommKokkos::exchange_device() } auto k_exchange_copylist_short = Kokkos::subview(k_exchange_copylist,k_count.h_view()); - k_exchange_copylist_short.modify(); - k_exchange_copylist_short.sync(); + k_exchange_copylist_short.template modify(); + k_exchange_copylist_short.template sync(); nsend = k_count.h_view(); if (nsend > maxsend) grow_send_kokkos(nsend,1); nsend = From d1e751d717752927b33b53fd2f613b8bd02288b7 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Wed, 20 Mar 2019 14:32:03 -0600 Subject: [PATCH 042/311] Fix thread safety issue in fused forward comm --- src/KOKKOS/atom_vec_kokkos.cpp | 38 +++++++++-------- src/KOKKOS/atom_vec_kokkos.h | 3 +- src/KOKKOS/comm_kokkos.cpp | 74 +++++++++++++++++++++------------- src/KOKKOS/comm_kokkos.h | 3 +- 4 files changed, 72 insertions(+), 46 deletions(-) diff --git a/src/KOKKOS/atom_vec_kokkos.cpp b/src/KOKKOS/atom_vec_kokkos.cpp index 076e3e52fa..9e7de1785b 100644 --- a/src/KOKKOS/atom_vec_kokkos.cpp +++ b/src/KOKKOS/atom_vec_kokkos.cpp @@ -281,6 +281,7 @@ struct AtomVecKokkos_PackCommSelfFused { typename ArrayTypes::t_int_1d_const _pbc_flag; typename ArrayTypes::t_int_1d_const _firstrecv; typename ArrayTypes::t_int_1d_const _sendnum_scan; + typename ArrayTypes::t_int_1d_const _g2l; X_FLOAT _xprd,_yprd,_zprd,_xy,_xz,_yz; AtomVecKokkos_PackCommSelfFused( @@ -290,6 +291,7 @@ struct AtomVecKokkos_PackCommSelfFused { const typename DAT::tdual_int_1d &pbc_flag, const typename DAT::tdual_int_1d &firstrecv, const typename DAT::tdual_int_1d &sendnum_scan, + const typename DAT::tdual_int_1d &g2l, const X_FLOAT &xprd, const X_FLOAT &yprd, const X_FLOAT &zprd, const X_FLOAT &xy, const X_FLOAT &xz, const X_FLOAT &yz): _x(x.view()),_xw(x.view()), @@ -298,6 +300,7 @@ struct AtomVecKokkos_PackCommSelfFused { _pbc_flag(pbc_flag.view()), _firstrecv(firstrecv.view()), _sendnum_scan(sendnum_scan.view()), + _g2l(g2l.view()), _xprd(xprd),_yprd(yprd),_zprd(zprd), _xy(xy),_xz(xz),_yz(yz) {}; @@ -309,43 +312,46 @@ struct AtomVecKokkos_PackCommSelfFused { int i = ii; if (iswap > 0) i = ii - _sendnum_scan[iswap-1]; - const int _nfirst = _firstrecv[iswap]; + const int _nfirst = _firstrecv[iswap]; + const int nlocal = _firstrecv[0]; + int j = _list(iswap,i); + if (j >= nlocal) + j = _g2l(j-nlocal); - const int j = _list(iswap,i); - if (_pbc_flag(iswap) == 0) { + if (_pbc_flag(ii) == 0) { _xw(i+_nfirst,0) = _x(j,0); _xw(i+_nfirst,1) = _x(j,1); _xw(i+_nfirst,2) = _x(j,2); } else { if (TRICLINIC == 0) { - _xw(i+_nfirst,0) = _x(j,0) + _pbc(iswap,0)*_xprd; - _xw(i+_nfirst,1) = _x(j,1) + _pbc(iswap,1)*_yprd; - _xw(i+_nfirst,2) = _x(j,2) + _pbc(iswap,2)*_zprd; + _xw(i+_nfirst,0) = _x(j,0) + _pbc(ii,0)*_xprd; + _xw(i+_nfirst,1) = _x(j,1) + _pbc(ii,1)*_yprd; + _xw(i+_nfirst,2) = _x(j,2) + _pbc(ii,2)*_zprd; } else { - _xw(i+_nfirst,0) = _x(j,0) + _pbc(iswap,0)*_xprd + _pbc(iswap,5)*_xy + _pbc(iswap,4)*_xz; - _xw(i+_nfirst,1) = _x(j,1) + _pbc(iswap,1)*_yprd + _pbc(iswap,3)*_yz; - _xw(i+_nfirst,2) = _x(j,2) + _pbc(iswap,2)*_zprd; + _xw(i+_nfirst,0) = _x(j,0) + _pbc(ii,0)*_xprd + _pbc(ii,5)*_xy + _pbc(ii,4)*_xz; + _xw(i+_nfirst,1) = _x(j,1) + _pbc(ii,1)*_yprd + _pbc(ii,3)*_yz; + _xw(i+_nfirst,2) = _x(j,2) + _pbc(ii,2)*_zprd; } } - } }; /* ---------------------------------------------------------------------- */ int AtomVecKokkos::pack_comm_self_fused(const int &n, const DAT::tdual_int_2d &list, const DAT::tdual_int_1d &sendnum_scan, - const DAT::tdual_int_1d &firstrecv, const DAT::tdual_int_1d &pbc_flag, const DAT::tdual_int_2d &pbc) { + const DAT::tdual_int_1d &firstrecv, const DAT::tdual_int_1d &pbc_flag, const DAT::tdual_int_2d &pbc, + const DAT::tdual_int_1d &g2l) { if(commKK->forward_comm_on_host) { sync(Host,X_MASK); modified(Host,X_MASK); if(domain->triclinic) { - struct AtomVecKokkos_PackCommSelfFused f(atomKK->k_x,list,pbc,pbc_flag,firstrecv,sendnum_scan, + struct AtomVecKokkos_PackCommSelfFused f(atomKK->k_x,list,pbc,pbc_flag,firstrecv,sendnum_scan,g2l, domain->xprd,domain->yprd,domain->zprd, domain->xy,domain->xz,domain->yz); Kokkos::parallel_for(n,f); } else { - struct AtomVecKokkos_PackCommSelfFused f(atomKK->k_x,list,pbc,pbc_flag,firstrecv,sendnum_scan, + struct AtomVecKokkos_PackCommSelfFused f(atomKK->k_x,list,pbc,pbc_flag,firstrecv,sendnum_scan,g2l, domain->xprd,domain->yprd,domain->zprd, domain->xy,domain->xz,domain->yz); Kokkos::parallel_for(n,f); @@ -354,18 +360,18 @@ int AtomVecKokkos::pack_comm_self_fused(const int &n, const DAT::tdual_int_2d &l sync(Device,X_MASK); modified(Device,X_MASK); if(domain->triclinic) { - struct AtomVecKokkos_PackCommSelfFused f(atomKK->k_x,list,pbc,pbc_flag,firstrecv,sendnum_scan, + struct AtomVecKokkos_PackCommSelfFused f(atomKK->k_x,list,pbc,pbc_flag,firstrecv,sendnum_scan,g2l, domain->xprd,domain->yprd,domain->zprd, domain->xy,domain->xz,domain->yz); Kokkos::parallel_for(n,f); } else { - struct AtomVecKokkos_PackCommSelfFused f(atomKK->k_x,list,pbc,pbc_flag,firstrecv,sendnum_scan, + struct AtomVecKokkos_PackCommSelfFused f(atomKK->k_x,list,pbc,pbc_flag,firstrecv,sendnum_scan,g2l, domain->xprd,domain->yprd,domain->zprd, domain->xy,domain->xz,domain->yz); Kokkos::parallel_for(n,f); } } - return n*3; + return n*3; } /* ---------------------------------------------------------------------- */ diff --git a/src/KOKKOS/atom_vec_kokkos.h b/src/KOKKOS/atom_vec_kokkos.h index ea83ef1c8f..0474a2380a 100644 --- a/src/KOKKOS/atom_vec_kokkos.h +++ b/src/KOKKOS/atom_vec_kokkos.h @@ -56,7 +56,8 @@ class AtomVecKokkos : public AtomVec { const DAT::tdual_int_1d &sendnum_scan, const DAT::tdual_int_1d &firstrecv, const DAT::tdual_int_1d &pbc_flag, - const DAT::tdual_int_2d &pbc); + const DAT::tdual_int_2d &pbc, + const DAT::tdual_int_1d &g2l); virtual int pack_comm_kokkos(const int &n, const DAT::tdual_int_2d &list, diff --git a/src/KOKKOS/comm_kokkos.cpp b/src/KOKKOS/comm_kokkos.cpp index 4396637153..cd6ade1c2f 100644 --- a/src/KOKKOS/comm_kokkos.cpp +++ b/src/KOKKOS/comm_kokkos.cpp @@ -140,31 +140,6 @@ void CommKokkos::init() forward_comm_classic = true; } -/* ---------------------------------------------------------------------- */ - -void CommKokkos::setup() -{ - CommBrick::setup(); - - k_pbc_flag = DAT::tdual_int_1d("comm:pbc_flag",nswap); - k_pbc = DAT::tdual_int_2d("comm:pbc",nswap,6); - - for (int iswap = 0; iswap < nswap; iswap++) { - k_pbc_flag.h_view[iswap] = pbc_flag[iswap]; - k_pbc.h_view(iswap,0) = pbc[iswap][0]; - k_pbc.h_view(iswap,1) = pbc[iswap][1]; - k_pbc.h_view(iswap,2) = pbc[iswap][2]; - k_pbc.h_view(iswap,3) = pbc[iswap][3]; - k_pbc.h_view(iswap,4) = pbc[iswap][4]; - k_pbc.h_view(iswap,5) = pbc[iswap][5]; - } - k_pbc_flag.modify(); - k_pbc.modify(); - - k_pbc_flag.sync(); - k_pbc.sync(); -} - /* ---------------------------------------------------------------------- forward communication of atom coords every timestep other per-atom attributes may also be sent via pack/unpack routines @@ -211,11 +186,12 @@ void CommKokkos::forward_comm_device(int dummy) k_sendlist.sync(); atomKK->sync(ExecutionSpaceFromDevice::space,X_MASK); - if (comm->nprocs == 1) { + if (comm->nprocs == 1 && !ghost_velocity) { k_swap.sync(); + k_swap2.sync(); k_pbc.sync(); n = avec->pack_comm_self_fused(totalsend,k_sendlist,k_sendnum_scan, - k_firstrecv,k_pbc_flag,k_pbc); + k_firstrecv,k_pbc_flag,k_pbc,k_g2l); } else { for (int iswap = 0; iswap < nswap; iswap++) { @@ -783,7 +759,7 @@ void CommKokkos::borders() atomKK->modified(Host,ALL_MASK); } - if (comm->nprocs == 1 && !forward_comm_classic) + if (comm->nprocs == 1 && !ghost_velocity && !forward_comm_classic) copy_swap_info(); } @@ -1092,7 +1068,49 @@ void CommKokkos::copy_swap_info() } totalsend = scan; + int* list = NULL; + memory->create(list,totalsend,"comm:list"); + if (totalsend > k_pbc.extent(0)) { + k_pbc = DAT::tdual_int_2d("comm:pbc",totalsend,6); + k_swap2 = DAT::tdual_int_2d("comm:swap2",2,totalsend); + k_pbc_flag = Kokkos::subview(k_swap2,0,Kokkos::ALL); + k_g2l = Kokkos::subview(k_swap2,1,Kokkos::ALL); + } + + // create map of ghost atoms to local atoms + // store periodic boundary transform from local to ghost + + for (int iswap = 0; iswap < nswap; iswap++) { + for (int i = 0; i < sendnum[iswap]; i++) { + int source = sendlist[iswap][i] - atom->nlocal; + int dest = firstrecv[iswap] + i - atom->nlocal; + k_pbc_flag.h_view(dest) = pbc_flag[iswap]; + k_pbc.h_view(dest,0) = pbc[iswap][0]; + k_pbc.h_view(dest,1) = pbc[iswap][1]; + k_pbc.h_view(dest,2) = pbc[iswap][2]; + k_pbc.h_view(dest,3) = pbc[iswap][3]; + k_pbc.h_view(dest,4) = pbc[iswap][4]; + k_pbc.h_view(dest,5) = pbc[iswap][5]; + k_g2l.h_view(dest) = atom->nlocal + source; + + if (source >= 0) { + k_pbc_flag.h_view(dest) = k_pbc_flag.h_view(dest) || k_pbc_flag.h_view(source); + k_pbc.h_view(dest,0) += k_pbc.h_view(source,0); + k_pbc.h_view(dest,1) += k_pbc.h_view(source,1); + k_pbc.h_view(dest,2) += k_pbc.h_view(source,2); + k_pbc.h_view(dest,3) += k_pbc.h_view(source,3); + k_pbc.h_view(dest,4) += k_pbc.h_view(source,4); + k_pbc.h_view(dest,5) += k_pbc.h_view(source,5); + k_g2l.h_view(dest) = k_g2l.h_view(source); + } + } + } + k_swap.modify(); + k_swap2.modify(); + k_pbc.modify(); + + memory->destroy(list); } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/comm_kokkos.h b/src/KOKKOS/comm_kokkos.h index d5428c8b0c..9d8766e309 100644 --- a/src/KOKKOS/comm_kokkos.h +++ b/src/KOKKOS/comm_kokkos.h @@ -33,7 +33,6 @@ class CommKokkos : public CommBrick { CommKokkos(class LAMMPS *); ~CommKokkos(); void init(); - void setup(); void forward_comm(int dummy = 0); // forward comm of atom coords void reverse_comm(); // reverse comm of atom coords @@ -66,8 +65,10 @@ class CommKokkos : public CommBrick { //double *buf_recv; // recv buffer for all comm DAT::tdual_int_2d k_swap; + DAT::tdual_int_2d k_swap2; DAT::tdual_int_2d k_pbc; DAT::tdual_int_1d k_pbc_flag; + DAT::tdual_int_1d k_g2l; DAT::tdual_int_1d k_firstrecv; DAT::tdual_int_1d k_sendnum_scan; int totalsend; From 1f44dc2498366b80c0e0b0f36424728a2c98cf0f Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Wed, 20 Mar 2019 15:01:47 -0600 Subject: [PATCH 043/311] Remove unused array in comm_kokkos --- src/KOKKOS/comm_kokkos.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/KOKKOS/comm_kokkos.cpp b/src/KOKKOS/comm_kokkos.cpp index cd6ade1c2f..a89889bd28 100644 --- a/src/KOKKOS/comm_kokkos.cpp +++ b/src/KOKKOS/comm_kokkos.cpp @@ -1068,7 +1068,9 @@ void CommKokkos::copy_swap_info() } totalsend = scan; - int* list = NULL; + // create map of ghost to local atom id + // store periodic boundary transform from local to ghost + memory->create(list,totalsend,"comm:list"); if (totalsend > k_pbc.extent(0)) { k_pbc = DAT::tdual_int_2d("comm:pbc",totalsend,6); @@ -1077,9 +1079,6 @@ void CommKokkos::copy_swap_info() k_g2l = Kokkos::subview(k_swap2,1,Kokkos::ALL); } - // create map of ghost atoms to local atoms - // store periodic boundary transform from local to ghost - for (int iswap = 0; iswap < nswap; iswap++) { for (int i = 0; i < sendnum[iswap]; i++) { int source = sendlist[iswap][i] - atom->nlocal; @@ -1109,8 +1108,6 @@ void CommKokkos::copy_swap_info() k_swap.modify(); k_swap2.modify(); k_pbc.modify(); - - memory->destroy(list); } /* ---------------------------------------------------------------------- From 744a8215dd4c2bd29c6b056a142f88e756213675 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Wed, 20 Mar 2019 15:08:08 -0600 Subject: [PATCH 044/311] Fix compile error in comm_kokkos and indent in atom_vec_kokkos --- src/KOKKOS/atom_vec_kokkos.cpp | 37 +++++++++++++++++----------------- src/KOKKOS/comm_kokkos.cpp | 1 - 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/KOKKOS/atom_vec_kokkos.cpp b/src/KOKKOS/atom_vec_kokkos.cpp index 9e7de1785b..7d5df17544 100644 --- a/src/KOKKOS/atom_vec_kokkos.cpp +++ b/src/KOKKOS/atom_vec_kokkos.cpp @@ -312,28 +312,29 @@ struct AtomVecKokkos_PackCommSelfFused { int i = ii; if (iswap > 0) i = ii - _sendnum_scan[iswap-1]; - const int _nfirst = _firstrecv[iswap]; - const int nlocal = _firstrecv[0]; - int j = _list(iswap,i); - if (j >= nlocal) - j = _g2l(j-nlocal); + const int _nfirst = _firstrecv[iswap]; + const int nlocal = _firstrecv[0]; - if (_pbc_flag(ii) == 0) { - _xw(i+_nfirst,0) = _x(j,0); - _xw(i+_nfirst,1) = _x(j,1); - _xw(i+_nfirst,2) = _x(j,2); + int j = _list(iswap,i); + if (j >= nlocal) + j = _g2l(j-nlocal); + + if (_pbc_flag(ii) == 0) { + _xw(i+_nfirst,0) = _x(j,0); + _xw(i+_nfirst,1) = _x(j,1); + _xw(i+_nfirst,2) = _x(j,2); + } else { + if (TRICLINIC == 0) { + _xw(i+_nfirst,0) = _x(j,0) + _pbc(ii,0)*_xprd; + _xw(i+_nfirst,1) = _x(j,1) + _pbc(ii,1)*_yprd; + _xw(i+_nfirst,2) = _x(j,2) + _pbc(ii,2)*_zprd; } else { - if (TRICLINIC == 0) { - _xw(i+_nfirst,0) = _x(j,0) + _pbc(ii,0)*_xprd; - _xw(i+_nfirst,1) = _x(j,1) + _pbc(ii,1)*_yprd; - _xw(i+_nfirst,2) = _x(j,2) + _pbc(ii,2)*_zprd; - } else { - _xw(i+_nfirst,0) = _x(j,0) + _pbc(ii,0)*_xprd + _pbc(ii,5)*_xy + _pbc(ii,4)*_xz; - _xw(i+_nfirst,1) = _x(j,1) + _pbc(ii,1)*_yprd + _pbc(ii,3)*_yz; - _xw(i+_nfirst,2) = _x(j,2) + _pbc(ii,2)*_zprd; - } + _xw(i+_nfirst,0) = _x(j,0) + _pbc(ii,0)*_xprd + _pbc(ii,5)*_xy + _pbc(ii,4)*_xz; + _xw(i+_nfirst,1) = _x(j,1) + _pbc(ii,1)*_yprd + _pbc(ii,3)*_yz; + _xw(i+_nfirst,2) = _x(j,2) + _pbc(ii,2)*_zprd; } + } } }; diff --git a/src/KOKKOS/comm_kokkos.cpp b/src/KOKKOS/comm_kokkos.cpp index a89889bd28..d52011879d 100644 --- a/src/KOKKOS/comm_kokkos.cpp +++ b/src/KOKKOS/comm_kokkos.cpp @@ -1071,7 +1071,6 @@ void CommKokkos::copy_swap_info() // create map of ghost to local atom id // store periodic boundary transform from local to ghost - memory->create(list,totalsend,"comm:list"); if (totalsend > k_pbc.extent(0)) { k_pbc = DAT::tdual_int_2d("comm:pbc",totalsend,6); k_swap2 = DAT::tdual_int_2d("comm:swap2",2,totalsend); From c3adfcbc155859f4313503a0e1acef5c71d84b0b Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 21 Mar 2019 08:56:12 -0600 Subject: [PATCH 045/311] Add missing sync in comm_kokkos --- src/KOKKOS/comm_kokkos.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/KOKKOS/comm_kokkos.cpp b/src/KOKKOS/comm_kokkos.cpp index d52011879d..7432f30b95 100644 --- a/src/KOKKOS/comm_kokkos.cpp +++ b/src/KOKKOS/comm_kokkos.cpp @@ -1071,6 +1071,8 @@ void CommKokkos::copy_swap_info() // create map of ghost to local atom id // store periodic boundary transform from local to ghost + k_sendlist.sync(); + if (totalsend > k_pbc.extent(0)) { k_pbc = DAT::tdual_int_2d("comm:pbc",totalsend,6); k_swap2 = DAT::tdual_int_2d("comm:swap2",2,totalsend); From f2ef02b6d94603b1902774dbddf488a1fd06522b Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Thu, 21 Mar 2019 09:27:18 -0600 Subject: [PATCH 046/311] Comm exchange is a no-op for 1 MPI rank --- src/KOKKOS/comm_kokkos.cpp | 259 ++++++++++++++++++------------------- 1 file changed, 129 insertions(+), 130 deletions(-) diff --git a/src/KOKKOS/comm_kokkos.cpp b/src/KOKKOS/comm_kokkos.cpp index 7432f30b95..720a79617f 100644 --- a/src/KOKKOS/comm_kokkos.cpp +++ b/src/KOKKOS/comm_kokkos.cpp @@ -504,9 +504,8 @@ void CommKokkos::exchange() } atomKK->sync(Host,ALL_MASK); - atomKK->modified(Host,ALL_MASK); - CommBrick::exchange(); + atomKK->modified(Host,ALL_MASK); } /* ---------------------------------------------------------------------- */ @@ -573,147 +572,149 @@ void CommKokkos::exchange_device() atom->nghost = 0; atom->avec->clear_bonus(); - // subbox bounds for orthogonal or triclinic + if (comm->nprocs > 1) { // otherwise no-op - if (triclinic == 0) { - sublo = domain->sublo; - subhi = domain->subhi; - } else { - sublo = domain->sublo_lamda; - subhi = domain->subhi_lamda; - } + // subbox bounds for orthogonal or triclinic - atomKK->sync(ExecutionSpaceFromDevice::space,ALL_MASK); + if (triclinic == 0) { + sublo = domain->sublo; + subhi = domain->subhi; + } else { + sublo = domain->sublo_lamda; + subhi = domain->subhi_lamda; + } - // loop over dimensions - for (int dim = 0; dim < 3; dim++) { + atomKK->sync(ExecutionSpaceFromDevice::space,ALL_MASK); - // fill buffer with atoms leaving my box, using < and >= - // when atom is deleted, fill it in with last atom + // loop over dimensions + for (int dim = 0; dim < 3; dim++) { - x = atom->x; - lo = sublo[dim]; - hi = subhi[dim]; - nlocal = atom->nlocal; - i = nsend = 0; + // fill buffer with atoms leaving my box, using < and >= + // when atom is deleted, fill it in with last atom - if (true) { - if (k_sendflag.h_view.extent(0)(); - k_count.h_view() = k_exchange_sendlist.h_view.extent(0); - while (k_count.h_view()>=k_exchange_sendlist.h_view.extent(0)) { - k_count.h_view() = 0; - k_count.modify(); - k_count.sync(); + x = atom->x; + lo = sublo[dim]; + hi = subhi[dim]; + nlocal = atom->nlocal; + i = nsend = 0; - BuildExchangeListFunctor - f(atomKK->k_x,k_exchange_sendlist,k_count,k_sendflag, - nlocal,dim,lo,hi); - Kokkos::parallel_for(nlocal,f); - k_exchange_sendlist.modify(); - k_sendflag.modify(); - k_count.modify(); + if (true) { + if (k_sendflag.h_view.extent(0)(); + k_count.h_view() = k_exchange_sendlist.h_view.extent(0); + while (k_count.h_view()>=k_exchange_sendlist.h_view.extent(0)) { + k_count.h_view() = 0; + k_count.modify(); + k_count.sync(); - k_count.sync(); - if (k_count.h_view()>=k_exchange_sendlist.h_view.extent(0)) { - k_exchange_sendlist.resize(k_count.h_view()*1.1); - k_exchange_copylist.resize(k_count.h_view()*1.1); - k_count.h_view()=k_exchange_sendlist.h_view.extent(0); + BuildExchangeListFunctor + f(atomKK->k_x,k_exchange_sendlist,k_count,k_sendflag, + nlocal,dim,lo,hi); + Kokkos::parallel_for(nlocal,f); + k_exchange_sendlist.modify(); + k_sendflag.modify(); + k_count.modify(); + + k_count.sync(); + if (k_count.h_view()>=k_exchange_sendlist.h_view.extent(0)) { + k_exchange_sendlist.resize(k_count.h_view()*1.1); + k_exchange_copylist.resize(k_count.h_view()*1.1); + k_count.h_view()=k_exchange_sendlist.h_view.extent(0); + } + } + + k_exchange_lists.sync(); + k_sendflag.sync(); + + int sendpos = nlocal-1; + nlocal -= k_count.h_view(); + for(int i = 0; i < k_count.h_view(); i++) { + if (k_exchange_sendlist.h_view(i)(); + k_exchange_copylist_short.template sync(); + nsend = k_count.h_view(); + if (nsend > maxsend) grow_send_kokkos(nsend,1); + nsend = + avec->pack_exchange_kokkos(k_count.h_view(),k_buf_send, + k_exchange_sendlist,k_exchange_copylist, + ExecutionSpaceFromDevice::space, + dim,lo,hi); + DeviceType::fence(); + } else { + while (i < nlocal) { + if (x[i][dim] < lo || x[i][dim] >= hi) { + if (nsend > maxsend) grow_send_kokkos(nsend,1); + nsend += avec->pack_exchange(i,&buf_send[nsend]); + avec->copy(nlocal-1,i,1); + nlocal--; + } else i++; + } + } + atom->nlocal = nlocal; + + // send/recv atoms in both directions + // if 1 proc in dimension, no send/recv, set recv buf to send buf + // if 2 procs in dimension, single send/recv + // if more than 2 procs in dimension, send/recv to both neighbors + + if (procgrid[dim] == 1) { + nrecv = nsend; + if (nrecv) { + atom->nlocal=avec-> + unpack_exchange_kokkos(k_buf_send,nrecv,atom->nlocal,dim,lo,hi, + ExecutionSpaceFromDevice::space); + DeviceType::fence(); + } + } else { + MPI_Sendrecv(&nsend,1,MPI_INT,procneigh[dim][0],0, + &nrecv1,1,MPI_INT,procneigh[dim][1],0,world,MPI_STATUS_IGNORE); + nrecv = nrecv1; + if (procgrid[dim] > 2) { + MPI_Sendrecv(&nsend,1,MPI_INT,procneigh[dim][1],0, + &nrecv2,1,MPI_INT,procneigh[dim][0],0,world,MPI_STATUS_IGNORE); + nrecv += nrecv2; + } + if (nrecv > maxrecv) grow_recv_kokkos(nrecv); + + MPI_Irecv(k_buf_recv.view().data(),nrecv1, + MPI_DOUBLE,procneigh[dim][1],0, + world,&request); + MPI_Send(k_buf_send.view().data(),nsend, + MPI_DOUBLE,procneigh[dim][0],0,world); + MPI_Wait(&request,MPI_STATUS_IGNORE); + + if (procgrid[dim] > 2) { + MPI_Irecv(k_buf_recv.view().data()+nrecv1, + nrecv2,MPI_DOUBLE,procneigh[dim][0],0, + world,&request); + MPI_Send(k_buf_send.view().data(),nsend, + MPI_DOUBLE,procneigh[dim][1],0,world); + MPI_Wait(&request,MPI_STATUS_IGNORE); + } + + if (nrecv) { + atom->nlocal = avec-> + unpack_exchange_kokkos(k_buf_recv,nrecv,atom->nlocal,dim,lo,hi, + ExecutionSpaceFromDevice::space); + DeviceType::fence(); } } - k_exchange_lists.sync(); - k_sendflag.sync(); + // check incoming atoms to see if they are in my box + // if so, add to my list - int sendpos = nlocal-1; - nlocal -= k_count.h_view(); - for(int i = 0; i < k_count.h_view(); i++) { - if (k_exchange_sendlist.h_view(i)(); - k_exchange_copylist_short.template sync(); - nsend = k_count.h_view(); - if (nsend > maxsend) grow_send_kokkos(nsend,1); - nsend = - avec->pack_exchange_kokkos(k_count.h_view(),k_buf_send, - k_exchange_sendlist,k_exchange_copylist, - ExecutionSpaceFromDevice::space, - dim,lo,hi); - DeviceType::fence(); - } else { - while (i < nlocal) { - if (x[i][dim] < lo || x[i][dim] >= hi) { - if (nsend > maxsend) grow_send_kokkos(nsend,1); - nsend += avec->pack_exchange(i,&buf_send[nsend]); - avec->copy(nlocal-1,i,1); - nlocal--; - } else i++; - } } - atom->nlocal = nlocal; - - // send/recv atoms in both directions - // if 1 proc in dimension, no send/recv, set recv buf to send buf - // if 2 procs in dimension, single send/recv - // if more than 2 procs in dimension, send/recv to both neighbors - - if (procgrid[dim] == 1) { - nrecv = nsend; - if (nrecv) { - atom->nlocal=avec-> - unpack_exchange_kokkos(k_buf_send,nrecv,atom->nlocal,dim,lo,hi, - ExecutionSpaceFromDevice::space); - DeviceType::fence(); - } - } else { - MPI_Sendrecv(&nsend,1,MPI_INT,procneigh[dim][0],0, - &nrecv1,1,MPI_INT,procneigh[dim][1],0,world,MPI_STATUS_IGNORE); - nrecv = nrecv1; - if (procgrid[dim] > 2) { - MPI_Sendrecv(&nsend,1,MPI_INT,procneigh[dim][1],0, - &nrecv2,1,MPI_INT,procneigh[dim][0],0,world,MPI_STATUS_IGNORE); - nrecv += nrecv2; - } - if (nrecv > maxrecv) grow_recv_kokkos(nrecv); - - MPI_Irecv(k_buf_recv.view().data(),nrecv1, - MPI_DOUBLE,procneigh[dim][1],0, - world,&request); - MPI_Send(k_buf_send.view().data(),nsend, - MPI_DOUBLE,procneigh[dim][0],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - - if (procgrid[dim] > 2) { - MPI_Irecv(k_buf_recv.view().data()+nrecv1, - nrecv2,MPI_DOUBLE,procneigh[dim][0],0, - world,&request); - MPI_Send(k_buf_send.view().data(),nsend, - MPI_DOUBLE,procneigh[dim][1],0,world); - MPI_Wait(&request,MPI_STATUS_IGNORE); - } - - if (nrecv) { - atom->nlocal = avec-> - unpack_exchange_kokkos(k_buf_recv,nrecv,atom->nlocal,dim,lo,hi, - ExecutionSpaceFromDevice::space); - DeviceType::fence(); - } - } - - // check incoming atoms to see if they are in my box - // if so, add to my list - + atomKK->modified(ExecutionSpaceFromDevice::space,ALL_MASK); } - atomKK->modified(ExecutionSpaceFromDevice::space,ALL_MASK); - if (atom->firstgroupname) { /* this is not yet implemented with Kokkos */ atomKK->sync(Host,ALL_MASK); @@ -753,7 +754,6 @@ void CommKokkos::borders() else borders_device(); } else { atomKK->sync(Host,ALL_MASK); - k_sendlist.sync(); CommBrick::borders(); k_sendlist.modify(); atomKK->modified(Host,ALL_MASK); @@ -828,7 +828,6 @@ void CommKokkos::borders_device() { AtomVecKokkos *avec = (AtomVecKokkos *) atom->avec; ExecutionSpace exec_space = ExecutionSpaceFromDevice::space; - k_sendlist.sync(); atomKK->sync(exec_space,ALL_MASK); // do swaps over all 3 dimensions From 2fbf86a58d64a85d4d2b42d47c0cd03155d076c8 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 7 Apr 2019 20:50:26 -0400 Subject: [PATCH 047/311] add support for creating packages_*.h files in conventional make --- src/Make.sh | 72 +++++++++++++++++++++++++++++++++++--------------- src/Makefile | 1 + src/Purge.list | 24 +++++++++++++++++ 3 files changed, 76 insertions(+), 21 deletions(-) diff --git a/src/Make.sh b/src/Make.sh index 83880780ec..49a673d8ee 100755 --- a/src/Make.sh +++ b/src/Make.sh @@ -55,6 +55,34 @@ style () { fi } +packages () { + list=`grep -sl $1 */$2*.h` + if (test -e packages_$3.tmp) then + rm -f packages_$3.tmp + fi + for file in $list; do + dir="\"`dirname $file`\"" + echo "#undef PACKAGE" >> packages_$3.tmp + echo "#define PACKAGE $dir" >> packages_$3.tmp + qfile="\"$file\"" + echo "#include $qfile" >> packages_$3.tmp + done + if (test ! -e packages_$3.tmp) then + if (test ! -e packages_$3.h) then + touch packages_$3.h + elif (test "`cat packages_$3.h`" != "") then + rm -f packages_$3.h + touch packages_$3.h + fi + elif (test ! -e packages_$3.h) then + mv packages_$3.tmp packages_$3.h + elif (test "`diff --brief packages_$3.h packages_$3.tmp`" != "") then + mv packages_$3.tmp packages_$3.h + else + rm -f packages_$3.tmp + fi +} + # create individual style files # called by "make machine" # col 1 = string to search for @@ -63,28 +91,30 @@ style () { # col 4 = file that includes the style file # col 5 = optional 2nd file that includes the style file -if (test $1 = "style") then +cmd=$1 - style ANGLE_CLASS angle_ angle force - style ATOM_CLASS atom_vec_ atom atom atom_vec_hybrid - style BODY_CLASS body_ body atom_vec_body - style BOND_CLASS bond_ bond force - style COMMAND_CLASS "" command input - style COMPUTE_CLASS compute_ compute modify - style DIHEDRAL_CLASS dihedral_ dihedral force - style DUMP_CLASS dump_ dump output write_dump - style FIX_CLASS fix_ fix modify - style IMPROPER_CLASS improper_ improper force - style INTEGRATE_CLASS "" integrate update - style KSPACE_CLASS "" kspace force - style MINIMIZE_CLASS min_ minimize update - style NBIN_CLASS nbin_ nbin neighbor - style NPAIR_CLASS npair_ npair neighbor - style NSTENCIL_CLASS nstencil_ nstencil neighbor - style NTOPO_CLASS ntopo_ ntopo neighbor - style PAIR_CLASS pair_ pair force - style READER_CLASS reader_ reader read_dump - style REGION_CLASS region_ region domain +if (test $cmd = "style") || (test $cmd = "packages") then + + $cmd ANGLE_CLASS angle_ angle force + $cmd ATOM_CLASS atom_vec_ atom atom atom_vec_hybrid + $cmd BODY_CLASS body_ body atom_vec_body + $cmd BOND_CLASS bond_ bond force + $cmd COMMAND_CLASS "" command input + $cmd COMPUTE_CLASS compute_ compute modify + $cmd DIHEDRAL_CLASS dihedral_ dihedral force + $cmd DUMP_CLASS dump_ dump output write_dump + $cmd FIX_CLASS fix_ fix modify + $cmd IMPROPER_CLASS improper_ improper force + $cmd INTEGRATE_CLASS "" integrate update + $cmd KSPACE_CLASS "" kspace force + $cmd MINIMIZE_CLASS min_ minimize update + $cmd NBIN_CLASS nbin_ nbin neighbor + $cmd NPAIR_CLASS npair_ npair neighbor + $cmd NSTENCIL_CLASS nstencil_ nstencil neighbor + $cmd NTOPO_CLASS ntopo_ ntopo neighbor + $cmd PAIR_CLASS pair_ pair force + $cmd READER_CLASS reader_ reader read_dump + $cmd REGION_CLASS region_ region domain # edit Makefile.lib, for creating non-shared lib # called by "make makelib" diff --git a/src/Makefile b/src/Makefile index 3be4e3e78f..2e6ad9a89f 100644 --- a/src/Makefile +++ b/src/Makefile @@ -205,6 +205,7 @@ gitversion: -f MAKE/MACHINES/Makefile.$@ -o -f MAKE/MINE/Makefile.$@ @if [ ! -d $(objdir) ]; then mkdir $(objdir); fi @$(SHELL) Make.sh style + @$(SHELL) Make.sh packages @$(MAKE) $(MFLAGS) lmpinstalledpkgs.h gitversion @echo 'Compiling LAMMPS for machine $@' @if [ -f MAKE/MACHINES/Makefile.$@ ]; \ diff --git a/src/Purge.list b/src/Purge.list index a02697d2bf..634c38c58d 100644 --- a/src/Purge.list +++ b/src/Purge.list @@ -22,6 +22,30 @@ style_nbin.h style_npair.h style_nstencil.h style_ntopo.h +# auto-generated packages files +packages_angle.h +packages_atom.h +packages_body.h +packages_bond.h +packages_command.h +packages_compute.h +packages_dihedral.h +packages_dump.h +packages_fix.h +packages_improper.h +packages_integrate.h +packages_kspace.h +packages_minimize.h +packages_pair.h +packages_reader.h +packages_region.h +packages_neigh_bin.h +packages_neigh_pair.h +packages_neigh_stencil.h +packages_nbin.h +packages_npair.h +packages_nstencil.h +packages_ntopo.h # other auto-generated files lmpinstalledpkgs.h lmpgitversion.h From 916600104111cd0fa37623975a4ffde0db0d1a6c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 7 Apr 2019 20:55:00 -0400 Subject: [PATCH 048/311] add code to allow reporting which styles are part of what package --- src/.gitignore | 1 + src/lammps.cpp | 172 ++++++++++++++++++++++++++++++++++++++++++++++++- src/lammps.h | 4 ++ src/utils.cpp | 20 ++++++ src/utils.h | 10 +++ 5 files changed, 205 insertions(+), 2 deletions(-) diff --git a/src/.gitignore b/src/.gitignore index 27f4f8a64c..615c35ed11 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -5,6 +5,7 @@ /lmp_* /style_*.h +/packages_*.h /lmpinstalledpkgs.h /lmpgitversion.h diff --git a/src/lammps.cpp b/src/lammps.cpp index 2b3f001b09..24012c0f18 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -14,6 +14,8 @@ #include #include #include +#include +#include #include "lammps.h" #include "style_angle.h" #include "style_atom.h" @@ -54,10 +56,29 @@ #include "lmpinstalledpkgs.h" #include "lmpgitversion.h" -using namespace LAMMPS_NS; - static void print_style(FILE *fp, const char *str, int &pos); +struct LAMMPS_NS::package_styles_lists { + std::map angle_styles; + std::map atom_styles; + std::map body_styles; + std::map bond_styles; + std::map command_styles; + std::map compute_styles; + std::map dihedral_styles; + std::map dump_styles; + std::map fix_styles; + std::map improper_styles; + std::map integrate_styles; + std::map kspace_styles; + std::map minimize_styles; + std::map pair_styles; + std::map reader_styles; + std::map region_styles; +}; + +using namespace LAMMPS_NS; + /* ---------------------------------------------------------------------- start up LAMMPS allocate fundamental classes (memory, error, universe, input) @@ -86,6 +107,8 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) : initclock = MPI_Wtime(); + init_pkg_lists(); + // check if -mpi is first arg // if so, then 2 apps were launched with one mpirun command // this means passed communicator (e.g. MPI_COMM_WORLD) is bigger than LAMMPS @@ -693,6 +716,8 @@ LAMMPS::~LAMMPS() delete universe; delete error; delete memory; + + delete pkg_lists; } /* ---------------------------------------------------------------------- @@ -867,6 +892,149 @@ void LAMMPS::destroy() python = NULL; } +/* ---------------------------------------------------------------------- + initialize lists of styles in packages +------------------------------------------------------------------------- */ + +void LAMMPS::init_pkg_lists() +{ + pkg_lists = new package_styles_lists; +#define PACKAGE "UNKNOWN" +#define ANGLE_CLASS +#define AngleStyle(key,Class) \ + pkg_lists->angle_styles[#key] = PACKAGE; +#include "packages_angle.h" +#undef AngleStyle +#undef ANGLE_CLASS +#define ATOM_CLASS +#define AtomStyle(key,Class) \ + pkg_lists->atom_styles[#key] = PACKAGE; +#include "packages_atom.h" +#undef AtomStyle +#undef ATOM_CLASS +#define BODY_CLASS +#define BodyStyle(key,Class) \ + pkg_lists->body_styles[#key] = PACKAGE; +#include "packages_body.h" +#undef BodyStyle +#undef BODY_CLASS +#define BOND_CLASS +#define BondStyle(key,Class) \ + pkg_lists->bond_styles[#key] = PACKAGE; +#include "packages_bond.h" +#undef BondStyle +#undef BOND_CLASS +#define COMMAND_CLASS +#define CommandStyle(key,Class) \ + pkg_lists->command_styles[#key] = PACKAGE; +#include "packages_command.h" +#undef CommandStyle +#undef COMMAND_CLASS +#define COMPUTE_CLASS +#define ComputeStyle(key,Class) \ + pkg_lists->compute_styles[#key] = PACKAGE; +#include "packages_compute.h" +#undef ComputeStyle +#undef COMPUTE_CLASS +#define DIHEDRAL_CLASS +#define DihedralStyle(key,Class) \ + pkg_lists->dihedral_styles[#key] = PACKAGE; +#include "packages_dihedral.h" +#undef DihedralStyle +#undef DIHEDRAL_CLASS +#define DUMP_CLASS +#define DumpStyle(key,Class) \ + pkg_lists->dump_styles[#key] = PACKAGE; +#include "packages_dump.h" +#undef DumpStyle +#undef DUMP_CLASS +#define FIX_CLASS +#define FixStyle(key,Class) \ + pkg_lists->fix_styles[#key] = PACKAGE; +#include "packages_fix.h" +#undef FixStyle +#undef FIX_CLASS +#define IMPROPER_CLASS +#define ImproperStyle(key,Class) \ + pkg_lists->improper_styles[#key] = PACKAGE; +#include "packages_improper.h" +#undef ImproperStyle +#undef IMPROPER_CLASS +#define INTEGRATE_CLASS +#define IntegrateStyle(key,Class) \ + pkg_lists->integrate_styles[#key] = PACKAGE; +#include "packages_integrate.h" +#undef IntegrateStyle +#undef INTEGRATE_CLASS +#define KSPACE_CLASS +#define KSpaceStyle(key,Class) \ + pkg_lists->kspace_styles[#key] = PACKAGE; +#include "packages_kspace.h" +#undef KSpaceStyle +#undef KSPACE_CLASS +#define MINIMIZE_CLASS +#define MinimizeStyle(key,Class) \ + pkg_lists->minimize_styles[#key] = PACKAGE; +#include "packages_minimize.h" +#undef MinimizeStyle +#undef MINIMIZE_CLASS +#define PAIR_CLASS +#define PairStyle(key,Class) \ + pkg_lists->pair_styles[#key] = PACKAGE; +#include "packages_pair.h" +#undef PairStyle +#undef PAIR_CLASS +#define READER_CLASS +#define ReaderStyle(key,Class) \ + pkg_lists->reader_styles[#key] = PACKAGE; +#include "packages_reader.h" +#undef ReaderStyle +#undef READER_CLASS +#define REGION_CLASS +#define RegionStyle(key,Class) \ + pkg_lists->region_styles[#key] = PACKAGE; +#include "packages_region.h" +#undef RegionStyle +#undef REGION_CLASS +} + +bool LAMMPS::is_installed_pkg(const char *pkg) +{ + for (int i=0; installed_packages[i] != NULL; ++i) + if (strcmp(installed_packages[i],pkg) == 0) return true; + + return false; +} + +#define check_for_match(style,list,name) \ + if (strcmp(list,#style) == 0) { \ + std::map &styles(pkg_lists-> style ## _styles); \ + if (styles.find(name) != styles.end()) { \ + return styles[name].c_str(); \ + } \ + } + +const char *LAMMPS::match_style(const char *style, const char *name) +{ + check_for_match(angle,style,name); + check_for_match(atom,style,name); + check_for_match(body,style,name); + check_for_match(bond,style,name); + check_for_match(command,style,name); + check_for_match(compute,style,name); + check_for_match(dump,style,name); + check_for_match(fix,style,name); + check_for_match(compute,style,name); + check_for_match(improper,style,name); + check_for_match(integrate,style,name); + check_for_match(kspace,style,name); + check_for_match(minimize,style,name); + check_for_match(pair,style,name); + check_for_match(reader,style,name); + check_for_match(region,style,name); + return NULL; +} + /* ---------------------------------------------------------------------- help message for command line options and styles present in executable ------------------------------------------------------------------------- */ diff --git a/src/lammps.h b/src/lammps.h index 2e052e5ed2..e02d0c764a 100644 --- a/src/lammps.h +++ b/src/lammps.h @@ -63,7 +63,9 @@ class LAMMPS { class CiteMe *citeme; // citation info + const char *match_style(const char *style, const char *name); static const char * installed_packages[]; + static bool is_installed_pkg(const char *pkg); static const bool has_git_info; static const char git_commit[]; @@ -79,6 +81,8 @@ class LAMMPS { void print_config(FILE *); // print compile time settings private: + struct package_styles_lists *pkg_lists; + void init_pkg_lists(); void help(); LAMMPS() {}; // prohibit using the default constructor LAMMPS(const LAMMPS &) {}; // prohibit using the copy constructor diff --git a/src/utils.cpp b/src/utils.cpp index c3c173a73f..42140db0ba 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -11,8 +11,10 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +#include #include #include "utils.h" +#include "lammps.h" #include "error.h" /*! \file utils.cpp */ @@ -123,6 +125,24 @@ void utils::sfgets(const char *srcname, int srcline, char *s, int size, /* ------------------------------------------------------------------ */ +std::string utils::check_packages_for_style(std::string style, + std::string name, LAMMPS *lmp) +{ + std::string errmsg = "Unrecognized " + style + " style " + name; + const char *pkg = lmp->match_style(style.c_str(),name.c_str()); + + if (pkg) { + errmsg += " is part of the " + std::string(pkg) + " package"; + if (lmp->is_installed_pkg(pkg)) + errmsg += ", but seems to be missing because of a dependency"; + else + errmsg += " which is not enabled in this LAMMPS binary."; + } + return errmsg; +} + +/* ------------------------------------------------------------------ */ + extern "C" { /* Typedef'd pointer to get abstract datatype. */ typedef struct regex_t *re_t; diff --git a/src/utils.h b/src/utils.h index 2596fcd774..7dfba8ead0 100644 --- a/src/utils.h +++ b/src/utils.h @@ -23,6 +23,7 @@ namespace LAMMPS_NS { // forward declarations class Error; + class LAMMPS; namespace utils { @@ -66,6 +67,15 @@ namespace LAMMPS_NS { */ void sfgets(const char *srcname, int srcline, char *s, int size, FILE *fp, const char *filename, Error *error); + + /** \brief Report if a requested style is in a package or may have a typo + * + * \param style type of style that is to be checked for + * \param name name of style that was not found + * \param lmp pointer to top-level LAMMPS class instance + * \return string usable for error messages + */ + std::string check_packages_for_style(std::string style, std::string name, LAMMPS *lmp); } } From d640c712f8df0b8718e894b4f141ae8122ff63ea Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 7 Apr 2019 20:55:39 -0400 Subject: [PATCH 049/311] apply new utility function to most places creating new styles --- src/atom.cpp | 3 ++- src/atom_vec_body.cpp | 3 ++- src/domain.cpp | 8 +++++--- src/force.cpp | 24 ++++++------------------ src/modify.cpp | 14 ++++---------- src/output.cpp | 4 ++-- src/read_dump.cpp | 3 ++- src/utils.cpp | 2 +- src/write_dump.cpp | 3 ++- 9 files changed, 26 insertions(+), 38 deletions(-) diff --git a/src/atom.cpp b/src/atom.cpp index 34ea253751..dfea9348c9 100644 --- a/src/atom.cpp +++ b/src/atom.cpp @@ -39,6 +39,7 @@ #include "math_const.h" #include "memory.h" #include "error.h" +#include "utils.h" #ifdef LMP_USER_INTEL #include "neigh_request.h" @@ -509,7 +510,7 @@ AtomVec *Atom::new_avec(const char *style, int trysuffix, int &sflag) return avec_creator(lmp); } - error->all(FLERR,"Unknown atom style"); + error->all(FLERR,utils::check_packages_for_style("atom",style,lmp).c_str()); return NULL; } diff --git a/src/atom_vec_body.cpp b/src/atom_vec_body.cpp index 893a4c7dc4..d5f286c077 100644 --- a/src/atom_vec_body.cpp +++ b/src/atom_vec_body.cpp @@ -25,6 +25,7 @@ #include "fix.h" #include "memory.h" #include "error.h" +#include "utils.h" using namespace LAMMPS_NS; @@ -96,7 +97,7 @@ void AtomVecBody::process_args(int narg, char **arg) #undef BodyStyle #undef BODY_CLASS - else error->all(FLERR,"Unknown body style"); + else error->all(FLERR,utils::check_packages_for_style("body",arg[0],lmp).c_str()); bptr->avec = this; icp = bptr->icp; diff --git a/src/domain.cpp b/src/domain.cpp index 86c4eb2c02..8c3ec97946 100644 --- a/src/domain.cpp +++ b/src/domain.cpp @@ -40,6 +40,7 @@ #include "math_const.h" #include "memory.h" #include "error.h" +#include "utils.h" using namespace LAMMPS_NS; using namespace MathConst; @@ -1714,6 +1715,9 @@ void Domain::add_region(int narg, char **arg) return; } + if (strcmp(arg[1],"none") == 0) + error->all(FLERR,"Unrecognized region style 'none'"); + if (find_region(arg[0]) >= 0) error->all(FLERR,"Reuse of region ID"); // extend Region list if necessary @@ -1752,12 +1756,10 @@ void Domain::add_region(int narg, char **arg) } } - if (strcmp(arg[1],"none") == 0) error->all(FLERR,"Unknown region style"); if (region_map->find(arg[1]) != region_map->end()) { RegionCreator region_creator = (*region_map)[arg[1]]; regions[nregion] = region_creator(lmp, narg, arg); - } - else error->all(FLERR,"Unknown region style"); + } else error->all(FLERR,utils::check_packages_for_style("region",arg[1],lmp).c_str()); // initialize any region variables via init() // in case region is used between runs, e.g. to print a variable diff --git a/src/force.cpp b/src/force.cpp index 7ff5096ee4..2691cb3fd8 100644 --- a/src/force.cpp +++ b/src/force.cpp @@ -258,9 +258,7 @@ Pair *Force::new_pair(const char *style, int trysuffix, int &sflag) return pair_creator(lmp); } - char str[128]; - sprintf(str,"Unknown pair style %s",style); - error->all(FLERR,str); + error->all(FLERR,utils::check_packages_for_style("pair",style,lmp).c_str()); return NULL; } @@ -373,9 +371,7 @@ Bond *Force::new_bond(const char *style, int trysuffix, int &sflag) return bond_creator(lmp); } - char str[128]; - sprintf(str,"Unknown bond style %s",style); - error->all(FLERR,str); + error->all(FLERR,utils::check_packages_for_style("bond",style,lmp).c_str()); return NULL; } @@ -454,9 +450,7 @@ Angle *Force::new_angle(const char *style, int trysuffix, int &sflag) return angle_creator(lmp); } - char str[128]; - sprintf(str,"Unknown angle style %s",style); - error->all(FLERR,str); + error->all(FLERR,utils::check_packages_for_style("angle",style,lmp).c_str()); return NULL; } @@ -536,9 +530,7 @@ Dihedral *Force::new_dihedral(const char *style, int trysuffix, int &sflag) return dihedral_creator(lmp); } - char str[128]; - sprintf(str,"Unknown dihedral style %s",style); - error->all(FLERR,str); + error->all(FLERR,utils::check_packages_for_style("dihedral",style,lmp).c_str()); return NULL; } @@ -617,9 +609,7 @@ Improper *Force::new_improper(const char *style, int trysuffix, int &sflag) return improper_creator(lmp); } - char str[128]; - sprintf(str,"Unknown improper style %s",style); - error->all(FLERR,str); + error->all(FLERR,utils::check_packages_for_style("improper",style,lmp).c_str()); return NULL; } @@ -702,9 +692,7 @@ KSpace *Force::new_kspace(const char *style, int trysuffix, int &sflag) return kspace_creator(lmp); } - char str[128]; - sprintf(str,"Unknown kspace style %s",style); - error->all(FLERR,str); + error->all(FLERR,utils::check_packages_for_style("kspace",style,lmp).c_str()); return NULL; } diff --git a/src/modify.cpp b/src/modify.cpp index 7f43f035d2..69cdb424b2 100644 --- a/src/modify.cpp +++ b/src/modify.cpp @@ -893,11 +893,8 @@ void Modify::add_fix(int narg, char **arg, int trysuffix) fix[ifix] = fix_creator(lmp,narg,arg); } - if (fix[ifix] == NULL) { - char str[128]; - snprintf(str,128,"Unknown fix style %s",arg[2]); - error->all(FLERR,str); - } + if (fix[ifix] == NULL) + error->all(FLERR,utils::check_packages_for_style("fix",arg[2],lmp).c_str()); // check if Fix is in restart_global list // if yes, pass state info to the Fix so it can reset itself @@ -1195,11 +1192,8 @@ void Modify::add_compute(int narg, char **arg, int trysuffix) compute[ncompute] = compute_creator(lmp,narg,arg); } - if (compute[ncompute] == NULL) { - char str[128]; - snprintf(str,128,"Unknown compute style %s",arg[2]); - error->all(FLERR,str); - } + if (compute[ncompute] == NULL) + error->all(FLERR,utils::check_packages_for_style("compute",arg[2],lmp).c_str()); ncompute++; } diff --git a/src/output.cpp b/src/output.cpp index 884647f478..2dcf18e7eb 100644 --- a/src/output.cpp +++ b/src/output.cpp @@ -32,6 +32,7 @@ #include "write_restart.h" #include "memory.h" #include "error.h" +#include "utils.h" using namespace LAMMPS_NS; @@ -585,8 +586,7 @@ void Output::add_dump(int narg, char **arg) if (dump_map->find(arg[2]) != dump_map->end()) { DumpCreator dump_creator = (*dump_map)[arg[2]]; dump[ndump] = dump_creator(lmp, narg, arg); - } - else error->all(FLERR,"Unknown dump style"); + } else error->all(FLERR,utils::check_packages_for_style("dump",arg[2],lmp).c_str()); every_dump[ndump] = force->inumeric(FLERR,arg[3]); if (every_dump[ndump] <= 0) error->all(FLERR,"Illegal dump command"); diff --git a/src/read_dump.cpp b/src/read_dump.cpp index 7a05f4b1b5..395f4c8edd 100644 --- a/src/read_dump.cpp +++ b/src/read_dump.cpp @@ -40,6 +40,7 @@ #include "variable.h" #include "error.h" #include "memory.h" +#include "utils.h" using namespace LAMMPS_NS; @@ -266,7 +267,7 @@ void ReadDump::setup_reader(int narg, char **arg) // unrecognized style - else error->all(FLERR,"Unknown dump reader style"); + else error->all(FLERR,utils::check_packages_for_style("reader",readerstyle,lmp).c_str()); // pass any arguments to readers diff --git a/src/utils.cpp b/src/utils.cpp index 42140db0ba..8468b22d8c 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -128,7 +128,7 @@ void utils::sfgets(const char *srcname, int srcline, char *s, int size, std::string utils::check_packages_for_style(std::string style, std::string name, LAMMPS *lmp) { - std::string errmsg = "Unrecognized " + style + " style " + name; + std::string errmsg = "Unrecognized " + style + " style '" + name + "'"; const char *pkg = lmp->match_style(style.c_str(),name.c_str()); if (pkg) { diff --git a/src/write_dump.cpp b/src/write_dump.cpp index 6c7375012e..072680a8a5 100644 --- a/src/write_dump.cpp +++ b/src/write_dump.cpp @@ -26,6 +26,7 @@ #include "input.h" #include "update.h" #include "error.h" +#include "utils.h" using namespace LAMMPS_NS; @@ -64,7 +65,7 @@ void WriteDump::command(int narg, char **arg) #include "style_dump.h" #undef DUMP_CLASS - else error->all(FLERR,"Unknown dump style"); + else error->all(FLERR,utils::check_packages_for_style("dump",arg[1],lmp).c_str()); if (modindex < narg) dump->modify_params(narg-modindex-1,&arg[modindex+1]); From 6ee002d6cf8fe2687ccac2bea05846360273f3ef Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 7 Apr 2019 22:32:31 -0400 Subject: [PATCH 050/311] add cmake support for enhanced missing style error reports --- cmake/CMakeLists.txt | 36 ++++++------ cmake/Modules/StyleHeaderUtils.cmake | 85 ++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+), 18 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index b9a93a110e..b2a99a2306 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -87,6 +87,7 @@ string(TOUPPER "${CMAKE_BUILD_TYPE}" BTYPE) # this is fast, so check for it all the time message(STATUS "Running check for auto-generated files from make-based build system") file(GLOB SRC_AUTOGEN_FILES ${LAMMPS_SOURCE_DIR}/style_*.h) +file(GLOB SRC_AUTOGEN_FILES ${LAMMPS_SOURCE_DIR}/packages_*.h) list(APPEND SRC_AUTOGEN_FILES ${LAMMPS_SOURCE_DIR}/lmpinstalledpkgs.h ${LAMMPS_SOURCE_DIR}/lmpgitversion.h) foreach(_SRC ${SRC_AUTOGEN_FILES}) get_filename_component(FILENAME "${_SRC}" NAME) @@ -172,21 +173,17 @@ set(LAMMPS_LINK_LIBS) set(LAMMPS_DEPS) set(LAMMPS_API_DEFINES) -set(DEFAULT_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS DIPOLE GRANULAR - KSPACE MANYBODY MC MESSAGE MISC MOLECULE PERI REPLICA RIGID SHOCK - SPIN SNAP SRD KIM PYTHON MSCG MPIIO VORONOI POEMS LATTE USER-ATC USER-AWPMD - USER-BOCS USER-CGDNA USER-MESO USER-CGSDK USER-COLVARS USER-DIFFRACTION - USER-DPD USER-DRUDE USER-EFF USER-FEP USER-H5MD USER-LB USER-MANIFOLD - USER-MEAMC USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE USER-NETCDF - USER-PHONON USER-PLUMED USER-PTM USER-QTB USER-REAXC USER-SCAFACOS - USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF USER-VTK - USER-QUIP USER-QMMM USER-YAFF USER-ADIOS) +set(DEFAULT_PACKAGES ASPHERE BODY CLASS2 COLLOID COMPRESS CORESHELL DIPOLE + GRANULAR KSPACE LATTE MANYBODY MC MESSAGE MISC MOLECULE PERI POEMS QEQ + REPLICA RIGID SHOCK SPIN SNAP SRD KIM PYTHON MSCG MPIIO VORONOI + USER-ATC USER-AWPMD USER-BOCS USER-CGDNA USER-MESO USER-CGSDK USER-COLVARS + USER-DIFFRACTION USER-DPD USER-DRUDE USER-EFF USER-FEP USER-H5MD USER-LB + USER-MANIFOLD USER-MEAMC USER-MGPT USER-MISC USER-MOFFF USER-MOLFILE + USER-NETCDF USER-PHONON USER-PLUMED USER-PTM USER-QTB USER-REAXC + USER-SCAFACOS USER-SDPD USER-SMD USER-SMTBQ USER-SPH USER-TALLY USER-UEF + USER-VTK USER-QUIP USER-QMMM USER-YAFF USER-ADIOS) set(ACCEL_PACKAGES USER-OMP KOKKOS OPT USER-INTEL GPU) -set(OTHER_PACKAGES CORESHELL QEQ) -foreach(PKG ${DEFAULT_PACKAGES}) - option(PKG_${PKG} "Build ${PKG} Package" OFF) -endforeach() -foreach(PKG ${ACCEL_PACKAGES} ${OTHER_PACKAGES}) +foreach(PKG ${DEFAULT_PACKAGES} ${ACCEL_PACKAGES}) option(PKG_${PKG} "Build ${PKG} Package" OFF) endforeach() @@ -213,7 +210,6 @@ if(PKG_USER-ADIOS) list(APPEND LAMMPS_LINK_LIBS adios2::adios2) endif() - # do MPI detection after language activation, if MPI for these language is required find_package(MPI QUIET) option(BUILD_MPI "Build MPI version" ${MPI_FOUND}) @@ -233,7 +229,6 @@ else() list(APPEND LAMMPS_LINK_LIBS mpi_stubs) endif() - set(LAMMPS_SIZES "smallbig" CACHE STRING "LAMMPS integer sizes (smallsmall: all 32-bit, smallbig: 64-bit #atoms #timesteps, bigbig: also 64-bit imageint, 64-bit atom ids)") set(LAMMPS_SIZES_VALUES smallbig bigbig smallsmall) set_property(CACHE LAMMPS_SIZES PROPERTY STRINGS ${LAMMPS_SIZES_VALUES}) @@ -844,6 +839,8 @@ foreach(PKG ${DEFAULT_PACKAGES}) list(APPEND LIB_SOURCES ${${PKG}_SOURCES}) include_directories(${${PKG}_SOURCES_DIR}) endif() + + RegisterPackages(${${PKG}_SOURCES_DIR}) endforeach() # packages that need defines set @@ -862,6 +859,8 @@ foreach(PKG ${ACCEL_PACKAGES}) # check for package files in src directory due to old make system DetectBuildSystemConflict(${LAMMPS_SOURCE_DIR} ${${PKG}_SOURCES} ${${PKG}_HEADERS}) + + RegisterPackages(${${PKG}_SOURCES_DIR}) endforeach() ############################################## @@ -1370,6 +1369,7 @@ endif() set(LAMMPS_STYLE_HEADERS_DIR ${CMAKE_CURRENT_BINARY_DIR}/styles) GenerateStyleHeaders(${LAMMPS_STYLE_HEADERS_DIR}) +GeneratePackagesHeaders(${LAMMPS_STYLE_HEADERS_DIR}) include_directories(${LAMMPS_STYLE_HEADERS_DIR}) @@ -1378,7 +1378,7 @@ include_directories(${LAMMPS_STYLE_HEADERS_DIR}) ###################################### set(temp "#ifndef LMP_INSTALLED_PKGS_H\n#define LMP_INSTALLED_PKGS_H\n") set(temp "${temp}const char * LAMMPS_NS::LAMMPS::installed_packages[] = {\n") -set(temp_PKG_LIST ${DEFAULT_PACKAGES} ${ACCEL_PACKAGES} ${OTHER_PACKAGES}) +set(temp_PKG_LIST ${DEFAULT_PACKAGES} ${ACCEL_PACKAGES}) list(SORT temp_PKG_LIST) foreach(PKG ${temp_PKG_LIST}) if(PKG_${PKG}) @@ -1598,7 +1598,7 @@ endif() ############################################################################### # Print package summary ############################################################################### -foreach(PKG ${DEFAULT_PACKAGES} ${ACCEL_PACKAGES} ${OTHER_PACKAGES}) +foreach(PKG ${DEFAULT_PACKAGES} ${ACCEL_PACKAGES}) if(PKG_${PKG}) message(STATUS "Building package: ${PKG}") endif() diff --git a/cmake/Modules/StyleHeaderUtils.cmake b/cmake/Modules/StyleHeaderUtils.cmake index ebaa5dae8e..04883d0292 100644 --- a/cmake/Modules/StyleHeaderUtils.cmake +++ b/cmake/Modules/StyleHeaderUtils.cmake @@ -181,3 +181,88 @@ function(DetectBuildSystemConflict lammps_src_dir) endforeach() endif() endfunction(DetectBuildSystemConflict) + + +function(FindPackagesHeaders path style_class file_pattern headers) + file(GLOB files "${path}/${file_pattern}*.h") + get_property(plist GLOBAL PROPERTY ${headers}) + + foreach(file_name ${files}) + file(STRINGS ${file_name} is_style LIMIT_COUNT 1 REGEX ${style_class}) + if(is_style) + list(APPEND plist ${file_name}) + endif() + endforeach() + set_property(GLOBAL PROPERTY ${headers} "${plist}") +endfunction(FindPackagesHeaders) + +function(RegisterPackages search_path) + FindPackagesHeaders(${search_path} ANGLE_CLASS angle_ PKGANGLE ) # angle ) # force + FindPackagesHeaders(${search_path} ATOM_CLASS atom_vec_ PKGATOM_VEC ) # atom ) # atom atom_vec_hybrid + FindPackagesHeaders(${search_path} BODY_CLASS body_ PKGBODY ) # body ) # atom_vec_body + FindPackagesHeaders(${search_path} BOND_CLASS bond_ PKGBOND ) # bond ) # force + FindPackagesHeaders(${search_path} COMMAND_CLASS "[^.]" PKGCOMMAND ) # command ) # input + FindPackagesHeaders(${search_path} COMPUTE_CLASS compute_ PKGCOMPUTE ) # compute ) # modify + FindPackagesHeaders(${search_path} DIHEDRAL_CLASS dihedral_ PKGDIHEDRAL ) # dihedral ) # force + FindPackagesHeaders(${search_path} DUMP_CLASS dump_ PKGDUMP ) # dump ) # output write_dump + FindPackagesHeaders(${search_path} FIX_CLASS fix_ PKGFIX ) # fix ) # modify + FindPackagesHeaders(${search_path} IMPROPER_CLASS improper_ PKGIMPROPER ) # improper ) # force + FindPackagesHeaders(${search_path} INTEGRATE_CLASS "[^.]" PKGINTEGRATE ) # integrate ) # update + FindPackagesHeaders(${search_path} KSPACE_CLASS "[^.]" PKGKSPACE ) # kspace ) # force + FindPackagesHeaders(${search_path} MINIMIZE_CLASS min_ PKGMINIMIZE ) # minimize ) # update + FindPackagesHeaders(${search_path} NBIN_CLASS nbin_ PKGNBIN ) # nbin ) # neighbor + FindPackagesHeaders(${search_path} NPAIR_CLASS npair_ PKGNPAIR ) # npair ) # neighbor + FindPackagesHeaders(${search_path} NSTENCIL_CLASS nstencil_ PKGNSTENCIL ) # nstencil ) # neighbor + FindPackagesHeaders(${search_path} NTOPO_CLASS ntopo_ PKGNTOPO ) # ntopo ) # neighbor + FindPackagesHeaders(${search_path} PAIR_CLASS pair_ PKGPAIR ) # pair ) # force + FindPackagesHeaders(${search_path} READER_CLASS reader_ PKGREADER ) # reader ) # read_dump + FindPackagesHeaders(${search_path} REGION_CLASS region_ PKGREGION ) # region ) # domain +endfunction(RegisterPackages) + +function(CreatePackagesHeader path filename) + set(temp "") + if(ARGC GREATER 2) + list(REMOVE_AT ARGV 0 1) + foreach(FNAME ${ARGV}) + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${FNAME}") + get_filename_component(DNAME ${FNAME} DIRECTORY) + get_filename_component(DNAME ${DNAME} NAME) + get_filename_component(FNAME ${FNAME} NAME) + set(temp "${temp}#undef PACKAGE\n#define PACKAGE \"${DNAME}\"\n") + set(temp "${temp}#include \"${DNAME}/${FNAME}\"\n") + endforeach() + endif() + message(STATUS "Generating ${filename}...") + file(WRITE "${path}/${filename}.tmp" "${temp}" ) + execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${path}/${filename}.tmp" "${path}/${filename}") + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${path}/${filename}") +endfunction(CreatePackagesHeader) + +function(GeneratePackagesHeader path property style) + get_property(files GLOBAL PROPERTY ${property}) + CreatePackagesHeader("${path}" "packages_${style}.h" ${files}) +endfunction(GeneratePackagesHeader) + +function(GeneratePackagesHeaders output_path) + GeneratePackagesHeader(${output_path} PKGANGLE angle ) # force + GeneratePackagesHeader(${output_path} PKGATOM_VEC atom ) # atom atom_vec_hybrid + GeneratePackagesHeader(${output_path} PKGBODY body ) # atom_vec_body + GeneratePackagesHeader(${output_path} PKGBOND bond ) # force + GeneratePackagesHeader(${output_path} PKGCOMMAND command ) # input + GeneratePackagesHeader(${output_path} PKGCOMPUTE compute ) # modify + GeneratePackagesHeader(${output_path} PKGDIHEDRAL dihedral ) # force + GeneratePackagesHeader(${output_path} PKGDUMP dump ) # output write_dump + GeneratePackagesHeader(${output_path} PKGFIX fix ) # modify + GeneratePackagesHeader(${output_path} PKGIMPROPER improper ) # force + GeneratePackagesHeader(${output_path} PKGINTEGRATE integrate ) # update + GeneratePackagesHeader(${output_path} PKGKSPACE kspace ) # force + GeneratePackagesHeader(${output_path} PKGMINIMIZE minimize ) # update + GeneratePackagesHeader(${output_path} PKGNBIN nbin ) # neighbor + GeneratePackagesHeader(${output_path} PKGNPAIR npair ) # neighbor + GeneratePackagesHeader(${output_path} PKGNSTENCIL nstencil ) # neighbor + GeneratePackagesHeader(${output_path} PKGNTOPO ntopo ) # neighbor + GeneratePackagesHeader(${output_path} PKGPAIR pair ) # force + GeneratePackagesHeader(${output_path} PKGREADER reader ) # read_dump + GeneratePackagesHeader(${output_path} PKGREGION region ) # domain +endfunction(GeneratePackagesHeaders) + From dc40886d23ff7b3abe3ac1ed73f1805d660e9ef5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 8 Apr 2019 06:40:39 -0400 Subject: [PATCH 051/311] improve comments and formatting --- cmake/CMakeLists.txt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index b2a99a2306..57978bb020 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -200,7 +200,6 @@ endif() include_directories(${LAMMPS_SOURCE_DIR}) - if(PKG_USER-ADIOS) # The search for ADIOS2 must come before MPI because # it includes its own MPI search with the latest FindMPI.cmake @@ -436,7 +435,6 @@ else() set(CUDA_REQUEST_PIC) endif() - if(PKG_VORONOI) option(DOWNLOAD_VORO "Download and compile the Voro++ library instead of using an already installed one" OFF) if(DOWNLOAD_VORO) @@ -909,7 +907,6 @@ if(PKG_USER-H5MD) include_directories(${HDF5_INCLUDE_DIRS}) endif() - ###################################################################### # packages which selectively include variants based on enabled styles # e.g. accelerator packages @@ -1365,6 +1362,7 @@ endif() ###################################################### # Generate style headers based on global list of # styles registered during package selection +# Generate packages headers from all packages ###################################################### set(LAMMPS_STYLE_HEADERS_DIR ${CMAKE_CURRENT_BINARY_DIR}/styles) @@ -1448,7 +1446,6 @@ if(BUILD_EXE) endif() endif() - ############################################################################### # Build documentation ############################################################################### From f2113ab04a9df11c71f0d5d7f306e8db15b50e0c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 8 Apr 2019 07:16:22 -0400 Subject: [PATCH 052/311] update manual and headers for updated error message --- doc/src/Errors_messages.txt | 33 +++++++++++++++++++-------------- src/atom.h | 2 +- src/atom_vec_body.h | 2 +- src/domain.h | 2 +- src/force.h | 27 ++++++++++++++------------- src/modify.h | 8 ++++---- src/output.h | 2 +- src/read_dump.h | 2 +- src/write_dump.h | 2 +- 9 files changed, 43 insertions(+), 37 deletions(-) diff --git a/doc/src/Errors_messages.txt b/doc/src/Errors_messages.txt index fb5003e602..4504cbeb11 100644 --- a/doc/src/Errors_messages.txt +++ b/doc/src/Errors_messages.txt @@ -7448,6 +7448,11 @@ The Atoms section of a data file must come before a Triangles section. :dd The Atoms section of a data file must come before a Velocities section. :dd +{Must re-specify non-restarted pair style (xxx) after read_restart} :dt + +For pair styles, that do not store their settings in a restart file, +it must be defined with a new 'pair_style' command after read_restart. :dd + {Must set both respa inner and outer} :dt Cannot use just the inner or outer option with respa without using the @@ -10049,19 +10054,19 @@ create_box command. :dd A universe or uloop style variable must specify a number of values >= to the number of processor partitions. :dd -{Unknown angle style} :dt +{Unrecognized angle style} :dt The choice of angle style is unknown. :dd -{Unknown atom style} :dt +{Unrecognized atom style} :dt The choice of atom style is unknown. :dd -{Unknown body style} :dt +{Unrecognized body style} :dt The choice of body style is unknown. :dd -{Unknown bond style} :dt +{Unrecognized bond style} :dt The choice of bond style is unknown. :dd @@ -10077,23 +10082,23 @@ Self-explanatory. :dd Self-explanatory. :dd -{Unknown command: %s} :dt +{Unrecognized command: %s} :dt The command is not known to LAMMPS. Check the input script. :dd -{Unknown compute style} :dt +{Unrecognized compute style} :dt The choice of compute style is unknown. :dd -{Unknown dihedral style} :dt +{Unrecognized dihedral style} :dt The choice of dihedral style is unknown. :dd -{Unknown dump reader style} :dt +{Unrecognized dump reader style} :dt The choice of dump reader style via the format keyword is unknown. :dd -{Unknown dump style} :dt +{Unrecognized dump style} :dt The choice of dump style is unknown. :dd @@ -10101,7 +10106,7 @@ The choice of dump style is unknown. :dd Self-explanatory. :dd -{Unknown fix style} :dt +{Unrecognized fix style} :dt The choice of fix style is unknown. :dd @@ -10109,7 +10114,7 @@ The choice of fix style is unknown. :dd A section of the data file cannot be read by LAMMPS. :dd -{Unknown improper style} :dt +{Unrecognized improper style} :dt The choice of improper style is unknown. :dd @@ -10117,7 +10122,7 @@ The choice of improper style is unknown. :dd One or more specified keywords are not recognized. :dd -{Unknown kspace style} :dt +{Unrecognized kspace style} :dt The choice of kspace style is unknown. :dd @@ -10133,7 +10138,7 @@ Self-explanatory. :dd Self-explanatory. :dd -{Unknown pair style} :dt +{Unrecognized pair style} :dt The choice of pair style is unknown. :dd @@ -10141,7 +10146,7 @@ The choice of pair style is unknown. :dd The choice of sub-style is unknown. :dd -{Unknown region style} :dt +{Unrecognized region style} :dt The choice of region style is unknown. :dd diff --git a/src/atom.h b/src/atom.h index b2a657cf1a..ff7bd0c538 100644 --- a/src/atom.h +++ b/src/atom.h @@ -361,7 +361,7 @@ E: Atom IDs must be used for molecular systems Atom IDs are used to identify and find partner atoms in bonds. -E: Unknown atom style +E: Unrecognized atom style The choice of atom style is unknown. diff --git a/src/atom_vec_body.h b/src/atom_vec_body.h index 7cc052b6c5..4d02c4b3e0 100644 --- a/src/atom_vec_body.h +++ b/src/atom_vec_body.h @@ -130,7 +130,7 @@ E: Invalid atom_style body command No body style argument was provided. -E: Unknown body style +E: Unrecognized body style The choice of body style is unknown. diff --git a/src/domain.h b/src/domain.h index 9ebdd6ae94..e131d07a1b 100644 --- a/src/domain.h +++ b/src/domain.h @@ -269,7 +269,7 @@ E: Reuse of region ID A region ID cannot be used twice. -E: Unknown region style +E: Unrecognized region style The choice of region style is unknown. diff --git a/src/force.h b/src/force.h index e4bb0f990e..2b4298d049 100644 --- a/src/force.h +++ b/src/force.h @@ -159,35 +159,36 @@ class Force : protected Pointers { E: Must re-specify non-restarted pair style (%s) after read_restart -UNDOCUMENTED +For pair styles, that do not store their settings in a restart file, +it must be defined with a new 'pair_style' command after read_restart. -E: Unknown pair style %s +E: Unrecognized pair style %s -UNDOCUMENTED +The choice of pair style is unknown. -E: Unknown bond style %s +E: Unrecognized bond style %s -UNDOCUMENTED +The choice of bond style is unknown. -E: Unknown angle style %s +E: Unrecognized angle style %s -UNDOCUMENTED +The choice of angle style is unknown. -E: Unknown dihedral style %s +E: Unrecognized dihedral style %s -UNDOCUMENTED +The choice of dihedral style is unknown. -E: Unknown improper style %s +E: Unrecognized improper style %s -UNDOCUMENTED +The choice of improper style is unknown. E: Cannot yet use KSpace solver with grid with comm style tiled This is current restriction in LAMMPS. -E: Unknown kspace style %s +E: Unrecognized kspace style %s -UNDOCUMENTED +The choice of kspace style is unknown. E: Illegal ... command diff --git a/src/modify.h b/src/modify.h index eca4e07859..537ff81543 100644 --- a/src/modify.h +++ b/src/modify.h @@ -224,9 +224,9 @@ The ID and style of a fix match for a fix you are changing with a fix command, but the new group you are specifying does not match the old group. -E: Unknown fix style %s +E: Unrecognized fix style %s -UNDOCUMENTED +The choice of fix style is unknown. E: Could not find fix_modify ID @@ -240,9 +240,9 @@ E: Reuse of compute ID A compute ID cannot be used twice. -E: Unknown compute style %s +E: Unrecognized compute style %s -UNDOCUMENTED +The choice of compute style is unknown. E: Could not find compute_modify ID diff --git a/src/output.h b/src/output.h index 5354759343..1bf4128ee0 100644 --- a/src/output.h +++ b/src/output.h @@ -152,7 +152,7 @@ E: Invalid dump frequency Dump frequency must be 1 or greater. -E: Unknown dump style +E: Unrecognized dump style The choice of dump style is unknown. diff --git a/src/read_dump.h b/src/read_dump.h index de174c3df6..3ee13f779c 100644 --- a/src/read_dump.h +++ b/src/read_dump.h @@ -134,7 +134,7 @@ E: Dump file does not contain requested snapshot Self-explanatory. -E: Unknown dump reader style +E: Unrecognized dump reader style The choice of dump reader style via the format keyword is unknown. diff --git a/src/write_dump.h b/src/write_dump.h index 18fff6345b..db39a75d4b 100644 --- a/src/write_dump.h +++ b/src/write_dump.h @@ -43,7 +43,7 @@ Self-explanatory. Check the input script syntax and compare to the documentation for the command. You can use -echo screen as a command-line option when running LAMMPS to see the offending line. -E: Unknown dump style +E: Unrecognized dump style The choice of dump style is unknown. From 77d80c84c9d98320adf024b7ed0824be755f58c4 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Mon, 8 Apr 2019 12:37:49 -0600 Subject: [PATCH 053/311] Change defaults for KOKKOS package --- src/KOKKOS/kokkos.cpp | 41 +++++++++++++++++++++-------------------- src/KOKKOS/kokkos.h | 2 ++ 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/KOKKOS/kokkos.cpp b/src/KOKKOS/kokkos.cpp index 295fddc6e7..d6a67188bb 100644 --- a/src/KOKKOS/kokkos.cpp +++ b/src/KOKKOS/kokkos.cpp @@ -182,16 +182,28 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) // default settings for package kokkos command - neighflag = FULL; - neighflag_qeq = FULL; - neighflag_qeq_set = 0; - exchange_comm_classic = 0; - forward_comm_classic = 0; - reverse_comm_classic = 0; - exchange_comm_on_host = 0; - forward_comm_on_host = 0; - reverse_comm_on_host = 0; + binsize = 0.0; gpu_direct_flag = 1; + if (ngpu > 0) { + neighflag = FULL; + neighflag_qeq = FULL; + neighflag_qeq_set = 0; + newtonflag = 0; + exchange_comm_classic = forward_comm_classic = reverse_comm_classic = 0; + exchange_comm_on_host = forward_comm_on_host = reverse_comm_on_host = 0; + } else { + if (num_threads > 1) { + neighflag = HALFTHREAD; + neighflag_qeq = HALFTHREAD; + } else { + neighflag = HALF; + neighflag_qeq = HALF; + } + neighflag_qeq_set = 0; + newtonflag = 1; + exchange_comm_classic = forward_comm_classic = reverse_comm_classic = 1; + exchange_comm_on_host = forward_comm_on_host = reverse_comm_on_host = 0; + } #if KOKKOS_USE_CUDA // only if we can safely detect, that GPU-direct is not available, change default @@ -218,17 +230,6 @@ KokkosLMP::~KokkosLMP() void KokkosLMP::accelerator(int narg, char **arg) { - // defaults - - neighflag = FULL; - neighflag_qeq = FULL; - neighflag_qeq_set = 0; - int newtonflag = 0; - double binsize = 0.0; - exchange_comm_classic = forward_comm_classic = reverse_comm_classic = 0; - exchange_comm_on_host = forward_comm_on_host = reverse_comm_on_host = 0; - gpu_direct_flag = 1; - int iarg = 0; while (iarg < narg) { if (strcmp(arg[iarg],"neigh") == 0) { diff --git a/src/KOKKOS/kokkos.h b/src/KOKKOS/kokkos.h index cd429d5c1c..74a10883f6 100644 --- a/src/KOKKOS/kokkos.h +++ b/src/KOKKOS/kokkos.h @@ -36,6 +36,8 @@ class KokkosLMP : protected Pointers { int numa; int auto_sync; int gpu_direct_flag; + int newtonflag; + double binsize; KokkosLMP(class LAMMPS *, int, char **); ~KokkosLMP(); From 2bb69773d3bf7e342ce4747281027684fad34ecf Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Mon, 8 Apr 2019 13:07:29 -0600 Subject: [PATCH 054/311] Update Kokkos docs --- doc/src/Build_extras.txt | 5 +- doc/src/Speed_kokkos.txt | 61 +++++++-------- doc/src/package.txt | 164 ++++++++++++++++++++------------------- 3 files changed, 115 insertions(+), 115 deletions(-) diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index 17d18243f2..3b9da2db39 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -247,7 +247,10 @@ Maxwell50 = NVIDIA Maxwell generation CC 5.0 Maxwell52 = NVIDIA Maxwell generation CC 5.2 Maxwell53 = NVIDIA Maxwell generation CC 5.3 Pascal60 = NVIDIA Pascal generation CC 6.0 -Pascal61 = NVIDIA Pascal generation CC 6.1 :ul +Pascal61 = NVIDIA Pascal generation CC 6.1 +Volta70 = NVIDIA Volta generation CC 7.0 +Volta72 = NVIDIA Volta generation CC 7.2 +Turing75 = NVIDIA Turing generation CC 7.5 :ul [CMake build]: diff --git a/doc/src/Speed_kokkos.txt b/doc/src/Speed_kokkos.txt index d04f8ac6f1..1750d2400f 100644 --- a/doc/src/Speed_kokkos.txt +++ b/doc/src/Speed_kokkos.txt @@ -111,16 +111,10 @@ Makefile.kokkos_mpi_only) will give better performance than the OpenMP back end (i.e. Makefile.kokkos_omp) because some of the overhead to make the code thread-safe is removed. -NOTE: The default for the "package kokkos"_package.html command is to -use "full" neighbor lists and set the Newton flag to "off" for both -pairwise and bonded interactions. However, when running on CPUs, it -will typically be faster to use "half" neighbor lists and set the -Newton flag to "on", just as is the case for non-accelerated pair -styles. It can also be faster to use non-threaded communication. Use -the "-pk kokkos" "command-line switch"_Run_options.html to change the -default "package kokkos"_package.html options. See its doc page for -details and default settings. Experimenting with its options can -provide a speed-up for specific calculations. For example: +NOTE: Use the "-pk kokkos" "command-line switch"_Run_options.html to +change the default "package kokkos"_package.html options. See its doc +page for details and default settings. Experimenting with its options +can provide a speed-up for specific calculations. For example: mpirun -np 16 lmp_kokkos_mpi_only -k on -sf kk -pk kokkos newton on neigh half comm no -in in.lj # Newton on, Half neighbor list, non-threaded comm :pre @@ -190,19 +184,18 @@ tasks/node. The "-k on t Nt" command-line switch sets the number of threads/task as Nt. The product of these two values should be N, i.e. 256 or 264. -NOTE: The default for the "package kokkos"_package.html command is to -use "full" neighbor lists and set the Newton flag to "off" for both -pairwise and bonded interactions. When running on KNL, this will -typically be best for pair-wise potentials. For many-body potentials, -using "half" neighbor lists and setting the Newton flag to "on" may be -faster. It can also be faster to use non-threaded communication. Use -the "-pk kokkos" "command-line switch"_Run_options.html to change the -default "package kokkos"_package.html options. See its doc page for -details and default settings. Experimenting with its options can -provide a speed-up for specific calculations. For example: +NOTE: The default for the "package kokkos"_package.html command when +running on KNL is to use "half" neighbor lists and set the Newton flag +to "on" for both pairwise and bonded interactions. This will typically +be best for many-body potentials. For simpler pair-wise potentials, it +may be faster to use a "full" neighbor list with Newton flag to "off". +Use the "-pk kokkos" "command-line switch"_Run_options.html to change +the default "package kokkos"_package.html options. See its doc page for +details and default settings. Experimenting with its options can provide +a speed-up for specific calculations. For example: -mpirun -np 64 lmp_kokkos_phi -k on t 4 -sf kk -pk kokkos comm no -in in.lj # Newton off, full neighbor list, non-threaded comm -mpirun -np 64 lmp_kokkos_phi -k on t 4 -sf kk -pk kokkos newton on neigh half comm no -in in.reax # Newton on, half neighbor list, non-threaded comm :pre +mpirun -np 64 lmp_kokkos_phi -k on t 4 -sf kk -pk kokkos comm host -in in.lj # Newton on, half neighbor list, threaded comm +mpirun -np 64 lmp_kokkos_phi -k on t 4 -sf kk -pk kokkos newton off neigh full comm no -in in.reax # Newton off, full neighbor list, non-threaded comm :pre NOTE: MPI tasks and threads should be bound to cores as described above for CPUs. @@ -236,18 +229,18 @@ one or more nodes, each with two GPUs: mpirun -np 2 lmp_kokkos_cuda_openmpi -k on g 2 -sf kk -in in.lj # 1 node, 2 MPI tasks/node, 2 GPUs/node mpirun -np 32 -ppn 2 lmp_kokkos_cuda_openmpi -k on g 2 -sf kk -in in.lj # 16 nodes, 2 MPI tasks/node, 2 GPUs/node (32 GPUs total) :pre -NOTE: The default for the "package kokkos"_package.html command is to -use "full" neighbor lists and set the Newton flag to "off" for both -pairwise and bonded interactions, along with threaded communication. -When running on Maxwell or Kepler GPUs, this will typically be -best. For Pascal GPUs, using "half" neighbor lists and setting the -Newton flag to "on" may be faster. For many pair styles, setting the -neighbor binsize equal to twice the CPU default value will give speedup, -which is the default when running on GPUs. -Use the "-pk kokkos" "command-line switch"_Run_options.html to change -the default "package kokkos"_package.html options. See its doc page -for details and default settings. Experimenting with its options can -provide a speed-up for specific calculations. For example: +NOTE: The default for the "package kokkos"_package.html command when +running on GPUs is to use "full" neighbor lists and set the Newton flag +to "off" for both pairwise and bonded interactions, along with threaded +communication. When running on Maxwell or Kepler GPUs, this will +typically be best. For Pascal GPUs, using "half" neighbor lists and +setting the Newton flag to "on" may be faster. For many pair styles, +setting the neighbor binsize equal to twice the CPU default value will +give speedup, which is the default when running on GPUs. Use the "-pk +kokkos" "command-line switch"_Run_options.html to change the default +"package kokkos"_package.html options. See its doc page for details and +default settings. Experimenting with its options can provide a speed-up +for specific calculations. For example: mpirun -np 2 lmp_kokkos_cuda_openmpi -k on g 2 -sf kk -pk kokkos newton on neigh half binsize 2.8 -in in.lj # Newton on, half neighbor list, set binsize = neighbor ghost cutoff :pre diff --git a/doc/src/package.txt b/doc/src/package.txt index 89cfd03f5f..94ee93a743 100644 --- a/doc/src/package.txt +++ b/doc/src/package.txt @@ -64,7 +64,7 @@ args = arguments specific to the style :l {no_affinity} values = none {kokkos} args = keyword value ... zero or more keyword/value pairs may be appended - keywords = {neigh} or {neigh/qeq} or {newton} or {binsize} or {comm} or {comm/exchange} or {comm/forward} or {comm/reverse} + keywords = {neigh} or {neigh/qeq} or {newton} or {binsize} or {comm} or {comm/exchange} or {comm/forward} or {comm/reverse} or {gpu/direct} {neigh} value = {full} or {half} full = full neighbor list half = half neighbor list built in thread-safe manner @@ -72,7 +72,7 @@ args = arguments specific to the style :l full = full neighbor list half = half neighbor list built in thread-safe manner {newton} = {off} or {on} - off = set Newton pairwise and bonded flags off (default) + off = set Newton pairwise and bonded flags off on = set Newton pairwise and bonded flags on {binsize} value = size size = bin size for neighbor list construction (distance units) @@ -422,33 +422,35 @@ processes/threads used for LAMMPS. :line -The {kokkos} style invokes settings associated with the use of the -KOKKOS package. +The {kokkos} style invokes settings associated with the use of the +KOKKOS package. -All of the settings are optional keyword/value pairs. Each has a -default value as listed below. +All of the settings are optional keyword/value pairs. Each has a default +value as listed below. -The {neigh} keyword determines how neighbor lists are built. A value -of {half} uses a thread-safe variant of half-neighbor lists, -the same as used by most pair styles in LAMMPS. +The {neigh} keyword determines how neighbor lists are built. A value of +{half} uses a thread-safe variant of half-neighbor lists, the same as +used by most pair styles in LAMMPS, which is the default when running on +CPUs (i.e. CUDA backend not enabled). -A value of {full} uses a full neighbor lists and is the default. This -performs twice as much computation as the {half} option, however that -is often a win because it is thread-safe and doesn't require atomic -operations in the calculation of pair forces. For that reason, {full} -is the default setting. However, when running in MPI-only mode with 1 -thread per MPI task, {half} neighbor lists will typically be faster, -just as it is for non-accelerated pair styles. Similarly, the {neigh/qeq} -keyword determines how neighbor lists are built for "fix qeq/reax/kk"_fix_qeq_reax.html. -If not explicitly set, the value of {neigh/qeq} will match {neigh}. +A value of {full} uses a full neighbor lists and is the default when +running on GPUs. This performs twice as much computation as the {half} +option, however that is often a win because it is thread-safe and +doesn't require atomic operations in the calculation of pair forces. For +that reason, {full} is the default setting for GPUs. However, when +running on CPUs, a {half} neighbor list is the default because it are +often faster, just as it is for non-accelerated pair styles. Similarly, +the {neigh/qeq} keyword determines how neighbor lists are built for "fix +qeq/reax/kk"_fix_qeq_reax.html. If not explicitly set, the value of +{neigh/qeq} will match {neigh}. -The {newton} keyword sets the Newton flags for pairwise and bonded -interactions to {off} or {on}, the same as the "newton"_newton.html -command allows. The default is {off} because this will almost always -give better performance for the KOKKOS package. This means more -computation is done, but less communication. However, when running in -MPI-only mode with 1 thread per MPI task, a value of {on} will -typically be faster, just as it is for non-accelerated pair styles. +The {newton} keyword sets the Newton flags for pairwise and bonded +interactions to {off} or {on}, the same as the "newton"_newton.html +command allows. The default for GPUs is {off} because this will almost +always give better performance for the KOKKOS package. This means more +computation is done, but less communication. However, when running on +CPUs a value of {on} is the deafult since it can often be faster, just +as it is for non-accelerated pair styles The {binsize} keyword sets the size of bins used to bin atoms in neighbor list builds. The same value can be set by the "neigh_modify @@ -465,58 +467,58 @@ because the GPU is faster at performing pairwise interactions, then this rule of thumb may give too large a binsize and the default should be overridden with a smaller value. -The {comm} and {comm/exchange} and {comm/forward} and {comm/reverse} keywords determine -whether the host or device performs the packing and unpacking of data -when communicating per-atom data between processors. "Exchange" -communication happens only on timesteps that neighbor lists are -rebuilt. The data is only for atoms that migrate to new processors. -"Forward" communication happens every timestep. "Reverse" communication -happens every timestep if the {newton} option is on. The data is for atom -coordinates and any other atom properties that needs to be updated for -ghost atoms owned by each processor. +The {comm} and {comm/exchange} and {comm/forward} and {comm/reverse} +keywords determine whether the host or device performs the packing and +unpacking of data when communicating per-atom data between processors. +"Exchange" communication happens only on timesteps that neighbor lists +are rebuilt. The data is only for atoms that migrate to new processors. +"Forward" communication happens every timestep. "Reverse" communication +happens every timestep if the {newton} option is on. The data is for +atom coordinates and any other atom properties that needs to be updated +for ghost atoms owned by each processor. -The {comm} keyword is simply a short-cut to set the same value -for both the {comm/exchange} and {comm/forward} and {comm/reverse} keywords. +The {comm} keyword is simply a short-cut to set the same value for both +the {comm/exchange} and {comm/forward} and {comm/reverse} keywords. -The value options for all 3 keywords are {no} or {host} or {device}. -A value of {no} means to use the standard non-KOKKOS method of -packing/unpacking data for the communication. A value of {host} means -to use the host, typically a multi-core CPU, and perform the -packing/unpacking in parallel with threads. A value of {device} -means to use the device, typically a GPU, to perform the -packing/unpacking operation. +The value options for all 3 keywords are {no} or {host} or {device}. A +value of {no} means to use the standard non-KOKKOS method of +packing/unpacking data for the communication. A value of {host} means to +use the host, typically a multi-core CPU, and perform the +packing/unpacking in parallel with threads. A value of {device} means to +use the device, typically a GPU, to perform the packing/unpacking +operation. -The optimal choice for these keywords depends on the input script and -the hardware used. The {no} value is useful for verifying that the -Kokkos-based {host} and {device} values are working correctly. -It may also be the fastest choice when using Kokkos styles in -MPI-only mode (i.e. with a thread count of 1). +The optimal choice for these keywords depends on the input script and +the hardware used. The {no} value is useful for verifying that the +Kokkos-based {host} and {device} values are working correctly. It is the +default when running on CPUs since it is usually the fastest. -When running on CPUs or Xeon Phi, the {host} and {device} values work -identically. When using GPUs, the {device} value will typically be -optimal if all of your styles used in your input script are supported -by the KOKKOS package. In this case data can stay on the GPU for many -timesteps without being moved between the host and GPU, if you use the -{device} value. This requires that your MPI is able to access GPU -memory directly. Currently that is true for OpenMPI 1.8 (or later -versions), Mvapich2 1.9 (or later), and CrayMPI. If your script uses -styles (e.g. fixes) which are not yet supported by the KOKKOS package, -then data has to be move between the host and device anyway, so it is -typically faster to let the host handle communication, by using the -{host} value. Using {host} instead of {no} will enable use of -multiple threads to pack/unpack communicated data. +When running on CPUs or Xeon Phi, the {host} and {device} values work +identically. When using GPUs, the {device} value is the default since it +will typically be optimal if all of your styles used in your input +script are supported by the KOKKOS package. In this case data can stay +on the GPU for many timesteps without being moved between the host and +GPU, if you use the {device} value. This requires that your MPI is able +to access GPU memory directly. Currently that is true for OpenMPI 1.8 +(or later versions), Mvapich2 1.9 (or later), and CrayMPI. If your +script uses styles (e.g. fixes) which are not yet supported by the +KOKKOS package, then data has to be move between the host and device +anyway, so it is typically faster to let the host handle communication, +by using the {host} value. Using {host} instead of {no} will enable use +of multiple threads to pack/unpack communicated data. -The {gpu/direct} keyword chooses whether GPU-direct will be used. When -this keyword is set to {on}, buffers in GPU memory are passed directly -through MPI send/receive calls. This reduces overhead of first copying -the data to the host CPU. However GPU-direct is not supported on all -systems, which can lead to segmentation faults and would require -using a value of {off}. If LAMMPS can safely detect that GPU-direct is -not available (currently only possible with OpenMPI v2.0.0 or later), -then the {gpu/direct} keyword is automatically set to {off} by default. -When the {gpu/direct} keyword is set to {off} while any of the {comm} -keywords are set to {device}, the value for these {comm} keywords will -be automatically changed to {host}. +The {gpu/direct} keyword chooses whether GPU-direct will be used. When +this keyword is set to {on}, buffers in GPU memory are passed directly +through MPI send/receive calls. This reduces overhead of first copying +the data to the host CPU. However GPU-direct is not supported on all +systems, which can lead to segmentation faults and would require using a +value of {off}. If LAMMPS can safely detect that GPU-direct is not +available (currently only possible with OpenMPI v2.0.0 or later), then +the {gpu/direct} keyword is automatically set to {off} by default. When +the {gpu/direct} keyword is set to {off} while any of the {comm} +keywords are set to {device}, the value for these {comm} keywords will +be automatically changed to {host}. This setting has no effect if not +running on GPUs. :line @@ -623,14 +625,16 @@ not used, you must invoke the package intel command in your input script or or via the "-pk intel" "command-line switch"_Run_options.html. -For the KOKKOS package, the option defaults neigh = full, neigh/qeq = -full, newton = off, binsize for CPUs = 0.0, binsize for GPUs = 2x LAMMPS -default value, and comm = device, gpu/direct = on. When LAMMPS can -safely detect, that GPU-direct is not available, the default value of -gpu/direct becomes "off". These settings are made automatically by the -required "-k on" "command-line switch"_Run_options.html. You can change -them by using the package kokkos command in your input script or via the -"-pk kokkos command-line switch"_Run_options.html. +For the KOKKOS package, the option defaults for GPUs are neigh = full, +neigh/qeq = full, newton = off, binsize for GPUs = 2x LAMMPS default +value, comm = device, gpu/direct = on. When LAMMPS can safely detect +that GPU-direct is not available, the default value of gpu/direct +becomes "off". For CPUs or Xeon Phis, the option defaults are neigh = +half, neigh/qeq = half, newton = on, binsize = 0.0, and comm = no. These +settings are made automatically by the required "-k on" "command-line +switch"_Run_options.html. You can change them by using the package +kokkos command in your input script or via the "-pk kokkos command-line +switch"_Run_options.html. For the OMP package, the default is Nthreads = 0 and the option defaults are neigh = yes. These settings are made automatically if From ece46dbfa57a43ebcb2f3ebea80c63977413331d Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Mon, 8 Apr 2019 13:12:21 -0600 Subject: [PATCH 055/311] Small tweak to Kokkos docs --- doc/src/Speed_kokkos.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/Speed_kokkos.txt b/doc/src/Speed_kokkos.txt index 1750d2400f..23155cd540 100644 --- a/doc/src/Speed_kokkos.txt +++ b/doc/src/Speed_kokkos.txt @@ -194,8 +194,8 @@ the default "package kokkos"_package.html options. See its doc page for details and default settings. Experimenting with its options can provide a speed-up for specific calculations. For example: -mpirun -np 64 lmp_kokkos_phi -k on t 4 -sf kk -pk kokkos comm host -in in.lj # Newton on, half neighbor list, threaded comm -mpirun -np 64 lmp_kokkos_phi -k on t 4 -sf kk -pk kokkos newton off neigh full comm no -in in.reax # Newton off, full neighbor list, non-threaded comm :pre +mpirun -np 64 lmp_kokkos_phi -k on t 4 -sf kk -pk kokkos comm host -in in.reax # Newton on, half neighbor list, threaded comm +mpirun -np 64 lmp_kokkos_phi -k on t 4 -sf kk -pk kokkos newton off neigh full comm no -in in.lj # Newton off, full neighbor list, non-threaded comm :pre NOTE: MPI tasks and threads should be bound to cores as described above for CPUs. From fbda72891c613172ddd092e7a717c23bc81a3463 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Mon, 8 Apr 2019 13:41:33 -0600 Subject: [PATCH 056/311] Fix spelling error --- doc/src/package.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/package.txt b/doc/src/package.txt index 94ee93a743..50dfb8d024 100644 --- a/doc/src/package.txt +++ b/doc/src/package.txt @@ -449,7 +449,7 @@ interactions to {off} or {on}, the same as the "newton"_newton.html command allows. The default for GPUs is {off} because this will almost always give better performance for the KOKKOS package. This means more computation is done, but less communication. However, when running on -CPUs a value of {on} is the deafult since it can often be faster, just +CPUs a value of {on} is the default since it can often be faster, just as it is for non-accelerated pair styles The {binsize} keyword sets the size of bins used to bin atoms in From 69c1a7954a3b7219eab47d9662123b1183c83e71 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 8 Apr 2019 17:14:59 -0400 Subject: [PATCH 057/311] correct test for leftovers from conventional builds --- cmake/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 57978bb020..fada17d168 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -87,8 +87,8 @@ string(TOUPPER "${CMAKE_BUILD_TYPE}" BTYPE) # this is fast, so check for it all the time message(STATUS "Running check for auto-generated files from make-based build system") file(GLOB SRC_AUTOGEN_FILES ${LAMMPS_SOURCE_DIR}/style_*.h) -file(GLOB SRC_AUTOGEN_FILES ${LAMMPS_SOURCE_DIR}/packages_*.h) -list(APPEND SRC_AUTOGEN_FILES ${LAMMPS_SOURCE_DIR}/lmpinstalledpkgs.h ${LAMMPS_SOURCE_DIR}/lmpgitversion.h) +file(GLOB SRC_AUTOGEN_PACKAGES ${LAMMPS_SOURCE_DIR}/packages_*.h) +list(APPEND SRC_AUTOGEN_FILES ${SRC_AUTOGEN_PACKAGES} ${LAMMPS_SOURCE_DIR}/lmpinstalledpkgs.h ${LAMMPS_SOURCE_DIR}/lmpgitversion.h) foreach(_SRC ${SRC_AUTOGEN_FILES}) get_filename_component(FILENAME "${_SRC}" NAME) if(EXISTS ${LAMMPS_SOURCE_DIR}/${FILENAME}) From 149a57f3aea05bc2f7473e3c07157606b75bd642 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Mon, 8 Apr 2019 15:21:42 -0600 Subject: [PATCH 058/311] Add threshold for using Kokkos teams --- src/KOKKOS/pair_kokkos.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/KOKKOS/pair_kokkos.h b/src/KOKKOS/pair_kokkos.h index df33b5cafc..5d724e6f73 100644 --- a/src/KOKKOS/pair_kokkos.h +++ b/src/KOKKOS/pair_kokkos.h @@ -866,6 +866,11 @@ int GetTeamSize(FunctorStyle& functor, int team_size, int vector_length) { template EV_FLOAT pair_compute_neighlist (PairStyle* fpair, typename Kokkos::Impl::enable_if<(NEIGHFLAG&PairStyle::EnabledNeighFlags) != 0, NeighListKokkos*>::type list) { EV_FLOAT ev; + + if (!fpair->lmp->kokkos->team_flag_set) + if (list->inum <= 16384) + fpair->lmp->kokkos->team_flag = 1; + if (fpair->lmp->kokkos->team_flag) { int vector_length = 8; int atoms_per_team = 32; From b8d3c9e01b50e5f26213e4076e18ab3eb393dd04 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Mon, 8 Apr 2019 16:02:18 -0600 Subject: [PATCH 059/311] Rename team option to neigh/thread --- src/KOKKOS/kokkos.cpp | 16 ++++++++-------- src/KOKKOS/kokkos.h | 8 ++++---- src/KOKKOS/pair_kokkos.h | 6 +++--- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/KOKKOS/kokkos.cpp b/src/KOKKOS/kokkos.cpp index 5611fcb74b..60d04941dc 100644 --- a/src/KOKKOS/kokkos.cpp +++ b/src/KOKKOS/kokkos.cpp @@ -184,8 +184,8 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) binsize = 0.0; gpu_direct_flag = 1; - team_flag = 0; - team_flag_set = 0; + neigh_thread = 0; + neigh_thread_set = 0; neighflag_qeq_set = 0; if (ngpu > 0) { neighflag = FULL; @@ -319,12 +319,12 @@ void KokkosLMP::accelerator(int narg, char **arg) else if (strcmp(arg[iarg+1],"on") == 0) gpu_direct_flag = 1; else error->all(FLERR,"Illegal package kokkos command"); iarg += 2; - } else if (strcmp(arg[iarg],"team") == 0) { + } else if (strcmp(arg[iarg],"neigh/thread") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal package kokkos command"); - if (strcmp(arg[iarg+1],"off") == 0) team_flag = 0; - else if (strcmp(arg[iarg+1],"on") == 0) team_flag = 1; + if (strcmp(arg[iarg+1],"off") == 0) neigh_thread = 0; + else if (strcmp(arg[iarg+1],"on") == 0) neigh_thread = 1; else error->all(FLERR,"Illegal package kokkos command"); - team_flag_set = 1; + neigh_thread_set = 1; iarg += 2; } else error->all(FLERR,"Illegal package kokkos command"); } @@ -345,8 +345,8 @@ void KokkosLMP::accelerator(int narg, char **arg) force->newton = force->newton_pair = force->newton_bond = newtonflag; - if (team_flag && neighflag != FULL) - error->all(FLERR,"Must use KOKKOS package option 'neigh full' with 'team on'"); + if (neigh_thread && neighflag != FULL) + error->all(FLERR,"Must use KOKKOS package option 'neigh full' with 'neigh/thread on'"); neighbor->binsize_user = binsize; if (binsize <= 0.0) neighbor->binsizeflag = 0; diff --git a/src/KOKKOS/kokkos.h b/src/KOKKOS/kokkos.h index ad23c36e08..3804d24040 100644 --- a/src/KOKKOS/kokkos.h +++ b/src/KOKKOS/kokkos.h @@ -36,8 +36,8 @@ class KokkosLMP : protected Pointers { int numa; int auto_sync; int gpu_direct_flag; - int team_flag; - int team_flag_set; + int neigh_thread; + int neigh_thread_set; int newtonflag; double binsize; @@ -89,8 +89,8 @@ U: Must use Kokkos half/thread or full neighbor list with threads or GPUs Using Kokkos half-neighbor lists with threading is not allowed. -E: Must use KOKKOS package option 'neigh full' with 'team on' +E: Must use KOKKOS package option 'neigh full' with 'neigh_thread on' -The 'team on' option requires a full neighbor list +The 'neigh_thread on' option requires a full neighbor list */ diff --git a/src/KOKKOS/pair_kokkos.h b/src/KOKKOS/pair_kokkos.h index 5d724e6f73..04d756932a 100644 --- a/src/KOKKOS/pair_kokkos.h +++ b/src/KOKKOS/pair_kokkos.h @@ -867,11 +867,11 @@ template EV_FLOAT pair_compute_neighlist (PairStyle* fpair, typename Kokkos::Impl::enable_if<(NEIGHFLAG&PairStyle::EnabledNeighFlags) != 0, NeighListKokkos*>::type list) { EV_FLOAT ev; - if (!fpair->lmp->kokkos->team_flag_set) + if (!fpair->lmp->kokkos->neigh_thread_set) if (list->inum <= 16384) - fpair->lmp->kokkos->team_flag = 1; + fpair->lmp->kokkos->neigh_thread = 1; - if (fpair->lmp->kokkos->team_flag) { + if (fpair->lmp->kokkos->neigh_thread) { int vector_length = 8; int atoms_per_team = 32; From c11b1edc1fcffe78ce0d3f6deaec6df7901a18af Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Mon, 8 Apr 2019 16:35:36 -0600 Subject: [PATCH 060/311] Avoid spell checker error --- doc/src/package.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/package.txt b/doc/src/package.txt index 50dfb8d024..a9412447b8 100644 --- a/doc/src/package.txt +++ b/doc/src/package.txt @@ -431,7 +431,7 @@ value as listed below. The {neigh} keyword determines how neighbor lists are built. A value of {half} uses a thread-safe variant of half-neighbor lists, the same as used by most pair styles in LAMMPS, which is the default when running on -CPUs (i.e. CUDA backend not enabled). +CPUs (i.e. the Kokkos CUDA back end is not enabled). A value of {full} uses a full neighbor lists and is the default when running on GPUs. This performs twice as much computation as the {half} From 16b17f812cce2f26420817dda9d36f7fb3b65500 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 9 Apr 2019 08:51:24 -0600 Subject: [PATCH 061/311] Update docs --- doc/src/package.txt | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/doc/src/package.txt b/doc/src/package.txt index a9412447b8..aef35d8d13 100644 --- a/doc/src/package.txt +++ b/doc/src/package.txt @@ -64,13 +64,16 @@ args = arguments specific to the style :l {no_affinity} values = none {kokkos} args = keyword value ... zero or more keyword/value pairs may be appended - keywords = {neigh} or {neigh/qeq} or {newton} or {binsize} or {comm} or {comm/exchange} or {comm/forward} or {comm/reverse} or {gpu/direct} + keywords = {neigh} or {neigh/qeq} or {neigh/thread} or {newton} or {binsize} or {comm} or {comm/exchange} or {comm/forward} or {comm/reverse} or {gpu/direct} {neigh} value = {full} or {half} full = full neighbor list half = half neighbor list built in thread-safe manner {neigh/qeq} value = {full} or {half} full = full neighbor list half = half neighbor list built in thread-safe manner + {neigh/thread} value = {off} or {on} + off = thread only over atoms + on = thread over both atoms and neighbors {newton} = {off} or {on} off = set Newton pairwise and bonded flags off on = set Newton pairwise and bonded flags on @@ -442,7 +445,15 @@ running on CPUs, a {half} neighbor list is the default because it are often faster, just as it is for non-accelerated pair styles. Similarly, the {neigh/qeq} keyword determines how neighbor lists are built for "fix qeq/reax/kk"_fix_qeq_reax.html. If not explicitly set, the value of -{neigh/qeq} will match {neigh}. +{neigh/qeq} will match {neigh}. + +If the {neigh/thread} keyword is set to {off}, then the KOKKOS package +threads only over atoms. However, for small systems, this may not expose +enough parallelism to keep a GPU busy. When this keyword is set to {on}, +the KOKKOS package threads over both atoms and neighbors of atoms. +Using {neigh/thread} {on} may be slower for large systems, so this this +option is turned on by default only when there are 16K atoms or less +owned by an MPI rank. The {newton} keyword sets the Newton flags for pairwise and bonded interactions to {off} or {on}, the same as the "newton"_newton.html @@ -630,11 +641,12 @@ neigh/qeq = full, newton = off, binsize for GPUs = 2x LAMMPS default value, comm = device, gpu/direct = on. When LAMMPS can safely detect that GPU-direct is not available, the default value of gpu/direct becomes "off". For CPUs or Xeon Phis, the option defaults are neigh = -half, neigh/qeq = half, newton = on, binsize = 0.0, and comm = no. These -settings are made automatically by the required "-k on" "command-line -switch"_Run_options.html. You can change them by using the package -kokkos command in your input script or via the "-pk kokkos command-line -switch"_Run_options.html. +half, neigh/qeq = half, newton = on, binsize = 0.0, and comm = no. The +option neigh/thread = on when there are 16K atoms or less on an MPI +rank, otherwise it is "off". These settings are made automatically by +the required "-k on" "command-line switch"_Run_options.html. You can +change them by using the package kokkos command in your input script or +via the "-pk kokkos command-line switch"_Run_options.html. For the OMP package, the default is Nthreads = 0 and the option defaults are neigh = yes. These settings are made automatically if From 82be3ee32c24b033b75f4516672a67ac412ae28c Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 9 Apr 2019 09:17:07 -0600 Subject: [PATCH 062/311] Only use team with full neigh list --- doc/src/package.txt | 12 ++-- src/KOKKOS/comm_kokkos.cpp | 128 ++++++++++++++++++------------------- src/KOKKOS/kokkos.h | 4 +- src/KOKKOS/pair_kokkos.h | 2 +- 4 files changed, 75 insertions(+), 71 deletions(-) diff --git a/doc/src/package.txt b/doc/src/package.txt index aef35d8d13..b6759bf2e9 100644 --- a/doc/src/package.txt +++ b/doc/src/package.txt @@ -450,10 +450,14 @@ qeq/reax/kk"_fix_qeq_reax.html. If not explicitly set, the value of If the {neigh/thread} keyword is set to {off}, then the KOKKOS package threads only over atoms. However, for small systems, this may not expose enough parallelism to keep a GPU busy. When this keyword is set to {on}, -the KOKKOS package threads over both atoms and neighbors of atoms. -Using {neigh/thread} {on} may be slower for large systems, so this this -option is turned on by default only when there are 16K atoms or less -owned by an MPI rank. +the KOKKOS package threads over both atoms and neighbors of atoms. When +using {neigh/thread} {on}, a full neighbor list must also be used. Using +{neigh/thread} {on} may be slower for large systems, so this this option +is turned on by default only when there are 16K atoms or less owned by +an MPI rank and when using a full neighbor list. Not all KOKKOS-enabled +potentials support this keyword yet, and only thread over atoms. Many +simple pair-wise potentials such as Lennard-Jones do support threading +over both atoms and neighbors. The {newton} keyword sets the Newton flags for pairwise and bonded interactions to {off} or {on}, the same as the "newton"_newton.html diff --git a/src/KOKKOS/comm_kokkos.cpp b/src/KOKKOS/comm_kokkos.cpp index 720a79617f..c496065ea0 100644 --- a/src/KOKKOS/comm_kokkos.cpp +++ b/src/KOKKOS/comm_kokkos.cpp @@ -194,75 +194,75 @@ void CommKokkos::forward_comm_device(int dummy) k_firstrecv,k_pbc_flag,k_pbc,k_g2l); } else { - for (int iswap = 0; iswap < nswap; iswap++) { - if (sendproc[iswap] != me) { - if (comm_x_only) { - if (size_forward_recv[iswap]) { - buf = atomKK->k_x.view().data() + - firstrecv[iswap]*atomKK->k_x.view().extent(1); - MPI_Irecv(buf,size_forward_recv[iswap],MPI_DOUBLE, - recvproc[iswap],0,world,&request); + for (int iswap = 0; iswap < nswap; iswap++) { + if (sendproc[iswap] != me) { + if (comm_x_only) { + if (size_forward_recv[iswap]) { + buf = atomKK->k_x.view().data() + + firstrecv[iswap]*atomKK->k_x.view().extent(1); + MPI_Irecv(buf,size_forward_recv[iswap],MPI_DOUBLE, + recvproc[iswap],0,world,&request); + } + n = avec->pack_comm_kokkos(sendnum[iswap],k_sendlist, + iswap,k_buf_send,pbc_flag[iswap],pbc[iswap]); + DeviceType::fence(); + if (n) { + MPI_Send(k_buf_send.view().data(), + n,MPI_DOUBLE,sendproc[iswap],0,world); + } + + if (size_forward_recv[iswap]) { + MPI_Wait(&request,MPI_STATUS_IGNORE); + atomKK->modified(ExecutionSpaceFromDevice:: + space,X_MASK); + } + } else if (ghost_velocity) { + if (size_forward_recv[iswap]) { + MPI_Irecv(k_buf_recv.view().data(), + size_forward_recv[iswap],MPI_DOUBLE, + recvproc[iswap],0,world,&request); + } + n = avec->pack_comm_vel_kokkos(sendnum[iswap],k_sendlist,iswap, + k_buf_send,pbc_flag[iswap],pbc[iswap]); + DeviceType::fence(); + if (n) { + MPI_Send(k_buf_send.view().data(),n, + MPI_DOUBLE,sendproc[iswap],0,world); + } + if (size_forward_recv[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); + avec->unpack_comm_vel_kokkos(recvnum[iswap],firstrecv[iswap],k_buf_recv); + DeviceType::fence(); + } else { + if (size_forward_recv[iswap]) + MPI_Irecv(k_buf_recv.view().data(), + size_forward_recv[iswap],MPI_DOUBLE, + recvproc[iswap],0,world,&request); + n = avec->pack_comm_kokkos(sendnum[iswap],k_sendlist,iswap, + k_buf_send,pbc_flag[iswap],pbc[iswap]); + DeviceType::fence(); + if (n) + MPI_Send(k_buf_send.view().data(),n, + MPI_DOUBLE,sendproc[iswap],0,world); + if (size_forward_recv[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); + avec->unpack_comm_kokkos(recvnum[iswap],firstrecv[iswap],k_buf_recv); + DeviceType::fence(); } - n = avec->pack_comm_kokkos(sendnum[iswap],k_sendlist, - iswap,k_buf_send,pbc_flag[iswap],pbc[iswap]); - DeviceType::fence(); - if (n) { - MPI_Send(k_buf_send.view().data(), - n,MPI_DOUBLE,sendproc[iswap],0,world); - } - - if (size_forward_recv[iswap]) { - MPI_Wait(&request,MPI_STATUS_IGNORE); - atomKK->modified(ExecutionSpaceFromDevice:: - space,X_MASK); - } - } else if (ghost_velocity) { - if (size_forward_recv[iswap]) { - MPI_Irecv(k_buf_recv.view().data(), - size_forward_recv[iswap],MPI_DOUBLE, - recvproc[iswap],0,world,&request); - } - n = avec->pack_comm_vel_kokkos(sendnum[iswap],k_sendlist,iswap, - k_buf_send,pbc_flag[iswap],pbc[iswap]); - DeviceType::fence(); - if (n) { - MPI_Send(k_buf_send.view().data(),n, - MPI_DOUBLE,sendproc[iswap],0,world); - } - if (size_forward_recv[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); - avec->unpack_comm_vel_kokkos(recvnum[iswap],firstrecv[iswap],k_buf_recv); - DeviceType::fence(); } else { - if (size_forward_recv[iswap]) - MPI_Irecv(k_buf_recv.view().data(), - size_forward_recv[iswap],MPI_DOUBLE, - recvproc[iswap],0,world,&request); - n = avec->pack_comm_kokkos(sendnum[iswap],k_sendlist,iswap, - k_buf_send,pbc_flag[iswap],pbc[iswap]); - DeviceType::fence(); - if (n) - MPI_Send(k_buf_send.view().data(),n, - MPI_DOUBLE,sendproc[iswap],0,world); - if (size_forward_recv[iswap]) MPI_Wait(&request,MPI_STATUS_IGNORE); - avec->unpack_comm_kokkos(recvnum[iswap],firstrecv[iswap],k_buf_recv); - DeviceType::fence(); - } - } else { - if (!ghost_velocity) { - if (sendnum[iswap]) - n = avec->pack_comm_self(sendnum[iswap],k_sendlist,iswap, - firstrecv[iswap],pbc_flag[iswap],pbc[iswap]); - DeviceType::fence(); - } else { - n = avec->pack_comm_vel_kokkos(sendnum[iswap],k_sendlist,iswap, - k_buf_send,pbc_flag[iswap],pbc[iswap]); - DeviceType::fence(); - avec->unpack_comm_vel_kokkos(recvnum[iswap],firstrecv[iswap],k_buf_send); - DeviceType::fence(); + if (!ghost_velocity) { + if (sendnum[iswap]) + n = avec->pack_comm_self(sendnum[iswap],k_sendlist,iswap, + firstrecv[iswap],pbc_flag[iswap],pbc[iswap]); + DeviceType::fence(); + } else { + n = avec->pack_comm_vel_kokkos(sendnum[iswap],k_sendlist,iswap, + k_buf_send,pbc_flag[iswap],pbc[iswap]); + DeviceType::fence(); + avec->unpack_comm_vel_kokkos(recvnum[iswap],firstrecv[iswap],k_buf_send); + DeviceType::fence(); + } } } } - } } /* ---------------------------------------------------------------------- diff --git a/src/KOKKOS/kokkos.h b/src/KOKKOS/kokkos.h index 3804d24040..ad41c83949 100644 --- a/src/KOKKOS/kokkos.h +++ b/src/KOKKOS/kokkos.h @@ -89,8 +89,8 @@ U: Must use Kokkos half/thread or full neighbor list with threads or GPUs Using Kokkos half-neighbor lists with threading is not allowed. -E: Must use KOKKOS package option 'neigh full' with 'neigh_thread on' +E: Must use KOKKOS package option 'neigh full' with 'neigh/thread on' -The 'neigh_thread on' option requires a full neighbor list +The 'neigh/thread on' option requires a full neighbor list */ diff --git a/src/KOKKOS/pair_kokkos.h b/src/KOKKOS/pair_kokkos.h index 04d756932a..9ca5d9578d 100644 --- a/src/KOKKOS/pair_kokkos.h +++ b/src/KOKKOS/pair_kokkos.h @@ -868,7 +868,7 @@ EV_FLOAT pair_compute_neighlist (PairStyle* fpair, typename Kokkos::Impl::enable EV_FLOAT ev; if (!fpair->lmp->kokkos->neigh_thread_set) - if (list->inum <= 16384) + if (list->inum <= 16384 && NEIGHFLAG == FULL) fpair->lmp->kokkos->neigh_thread = 1; if (fpair->lmp->kokkos->neigh_thread) { From a01bce46bb4b854fd17afbb2beb309750ddf864d Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 9 Apr 2019 10:23:37 -0600 Subject: [PATCH 063/311] Reduce GPU/CPU data transfer --- src/KOKKOS/atom_vec_angle_kokkos.cpp | 99 +++++++++----- src/KOKKOS/atom_vec_atomic_kokkos.cpp | 60 ++++----- src/KOKKOS/atom_vec_bond_kokkos.cpp | 75 +++++++---- src/KOKKOS/atom_vec_charge_kokkos.cpp | 49 ++++--- src/KOKKOS/atom_vec_dpd_kokkos.cpp | 89 +++++++----- src/KOKKOS/atom_vec_full_kokkos.cpp | 164 ++++++++++++++--------- src/KOKKOS/atom_vec_molecular_kokkos.cpp | 159 +++++++++++++--------- src/KOKKOS/atom_vec_sphere_kokkos.cpp | 64 +++++---- 8 files changed, 467 insertions(+), 292 deletions(-) diff --git a/src/KOKKOS/atom_vec_angle_kokkos.cpp b/src/KOKKOS/atom_vec_angle_kokkos.cpp index 352fec57fb..06ef45272b 100644 --- a/src/KOKKOS/atom_vec_angle_kokkos.cpp +++ b/src/KOKKOS/atom_vec_angle_kokkos.cpp @@ -21,10 +21,11 @@ #include "atom_masks.h" #include "memory_kokkos.h" #include "error.h" +#include "force.h" using namespace LAMMPS_NS; -#define DELTA 10000 +#define DELTA 16384 /* ---------------------------------------------------------------------- */ @@ -1763,55 +1764,79 @@ bigint AtomVecAngleKokkos::memory_usage() void AtomVecAngleKokkos::sync(ExecutionSpace space, unsigned int mask) { + int nlocal = atom->nlocal; + int nall = atom->nlocal + atom->nghost; + + // avoid unnecessary data transfer + + auto k_x = Kokkos::subview(atomKK->k_x,std::make_pair(0,nall),Kokkos::ALL); + auto k_v = Kokkos::subview(atomKK->k_v,std::make_pair(0,nall),Kokkos::ALL); + auto k_f = Kokkos::subview(atomKK->k_f,std::make_pair(0,(!force || force->newton)?nall:nlocal),Kokkos::ALL); + auto k_tag = Kokkos::subview(atomKK->k_tag,std::make_pair(0,nall)); + auto k_type = Kokkos::subview(atomKK->k_type,std::make_pair(0,nall)); + auto k_mask = Kokkos::subview(atomKK->k_mask,std::make_pair(0,nall)); + auto k_image = Kokkos::subview(atomKK->k_image,std::make_pair(0,nall)); + auto k_molecule = Kokkos::subview(atomKK->k_molecule,std::make_pair(0,nall)); + auto k_nspecial = Kokkos::subview(atomKK->k_nspecial,std::make_pair(0,nall),Kokkos::ALL); + auto k_special = Kokkos::subview(atomKK->k_special,std::make_pair(0,nall),Kokkos::ALL); + auto k_num_bond = Kokkos::subview(atomKK->k_num_bond,std::make_pair(0,nall)); + auto k_bond_type = Kokkos::subview(atomKK->k_bond_type,std::make_pair(0,nall),Kokkos::ALL); + auto k_bond_atom = Kokkos::subview(atomKK->k_bond_atom,std::make_pair(0,nall),Kokkos::ALL); + auto k_num_angle = Kokkos::subview(atomKK->k_num_angle,std::make_pair(0,nall)); + auto k_angle_type = Kokkos::subview(atomKK->k_angle_type,std::make_pair(0,nall),Kokkos::ALL); + auto k_angle_atom1 = Kokkos::subview(atomKK->k_angle_atom1,std::make_pair(0,nall),Kokkos::ALL); + auto k_angle_atom2 = Kokkos::subview(atomKK->k_angle_atom2,std::make_pair(0,nall),Kokkos::ALL); + auto k_angle_atom3 = Kokkos::subview(atomKK->k_angle_atom3,std::make_pair(0,nall),Kokkos::ALL); + if (space == Device) { - if (mask & X_MASK) atomKK->k_x.sync(); - if (mask & V_MASK) atomKK->k_v.sync(); - if (mask & F_MASK) atomKK->k_f.sync(); - if (mask & TAG_MASK) atomKK->k_tag.sync(); - if (mask & TYPE_MASK) atomKK->k_type.sync(); - if (mask & MASK_MASK) atomKK->k_mask.sync(); - if (mask & IMAGE_MASK) atomKK->k_image.sync(); - if (mask & MOLECULE_MASK) atomKK->k_molecule.sync(); + if (mask & X_MASK) k_x.sync(); + if (mask & V_MASK) k_v.sync(); + if (mask & F_MASK) k_f.sync(); + if (mask & TAG_MASK) k_tag.sync(); + if (mask & TYPE_MASK) k_type.sync(); + if (mask & MASK_MASK) k_mask.sync(); + if (mask & IMAGE_MASK) k_image.sync(); + if (mask & MOLECULE_MASK) k_molecule.sync(); if (mask & SPECIAL_MASK) { - atomKK->k_nspecial.sync(); - atomKK->k_special.sync(); + k_nspecial.sync(); + k_special.sync(); } if (mask & BOND_MASK) { - atomKK->k_num_bond.sync(); - atomKK->k_bond_type.sync(); - atomKK->k_bond_atom.sync(); + k_num_bond.sync(); + k_bond_type.sync(); + k_bond_atom.sync(); } if (mask & ANGLE_MASK) { - atomKK->k_num_angle.sync(); - atomKK->k_angle_type.sync(); - atomKK->k_angle_atom1.sync(); - atomKK->k_angle_atom2.sync(); - atomKK->k_angle_atom3.sync(); + k_num_angle.sync(); + k_angle_type.sync(); + k_angle_atom1.sync(); + k_angle_atom2.sync(); + k_angle_atom3.sync(); } } else { - if (mask & X_MASK) atomKK->k_x.sync(); - if (mask & V_MASK) atomKK->k_v.sync(); - if (mask & F_MASK) atomKK->k_f.sync(); - if (mask & TAG_MASK) atomKK->k_tag.sync(); - if (mask & TYPE_MASK) atomKK->k_type.sync(); - if (mask & MASK_MASK) atomKK->k_mask.sync(); - if (mask & IMAGE_MASK) atomKK->k_image.sync(); - if (mask & MOLECULE_MASK) atomKK->k_molecule.sync(); + if (mask & X_MASK) k_x.sync(); + if (mask & V_MASK) k_v.sync(); + if (mask & F_MASK) k_f.sync(); + if (mask & TAG_MASK) k_tag.sync(); + if (mask & TYPE_MASK) k_type.sync(); + if (mask & MASK_MASK) k_mask.sync(); + if (mask & IMAGE_MASK) k_image.sync(); + if (mask & MOLECULE_MASK) k_molecule.sync(); if (mask & SPECIAL_MASK) { - atomKK->k_nspecial.sync(); - atomKK->k_special.sync(); + k_nspecial.sync(); + k_special.sync(); } if (mask & BOND_MASK) { - atomKK->k_num_bond.sync(); - atomKK->k_bond_type.sync(); - atomKK->k_bond_atom.sync(); + k_num_bond.sync(); + k_bond_type.sync(); + k_bond_atom.sync(); } if (mask & ANGLE_MASK) { - atomKK->k_num_angle.sync(); - atomKK->k_angle_type.sync(); - atomKK->k_angle_atom1.sync(); - atomKK->k_angle_atom2.sync(); - atomKK->k_angle_atom3.sync(); + k_num_angle.sync(); + k_angle_type.sync(); + k_angle_atom1.sync(); + k_angle_atom2.sync(); + k_angle_atom3.sync(); } } } diff --git a/src/KOKKOS/atom_vec_atomic_kokkos.cpp b/src/KOKKOS/atom_vec_atomic_kokkos.cpp index 80321fd2ea..ae357e6fe4 100644 --- a/src/KOKKOS/atom_vec_atomic_kokkos.cpp +++ b/src/KOKKOS/atom_vec_atomic_kokkos.cpp @@ -25,7 +25,7 @@ using namespace LAMMPS_NS; -#define DELTA 10 +#define DELTA 16384 /* ---------------------------------------------------------------------- */ @@ -56,8 +56,7 @@ AtomVecAtomicKokkos::AtomVecAtomicKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) void AtomVecAtomicKokkos::grow(int n) { - int step = MAX(DELTA,nmax*0.01); - if (n == 0) nmax += step; + if (n == 0) nmax += DELTA; else nmax = n; atomKK->nmax = nmax; if (nmax < 0 || nmax > MAXSMALLINT) @@ -899,36 +898,35 @@ bigint AtomVecAtomicKokkos::memory_usage() void AtomVecAtomicKokkos::sync(ExecutionSpace space, unsigned int mask) { + int nlocal = atom->nlocal; + int nall = atom->nlocal + atom->nghost; + + // avoid unnecessary data transfer + + auto k_x = Kokkos::subview(atomKK->k_x,std::make_pair(0,nall),Kokkos::ALL); + auto k_v = Kokkos::subview(atomKK->k_v,std::make_pair(0,nall),Kokkos::ALL); + auto k_f = Kokkos::subview(atomKK->k_f,std::make_pair(0,(!force || force->newton)?nall:nlocal),Kokkos::ALL); + auto k_tag = Kokkos::subview(atomKK->k_tag,std::make_pair(0,nall)); + auto k_type = Kokkos::subview(atomKK->k_type,std::make_pair(0,nall)); + auto k_mask = Kokkos::subview(atomKK->k_mask,std::make_pair(0,nall)); + auto k_image = Kokkos::subview(atomKK->k_image,std::make_pair(0,nall)); + if (space == Device) { - if (mask & X_MASK) atomKK->k_x.sync(); - if (mask & V_MASK) atomKK->k_v.sync(); - if (mask & F_MASK) { - if (!force || force->newton) { - atomKK->k_f.sync(); - } else { - auto k_f_nlocal = Kokkos::subview(atomKK->k_f,std::make_pair(0,atom->nlocal),Kokkos::ALL); - k_f_nlocal.sync(); - } - } - if (mask & TAG_MASK) atomKK->k_tag.sync(); - if (mask & TYPE_MASK) atomKK->k_type.sync(); - if (mask & MASK_MASK) atomKK->k_mask.sync(); - if (mask & IMAGE_MASK) atomKK->k_image.sync(); + if (mask & X_MASK) k_x.sync(); + if (mask & V_MASK) k_v.sync(); + if (mask & F_MASK) k_f.sync(); + if (mask & TAG_MASK) k_tag.sync(); + if (mask & TYPE_MASK) k_type.sync(); + if (mask & MASK_MASK) k_mask.sync(); + if (mask & IMAGE_MASK) k_image.sync(); } else { - if (mask & X_MASK) atomKK->k_x.sync(); - if (mask & V_MASK) atomKK->k_v.sync(); - if (mask & F_MASK) { - if (!force || force->newton) { - atomKK->k_f.sync(); - } else { - auto k_f_nlocal = Kokkos::subview(atomKK->k_f,std::make_pair(0,atom->nlocal),Kokkos::ALL); - k_f_nlocal.sync(); - } - } - if (mask & TAG_MASK) atomKK->k_tag.sync(); - if (mask & TYPE_MASK) atomKK->k_type.sync(); - if (mask & MASK_MASK) atomKK->k_mask.sync(); - if (mask & IMAGE_MASK) atomKK->k_image.sync(); + if (mask & X_MASK) k_x.sync(); + if (mask & V_MASK) k_v.sync(); + if (mask & F_MASK) k_f.sync(); + if (mask & TAG_MASK) k_tag.sync(); + if (mask & TYPE_MASK) k_type.sync(); + if (mask & MASK_MASK) k_mask.sync(); + if (mask & IMAGE_MASK) k_image.sync(); } } diff --git a/src/KOKKOS/atom_vec_bond_kokkos.cpp b/src/KOKKOS/atom_vec_bond_kokkos.cpp index c884d23880..6acd536dd8 100644 --- a/src/KOKKOS/atom_vec_bond_kokkos.cpp +++ b/src/KOKKOS/atom_vec_bond_kokkos.cpp @@ -21,10 +21,11 @@ #include "atom_masks.h" #include "memory_kokkos.h" #include "error.h" +#include "force.h" using namespace LAMMPS_NS; -#define DELTA 10000 +#define DELTA 16384 /* ---------------------------------------------------------------------- */ @@ -1175,41 +1176,61 @@ bigint AtomVecBondKokkos::memory_usage() void AtomVecBondKokkos::sync(ExecutionSpace space, unsigned int mask) { + int nlocal = atom->nlocal; + int nall = atom->nlocal + atom->nghost; + + // avoid unnecessary data transfer + + auto k_x = Kokkos::subview(atomKK->k_x,std::make_pair(0,nall),Kokkos::ALL); + auto k_v = Kokkos::subview(atomKK->k_v,std::make_pair(0,nall),Kokkos::ALL); + auto k_f = Kokkos::subview(atomKK->k_f,std::make_pair(0,(!force || force->newton)?nall:nlocal),Kokkos::ALL); + auto k_tag = Kokkos::subview(atomKK->k_tag,std::make_pair(0,nall)); + auto k_type = Kokkos::subview(atomKK->k_type,std::make_pair(0,nall)); + auto k_mask = Kokkos::subview(atomKK->k_mask,std::make_pair(0,nall)); + auto k_image = Kokkos::subview(atomKK->k_image,std::make_pair(0,nall)); + auto k_q = Kokkos::subview(atomKK->k_q,std::make_pair(0,nall)); + auto k_molecule = Kokkos::subview(atomKK->k_molecule,std::make_pair(0,nall)); + auto k_nspecial = Kokkos::subview(atomKK->k_nspecial,std::make_pair(0,nall),Kokkos::ALL); + auto k_special = Kokkos::subview(atomKK->k_special,std::make_pair(0,nall),Kokkos::ALL); + auto k_num_bond = Kokkos::subview(atomKK->k_num_bond,std::make_pair(0,nall)); + auto k_bond_type = Kokkos::subview(atomKK->k_bond_type,std::make_pair(0,nall),Kokkos::ALL); + auto k_bond_atom = Kokkos::subview(atomKK->k_bond_atom,std::make_pair(0,nall),Kokkos::ALL); + if (space == Device) { - if (mask & X_MASK) atomKK->k_x.sync(); - if (mask & V_MASK) atomKK->k_v.sync(); - if (mask & F_MASK) atomKK->k_f.sync(); - if (mask & TAG_MASK) atomKK->k_tag.sync(); - if (mask & TYPE_MASK) atomKK->k_type.sync(); - if (mask & MASK_MASK) atomKK->k_mask.sync(); - if (mask & IMAGE_MASK) atomKK->k_image.sync(); - if (mask & MOLECULE_MASK) atomKK->k_molecule.sync(); + if (mask & X_MASK) k_x.sync(); + if (mask & V_MASK) k_v.sync(); + if (mask & F_MASK) k_f.sync(); + if (mask & TAG_MASK) k_tag.sync(); + if (mask & TYPE_MASK) k_type.sync(); + if (mask & MASK_MASK) k_mask.sync(); + if (mask & IMAGE_MASK) k_image.sync(); + if (mask & MOLECULE_MASK) k_molecule.sync(); if (mask & SPECIAL_MASK) { - atomKK->k_nspecial.sync(); - atomKK->k_special.sync(); + k_nspecial.sync(); + k_special.sync(); } if (mask & BOND_MASK) { - atomKK->k_num_bond.sync(); - atomKK->k_bond_type.sync(); - atomKK->k_bond_atom.sync(); + k_num_bond.sync(); + k_bond_type.sync(); + k_bond_atom.sync(); } } else { - if (mask & X_MASK) atomKK->k_x.sync(); - if (mask & V_MASK) atomKK->k_v.sync(); - if (mask & F_MASK) atomKK->k_f.sync(); - if (mask & TAG_MASK) atomKK->k_tag.sync(); - if (mask & TYPE_MASK) atomKK->k_type.sync(); - if (mask & MASK_MASK) atomKK->k_mask.sync(); - if (mask & IMAGE_MASK) atomKK->k_image.sync(); - if (mask & MOLECULE_MASK) atomKK->k_molecule.sync(); + if (mask & X_MASK) k_x.sync(); + if (mask & V_MASK) k_v.sync(); + if (mask & F_MASK) k_f.sync(); + if (mask & TAG_MASK) k_tag.sync(); + if (mask & TYPE_MASK) k_type.sync(); + if (mask & MASK_MASK) k_mask.sync(); + if (mask & IMAGE_MASK) k_image.sync(); + if (mask & MOLECULE_MASK) k_molecule.sync(); if (mask & SPECIAL_MASK) { - atomKK->k_nspecial.sync(); - atomKK->k_special.sync(); + k_nspecial.sync(); + k_special.sync(); } if (mask & BOND_MASK) { - atomKK->k_num_bond.sync(); - atomKK->k_bond_type.sync(); - atomKK->k_bond_atom.sync(); + k_num_bond.sync(); + k_bond_type.sync(); + k_bond_atom.sync(); } } } diff --git a/src/KOKKOS/atom_vec_charge_kokkos.cpp b/src/KOKKOS/atom_vec_charge_kokkos.cpp index 11e46d1274..807f733745 100644 --- a/src/KOKKOS/atom_vec_charge_kokkos.cpp +++ b/src/KOKKOS/atom_vec_charge_kokkos.cpp @@ -21,10 +21,11 @@ #include "atom_masks.h" #include "memory_kokkos.h" #include "error.h" +#include "force.h" using namespace LAMMPS_NS; -#define DELTA 10000 +#define DELTA 16384 /* ---------------------------------------------------------------------- */ @@ -1068,24 +1069,38 @@ bigint AtomVecChargeKokkos::memory_usage() void AtomVecChargeKokkos::sync(ExecutionSpace space, unsigned int mask) { + int nlocal = atom->nlocal; + int nall = atom->nlocal + atom->nghost; + + // avoid unnecessary data transfer + + auto k_x = Kokkos::subview(atomKK->k_x,std::make_pair(0,nall),Kokkos::ALL); + auto k_v = Kokkos::subview(atomKK->k_v,std::make_pair(0,nall),Kokkos::ALL); + auto k_f = Kokkos::subview(atomKK->k_f,std::make_pair(0,(!force || force->newton)?nall:nlocal),Kokkos::ALL); + auto k_tag = Kokkos::subview(atomKK->k_tag,std::make_pair(0,nall)); + auto k_type = Kokkos::subview(atomKK->k_type,std::make_pair(0,nall)); + auto k_mask = Kokkos::subview(atomKK->k_mask,std::make_pair(0,nall)); + auto k_image = Kokkos::subview(atomKK->k_image,std::make_pair(0,nall)); + auto k_q = Kokkos::subview(atomKK->k_q,std::make_pair(0,nall)); + if (space == Device) { - if (mask & X_MASK) atomKK->k_x.sync(); - if (mask & V_MASK) atomKK->k_v.sync(); - if (mask & F_MASK) atomKK->k_f.sync(); - if (mask & TAG_MASK) atomKK->k_tag.sync(); - if (mask & TYPE_MASK) atomKK->k_type.sync(); - if (mask & MASK_MASK) atomKK->k_mask.sync(); - if (mask & IMAGE_MASK) atomKK->k_image.sync(); - if (mask & Q_MASK) atomKK->k_q.sync(); + if (mask & X_MASK) k_x.sync(); + if (mask & V_MASK) k_v.sync(); + if (mask & F_MASK) k_f.sync(); + if (mask & TAG_MASK) k_tag.sync(); + if (mask & TYPE_MASK) k_type.sync(); + if (mask & MASK_MASK) k_mask.sync(); + if (mask & IMAGE_MASK) k_image.sync(); + if (mask & Q_MASK) k_q.sync(); } else { - if (mask & X_MASK) atomKK->k_x.sync(); - if (mask & V_MASK) atomKK->k_v.sync(); - if (mask & F_MASK) atomKK->k_f.sync(); - if (mask & TAG_MASK) atomKK->k_tag.sync(); - if (mask & TYPE_MASK) atomKK->k_type.sync(); - if (mask & MASK_MASK) atomKK->k_mask.sync(); - if (mask & IMAGE_MASK) atomKK->k_image.sync(); - if (mask & Q_MASK) atomKK->k_q.sync(); + if (mask & X_MASK) k_x.sync(); + if (mask & V_MASK) k_v.sync(); + if (mask & F_MASK) k_f.sync(); + if (mask & TAG_MASK) k_tag.sync(); + if (mask & TYPE_MASK) k_type.sync(); + if (mask & MASK_MASK) k_mask.sync(); + if (mask & IMAGE_MASK) k_image.sync(); + if (mask & Q_MASK) k_q.sync(); } } diff --git a/src/KOKKOS/atom_vec_dpd_kokkos.cpp b/src/KOKKOS/atom_vec_dpd_kokkos.cpp index 30db76e723..64105eaff5 100644 --- a/src/KOKKOS/atom_vec_dpd_kokkos.cpp +++ b/src/KOKKOS/atom_vec_dpd_kokkos.cpp @@ -21,10 +21,11 @@ #include "atom_masks.h" #include "memory_kokkos.h" #include "error.h" +#include "force.h" using namespace LAMMPS_NS; -#define DELTA 10000 +#define DELTA 16384 /* ---------------------------------------------------------------------- */ @@ -1856,40 +1857,62 @@ bigint AtomVecDPDKokkos::memory_usage() void AtomVecDPDKokkos::sync(ExecutionSpace space, unsigned int mask) { + int nlocal = atom->nlocal; + int nall = atom->nlocal + atom->nghost; + + // avoid unnecessary data transfer + + auto k_x = Kokkos::subview(atomKK->k_x,std::make_pair(0,nall),Kokkos::ALL); + auto k_v = Kokkos::subview(atomKK->k_v,std::make_pair(0,nall),Kokkos::ALL); + auto k_f = Kokkos::subview(atomKK->k_f,std::make_pair(0,(!force || force->newton)?nall:nlocal),Kokkos::ALL); + auto k_tag = Kokkos::subview(atomKK->k_tag,std::make_pair(0,nall)); + auto k_type = Kokkos::subview(atomKK->k_type,std::make_pair(0,nall)); + auto k_mask = Kokkos::subview(atomKK->k_mask,std::make_pair(0,nall)); + auto k_image = Kokkos::subview(atomKK->k_image,std::make_pair(0,nall)); + auto k_rho = Kokkos::subview(atomKK->k_rho,std::make_pair(0,nall)); + auto k_dpdTheta = Kokkos::subview(atomKK->k_dpdTheta,std::make_pair(0,nall)); + auto k_uCond = Kokkos::subview(atomKK->k_uCond,std::make_pair(0,nall)); + auto k_uMech = Kokkos::subview(atomKK->k_uMech,std::make_pair(0,nall)); + auto k_uChem = Kokkos::subview(atomKK->k_uChem,std::make_pair(0,nall)); + auto k_uCG = Kokkos::subview(atomKK->k_uCG,std::make_pair(0,nall)); + auto k_uCGnew = Kokkos::subview(atomKK->k_uCGnew,std::make_pair(0,nall)); + auto k_duChem = Kokkos::subview(atomKK->k_duChem,std::make_pair(0,nall)); + auto k_dvector = Kokkos::subview(atomKK->k_dvector,std::make_pair(0,nall),Kokkos::ALL); + if (space == Device) { - if (mask & X_MASK) atomKK->k_x.sync(); - if (mask & V_MASK) atomKK->k_v.sync(); - if (mask & F_MASK) atomKK->k_f.sync(); - if (mask & TAG_MASK) atomKK->k_tag.sync(); - if (mask & TYPE_MASK) atomKK->k_type.sync(); - if (mask & MASK_MASK) atomKK->k_mask.sync(); - if (mask & IMAGE_MASK) atomKK->k_image.sync(); - if (mask & DPDRHO_MASK) atomKK->k_rho.sync(); - if (mask & DPDTHETA_MASK) atomKK->k_dpdTheta.sync(); - if (mask & UCOND_MASK) atomKK->k_uCond.sync(); - if (mask & UMECH_MASK) atomKK->k_uMech.sync(); - if (mask & UCHEM_MASK) atomKK->k_uChem.sync(); - if (mask & UCG_MASK) atomKK->k_uCG.sync(); - if (mask & UCGNEW_MASK) atomKK->k_uCGnew.sync(); - if (mask & DUCHEM_MASK) atomKK->k_duChem.sync(); - if (mask & DVECTOR_MASK) atomKK->k_dvector.sync(); + if (mask & X_MASK) k_x.sync(); + if (mask & V_MASK) k_v.sync(); + if (mask & F_MASK) k_f.sync(); + if (mask & TAG_MASK) k_tag.sync(); + if (mask & TYPE_MASK) k_type.sync(); + if (mask & MASK_MASK) k_mask.sync(); + if (mask & IMAGE_MASK) k_image.sync(); + if (mask & DPDRHO_MASK) k_rho.sync(); + if (mask & DPDTHETA_MASK) k_dpdTheta.sync(); + if (mask & UCOND_MASK) k_uCond.sync(); + if (mask & UMECH_MASK) k_uMech.sync(); + if (mask & UCHEM_MASK) k_uChem.sync(); + if (mask & UCG_MASK) k_uCG.sync(); + if (mask & UCGNEW_MASK) k_uCGnew.sync(); + if (mask & DUCHEM_MASK) k_duChem.sync(); + if (mask & DVECTOR_MASK) k_dvector.sync(); } else { - if (mask & X_MASK) atomKK->k_x.sync(); - if (mask & V_MASK) atomKK->k_v.sync(); - if (mask & F_MASK) atomKK->k_f.sync(); - if (mask & TAG_MASK) atomKK->k_tag.sync(); - if (mask & TYPE_MASK) atomKK->k_type.sync(); - if (mask & MASK_MASK) atomKK->k_mask.sync(); - if (mask & IMAGE_MASK) atomKK->k_image.sync(); - if (mask & DPDRHO_MASK) atomKK->k_rho.sync(); - if (mask & DPDTHETA_MASK) atomKK->k_dpdTheta.sync(); - if (mask & UCOND_MASK) atomKK->k_uCond.sync(); - if (mask & UMECH_MASK) atomKK->k_uMech.sync(); - if (mask & UCHEM_MASK) atomKK->k_uChem.sync(); - if (mask & UCG_MASK) atomKK->k_uCG.sync(); - if (mask & UCGNEW_MASK) atomKK->k_uCGnew.sync(); - if (mask & DUCHEM_MASK) atomKK->k_duChem.sync(); - if (mask & DVECTOR_MASK) atomKK->k_dvector.sync(); + if (mask & X_MASK) k_x.sync(); + if (mask & V_MASK) k_v.sync(); + if (mask & F_MASK) k_f.sync(); + if (mask & TAG_MASK) k_tag.sync(); + if (mask & TYPE_MASK) k_type.sync(); + if (mask & MASK_MASK) k_mask.sync(); + if (mask & IMAGE_MASK) k_image.sync(); + if (mask & DPDRHO_MASK) k_rho.sync(); + if (mask & DPDTHETA_MASK) k_dpdTheta.sync(); + if (mask & UCOND_MASK) k_uCond.sync(); + if (mask & UMECH_MASK) k_uMech.sync(); + if (mask & UCHEM_MASK) k_uChem.sync(); + if (mask & UCG_MASK) k_uCG.sync(); + if (mask & UCGNEW_MASK) k_uCGnew.sync(); + if (mask & DUCHEM_MASK) k_duChem.sync(); + if (mask & DVECTOR_MASK) k_dvector.sync(); } } diff --git a/src/KOKKOS/atom_vec_full_kokkos.cpp b/src/KOKKOS/atom_vec_full_kokkos.cpp index a6ae1e0ccc..f02a92d2f3 100644 --- a/src/KOKKOS/atom_vec_full_kokkos.cpp +++ b/src/KOKKOS/atom_vec_full_kokkos.cpp @@ -21,10 +21,11 @@ #include "atom_masks.h" #include "memory_kokkos.h" #include "error.h" +#include "force.h" using namespace LAMMPS_NS; -#define DELTA 10000 +#define DELTA 16384 /* ---------------------------------------------------------------------- */ @@ -1651,89 +1652,126 @@ bigint AtomVecFullKokkos::memory_usage() void AtomVecFullKokkos::sync(ExecutionSpace space, unsigned int mask) { + int nlocal = atom->nlocal; + int nall = atom->nlocal + atom->nghost; + + // avoid unnecessary data transfer + + auto k_x = Kokkos::subview(atomKK->k_x,std::make_pair(0,nall),Kokkos::ALL); + auto k_v = Kokkos::subview(atomKK->k_v,std::make_pair(0,nall),Kokkos::ALL); + auto k_f = Kokkos::subview(atomKK->k_f,std::make_pair(0,(!force || force->newton)?nall:nlocal),Kokkos::ALL); + auto k_tag = Kokkos::subview(atomKK->k_tag,std::make_pair(0,nall)); + auto k_type = Kokkos::subview(atomKK->k_type,std::make_pair(0,nall)); + auto k_mask = Kokkos::subview(atomKK->k_mask,std::make_pair(0,nall)); + auto k_image = Kokkos::subview(atomKK->k_image,std::make_pair(0,nall)); + auto k_q = Kokkos::subview(atomKK->k_q,std::make_pair(0,nall)); + auto k_molecule = Kokkos::subview(atomKK->k_molecule,std::make_pair(0,nall)); + auto k_nspecial = Kokkos::subview(atomKK->k_nspecial,std::make_pair(0,nall),Kokkos::ALL); + auto k_special = Kokkos::subview(atomKK->k_special,std::make_pair(0,nall),Kokkos::ALL); + auto k_num_bond = Kokkos::subview(atomKK->k_num_bond,std::make_pair(0,nall)); + auto k_bond_type = Kokkos::subview(atomKK->k_bond_type,std::make_pair(0,nall),Kokkos::ALL); + auto k_bond_atom = Kokkos::subview(atomKK->k_bond_atom,std::make_pair(0,nall),Kokkos::ALL); + auto k_num_angle = Kokkos::subview(atomKK->k_num_angle,std::make_pair(0,nall)); + auto k_angle_type = Kokkos::subview(atomKK->k_angle_type,std::make_pair(0,nall),Kokkos::ALL); + auto k_angle_atom1 = Kokkos::subview(atomKK->k_angle_atom1,std::make_pair(0,nall),Kokkos::ALL); + auto k_angle_atom2 = Kokkos::subview(atomKK->k_angle_atom2,std::make_pair(0,nall),Kokkos::ALL); + auto k_angle_atom3 = Kokkos::subview(atomKK->k_angle_atom3,std::make_pair(0,nall),Kokkos::ALL); + auto k_num_dihedral = Kokkos::subview(atomKK->k_num_dihedral,std::make_pair(0,nall)); + auto k_dihedral_type = Kokkos::subview(atomKK->k_dihedral_type,std::make_pair(0,nall),Kokkos::ALL); + auto k_dihedral_atom1 = Kokkos::subview(atomKK->k_dihedral_atom1,std::make_pair(0,nall),Kokkos::ALL); + auto k_dihedral_atom2 = Kokkos::subview(atomKK->k_dihedral_atom2,std::make_pair(0,nall),Kokkos::ALL); + auto k_dihedral_atom3 = Kokkos::subview(atomKK->k_dihedral_atom3,std::make_pair(0,nall),Kokkos::ALL); + auto k_dihedral_atom4 = Kokkos::subview(atomKK->k_dihedral_atom4,std::make_pair(0,nall),Kokkos::ALL); + auto k_num_improper = Kokkos::subview(atomKK->k_num_improper,std::make_pair(0,nall)); + auto k_improper_type = Kokkos::subview(atomKK->k_improper_type,std::make_pair(0,nall),Kokkos::ALL); + auto k_improper_atom1 = Kokkos::subview(atomKK->k_improper_atom1,std::make_pair(0,nall),Kokkos::ALL); + auto k_improper_atom2 = Kokkos::subview(atomKK->k_improper_atom2,std::make_pair(0,nall),Kokkos::ALL); + auto k_improper_atom3 = Kokkos::subview(atomKK->k_improper_atom3,std::make_pair(0,nall),Kokkos::ALL); + auto k_improper_atom4 = Kokkos::subview(atomKK->k_improper_atom4,std::make_pair(0,nall),Kokkos::ALL); + if (space == Device) { - if (mask & X_MASK) atomKK->k_x.sync(); - if (mask & V_MASK) atomKK->k_v.sync(); - if (mask & F_MASK) atomKK->k_f.sync(); - if (mask & TAG_MASK) atomKK->k_tag.sync(); - if (mask & TYPE_MASK) atomKK->k_type.sync(); - if (mask & MASK_MASK) atomKK->k_mask.sync(); - if (mask & IMAGE_MASK) atomKK->k_image.sync(); - if (mask & Q_MASK) atomKK->k_q.sync(); - if (mask & MOLECULE_MASK) atomKK->k_molecule.sync(); + if (mask & X_MASK) k_x.sync(); + if (mask & V_MASK) k_v.sync(); + if (mask & F_MASK) k_f.sync(); + if (mask & TAG_MASK) k_tag.sync(); + if (mask & TYPE_MASK) k_type.sync(); + if (mask & MASK_MASK) k_mask.sync(); + if (mask & IMAGE_MASK) k_image.sync(); + if (mask & Q_MASK) k_q.sync(); + if (mask & MOLECULE_MASK) k_molecule.sync(); if (mask & SPECIAL_MASK) { - atomKK->k_nspecial.sync(); - atomKK->k_special.sync(); + k_nspecial.sync(); + k_special.sync(); } if (mask & BOND_MASK) { - atomKK->k_num_bond.sync(); - atomKK->k_bond_type.sync(); - atomKK->k_bond_atom.sync(); + k_num_bond.sync(); + k_bond_type.sync(); + k_bond_atom.sync(); } if (mask & ANGLE_MASK) { - atomKK->k_num_angle.sync(); - atomKK->k_angle_type.sync(); - atomKK->k_angle_atom1.sync(); - atomKK->k_angle_atom2.sync(); - atomKK->k_angle_atom3.sync(); + k_num_angle.sync(); + k_angle_type.sync(); + k_angle_atom1.sync(); + k_angle_atom2.sync(); + k_angle_atom3.sync(); } if (mask & DIHEDRAL_MASK) { - atomKK->k_num_dihedral.sync(); - atomKK->k_dihedral_type.sync(); - atomKK->k_dihedral_atom1.sync(); - atomKK->k_dihedral_atom2.sync(); - atomKK->k_dihedral_atom3.sync(); - atomKK->k_dihedral_atom4.sync(); + k_num_dihedral.sync(); + k_dihedral_type.sync(); + k_dihedral_atom1.sync(); + k_dihedral_atom2.sync(); + k_dihedral_atom3.sync(); + k_dihedral_atom4.sync(); } if (mask & IMPROPER_MASK) { - atomKK->k_num_improper.sync(); - atomKK->k_improper_type.sync(); - atomKK->k_improper_atom1.sync(); - atomKK->k_improper_atom2.sync(); - atomKK->k_improper_atom3.sync(); - atomKK->k_improper_atom4.sync(); + k_num_improper.sync(); + k_improper_type.sync(); + k_improper_atom1.sync(); + k_improper_atom2.sync(); + k_improper_atom3.sync(); + k_improper_atom4.sync(); } } else { - if (mask & X_MASK) atomKK->k_x.sync(); - if (mask & V_MASK) atomKK->k_v.sync(); - if (mask & F_MASK) atomKK->k_f.sync(); - if (mask & TAG_MASK) atomKK->k_tag.sync(); - if (mask & TYPE_MASK) atomKK->k_type.sync(); - if (mask & MASK_MASK) atomKK->k_mask.sync(); - if (mask & IMAGE_MASK) atomKK->k_image.sync(); - if (mask & Q_MASK) atomKK->k_q.sync(); - if (mask & MOLECULE_MASK) atomKK->k_molecule.sync(); + if (mask & X_MASK) k_x.sync(); + if (mask & V_MASK) k_v.sync(); + if (mask & F_MASK) k_f.sync(); + if (mask & TAG_MASK) k_tag.sync(); + if (mask & TYPE_MASK) k_type.sync(); + if (mask & MASK_MASK) k_mask.sync(); + if (mask & IMAGE_MASK) k_image.sync(); + if (mask & Q_MASK) k_q.sync(); + if (mask & MOLECULE_MASK) k_molecule.sync(); if (mask & SPECIAL_MASK) { - atomKK->k_nspecial.sync(); - atomKK->k_special.sync(); + k_nspecial.sync(); + k_special.sync(); } if (mask & BOND_MASK) { - atomKK->k_num_bond.sync(); - atomKK->k_bond_type.sync(); - atomKK->k_bond_atom.sync(); + k_num_bond.sync(); + k_bond_type.sync(); + k_bond_atom.sync(); } if (mask & ANGLE_MASK) { - atomKK->k_num_angle.sync(); - atomKK->k_angle_type.sync(); - atomKK->k_angle_atom1.sync(); - atomKK->k_angle_atom2.sync(); - atomKK->k_angle_atom3.sync(); + k_num_angle.sync(); + k_angle_type.sync(); + k_angle_atom1.sync(); + k_angle_atom2.sync(); + k_angle_atom3.sync(); } if (mask & DIHEDRAL_MASK) { - atomKK->k_num_dihedral.sync(); - atomKK->k_dihedral_type.sync(); - atomKK->k_dihedral_atom1.sync(); - atomKK->k_dihedral_atom2.sync(); - atomKK->k_dihedral_atom3.sync(); - atomKK->k_dihedral_atom4.sync(); + k_num_dihedral.sync(); + k_dihedral_type.sync(); + k_dihedral_atom1.sync(); + k_dihedral_atom2.sync(); + k_dihedral_atom3.sync(); + k_dihedral_atom4.sync(); } if (mask & IMPROPER_MASK) { - atomKK->k_num_improper.sync(); - atomKK->k_improper_type.sync(); - atomKK->k_improper_atom1.sync(); - atomKK->k_improper_atom2.sync(); - atomKK->k_improper_atom3.sync(); - atomKK->k_improper_atom4.sync(); + k_num_improper.sync(); + k_improper_type.sync(); + k_improper_atom1.sync(); + k_improper_atom2.sync(); + k_improper_atom3.sync(); + k_improper_atom4.sync(); } } } diff --git a/src/KOKKOS/atom_vec_molecular_kokkos.cpp b/src/KOKKOS/atom_vec_molecular_kokkos.cpp index 9537320976..25ef6f0c7e 100644 --- a/src/KOKKOS/atom_vec_molecular_kokkos.cpp +++ b/src/KOKKOS/atom_vec_molecular_kokkos.cpp @@ -21,10 +21,11 @@ #include "atom_masks.h" #include "memory_kokkos.h" #include "error.h" +#include "force.h" using namespace LAMMPS_NS; -#define DELTA 10000 +#define DELTA 16384 /* ---------------------------------------------------------------------- */ @@ -2049,87 +2050,123 @@ bigint AtomVecMolecularKokkos::memory_usage() void AtomVecMolecularKokkos::sync(ExecutionSpace space, unsigned int mask) { + int nlocal = atom->nlocal; + int nall = atom->nlocal + atom->nghost; + + // avoid unnecessary data transfer + + auto k_x = Kokkos::subview(atomKK->k_x,std::make_pair(0,nall),Kokkos::ALL); + auto k_v = Kokkos::subview(atomKK->k_v,std::make_pair(0,nall),Kokkos::ALL); + auto k_f = Kokkos::subview(atomKK->k_f,std::make_pair(0,(!force || force->newton)?nall:nlocal),Kokkos::ALL); + auto k_tag = Kokkos::subview(atomKK->k_tag,std::make_pair(0,nall)); + auto k_type = Kokkos::subview(atomKK->k_type,std::make_pair(0,nall)); + auto k_mask = Kokkos::subview(atomKK->k_mask,std::make_pair(0,nall)); + auto k_image = Kokkos::subview(atomKK->k_image,std::make_pair(0,nall)); + auto k_molecule = Kokkos::subview(atomKK->k_molecule,std::make_pair(0,nall)); + auto k_nspecial = Kokkos::subview(atomKK->k_nspecial,std::make_pair(0,nall),Kokkos::ALL); + auto k_special = Kokkos::subview(atomKK->k_special,std::make_pair(0,nall),Kokkos::ALL); + auto k_num_bond = Kokkos::subview(atomKK->k_num_bond,std::make_pair(0,nall)); + auto k_bond_type = Kokkos::subview(atomKK->k_bond_type,std::make_pair(0,nall),Kokkos::ALL); + auto k_bond_atom = Kokkos::subview(atomKK->k_bond_atom,std::make_pair(0,nall),Kokkos::ALL); + auto k_num_angle = Kokkos::subview(atomKK->k_num_angle,std::make_pair(0,nall)); + auto k_angle_type = Kokkos::subview(atomKK->k_angle_type,std::make_pair(0,nall),Kokkos::ALL); + auto k_angle_atom1 = Kokkos::subview(atomKK->k_angle_atom1,std::make_pair(0,nall),Kokkos::ALL); + auto k_angle_atom2 = Kokkos::subview(atomKK->k_angle_atom2,std::make_pair(0,nall),Kokkos::ALL); + auto k_angle_atom3 = Kokkos::subview(atomKK->k_angle_atom3,std::make_pair(0,nall),Kokkos::ALL); + auto k_num_dihedral = Kokkos::subview(atomKK->k_num_dihedral,std::make_pair(0,nall)); + auto k_dihedral_type = Kokkos::subview(atomKK->k_dihedral_type,std::make_pair(0,nall),Kokkos::ALL); + auto k_dihedral_atom1 = Kokkos::subview(atomKK->k_dihedral_atom1,std::make_pair(0,nall),Kokkos::ALL); + auto k_dihedral_atom2 = Kokkos::subview(atomKK->k_dihedral_atom2,std::make_pair(0,nall),Kokkos::ALL); + auto k_dihedral_atom3 = Kokkos::subview(atomKK->k_dihedral_atom3,std::make_pair(0,nall),Kokkos::ALL); + auto k_dihedral_atom4 = Kokkos::subview(atomKK->k_dihedral_atom4,std::make_pair(0,nall),Kokkos::ALL); + auto k_num_improper = Kokkos::subview(atomKK->k_num_improper,std::make_pair(0,nall)); + auto k_improper_type = Kokkos::subview(atomKK->k_improper_type,std::make_pair(0,nall),Kokkos::ALL); + auto k_improper_atom1 = Kokkos::subview(atomKK->k_improper_atom1,std::make_pair(0,nall),Kokkos::ALL); + auto k_improper_atom2 = Kokkos::subview(atomKK->k_improper_atom2,std::make_pair(0,nall),Kokkos::ALL); + auto k_improper_atom3 = Kokkos::subview(atomKK->k_improper_atom3,std::make_pair(0,nall),Kokkos::ALL); + auto k_improper_atom4 = Kokkos::subview(atomKK->k_improper_atom4,std::make_pair(0,nall),Kokkos::ALL); + if (space == Device) { - if (mask & X_MASK) atomKK->k_x.sync(); - if (mask & V_MASK) atomKK->k_v.sync(); - if (mask & F_MASK) atomKK->k_f.sync(); - if (mask & TAG_MASK) atomKK->k_tag.sync(); - if (mask & TYPE_MASK) atomKK->k_type.sync(); - if (mask & MASK_MASK) atomKK->k_mask.sync(); - if (mask & IMAGE_MASK) atomKK->k_image.sync(); - if (mask & MOLECULE_MASK) atomKK->k_molecule.sync(); + if (mask & X_MASK) k_x.sync(); + if (mask & V_MASK) k_v.sync(); + if (mask & F_MASK) k_f.sync(); + if (mask & TAG_MASK) k_tag.sync(); + if (mask & TYPE_MASK) k_type.sync(); + if (mask & MASK_MASK) k_mask.sync(); + if (mask & IMAGE_MASK) k_image.sync(); + if (mask & MOLECULE_MASK) k_molecule.sync(); if (mask & SPECIAL_MASK) { - atomKK->k_nspecial.sync(); - atomKK->k_special.sync(); + k_nspecial.sync(); + k_special.sync(); } if (mask & BOND_MASK) { - atomKK->k_num_bond.sync(); - atomKK->k_bond_type.sync(); - atomKK->k_bond_atom.sync(); + k_num_bond.sync(); + k_bond_type.sync(); + k_bond_atom.sync(); } if (mask & ANGLE_MASK) { - atomKK->k_num_angle.sync(); - atomKK->k_angle_type.sync(); - atomKK->k_angle_atom1.sync(); - atomKK->k_angle_atom2.sync(); - atomKK->k_angle_atom3.sync(); + k_num_angle.sync(); + k_angle_type.sync(); + k_angle_atom1.sync(); + k_angle_atom2.sync(); + k_angle_atom3.sync(); } if (mask & DIHEDRAL_MASK) { - atomKK->k_num_dihedral.sync(); - atomKK->k_dihedral_type.sync(); - atomKK->k_dihedral_atom1.sync(); - atomKK->k_dihedral_atom2.sync(); - atomKK->k_dihedral_atom3.sync(); - atomKK->k_dihedral_atom4.sync(); + k_num_dihedral.sync(); + k_dihedral_type.sync(); + k_dihedral_atom1.sync(); + k_dihedral_atom2.sync(); + k_dihedral_atom3.sync(); + k_dihedral_atom4.sync(); } if (mask & IMPROPER_MASK) { - atomKK->k_num_improper.sync(); - atomKK->k_improper_type.sync(); - atomKK->k_improper_atom1.sync(); - atomKK->k_improper_atom2.sync(); - atomKK->k_improper_atom3.sync(); - atomKK->k_improper_atom4.sync(); + k_num_improper.sync(); + k_improper_type.sync(); + k_improper_atom1.sync(); + k_improper_atom2.sync(); + k_improper_atom3.sync(); + k_improper_atom4.sync(); } } else { - if (mask & X_MASK) atomKK->k_x.sync(); - if (mask & V_MASK) atomKK->k_v.sync(); - if (mask & F_MASK) atomKK->k_f.sync(); - if (mask & TAG_MASK) atomKK->k_tag.sync(); - if (mask & TYPE_MASK) atomKK->k_type.sync(); - if (mask & MASK_MASK) atomKK->k_mask.sync(); - if (mask & IMAGE_MASK) atomKK->k_image.sync(); - if (mask & MOLECULE_MASK) atomKK->k_molecule.sync(); + if (mask & X_MASK) k_x.sync(); + if (mask & V_MASK) k_v.sync(); + if (mask & F_MASK) k_f.sync(); + if (mask & TAG_MASK) k_tag.sync(); + if (mask & TYPE_MASK) k_type.sync(); + if (mask & MASK_MASK) k_mask.sync(); + if (mask & IMAGE_MASK) k_image.sync(); + if (mask & MOLECULE_MASK) k_molecule.sync(); if (mask & SPECIAL_MASK) { - atomKK->k_nspecial.sync(); - atomKK->k_special.sync(); + k_nspecial.sync(); + k_special.sync(); } if (mask & BOND_MASK) { - atomKK->k_num_bond.sync(); - atomKK->k_bond_type.sync(); - atomKK->k_bond_atom.sync(); + k_num_bond.sync(); + k_bond_type.sync(); + k_bond_atom.sync(); } if (mask & ANGLE_MASK) { - atomKK->k_num_angle.sync(); - atomKK->k_angle_type.sync(); - atomKK->k_angle_atom1.sync(); - atomKK->k_angle_atom2.sync(); - atomKK->k_angle_atom3.sync(); + k_num_angle.sync(); + k_angle_type.sync(); + k_angle_atom1.sync(); + k_angle_atom2.sync(); + k_angle_atom3.sync(); } if (mask & DIHEDRAL_MASK) { - atomKK->k_num_dihedral.sync(); - atomKK->k_dihedral_type.sync(); - atomKK->k_dihedral_atom1.sync(); - atomKK->k_dihedral_atom2.sync(); - atomKK->k_dihedral_atom3.sync(); - atomKK->k_dihedral_atom4.sync(); + k_num_dihedral.sync(); + k_dihedral_type.sync(); + k_dihedral_atom1.sync(); + k_dihedral_atom2.sync(); + k_dihedral_atom3.sync(); + k_dihedral_atom4.sync(); } if (mask & IMPROPER_MASK) { - atomKK->k_num_improper.sync(); - atomKK->k_improper_type.sync(); - atomKK->k_improper_atom1.sync(); - atomKK->k_improper_atom2.sync(); - atomKK->k_improper_atom3.sync(); - atomKK->k_improper_atom4.sync(); + k_num_improper.sync(); + k_improper_type.sync(); + k_improper_atom1.sync(); + k_improper_atom2.sync(); + k_improper_atom3.sync(); + k_improper_atom4.sync(); } } } diff --git a/src/KOKKOS/atom_vec_sphere_kokkos.cpp b/src/KOKKOS/atom_vec_sphere_kokkos.cpp index f05e8d09df..df86cacccc 100644 --- a/src/KOKKOS/atom_vec_sphere_kokkos.cpp +++ b/src/KOKKOS/atom_vec_sphere_kokkos.cpp @@ -27,10 +27,11 @@ #include "memory.h" #include "error.h" #include "memory_kokkos.h" +#include "force.h" using namespace LAMMPS_NS; -#define DELTA 10000 +#define DELTA 16384 static const double MY_PI = 3.14159265358979323846; // pi @@ -2791,30 +2792,47 @@ bigint AtomVecSphereKokkos::memory_usage() void AtomVecSphereKokkos::sync(ExecutionSpace space, unsigned int mask) { + int nlocal = atom->nlocal; + int nall = atom->nlocal + atom->nghost; + + // avoid unnecessary data transfer + + auto k_x = Kokkos::subview(atomKK->k_x,std::make_pair(0,nall),Kokkos::ALL); + auto k_v = Kokkos::subview(atomKK->k_v,std::make_pair(0,nall),Kokkos::ALL); + auto k_f = Kokkos::subview(atomKK->k_f,std::make_pair(0,(!force || force->newton)?nall:nlocal),Kokkos::ALL); + auto k_tag = Kokkos::subview(atomKK->k_tag,std::make_pair(0,nall)); + auto k_type = Kokkos::subview(atomKK->k_type,std::make_pair(0,nall)); + auto k_mask = Kokkos::subview(atomKK->k_mask,std::make_pair(0,nall)); + auto k_image = Kokkos::subview(atomKK->k_image,std::make_pair(0,nall)); + auto k_radius = Kokkos::subview(atomKK->k_radius,std::make_pair(0,nall)); + auto k_rmass = Kokkos::subview(atomKK->k_rmass,std::make_pair(0,nall)); + auto k_omega = Kokkos::subview(atomKK->k_omega,std::make_pair(0,nall),Kokkos::ALL); + auto k_torque = Kokkos::subview(atomKK->k_torque,std::make_pair(0,nall),Kokkos::ALL); + if (space == Device) { - if (mask & X_MASK) atomKK->k_x.sync(); - if (mask & V_MASK) atomKK->k_v.sync(); - if (mask & F_MASK) atomKK->k_f.sync(); - if (mask & TAG_MASK) atomKK->k_tag.sync(); - if (mask & TYPE_MASK) atomKK->k_type.sync(); - if (mask & MASK_MASK) atomKK->k_mask.sync(); - if (mask & IMAGE_MASK) atomKK->k_image.sync(); - if (mask & RADIUS_MASK) atomKK->k_radius.sync(); - if (mask & RMASS_MASK) atomKK->k_rmass.sync(); - if (mask & OMEGA_MASK) atomKK->k_omega.sync(); - if (mask & TORQUE_MASK) atomKK->k_torque.sync(); + if (mask & X_MASK) k_x.sync(); + if (mask & V_MASK) k_v.sync(); + if (mask & F_MASK) k_f.sync(); + if (mask & TAG_MASK) k_tag.sync(); + if (mask & TYPE_MASK) k_type.sync(); + if (mask & MASK_MASK) k_mask.sync(); + if (mask & IMAGE_MASK) k_image.sync(); + if (mask & RADIUS_MASK) k_radius.sync(); + if (mask & RMASS_MASK) k_rmass.sync(); + if (mask & OMEGA_MASK) k_omega.sync(); + if (mask & TORQUE_MASK) k_torque.sync(); } else { - if (mask & X_MASK) atomKK->k_x.sync(); - if (mask & V_MASK) atomKK->k_v.sync(); - if (mask & F_MASK) atomKK->k_f.sync(); - if (mask & TAG_MASK) atomKK->k_tag.sync(); - if (mask & TYPE_MASK) atomKK->k_type.sync(); - if (mask & MASK_MASK) atomKK->k_mask.sync(); - if (mask & IMAGE_MASK) atomKK->k_image.sync(); - if (mask & RADIUS_MASK) atomKK->k_radius.sync(); - if (mask & RMASS_MASK) atomKK->k_rmass.sync(); - if (mask & OMEGA_MASK) atomKK->k_omega.sync(); - if (mask & TORQUE_MASK) atomKK->k_torque.sync(); + if (mask & X_MASK) k_x.sync(); + if (mask & V_MASK) k_v.sync(); + if (mask & F_MASK) k_f.sync(); + if (mask & TAG_MASK) k_tag.sync(); + if (mask & TYPE_MASK) k_type.sync(); + if (mask & MASK_MASK) k_mask.sync(); + if (mask & IMAGE_MASK) k_image.sync(); + if (mask & RADIUS_MASK) k_radius.sync(); + if (mask & RMASS_MASK) k_rmass.sync(); + if (mask & OMEGA_MASK) k_omega.sync(); + if (mask & TORQUE_MASK) k_torque.sync(); } } From 618547b72e2954f2c70663d6359e4536635b8284 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 9 Apr 2019 14:40:20 -0600 Subject: [PATCH 064/311] Reduce DELTA and revert subview change --- src/KOKKOS/atom_vec_angle_kokkos.cpp | 102 ++++++-------- src/KOKKOS/atom_vec_atomic_kokkos.cpp | 47 +++---- src/KOKKOS/atom_vec_bond_kokkos.cpp | 78 ++++------- src/KOKKOS/atom_vec_charge_kokkos.cpp | 52 +++---- src/KOKKOS/atom_vec_dpd_kokkos.cpp | 92 +++++-------- src/KOKKOS/atom_vec_full_kokkos.cpp | 167 +++++++++-------------- src/KOKKOS/atom_vec_molecular_kokkos.cpp | 162 +++++++++------------- src/KOKKOS/atom_vec_sphere_kokkos.cpp | 67 ++++----- 8 files changed, 292 insertions(+), 475 deletions(-) diff --git a/src/KOKKOS/atom_vec_angle_kokkos.cpp b/src/KOKKOS/atom_vec_angle_kokkos.cpp index 06ef45272b..df455dd3ff 100644 --- a/src/KOKKOS/atom_vec_angle_kokkos.cpp +++ b/src/KOKKOS/atom_vec_angle_kokkos.cpp @@ -21,11 +21,10 @@ #include "atom_masks.h" #include "memory_kokkos.h" #include "error.h" -#include "force.h" using namespace LAMMPS_NS; -#define DELTA 16384 +#define DELTA 10 /* ---------------------------------------------------------------------- */ @@ -60,7 +59,8 @@ AtomVecAngleKokkos::AtomVecAngleKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) void AtomVecAngleKokkos::grow(int n) { - if (n == 0) nmax += DELTA; + int step = MAX(DELTA,nmax*0.01); + if (n == 0) nmax += step; else nmax = n; atomKK->nmax = nmax; if (nmax < 0 || nmax > MAXSMALLINT) @@ -1764,79 +1764,55 @@ bigint AtomVecAngleKokkos::memory_usage() void AtomVecAngleKokkos::sync(ExecutionSpace space, unsigned int mask) { - int nlocal = atom->nlocal; - int nall = atom->nlocal + atom->nghost; - - // avoid unnecessary data transfer - - auto k_x = Kokkos::subview(atomKK->k_x,std::make_pair(0,nall),Kokkos::ALL); - auto k_v = Kokkos::subview(atomKK->k_v,std::make_pair(0,nall),Kokkos::ALL); - auto k_f = Kokkos::subview(atomKK->k_f,std::make_pair(0,(!force || force->newton)?nall:nlocal),Kokkos::ALL); - auto k_tag = Kokkos::subview(atomKK->k_tag,std::make_pair(0,nall)); - auto k_type = Kokkos::subview(atomKK->k_type,std::make_pair(0,nall)); - auto k_mask = Kokkos::subview(atomKK->k_mask,std::make_pair(0,nall)); - auto k_image = Kokkos::subview(atomKK->k_image,std::make_pair(0,nall)); - auto k_molecule = Kokkos::subview(atomKK->k_molecule,std::make_pair(0,nall)); - auto k_nspecial = Kokkos::subview(atomKK->k_nspecial,std::make_pair(0,nall),Kokkos::ALL); - auto k_special = Kokkos::subview(atomKK->k_special,std::make_pair(0,nall),Kokkos::ALL); - auto k_num_bond = Kokkos::subview(atomKK->k_num_bond,std::make_pair(0,nall)); - auto k_bond_type = Kokkos::subview(atomKK->k_bond_type,std::make_pair(0,nall),Kokkos::ALL); - auto k_bond_atom = Kokkos::subview(atomKK->k_bond_atom,std::make_pair(0,nall),Kokkos::ALL); - auto k_num_angle = Kokkos::subview(atomKK->k_num_angle,std::make_pair(0,nall)); - auto k_angle_type = Kokkos::subview(atomKK->k_angle_type,std::make_pair(0,nall),Kokkos::ALL); - auto k_angle_atom1 = Kokkos::subview(atomKK->k_angle_atom1,std::make_pair(0,nall),Kokkos::ALL); - auto k_angle_atom2 = Kokkos::subview(atomKK->k_angle_atom2,std::make_pair(0,nall),Kokkos::ALL); - auto k_angle_atom3 = Kokkos::subview(atomKK->k_angle_atom3,std::make_pair(0,nall),Kokkos::ALL); - if (space == Device) { - if (mask & X_MASK) k_x.sync(); - if (mask & V_MASK) k_v.sync(); - if (mask & F_MASK) k_f.sync(); - if (mask & TAG_MASK) k_tag.sync(); - if (mask & TYPE_MASK) k_type.sync(); - if (mask & MASK_MASK) k_mask.sync(); - if (mask & IMAGE_MASK) k_image.sync(); - if (mask & MOLECULE_MASK) k_molecule.sync(); + if (mask & X_MASK) atomKK->k_x.sync(); + if (mask & V_MASK) atomKK->k_v.sync(); + if (mask & F_MASK) atomKK->k_f.sync(); + if (mask & TAG_MASK) atomKK->k_tag.sync(); + if (mask & TYPE_MASK) atomKK->k_type.sync(); + if (mask & MASK_MASK) atomKK->k_mask.sync(); + if (mask & IMAGE_MASK) atomKK->k_image.sync(); + if (mask & MOLECULE_MASK) atomKK->k_molecule.sync(); if (mask & SPECIAL_MASK) { - k_nspecial.sync(); - k_special.sync(); + atomKK->k_nspecial.sync(); + atomKK->k_special.sync(); } if (mask & BOND_MASK) { - k_num_bond.sync(); - k_bond_type.sync(); - k_bond_atom.sync(); + atomKK->k_num_bond.sync(); + atomKK->k_bond_type.sync(); + atomKK->k_bond_atom.sync(); } if (mask & ANGLE_MASK) { - k_num_angle.sync(); - k_angle_type.sync(); - k_angle_atom1.sync(); - k_angle_atom2.sync(); - k_angle_atom3.sync(); + atomKK->k_num_angle.sync(); + atomKK->k_angle_type.sync(); + atomKK->k_angle_atom1.sync(); + atomKK->k_angle_atom2.sync(); + atomKK->k_angle_atom3.sync(); } } else { - if (mask & X_MASK) k_x.sync(); - if (mask & V_MASK) k_v.sync(); - if (mask & F_MASK) k_f.sync(); - if (mask & TAG_MASK) k_tag.sync(); - if (mask & TYPE_MASK) k_type.sync(); - if (mask & MASK_MASK) k_mask.sync(); - if (mask & IMAGE_MASK) k_image.sync(); - if (mask & MOLECULE_MASK) k_molecule.sync(); + if (mask & X_MASK) atomKK->k_x.sync(); + if (mask & V_MASK) atomKK->k_v.sync(); + if (mask & F_MASK) atomKK->k_f.sync(); + if (mask & TAG_MASK) atomKK->k_tag.sync(); + if (mask & TYPE_MASK) atomKK->k_type.sync(); + if (mask & MASK_MASK) atomKK->k_mask.sync(); + if (mask & IMAGE_MASK) atomKK->k_image.sync(); + if (mask & MOLECULE_MASK) atomKK->k_molecule.sync(); if (mask & SPECIAL_MASK) { - k_nspecial.sync(); - k_special.sync(); + atomKK->k_nspecial.sync(); + atomKK->k_special.sync(); } if (mask & BOND_MASK) { - k_num_bond.sync(); - k_bond_type.sync(); - k_bond_atom.sync(); + atomKK->k_num_bond.sync(); + atomKK->k_bond_type.sync(); + atomKK->k_bond_atom.sync(); } if (mask & ANGLE_MASK) { - k_num_angle.sync(); - k_angle_type.sync(); - k_angle_atom1.sync(); - k_angle_atom2.sync(); - k_angle_atom3.sync(); + atomKK->k_num_angle.sync(); + atomKK->k_angle_type.sync(); + atomKK->k_angle_atom1.sync(); + atomKK->k_angle_atom2.sync(); + atomKK->k_angle_atom3.sync(); } } } diff --git a/src/KOKKOS/atom_vec_atomic_kokkos.cpp b/src/KOKKOS/atom_vec_atomic_kokkos.cpp index ae357e6fe4..e3c1bee956 100644 --- a/src/KOKKOS/atom_vec_atomic_kokkos.cpp +++ b/src/KOKKOS/atom_vec_atomic_kokkos.cpp @@ -21,11 +21,10 @@ #include "atom_masks.h" #include "memory_kokkos.h" #include "error.h" -#include "force.h" using namespace LAMMPS_NS; -#define DELTA 16384 +#define DELTA 10 /* ---------------------------------------------------------------------- */ @@ -56,7 +55,8 @@ AtomVecAtomicKokkos::AtomVecAtomicKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) void AtomVecAtomicKokkos::grow(int n) { - if (n == 0) nmax += DELTA; + int step = MAX(DELTA,nmax*0.01); + if (n == 0) nmax += step; else nmax = n; atomKK->nmax = nmax; if (nmax < 0 || nmax > MAXSMALLINT) @@ -898,35 +898,22 @@ bigint AtomVecAtomicKokkos::memory_usage() void AtomVecAtomicKokkos::sync(ExecutionSpace space, unsigned int mask) { - int nlocal = atom->nlocal; - int nall = atom->nlocal + atom->nghost; - - // avoid unnecessary data transfer - - auto k_x = Kokkos::subview(atomKK->k_x,std::make_pair(0,nall),Kokkos::ALL); - auto k_v = Kokkos::subview(atomKK->k_v,std::make_pair(0,nall),Kokkos::ALL); - auto k_f = Kokkos::subview(atomKK->k_f,std::make_pair(0,(!force || force->newton)?nall:nlocal),Kokkos::ALL); - auto k_tag = Kokkos::subview(atomKK->k_tag,std::make_pair(0,nall)); - auto k_type = Kokkos::subview(atomKK->k_type,std::make_pair(0,nall)); - auto k_mask = Kokkos::subview(atomKK->k_mask,std::make_pair(0,nall)); - auto k_image = Kokkos::subview(atomKK->k_image,std::make_pair(0,nall)); - if (space == Device) { - if (mask & X_MASK) k_x.sync(); - if (mask & V_MASK) k_v.sync(); - if (mask & F_MASK) k_f.sync(); - if (mask & TAG_MASK) k_tag.sync(); - if (mask & TYPE_MASK) k_type.sync(); - if (mask & MASK_MASK) k_mask.sync(); - if (mask & IMAGE_MASK) k_image.sync(); + if (mask & X_MASK) atomKK->k_x.sync(); + if (mask & V_MASK) atomKK->k_v.sync(); + if (mask & F_MASK) atomKK->k_f.sync(); + if (mask & TAG_MASK) atomKK->k_tag.sync(); + if (mask & TYPE_MASK) atomKK->k_type.sync(); + if (mask & MASK_MASK) atomKK->k_mask.sync(); + if (mask & IMAGE_MASK) atomKK->k_image.sync(); } else { - if (mask & X_MASK) k_x.sync(); - if (mask & V_MASK) k_v.sync(); - if (mask & F_MASK) k_f.sync(); - if (mask & TAG_MASK) k_tag.sync(); - if (mask & TYPE_MASK) k_type.sync(); - if (mask & MASK_MASK) k_mask.sync(); - if (mask & IMAGE_MASK) k_image.sync(); + if (mask & X_MASK) atomKK->k_x.sync(); + if (mask & V_MASK) atomKK->k_v.sync(); + if (mask & F_MASK) atomKK->k_f.sync(); + if (mask & TAG_MASK) atomKK->k_tag.sync(); + if (mask & TYPE_MASK) atomKK->k_type.sync(); + if (mask & MASK_MASK) atomKK->k_mask.sync(); + if (mask & IMAGE_MASK) atomKK->k_image.sync(); } } diff --git a/src/KOKKOS/atom_vec_bond_kokkos.cpp b/src/KOKKOS/atom_vec_bond_kokkos.cpp index 6acd536dd8..825b141b8b 100644 --- a/src/KOKKOS/atom_vec_bond_kokkos.cpp +++ b/src/KOKKOS/atom_vec_bond_kokkos.cpp @@ -21,11 +21,10 @@ #include "atom_masks.h" #include "memory_kokkos.h" #include "error.h" -#include "force.h" using namespace LAMMPS_NS; -#define DELTA 16384 +#define DELTA 10 /* ---------------------------------------------------------------------- */ @@ -57,7 +56,8 @@ AtomVecBondKokkos::AtomVecBondKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) void AtomVecBondKokkos::grow(int n) { - if (n == 0) nmax += DELTA; + int step = MAX(DELTA,nmax*0.01); + if (n == 0) nmax += step; else nmax = n; atomKK->nmax = nmax; if (nmax < 0 || nmax > MAXSMALLINT) @@ -1176,61 +1176,41 @@ bigint AtomVecBondKokkos::memory_usage() void AtomVecBondKokkos::sync(ExecutionSpace space, unsigned int mask) { - int nlocal = atom->nlocal; - int nall = atom->nlocal + atom->nghost; - - // avoid unnecessary data transfer - - auto k_x = Kokkos::subview(atomKK->k_x,std::make_pair(0,nall),Kokkos::ALL); - auto k_v = Kokkos::subview(atomKK->k_v,std::make_pair(0,nall),Kokkos::ALL); - auto k_f = Kokkos::subview(atomKK->k_f,std::make_pair(0,(!force || force->newton)?nall:nlocal),Kokkos::ALL); - auto k_tag = Kokkos::subview(atomKK->k_tag,std::make_pair(0,nall)); - auto k_type = Kokkos::subview(atomKK->k_type,std::make_pair(0,nall)); - auto k_mask = Kokkos::subview(atomKK->k_mask,std::make_pair(0,nall)); - auto k_image = Kokkos::subview(atomKK->k_image,std::make_pair(0,nall)); - auto k_q = Kokkos::subview(atomKK->k_q,std::make_pair(0,nall)); - auto k_molecule = Kokkos::subview(atomKK->k_molecule,std::make_pair(0,nall)); - auto k_nspecial = Kokkos::subview(atomKK->k_nspecial,std::make_pair(0,nall),Kokkos::ALL); - auto k_special = Kokkos::subview(atomKK->k_special,std::make_pair(0,nall),Kokkos::ALL); - auto k_num_bond = Kokkos::subview(atomKK->k_num_bond,std::make_pair(0,nall)); - auto k_bond_type = Kokkos::subview(atomKK->k_bond_type,std::make_pair(0,nall),Kokkos::ALL); - auto k_bond_atom = Kokkos::subview(atomKK->k_bond_atom,std::make_pair(0,nall),Kokkos::ALL); - if (space == Device) { - if (mask & X_MASK) k_x.sync(); - if (mask & V_MASK) k_v.sync(); - if (mask & F_MASK) k_f.sync(); - if (mask & TAG_MASK) k_tag.sync(); - if (mask & TYPE_MASK) k_type.sync(); - if (mask & MASK_MASK) k_mask.sync(); - if (mask & IMAGE_MASK) k_image.sync(); - if (mask & MOLECULE_MASK) k_molecule.sync(); + if (mask & X_MASK) atomKK->k_x.sync(); + if (mask & V_MASK) atomKK->k_v.sync(); + if (mask & F_MASK) atomKK->k_f.sync(); + if (mask & TAG_MASK) atomKK->k_tag.sync(); + if (mask & TYPE_MASK) atomKK->k_type.sync(); + if (mask & MASK_MASK) atomKK->k_mask.sync(); + if (mask & IMAGE_MASK) atomKK->k_image.sync(); + if (mask & MOLECULE_MASK) atomKK->k_molecule.sync(); if (mask & SPECIAL_MASK) { - k_nspecial.sync(); - k_special.sync(); + atomKK->k_nspecial.sync(); + atomKK->k_special.sync(); } if (mask & BOND_MASK) { - k_num_bond.sync(); - k_bond_type.sync(); - k_bond_atom.sync(); + atomKK->k_num_bond.sync(); + atomKK->k_bond_type.sync(); + atomKK->k_bond_atom.sync(); } } else { - if (mask & X_MASK) k_x.sync(); - if (mask & V_MASK) k_v.sync(); - if (mask & F_MASK) k_f.sync(); - if (mask & TAG_MASK) k_tag.sync(); - if (mask & TYPE_MASK) k_type.sync(); - if (mask & MASK_MASK) k_mask.sync(); - if (mask & IMAGE_MASK) k_image.sync(); - if (mask & MOLECULE_MASK) k_molecule.sync(); + if (mask & X_MASK) atomKK->k_x.sync(); + if (mask & V_MASK) atomKK->k_v.sync(); + if (mask & F_MASK) atomKK->k_f.sync(); + if (mask & TAG_MASK) atomKK->k_tag.sync(); + if (mask & TYPE_MASK) atomKK->k_type.sync(); + if (mask & MASK_MASK) atomKK->k_mask.sync(); + if (mask & IMAGE_MASK) atomKK->k_image.sync(); + if (mask & MOLECULE_MASK) atomKK->k_molecule.sync(); if (mask & SPECIAL_MASK) { - k_nspecial.sync(); - k_special.sync(); + atomKK->k_nspecial.sync(); + atomKK->k_special.sync(); } if (mask & BOND_MASK) { - k_num_bond.sync(); - k_bond_type.sync(); - k_bond_atom.sync(); + atomKK->k_num_bond.sync(); + atomKK->k_bond_type.sync(); + atomKK->k_bond_atom.sync(); } } } diff --git a/src/KOKKOS/atom_vec_charge_kokkos.cpp b/src/KOKKOS/atom_vec_charge_kokkos.cpp index 807f733745..933e029aa4 100644 --- a/src/KOKKOS/atom_vec_charge_kokkos.cpp +++ b/src/KOKKOS/atom_vec_charge_kokkos.cpp @@ -21,11 +21,10 @@ #include "atom_masks.h" #include "memory_kokkos.h" #include "error.h" -#include "force.h" using namespace LAMMPS_NS; -#define DELTA 16384 +#define DELTA 10 /* ---------------------------------------------------------------------- */ @@ -59,7 +58,8 @@ AtomVecChargeKokkos::AtomVecChargeKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) void AtomVecChargeKokkos::grow(int n) { - if (n == 0) nmax += DELTA; + int step = MAX(DELTA,nmax*0.01); + if (n == 0) nmax += step; else nmax = n; atomKK->nmax = nmax; if (nmax < 0 || nmax > MAXSMALLINT) @@ -1069,38 +1069,24 @@ bigint AtomVecChargeKokkos::memory_usage() void AtomVecChargeKokkos::sync(ExecutionSpace space, unsigned int mask) { - int nlocal = atom->nlocal; - int nall = atom->nlocal + atom->nghost; - - // avoid unnecessary data transfer - - auto k_x = Kokkos::subview(atomKK->k_x,std::make_pair(0,nall),Kokkos::ALL); - auto k_v = Kokkos::subview(atomKK->k_v,std::make_pair(0,nall),Kokkos::ALL); - auto k_f = Kokkos::subview(atomKK->k_f,std::make_pair(0,(!force || force->newton)?nall:nlocal),Kokkos::ALL); - auto k_tag = Kokkos::subview(atomKK->k_tag,std::make_pair(0,nall)); - auto k_type = Kokkos::subview(atomKK->k_type,std::make_pair(0,nall)); - auto k_mask = Kokkos::subview(atomKK->k_mask,std::make_pair(0,nall)); - auto k_image = Kokkos::subview(atomKK->k_image,std::make_pair(0,nall)); - auto k_q = Kokkos::subview(atomKK->k_q,std::make_pair(0,nall)); - if (space == Device) { - if (mask & X_MASK) k_x.sync(); - if (mask & V_MASK) k_v.sync(); - if (mask & F_MASK) k_f.sync(); - if (mask & TAG_MASK) k_tag.sync(); - if (mask & TYPE_MASK) k_type.sync(); - if (mask & MASK_MASK) k_mask.sync(); - if (mask & IMAGE_MASK) k_image.sync(); - if (mask & Q_MASK) k_q.sync(); + if (mask & X_MASK) atomKK->k_x.sync(); + if (mask & V_MASK) atomKK->k_v.sync(); + if (mask & F_MASK) atomKK->k_f.sync(); + if (mask & TAG_MASK) atomKK->k_tag.sync(); + if (mask & TYPE_MASK) atomKK->k_type.sync(); + if (mask & MASK_MASK) atomKK->k_mask.sync(); + if (mask & IMAGE_MASK) atomKK->k_image.sync(); + if (mask & Q_MASK) atomKK->k_q.sync(); } else { - if (mask & X_MASK) k_x.sync(); - if (mask & V_MASK) k_v.sync(); - if (mask & F_MASK) k_f.sync(); - if (mask & TAG_MASK) k_tag.sync(); - if (mask & TYPE_MASK) k_type.sync(); - if (mask & MASK_MASK) k_mask.sync(); - if (mask & IMAGE_MASK) k_image.sync(); - if (mask & Q_MASK) k_q.sync(); + if (mask & X_MASK) atomKK->k_x.sync(); + if (mask & V_MASK) atomKK->k_v.sync(); + if (mask & F_MASK) atomKK->k_f.sync(); + if (mask & TAG_MASK) atomKK->k_tag.sync(); + if (mask & TYPE_MASK) atomKK->k_type.sync(); + if (mask & MASK_MASK) atomKK->k_mask.sync(); + if (mask & IMAGE_MASK) atomKK->k_image.sync(); + if (mask & Q_MASK) atomKK->k_q.sync(); } } diff --git a/src/KOKKOS/atom_vec_dpd_kokkos.cpp b/src/KOKKOS/atom_vec_dpd_kokkos.cpp index 64105eaff5..8da89a49ca 100644 --- a/src/KOKKOS/atom_vec_dpd_kokkos.cpp +++ b/src/KOKKOS/atom_vec_dpd_kokkos.cpp @@ -21,11 +21,10 @@ #include "atom_masks.h" #include "memory_kokkos.h" #include "error.h" -#include "force.h" using namespace LAMMPS_NS; -#define DELTA 16384 +#define DELTA 10 /* ---------------------------------------------------------------------- */ @@ -61,7 +60,8 @@ AtomVecDPDKokkos::AtomVecDPDKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) void AtomVecDPDKokkos::grow(int n) { - if (n == 0) nmax += DELTA; + int step = MAX(DELTA,nmax*0.01); + if (n == 0) nmax += step; else nmax = n; atomKK->nmax = nmax; if (nmax < 0 || nmax > MAXSMALLINT) @@ -1857,62 +1857,40 @@ bigint AtomVecDPDKokkos::memory_usage() void AtomVecDPDKokkos::sync(ExecutionSpace space, unsigned int mask) { - int nlocal = atom->nlocal; - int nall = atom->nlocal + atom->nghost; - - // avoid unnecessary data transfer - - auto k_x = Kokkos::subview(atomKK->k_x,std::make_pair(0,nall),Kokkos::ALL); - auto k_v = Kokkos::subview(atomKK->k_v,std::make_pair(0,nall),Kokkos::ALL); - auto k_f = Kokkos::subview(atomKK->k_f,std::make_pair(0,(!force || force->newton)?nall:nlocal),Kokkos::ALL); - auto k_tag = Kokkos::subview(atomKK->k_tag,std::make_pair(0,nall)); - auto k_type = Kokkos::subview(atomKK->k_type,std::make_pair(0,nall)); - auto k_mask = Kokkos::subview(atomKK->k_mask,std::make_pair(0,nall)); - auto k_image = Kokkos::subview(atomKK->k_image,std::make_pair(0,nall)); - auto k_rho = Kokkos::subview(atomKK->k_rho,std::make_pair(0,nall)); - auto k_dpdTheta = Kokkos::subview(atomKK->k_dpdTheta,std::make_pair(0,nall)); - auto k_uCond = Kokkos::subview(atomKK->k_uCond,std::make_pair(0,nall)); - auto k_uMech = Kokkos::subview(atomKK->k_uMech,std::make_pair(0,nall)); - auto k_uChem = Kokkos::subview(atomKK->k_uChem,std::make_pair(0,nall)); - auto k_uCG = Kokkos::subview(atomKK->k_uCG,std::make_pair(0,nall)); - auto k_uCGnew = Kokkos::subview(atomKK->k_uCGnew,std::make_pair(0,nall)); - auto k_duChem = Kokkos::subview(atomKK->k_duChem,std::make_pair(0,nall)); - auto k_dvector = Kokkos::subview(atomKK->k_dvector,std::make_pair(0,nall),Kokkos::ALL); - if (space == Device) { - if (mask & X_MASK) k_x.sync(); - if (mask & V_MASK) k_v.sync(); - if (mask & F_MASK) k_f.sync(); - if (mask & TAG_MASK) k_tag.sync(); - if (mask & TYPE_MASK) k_type.sync(); - if (mask & MASK_MASK) k_mask.sync(); - if (mask & IMAGE_MASK) k_image.sync(); - if (mask & DPDRHO_MASK) k_rho.sync(); - if (mask & DPDTHETA_MASK) k_dpdTheta.sync(); - if (mask & UCOND_MASK) k_uCond.sync(); - if (mask & UMECH_MASK) k_uMech.sync(); - if (mask & UCHEM_MASK) k_uChem.sync(); - if (mask & UCG_MASK) k_uCG.sync(); - if (mask & UCGNEW_MASK) k_uCGnew.sync(); - if (mask & DUCHEM_MASK) k_duChem.sync(); - if (mask & DVECTOR_MASK) k_dvector.sync(); + if (mask & X_MASK) atomKK->k_x.sync(); + if (mask & V_MASK) atomKK->k_v.sync(); + if (mask & F_MASK) atomKK->k_f.sync(); + if (mask & TAG_MASK) atomKK->k_tag.sync(); + if (mask & TYPE_MASK) atomKK->k_type.sync(); + if (mask & MASK_MASK) atomKK->k_mask.sync(); + if (mask & IMAGE_MASK) atomKK->k_image.sync(); + if (mask & DPDRHO_MASK) atomKK->k_rho.sync(); + if (mask & DPDTHETA_MASK) atomKK->k_dpdTheta.sync(); + if (mask & UCOND_MASK) atomKK->k_uCond.sync(); + if (mask & UMECH_MASK) atomKK->k_uMech.sync(); + if (mask & UCHEM_MASK) atomKK->k_uChem.sync(); + if (mask & UCG_MASK) atomKK->k_uCG.sync(); + if (mask & UCGNEW_MASK) atomKK->k_uCGnew.sync(); + if (mask & DUCHEM_MASK) atomKK->k_duChem.sync(); + if (mask & DVECTOR_MASK) atomKK->k_dvector.sync(); } else { - if (mask & X_MASK) k_x.sync(); - if (mask & V_MASK) k_v.sync(); - if (mask & F_MASK) k_f.sync(); - if (mask & TAG_MASK) k_tag.sync(); - if (mask & TYPE_MASK) k_type.sync(); - if (mask & MASK_MASK) k_mask.sync(); - if (mask & IMAGE_MASK) k_image.sync(); - if (mask & DPDRHO_MASK) k_rho.sync(); - if (mask & DPDTHETA_MASK) k_dpdTheta.sync(); - if (mask & UCOND_MASK) k_uCond.sync(); - if (mask & UMECH_MASK) k_uMech.sync(); - if (mask & UCHEM_MASK) k_uChem.sync(); - if (mask & UCG_MASK) k_uCG.sync(); - if (mask & UCGNEW_MASK) k_uCGnew.sync(); - if (mask & DUCHEM_MASK) k_duChem.sync(); - if (mask & DVECTOR_MASK) k_dvector.sync(); + if (mask & X_MASK) atomKK->k_x.sync(); + if (mask & V_MASK) atomKK->k_v.sync(); + if (mask & F_MASK) atomKK->k_f.sync(); + if (mask & TAG_MASK) atomKK->k_tag.sync(); + if (mask & TYPE_MASK) atomKK->k_type.sync(); + if (mask & MASK_MASK) atomKK->k_mask.sync(); + if (mask & IMAGE_MASK) atomKK->k_image.sync(); + if (mask & DPDRHO_MASK) atomKK->k_rho.sync(); + if (mask & DPDTHETA_MASK) atomKK->k_dpdTheta.sync(); + if (mask & UCOND_MASK) atomKK->k_uCond.sync(); + if (mask & UMECH_MASK) atomKK->k_uMech.sync(); + if (mask & UCHEM_MASK) atomKK->k_uChem.sync(); + if (mask & UCG_MASK) atomKK->k_uCG.sync(); + if (mask & UCGNEW_MASK) atomKK->k_uCGnew.sync(); + if (mask & DUCHEM_MASK) atomKK->k_duChem.sync(); + if (mask & DVECTOR_MASK) atomKK->k_dvector.sync(); } } diff --git a/src/KOKKOS/atom_vec_full_kokkos.cpp b/src/KOKKOS/atom_vec_full_kokkos.cpp index f02a92d2f3..c07f3e0381 100644 --- a/src/KOKKOS/atom_vec_full_kokkos.cpp +++ b/src/KOKKOS/atom_vec_full_kokkos.cpp @@ -21,11 +21,10 @@ #include "atom_masks.h" #include "memory_kokkos.h" #include "error.h" -#include "force.h" using namespace LAMMPS_NS; -#define DELTA 16384 +#define DELTA 10 /* ---------------------------------------------------------------------- */ @@ -59,7 +58,8 @@ AtomVecFullKokkos::AtomVecFullKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) void AtomVecFullKokkos::grow(int n) { - if (n == 0) nmax += DELTA; + int step = MAX(DELTA,nmax*0.01); + if (n == 0) nmax += step; else nmax = n; atomKK->nmax = nmax; if (nmax < 0 || nmax > MAXSMALLINT) @@ -1652,126 +1652,89 @@ bigint AtomVecFullKokkos::memory_usage() void AtomVecFullKokkos::sync(ExecutionSpace space, unsigned int mask) { - int nlocal = atom->nlocal; - int nall = atom->nlocal + atom->nghost; - - // avoid unnecessary data transfer - - auto k_x = Kokkos::subview(atomKK->k_x,std::make_pair(0,nall),Kokkos::ALL); - auto k_v = Kokkos::subview(atomKK->k_v,std::make_pair(0,nall),Kokkos::ALL); - auto k_f = Kokkos::subview(atomKK->k_f,std::make_pair(0,(!force || force->newton)?nall:nlocal),Kokkos::ALL); - auto k_tag = Kokkos::subview(atomKK->k_tag,std::make_pair(0,nall)); - auto k_type = Kokkos::subview(atomKK->k_type,std::make_pair(0,nall)); - auto k_mask = Kokkos::subview(atomKK->k_mask,std::make_pair(0,nall)); - auto k_image = Kokkos::subview(atomKK->k_image,std::make_pair(0,nall)); - auto k_q = Kokkos::subview(atomKK->k_q,std::make_pair(0,nall)); - auto k_molecule = Kokkos::subview(atomKK->k_molecule,std::make_pair(0,nall)); - auto k_nspecial = Kokkos::subview(atomKK->k_nspecial,std::make_pair(0,nall),Kokkos::ALL); - auto k_special = Kokkos::subview(atomKK->k_special,std::make_pair(0,nall),Kokkos::ALL); - auto k_num_bond = Kokkos::subview(atomKK->k_num_bond,std::make_pair(0,nall)); - auto k_bond_type = Kokkos::subview(atomKK->k_bond_type,std::make_pair(0,nall),Kokkos::ALL); - auto k_bond_atom = Kokkos::subview(atomKK->k_bond_atom,std::make_pair(0,nall),Kokkos::ALL); - auto k_num_angle = Kokkos::subview(atomKK->k_num_angle,std::make_pair(0,nall)); - auto k_angle_type = Kokkos::subview(atomKK->k_angle_type,std::make_pair(0,nall),Kokkos::ALL); - auto k_angle_atom1 = Kokkos::subview(atomKK->k_angle_atom1,std::make_pair(0,nall),Kokkos::ALL); - auto k_angle_atom2 = Kokkos::subview(atomKK->k_angle_atom2,std::make_pair(0,nall),Kokkos::ALL); - auto k_angle_atom3 = Kokkos::subview(atomKK->k_angle_atom3,std::make_pair(0,nall),Kokkos::ALL); - auto k_num_dihedral = Kokkos::subview(atomKK->k_num_dihedral,std::make_pair(0,nall)); - auto k_dihedral_type = Kokkos::subview(atomKK->k_dihedral_type,std::make_pair(0,nall),Kokkos::ALL); - auto k_dihedral_atom1 = Kokkos::subview(atomKK->k_dihedral_atom1,std::make_pair(0,nall),Kokkos::ALL); - auto k_dihedral_atom2 = Kokkos::subview(atomKK->k_dihedral_atom2,std::make_pair(0,nall),Kokkos::ALL); - auto k_dihedral_atom3 = Kokkos::subview(atomKK->k_dihedral_atom3,std::make_pair(0,nall),Kokkos::ALL); - auto k_dihedral_atom4 = Kokkos::subview(atomKK->k_dihedral_atom4,std::make_pair(0,nall),Kokkos::ALL); - auto k_num_improper = Kokkos::subview(atomKK->k_num_improper,std::make_pair(0,nall)); - auto k_improper_type = Kokkos::subview(atomKK->k_improper_type,std::make_pair(0,nall),Kokkos::ALL); - auto k_improper_atom1 = Kokkos::subview(atomKK->k_improper_atom1,std::make_pair(0,nall),Kokkos::ALL); - auto k_improper_atom2 = Kokkos::subview(atomKK->k_improper_atom2,std::make_pair(0,nall),Kokkos::ALL); - auto k_improper_atom3 = Kokkos::subview(atomKK->k_improper_atom3,std::make_pair(0,nall),Kokkos::ALL); - auto k_improper_atom4 = Kokkos::subview(atomKK->k_improper_atom4,std::make_pair(0,nall),Kokkos::ALL); - if (space == Device) { - if (mask & X_MASK) k_x.sync(); - if (mask & V_MASK) k_v.sync(); - if (mask & F_MASK) k_f.sync(); - if (mask & TAG_MASK) k_tag.sync(); - if (mask & TYPE_MASK) k_type.sync(); - if (mask & MASK_MASK) k_mask.sync(); - if (mask & IMAGE_MASK) k_image.sync(); - if (mask & Q_MASK) k_q.sync(); - if (mask & MOLECULE_MASK) k_molecule.sync(); + if (mask & X_MASK) atomKK->k_x.sync(); + if (mask & V_MASK) atomKK->k_v.sync(); + if (mask & F_MASK) atomKK->k_f.sync(); + if (mask & TAG_MASK) atomKK->k_tag.sync(); + if (mask & TYPE_MASK) atomKK->k_type.sync(); + if (mask & MASK_MASK) atomKK->k_mask.sync(); + if (mask & IMAGE_MASK) atomKK->k_image.sync(); + if (mask & Q_MASK) atomKK->k_q.sync(); + if (mask & MOLECULE_MASK) atomKK->k_molecule.sync(); if (mask & SPECIAL_MASK) { - k_nspecial.sync(); - k_special.sync(); + atomKK->k_nspecial.sync(); + atomKK->k_special.sync(); } if (mask & BOND_MASK) { - k_num_bond.sync(); - k_bond_type.sync(); - k_bond_atom.sync(); + atomKK->k_num_bond.sync(); + atomKK->k_bond_type.sync(); + atomKK->k_bond_atom.sync(); } if (mask & ANGLE_MASK) { - k_num_angle.sync(); - k_angle_type.sync(); - k_angle_atom1.sync(); - k_angle_atom2.sync(); - k_angle_atom3.sync(); + atomKK->k_num_angle.sync(); + atomKK->k_angle_type.sync(); + atomKK->k_angle_atom1.sync(); + atomKK->k_angle_atom2.sync(); + atomKK->k_angle_atom3.sync(); } if (mask & DIHEDRAL_MASK) { - k_num_dihedral.sync(); - k_dihedral_type.sync(); - k_dihedral_atom1.sync(); - k_dihedral_atom2.sync(); - k_dihedral_atom3.sync(); - k_dihedral_atom4.sync(); + atomKK->k_num_dihedral.sync(); + atomKK->k_dihedral_type.sync(); + atomKK->k_dihedral_atom1.sync(); + atomKK->k_dihedral_atom2.sync(); + atomKK->k_dihedral_atom3.sync(); + atomKK->k_dihedral_atom4.sync(); } if (mask & IMPROPER_MASK) { - k_num_improper.sync(); - k_improper_type.sync(); - k_improper_atom1.sync(); - k_improper_atom2.sync(); - k_improper_atom3.sync(); - k_improper_atom4.sync(); + atomKK->k_num_improper.sync(); + atomKK->k_improper_type.sync(); + atomKK->k_improper_atom1.sync(); + atomKK->k_improper_atom2.sync(); + atomKK->k_improper_atom3.sync(); + atomKK->k_improper_atom4.sync(); } } else { - if (mask & X_MASK) k_x.sync(); - if (mask & V_MASK) k_v.sync(); - if (mask & F_MASK) k_f.sync(); - if (mask & TAG_MASK) k_tag.sync(); - if (mask & TYPE_MASK) k_type.sync(); - if (mask & MASK_MASK) k_mask.sync(); - if (mask & IMAGE_MASK) k_image.sync(); - if (mask & Q_MASK) k_q.sync(); - if (mask & MOLECULE_MASK) k_molecule.sync(); + if (mask & X_MASK) atomKK->k_x.sync(); + if (mask & V_MASK) atomKK->k_v.sync(); + if (mask & F_MASK) atomKK->k_f.sync(); + if (mask & TAG_MASK) atomKK->k_tag.sync(); + if (mask & TYPE_MASK) atomKK->k_type.sync(); + if (mask & MASK_MASK) atomKK->k_mask.sync(); + if (mask & IMAGE_MASK) atomKK->k_image.sync(); + if (mask & Q_MASK) atomKK->k_q.sync(); + if (mask & MOLECULE_MASK) atomKK->k_molecule.sync(); if (mask & SPECIAL_MASK) { - k_nspecial.sync(); - k_special.sync(); + atomKK->k_nspecial.sync(); + atomKK->k_special.sync(); } if (mask & BOND_MASK) { - k_num_bond.sync(); - k_bond_type.sync(); - k_bond_atom.sync(); + atomKK->k_num_bond.sync(); + atomKK->k_bond_type.sync(); + atomKK->k_bond_atom.sync(); } if (mask & ANGLE_MASK) { - k_num_angle.sync(); - k_angle_type.sync(); - k_angle_atom1.sync(); - k_angle_atom2.sync(); - k_angle_atom3.sync(); + atomKK->k_num_angle.sync(); + atomKK->k_angle_type.sync(); + atomKK->k_angle_atom1.sync(); + atomKK->k_angle_atom2.sync(); + atomKK->k_angle_atom3.sync(); } if (mask & DIHEDRAL_MASK) { - k_num_dihedral.sync(); - k_dihedral_type.sync(); - k_dihedral_atom1.sync(); - k_dihedral_atom2.sync(); - k_dihedral_atom3.sync(); - k_dihedral_atom4.sync(); + atomKK->k_num_dihedral.sync(); + atomKK->k_dihedral_type.sync(); + atomKK->k_dihedral_atom1.sync(); + atomKK->k_dihedral_atom2.sync(); + atomKK->k_dihedral_atom3.sync(); + atomKK->k_dihedral_atom4.sync(); } if (mask & IMPROPER_MASK) { - k_num_improper.sync(); - k_improper_type.sync(); - k_improper_atom1.sync(); - k_improper_atom2.sync(); - k_improper_atom3.sync(); - k_improper_atom4.sync(); + atomKK->k_num_improper.sync(); + atomKK->k_improper_type.sync(); + atomKK->k_improper_atom1.sync(); + atomKK->k_improper_atom2.sync(); + atomKK->k_improper_atom3.sync(); + atomKK->k_improper_atom4.sync(); } } } diff --git a/src/KOKKOS/atom_vec_molecular_kokkos.cpp b/src/KOKKOS/atom_vec_molecular_kokkos.cpp index 25ef6f0c7e..f832cddce2 100644 --- a/src/KOKKOS/atom_vec_molecular_kokkos.cpp +++ b/src/KOKKOS/atom_vec_molecular_kokkos.cpp @@ -21,11 +21,10 @@ #include "atom_masks.h" #include "memory_kokkos.h" #include "error.h" -#include "force.h" using namespace LAMMPS_NS; -#define DELTA 16384 +#define DELTA 10 /* ---------------------------------------------------------------------- */ @@ -59,7 +58,8 @@ AtomVecMolecularKokkos::AtomVecMolecularKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) void AtomVecMolecularKokkos::grow(int n) { - if (n == 0) nmax += DELTA; + int step = MAX(DELTA,nmax*0.01); + if (n == 0) nmax += step; else nmax = n; atomKK->nmax = nmax; if (nmax < 0 || nmax > MAXSMALLINT) @@ -2050,123 +2050,87 @@ bigint AtomVecMolecularKokkos::memory_usage() void AtomVecMolecularKokkos::sync(ExecutionSpace space, unsigned int mask) { - int nlocal = atom->nlocal; - int nall = atom->nlocal + atom->nghost; - - // avoid unnecessary data transfer - - auto k_x = Kokkos::subview(atomKK->k_x,std::make_pair(0,nall),Kokkos::ALL); - auto k_v = Kokkos::subview(atomKK->k_v,std::make_pair(0,nall),Kokkos::ALL); - auto k_f = Kokkos::subview(atomKK->k_f,std::make_pair(0,(!force || force->newton)?nall:nlocal),Kokkos::ALL); - auto k_tag = Kokkos::subview(atomKK->k_tag,std::make_pair(0,nall)); - auto k_type = Kokkos::subview(atomKK->k_type,std::make_pair(0,nall)); - auto k_mask = Kokkos::subview(atomKK->k_mask,std::make_pair(0,nall)); - auto k_image = Kokkos::subview(atomKK->k_image,std::make_pair(0,nall)); - auto k_molecule = Kokkos::subview(atomKK->k_molecule,std::make_pair(0,nall)); - auto k_nspecial = Kokkos::subview(atomKK->k_nspecial,std::make_pair(0,nall),Kokkos::ALL); - auto k_special = Kokkos::subview(atomKK->k_special,std::make_pair(0,nall),Kokkos::ALL); - auto k_num_bond = Kokkos::subview(atomKK->k_num_bond,std::make_pair(0,nall)); - auto k_bond_type = Kokkos::subview(atomKK->k_bond_type,std::make_pair(0,nall),Kokkos::ALL); - auto k_bond_atom = Kokkos::subview(atomKK->k_bond_atom,std::make_pair(0,nall),Kokkos::ALL); - auto k_num_angle = Kokkos::subview(atomKK->k_num_angle,std::make_pair(0,nall)); - auto k_angle_type = Kokkos::subview(atomKK->k_angle_type,std::make_pair(0,nall),Kokkos::ALL); - auto k_angle_atom1 = Kokkos::subview(atomKK->k_angle_atom1,std::make_pair(0,nall),Kokkos::ALL); - auto k_angle_atom2 = Kokkos::subview(atomKK->k_angle_atom2,std::make_pair(0,nall),Kokkos::ALL); - auto k_angle_atom3 = Kokkos::subview(atomKK->k_angle_atom3,std::make_pair(0,nall),Kokkos::ALL); - auto k_num_dihedral = Kokkos::subview(atomKK->k_num_dihedral,std::make_pair(0,nall)); - auto k_dihedral_type = Kokkos::subview(atomKK->k_dihedral_type,std::make_pair(0,nall),Kokkos::ALL); - auto k_dihedral_atom1 = Kokkos::subview(atomKK->k_dihedral_atom1,std::make_pair(0,nall),Kokkos::ALL); - auto k_dihedral_atom2 = Kokkos::subview(atomKK->k_dihedral_atom2,std::make_pair(0,nall),Kokkos::ALL); - auto k_dihedral_atom3 = Kokkos::subview(atomKK->k_dihedral_atom3,std::make_pair(0,nall),Kokkos::ALL); - auto k_dihedral_atom4 = Kokkos::subview(atomKK->k_dihedral_atom4,std::make_pair(0,nall),Kokkos::ALL); - auto k_num_improper = Kokkos::subview(atomKK->k_num_improper,std::make_pair(0,nall)); - auto k_improper_type = Kokkos::subview(atomKK->k_improper_type,std::make_pair(0,nall),Kokkos::ALL); - auto k_improper_atom1 = Kokkos::subview(atomKK->k_improper_atom1,std::make_pair(0,nall),Kokkos::ALL); - auto k_improper_atom2 = Kokkos::subview(atomKK->k_improper_atom2,std::make_pair(0,nall),Kokkos::ALL); - auto k_improper_atom3 = Kokkos::subview(atomKK->k_improper_atom3,std::make_pair(0,nall),Kokkos::ALL); - auto k_improper_atom4 = Kokkos::subview(atomKK->k_improper_atom4,std::make_pair(0,nall),Kokkos::ALL); - if (space == Device) { - if (mask & X_MASK) k_x.sync(); - if (mask & V_MASK) k_v.sync(); - if (mask & F_MASK) k_f.sync(); - if (mask & TAG_MASK) k_tag.sync(); - if (mask & TYPE_MASK) k_type.sync(); - if (mask & MASK_MASK) k_mask.sync(); - if (mask & IMAGE_MASK) k_image.sync(); - if (mask & MOLECULE_MASK) k_molecule.sync(); + if (mask & X_MASK) atomKK->k_x.sync(); + if (mask & V_MASK) atomKK->k_v.sync(); + if (mask & F_MASK) atomKK->k_f.sync(); + if (mask & TAG_MASK) atomKK->k_tag.sync(); + if (mask & TYPE_MASK) atomKK->k_type.sync(); + if (mask & MASK_MASK) atomKK->k_mask.sync(); + if (mask & IMAGE_MASK) atomKK->k_image.sync(); + if (mask & MOLECULE_MASK) atomKK->k_molecule.sync(); if (mask & SPECIAL_MASK) { - k_nspecial.sync(); - k_special.sync(); + atomKK->k_nspecial.sync(); + atomKK->k_special.sync(); } if (mask & BOND_MASK) { - k_num_bond.sync(); - k_bond_type.sync(); - k_bond_atom.sync(); + atomKK->k_num_bond.sync(); + atomKK->k_bond_type.sync(); + atomKK->k_bond_atom.sync(); } if (mask & ANGLE_MASK) { - k_num_angle.sync(); - k_angle_type.sync(); - k_angle_atom1.sync(); - k_angle_atom2.sync(); - k_angle_atom3.sync(); + atomKK->k_num_angle.sync(); + atomKK->k_angle_type.sync(); + atomKK->k_angle_atom1.sync(); + atomKK->k_angle_atom2.sync(); + atomKK->k_angle_atom3.sync(); } if (mask & DIHEDRAL_MASK) { - k_num_dihedral.sync(); - k_dihedral_type.sync(); - k_dihedral_atom1.sync(); - k_dihedral_atom2.sync(); - k_dihedral_atom3.sync(); - k_dihedral_atom4.sync(); + atomKK->k_num_dihedral.sync(); + atomKK->k_dihedral_type.sync(); + atomKK->k_dihedral_atom1.sync(); + atomKK->k_dihedral_atom2.sync(); + atomKK->k_dihedral_atom3.sync(); + atomKK->k_dihedral_atom4.sync(); } if (mask & IMPROPER_MASK) { - k_num_improper.sync(); - k_improper_type.sync(); - k_improper_atom1.sync(); - k_improper_atom2.sync(); - k_improper_atom3.sync(); - k_improper_atom4.sync(); + atomKK->k_num_improper.sync(); + atomKK->k_improper_type.sync(); + atomKK->k_improper_atom1.sync(); + atomKK->k_improper_atom2.sync(); + atomKK->k_improper_atom3.sync(); + atomKK->k_improper_atom4.sync(); } } else { - if (mask & X_MASK) k_x.sync(); - if (mask & V_MASK) k_v.sync(); - if (mask & F_MASK) k_f.sync(); - if (mask & TAG_MASK) k_tag.sync(); - if (mask & TYPE_MASK) k_type.sync(); - if (mask & MASK_MASK) k_mask.sync(); - if (mask & IMAGE_MASK) k_image.sync(); - if (mask & MOLECULE_MASK) k_molecule.sync(); + if (mask & X_MASK) atomKK->k_x.sync(); + if (mask & V_MASK) atomKK->k_v.sync(); + if (mask & F_MASK) atomKK->k_f.sync(); + if (mask & TAG_MASK) atomKK->k_tag.sync(); + if (mask & TYPE_MASK) atomKK->k_type.sync(); + if (mask & MASK_MASK) atomKK->k_mask.sync(); + if (mask & IMAGE_MASK) atomKK->k_image.sync(); + if (mask & MOLECULE_MASK) atomKK->k_molecule.sync(); if (mask & SPECIAL_MASK) { - k_nspecial.sync(); - k_special.sync(); + atomKK->k_nspecial.sync(); + atomKK->k_special.sync(); } if (mask & BOND_MASK) { - k_num_bond.sync(); - k_bond_type.sync(); - k_bond_atom.sync(); + atomKK->k_num_bond.sync(); + atomKK->k_bond_type.sync(); + atomKK->k_bond_atom.sync(); } if (mask & ANGLE_MASK) { - k_num_angle.sync(); - k_angle_type.sync(); - k_angle_atom1.sync(); - k_angle_atom2.sync(); - k_angle_atom3.sync(); + atomKK->k_num_angle.sync(); + atomKK->k_angle_type.sync(); + atomKK->k_angle_atom1.sync(); + atomKK->k_angle_atom2.sync(); + atomKK->k_angle_atom3.sync(); } if (mask & DIHEDRAL_MASK) { - k_num_dihedral.sync(); - k_dihedral_type.sync(); - k_dihedral_atom1.sync(); - k_dihedral_atom2.sync(); - k_dihedral_atom3.sync(); - k_dihedral_atom4.sync(); + atomKK->k_num_dihedral.sync(); + atomKK->k_dihedral_type.sync(); + atomKK->k_dihedral_atom1.sync(); + atomKK->k_dihedral_atom2.sync(); + atomKK->k_dihedral_atom3.sync(); + atomKK->k_dihedral_atom4.sync(); } if (mask & IMPROPER_MASK) { - k_num_improper.sync(); - k_improper_type.sync(); - k_improper_atom1.sync(); - k_improper_atom2.sync(); - k_improper_atom3.sync(); - k_improper_atom4.sync(); + atomKK->k_num_improper.sync(); + atomKK->k_improper_type.sync(); + atomKK->k_improper_atom1.sync(); + atomKK->k_improper_atom2.sync(); + atomKK->k_improper_atom3.sync(); + atomKK->k_improper_atom4.sync(); } } } diff --git a/src/KOKKOS/atom_vec_sphere_kokkos.cpp b/src/KOKKOS/atom_vec_sphere_kokkos.cpp index df86cacccc..17c2e8d804 100644 --- a/src/KOKKOS/atom_vec_sphere_kokkos.cpp +++ b/src/KOKKOS/atom_vec_sphere_kokkos.cpp @@ -27,11 +27,10 @@ #include "memory.h" #include "error.h" #include "memory_kokkos.h" -#include "force.h" using namespace LAMMPS_NS; -#define DELTA 16384 +#define DELTA 10 static const double MY_PI = 3.14159265358979323846; // pi @@ -94,7 +93,8 @@ void AtomVecSphereKokkos::init() void AtomVecSphereKokkos::grow(int n) { - if (n == 0) nmax += DELTA; + int step = MAX(DELTA,nmax*0.01); + if (n == 0) nmax += step; else nmax = n; atom->nmax = nmax; if (nmax < 0 || nmax > MAXSMALLINT) @@ -2792,47 +2792,30 @@ bigint AtomVecSphereKokkos::memory_usage() void AtomVecSphereKokkos::sync(ExecutionSpace space, unsigned int mask) { - int nlocal = atom->nlocal; - int nall = atom->nlocal + atom->nghost; - - // avoid unnecessary data transfer - - auto k_x = Kokkos::subview(atomKK->k_x,std::make_pair(0,nall),Kokkos::ALL); - auto k_v = Kokkos::subview(atomKK->k_v,std::make_pair(0,nall),Kokkos::ALL); - auto k_f = Kokkos::subview(atomKK->k_f,std::make_pair(0,(!force || force->newton)?nall:nlocal),Kokkos::ALL); - auto k_tag = Kokkos::subview(atomKK->k_tag,std::make_pair(0,nall)); - auto k_type = Kokkos::subview(atomKK->k_type,std::make_pair(0,nall)); - auto k_mask = Kokkos::subview(atomKK->k_mask,std::make_pair(0,nall)); - auto k_image = Kokkos::subview(atomKK->k_image,std::make_pair(0,nall)); - auto k_radius = Kokkos::subview(atomKK->k_radius,std::make_pair(0,nall)); - auto k_rmass = Kokkos::subview(atomKK->k_rmass,std::make_pair(0,nall)); - auto k_omega = Kokkos::subview(atomKK->k_omega,std::make_pair(0,nall),Kokkos::ALL); - auto k_torque = Kokkos::subview(atomKK->k_torque,std::make_pair(0,nall),Kokkos::ALL); - if (space == Device) { - if (mask & X_MASK) k_x.sync(); - if (mask & V_MASK) k_v.sync(); - if (mask & F_MASK) k_f.sync(); - if (mask & TAG_MASK) k_tag.sync(); - if (mask & TYPE_MASK) k_type.sync(); - if (mask & MASK_MASK) k_mask.sync(); - if (mask & IMAGE_MASK) k_image.sync(); - if (mask & RADIUS_MASK) k_radius.sync(); - if (mask & RMASS_MASK) k_rmass.sync(); - if (mask & OMEGA_MASK) k_omega.sync(); - if (mask & TORQUE_MASK) k_torque.sync(); + if (mask & X_MASK) atomKK->k_x.sync(); + if (mask & V_MASK) atomKK->k_v.sync(); + if (mask & F_MASK) atomKK->k_f.sync(); + if (mask & TAG_MASK) atomKK->k_tag.sync(); + if (mask & TYPE_MASK) atomKK->k_type.sync(); + if (mask & MASK_MASK) atomKK->k_mask.sync(); + if (mask & IMAGE_MASK) atomKK->k_image.sync(); + if (mask & RADIUS_MASK) atomKK->k_radius.sync(); + if (mask & RMASS_MASK) atomKK->k_rmass.sync(); + if (mask & OMEGA_MASK) atomKK->k_omega.sync(); + if (mask & TORQUE_MASK) atomKK->k_torque.sync(); } else { - if (mask & X_MASK) k_x.sync(); - if (mask & V_MASK) k_v.sync(); - if (mask & F_MASK) k_f.sync(); - if (mask & TAG_MASK) k_tag.sync(); - if (mask & TYPE_MASK) k_type.sync(); - if (mask & MASK_MASK) k_mask.sync(); - if (mask & IMAGE_MASK) k_image.sync(); - if (mask & RADIUS_MASK) k_radius.sync(); - if (mask & RMASS_MASK) k_rmass.sync(); - if (mask & OMEGA_MASK) k_omega.sync(); - if (mask & TORQUE_MASK) k_torque.sync(); + if (mask & X_MASK) atomKK->k_x.sync(); + if (mask & V_MASK) atomKK->k_v.sync(); + if (mask & F_MASK) atomKK->k_f.sync(); + if (mask & TAG_MASK) atomKK->k_tag.sync(); + if (mask & TYPE_MASK) atomKK->k_type.sync(); + if (mask & MASK_MASK) atomKK->k_mask.sync(); + if (mask & IMAGE_MASK) atomKK->k_image.sync(); + if (mask & RADIUS_MASK) atomKK->k_radius.sync(); + if (mask & RMASS_MASK) atomKK->k_rmass.sync(); + if (mask & OMEGA_MASK) atomKK->k_omega.sync(); + if (mask & TORQUE_MASK) atomKK->k_torque.sync(); } } From 073f0034707d5babc4effb4507f81ff296e732bd Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 9 Apr 2019 15:17:40 -0600 Subject: [PATCH 065/311] Doc tweak --- doc/src/Speed_kokkos.txt | 30 ++++++++++++++++-------------- doc/src/package.txt | 27 ++++++++++++++------------- 2 files changed, 30 insertions(+), 27 deletions(-) diff --git a/doc/src/Speed_kokkos.txt b/doc/src/Speed_kokkos.txt index 23155cd540..fd33491253 100644 --- a/doc/src/Speed_kokkos.txt +++ b/doc/src/Speed_kokkos.txt @@ -46,7 +46,7 @@ software version 7.5 or later must be installed on your system. See the discussion for the "GPU package"_Speed_gpu.html for details of how to check and do this. -NOTE: Kokkos with CUDA currently implicitly assumes, that the MPI +NOTE: Kokkos with CUDA currently implicitly assumes that the MPI library is CUDA-aware and has support for GPU-direct. This is not always the case, especially when using pre-compiled MPI libraries provided by a Linux distribution. This is not a problem when using @@ -207,19 +207,21 @@ supports. [Running on GPUs:] -Use the "-k" "command-line switch"_Run_options.html to -specify the number of GPUs per node. Typically the -np setting of the -mpirun command should set the number of MPI tasks/node to be equal to -the number of physical GPUs on the node. You can assign multiple MPI -tasks to the same GPU with the KOKKOS package, but this is usually -only faster if significant portions of the input script have not -been ported to use Kokkos. Using CUDA MPS is recommended in this -scenario. Using a CUDA-aware MPI library with support for GPU-direct -is highly recommended. GPU-direct use can be avoided by using -"-pk kokkos gpu/direct no"_package.html. -As above for multi-core CPUs (and no GPU), if N is the number of -physical cores/node, then the number of MPI tasks/node should not -exceed N. +Use the "-k" "command-line switch"_Run_options.html to specify the +number of GPUs per node. Typically the -np setting of the mpirun command +should set the number of MPI tasks/node to be equal to the number of +physical GPUs on the node. You can assign multiple MPI tasks to the same +GPU with the KOKKOS package, but this is usually only faster if some +portions of the input script have not been ported to use Kokkos. In this +case, also packing/unpacking communication buffers on the host may give +speedup (see the KOKKOS "package"_package.html command). Using CUDA MPS +is recommended in this scenario. + +Using a CUDA-aware MPI library with +support for GPU-direct is highly recommended. GPU-direct use can be +avoided by using "-pk kokkos gpu/direct no"_package.html. As above for +multi-core CPUs (and no GPU), if N is the number of physical cores/node, +then the number of MPI tasks/node should not exceed N. -k on g Ng :pre diff --git a/doc/src/package.txt b/doc/src/package.txt index b6759bf2e9..2f17b2c7f3 100644 --- a/doc/src/package.txt +++ b/doc/src/package.txt @@ -490,10 +490,10 @@ are rebuilt. The data is only for atoms that migrate to new processors. "Forward" communication happens every timestep. "Reverse" communication happens every timestep if the {newton} option is on. The data is for atom coordinates and any other atom properties that needs to be updated -for ghost atoms owned by each processor. +for ghost atoms owned by each processor. The {comm} keyword is simply a short-cut to set the same value for both -the {comm/exchange} and {comm/forward} and {comm/reverse} keywords. +the {comm/exchange} and {comm/forward} and {comm/reverse} keywords. The value options for all 3 keywords are {no} or {host} or {device}. A value of {no} means to use the standard non-KOKKOS method of @@ -501,26 +501,26 @@ packing/unpacking data for the communication. A value of {host} means to use the host, typically a multi-core CPU, and perform the packing/unpacking in parallel with threads. A value of {device} means to use the device, typically a GPU, to perform the packing/unpacking -operation. +operation. The optimal choice for these keywords depends on the input script and the hardware used. The {no} value is useful for verifying that the Kokkos-based {host} and {device} values are working correctly. It is the -default when running on CPUs since it is usually the fastest. +default when running on CPUs since it is usually the fastest. When running on CPUs or Xeon Phi, the {host} and {device} values work identically. When using GPUs, the {device} value is the default since it will typically be optimal if all of your styles used in your input script are supported by the KOKKOS package. In this case data can stay on the GPU for many timesteps without being moved between the host and -GPU, if you use the {device} value. This requires that your MPI is able -to access GPU memory directly. Currently that is true for OpenMPI 1.8 -(or later versions), Mvapich2 1.9 (or later), and CrayMPI. If your -script uses styles (e.g. fixes) which are not yet supported by the -KOKKOS package, then data has to be move between the host and device -anyway, so it is typically faster to let the host handle communication, -by using the {host} value. Using {host} instead of {no} will enable use -of multiple threads to pack/unpack communicated data. +GPU, if you use the {device} value. If your script uses styles (e.g. +fixes) which are not yet supported by the KOKKOS package, then data has +to be move between the host and device anyway, so it is typically faster +to let the host handle communication, by using the {host} value. Using +{host} instead of {no} will enable use of multiple threads to +pack/unpack communicated data. When running small systems on a GPU, +performing the exchange pack/unpack on the host CPU can give speedup +since it reduces the number of CUDA kernel launches. The {gpu/direct} keyword chooses whether GPU-direct will be used. When this keyword is set to {on}, buffers in GPU memory are passed directly @@ -533,7 +533,8 @@ the {gpu/direct} keyword is automatically set to {off} by default. When the {gpu/direct} keyword is set to {off} while any of the {comm} keywords are set to {device}, the value for these {comm} keywords will be automatically changed to {host}. This setting has no effect if not -running on GPUs. +running on GPUs. GPU-direct is available for OpenMPI 1.8 (or later +versions), Mvapich2 1.9 (or later), and CrayMPI. :line From cf35ebe5fa1ca153cf1cf08aa8ee0b4cfb88d47c Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 9 Apr 2019 16:17:37 -0600 Subject: [PATCH 066/311] Revert optimization that is causing regression tests to fail --- src/KOKKOS/comm_kokkos.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/KOKKOS/comm_kokkos.cpp b/src/KOKKOS/comm_kokkos.cpp index c496065ea0..52829356d9 100644 --- a/src/KOKKOS/comm_kokkos.cpp +++ b/src/KOKKOS/comm_kokkos.cpp @@ -637,9 +637,8 @@ void CommKokkos::exchange_device() k_exchange_copylist.h_view(i) = -1; } - auto k_exchange_copylist_short = Kokkos::subview(k_exchange_copylist,k_count.h_view()); - k_exchange_copylist_short.template modify(); - k_exchange_copylist_short.template sync(); + k_exchange_copylist.modify(); + k_exchange_copylist.sync(); nsend = k_count.h_view(); if (nsend > maxsend) grow_send_kokkos(nsend,1); nsend = From e4e2249b637d00dd0f0e524da20dd5ddf69d947c Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Wed, 10 Apr 2019 10:17:14 -0600 Subject: [PATCH 067/311] Fix issue in comm_kokkos --- src/KOKKOS/comm_kokkos.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/KOKKOS/comm_kokkos.cpp b/src/KOKKOS/comm_kokkos.cpp index 52829356d9..87986a9ca9 100644 --- a/src/KOKKOS/comm_kokkos.cpp +++ b/src/KOKKOS/comm_kokkos.cpp @@ -617,8 +617,9 @@ void CommKokkos::exchange_device() k_count.sync(); if (k_count.h_view()>=k_exchange_sendlist.h_view.extent(0)) { - k_exchange_sendlist.resize(k_count.h_view()*1.1); - k_exchange_copylist.resize(k_count.h_view()*1.1); + k_exchange_lists.resize(2,k_count.h_view()*1.1); + k_exchange_sendlist = Kokkos::subview(k_exchange_lists,0,Kokkos::ALL); + k_exchange_copylist = Kokkos::subview(k_exchange_lists,1,Kokkos::ALL); k_count.h_view()=k_exchange_sendlist.h_view.extent(0); } } From 100f17077cb17e3996273aaf1367ba40d46ad86f Mon Sep 17 00:00:00 2001 From: Mingjian Wen Date: Mon, 15 Apr 2019 19:27:41 -0500 Subject: [PATCH 068/311] Create pair_drip by copying KC files --- src/USER-MISC/pair_drip.cpp | 1122 +++++++++++++++++++++++++++++++++++ src/USER-MISC/pair_drip.h | 147 +++++ 2 files changed, 1269 insertions(+) create mode 100644 src/USER-MISC/pair_drip.cpp create mode 100644 src/USER-MISC/pair_drip.h diff --git a/src/USER-MISC/pair_drip.cpp b/src/USER-MISC/pair_drip.cpp new file mode 100644 index 0000000000..235766f43e --- /dev/null +++ b/src/USER-MISC/pair_drip.cpp @@ -0,0 +1,1122 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + 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: Wengen Ouyang (Tel Aviv University) + e-mail: w.g.ouyang at gmail dot com + based on previous versions by Jaap Kroes + + This is a complete version of the potential described in + [Kolmogorov & Crespi, Phys. Rev. B 71, 235415 (2005)] +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include +#include "pair_drip.h" +#include "atom.h" +#include "comm.h" +#include "force.h" +#include "neighbor.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "my_page.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; + +#define MAXLINE 1024 +#define DELTA 4 +#define PGDELTA 1 + +/* ---------------------------------------------------------------------- */ + +PairDRIP::PairDRIP(LAMMPS *lmp) : Pair(lmp) +{ + // initialize element to parameter maps + nelements = 0; + elements = NULL; + nparams = maxparam = 0; + params = NULL; + elem2param = NULL; + cutKCsq = NULL; + map = NULL; + + nmax = 0; + maxlocal = 0; + KC_numneigh = NULL; + KC_firstneigh = NULL; + ipage = NULL; + pgsize = oneatom = 0; + + normal = NULL; + dnormal = NULL; + dnormdri = NULL; + + // always compute energy offset + offset_flag = 1; + + // set comm size needed by this Pair + comm_forward = 39; + tap_flag = 0; +} + +/* ---------------------------------------------------------------------- */ + +PairDRIP::~PairDRIP() +{ + memory->destroy(KC_numneigh); + memory->sfree(KC_firstneigh); + delete [] ipage; + memory->destroy(normal); + memory->destroy(dnormal); + memory->destroy(dnormdri); + + if (allocated) { + memory->destroy(setflag); + memory->destroy(cutsq); + memory->destroy(cut); + memory->destroy(offset); + } + + if (elements) + for (int i = 0; i < nelements; i++) delete [] elements[i]; + delete [] elements; + memory->destroy(params); + memory->destroy(elem2param); + memory->destroy(cutKCsq); + if (allocated) delete [] map; +} + +/* ---------------------------------------------------------------------- */ + +void PairDRIP::compute(int eflag, int vflag) +{ + int i,j,ii,jj,inum,jnum,itype,jtype,k,l,kk,ll; + tagint itag,jtag; + double prodnorm1,prodnorm2,fkcx,fkcy,fkcz; + double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fpair,fpair1,fpair2; + double rsq,r,rhosq1,rhosq2,exp0,exp1,exp2,r2inv,r6inv,r8inv,Tap,dTap,Vkc; + double frho1,frho2,sumC1,sumC2,sumC11,sumC22,sumCff,fsum,rdsq1,rdsq2; + int *ilist,*jlist,*numneigh,**firstneigh; + int *KC_neighs_i,*KC_neighs_j; + + evdwl = 0.0; + ev_init(eflag,vflag); + + double **x = atom->x; + double **f = atom->f; + int *type = atom->type; + tagint *tag = atom->tag; + int nlocal = atom->nlocal; + int newton_pair = force->newton_pair; + double dprodnorm1[3] = {0.0, 0.0, 0.0}; + double dprodnorm2[3] = {0.0, 0.0, 0.0}; + double fp1[3] = {0.0, 0.0, 0.0}; + double fp2[3] = {0.0, 0.0, 0.0}; + double fprod1[3] = {0.0, 0.0, 0.0}; + double fprod2[3] = {0.0, 0.0, 0.0}; + double fk[3] = {0.0, 0.0, 0.0}; + double fl[3] = {0.0, 0.0, 0.0}; + double delkj[3] = {0.0, 0.0, 0.0}; + double delli[3] = {0.0, 0.0, 0.0}; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + // Build full neighbor list + KC_neigh(); + // Calculate the normals + calc_normal(); + + // communicate the normal vector and its derivatives + comm->forward_comm_pair(this); + + // loop over neighbors of my atoms + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + itag = tag[i]; + 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]; + j &= NEIGHMASK; + jtype = type[j]; + jtag = tag[j]; + + // two-body interactions from full neighbor list, skip half of them + if (itag > jtag) { + if ((itag+jtag) % 2 == 0) continue; + } else if (itag < jtag) { + if ((itag+jtag) % 2 == 1) continue; + } else { + if (x[j][2] < ztmp) continue; + if (x[j][2] == ztmp && x[j][1] < ytmp) continue; + if (x[j][2] == ztmp && x[j][1] == ytmp && x[j][0] < xtmp) continue; + } + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + + // only include the interation between different layers + if (rsq < cutsq[itype][jtype] && atom->molecule[i] != atom->molecule[j]) { + + int iparam_ij = elem2param[map[itype]][map[jtype]]; + Param& p = params[iparam_ij]; + + r = sqrt(rsq); + r2inv = 1.0/rsq; + r6inv = r2inv*r2inv*r2inv; + r8inv = r2inv*r6inv; + // turn on/off taper function + if (tap_flag) { + Tap = calc_Tap(r,sqrt(cutsq[itype][jtype])); + dTap = calc_dTap(r,sqrt(cutsq[itype][jtype])); + } else {Tap = 1.0; dTap = 0.0;} + + // Calculate the transverse distance + // note that rho_ij does not equal to rho_ji except when normals are all along z + prodnorm1 = normal[i][0]*delx + normal[i][1]*dely + normal[i][2]*delz; + prodnorm2 = normal[j][0]*delx + normal[j][1]*dely + normal[j][2]*delz; + rhosq1 = rsq - prodnorm1*prodnorm1; // rho_ij + rhosq2 = rsq - prodnorm2*prodnorm2; // rho_ji + rdsq1 = rhosq1*p.delta2inv; // (rho_ij/delta)^2 + rdsq2 = rhosq2*p.delta2inv; // (rho_ji/delta)^2 + + // store exponents + exp0 = exp(-p.lambda*(r-p.z0)); + exp1 = exp(-rdsq1); + exp2 = exp(-rdsq2); + + sumC1 = p.C0 + p.C2*rdsq1 + p.C4*rdsq1*rdsq1; + sumC2 = p.C0 + p.C2*rdsq2 + p.C4*rdsq2*rdsq2; + sumC11 = (p.C2 + 2.0*p.C4*rdsq1)*p.delta2inv; + sumC22 = (p.C2 + 2.0*p.C4*rdsq2)*p.delta2inv; + frho1 = exp1*sumC1; + frho2 = exp2*sumC2; + sumCff = p.C + frho1 + frho2; + Vkc = -p.A*p.z06*r6inv + exp0*sumCff; + + // derivatives + fpair = -6.0*p.A*p.z06*r8inv + p.lambda*exp0/r*sumCff; + fpair1 = 2.0*exp0*exp1*(p.delta2inv*sumC1 - sumC11); + fpair2 = 2.0*exp0*exp2*(p.delta2inv*sumC2 - sumC22); + fsum = fpair + fpair1 + fpair2; + // derivatives of the product of rij and ni, the result is a vector + dprodnorm1[0] = dnormdri[0][0][i]*delx + dnormdri[1][0][i]*dely + dnormdri[2][0][i]*delz; + dprodnorm1[1] = dnormdri[0][1][i]*delx + dnormdri[1][1][i]*dely + dnormdri[2][1][i]*delz; + dprodnorm1[2] = dnormdri[0][2][i]*delx + dnormdri[1][2][i]*dely + dnormdri[2][2][i]*delz; + // derivatives of the product of rji and nj, the result is a vector + dprodnorm2[0] = dnormdri[0][0][j]*delx + dnormdri[1][0][j]*dely + dnormdri[2][0][j]*delz; + dprodnorm2[1] = dnormdri[0][1][j]*delx + dnormdri[1][1][j]*dely + dnormdri[2][1][j]*delz; + dprodnorm2[2] = dnormdri[0][2][j]*delx + dnormdri[1][2][j]*dely + dnormdri[2][2][j]*delz; + fp1[0] = prodnorm1*normal[i][0]*fpair1; + fp1[1] = prodnorm1*normal[i][1]*fpair1; + fp1[2] = prodnorm1*normal[i][2]*fpair1; + fp2[0] = prodnorm2*normal[j][0]*fpair2; + fp2[1] = prodnorm2*normal[j][1]*fpair2; + fp2[2] = prodnorm2*normal[j][2]*fpair2; + fprod1[0] = prodnorm1*dprodnorm1[0]*fpair1; + fprod1[1] = prodnorm1*dprodnorm1[1]*fpair1; + fprod1[2] = prodnorm1*dprodnorm1[2]*fpair1; + fprod2[0] = prodnorm2*dprodnorm2[0]*fpair2; + fprod2[1] = prodnorm2*dprodnorm2[1]*fpair2; + fprod2[2] = prodnorm2*dprodnorm2[2]*fpair2; + fkcx = (delx*fsum - fp1[0] - fp2[0])*Tap - Vkc*dTap*delx/r; + fkcy = (dely*fsum - fp1[1] - fp2[1])*Tap - Vkc*dTap*dely/r; + fkcz = (delz*fsum - fp1[2] - fp2[2])*Tap - Vkc*dTap*delz/r; + + f[i][0] += fkcx - fprod1[0]*Tap; + f[i][1] += fkcy - fprod1[1]*Tap; + f[i][2] += fkcz - fprod1[2]*Tap; + f[j][0] -= fkcx + fprod2[0]*Tap; + f[j][1] -= fkcy + fprod2[1]*Tap; + f[j][2] -= fkcz + fprod2[2]*Tap; + + // calculate the forces acted on the neighbors of atom i from atom j + KC_neighs_i = KC_firstneigh[i]; + for (kk = 0; kk < KC_numneigh[i]; kk++) { + k = KC_neighs_i[kk]; + if (k == i) continue; + // derivatives of the product of rij and ni respect to rk, k=0,1,2, where atom k is the neighbors of atom i + dprodnorm1[0] = dnormal[0][0][kk][i]*delx + dnormal[1][0][kk][i]*dely + dnormal[2][0][kk][i]*delz; + dprodnorm1[1] = dnormal[0][1][kk][i]*delx + dnormal[1][1][kk][i]*dely + dnormal[2][1][kk][i]*delz; + dprodnorm1[2] = dnormal[0][2][kk][i]*delx + dnormal[1][2][kk][i]*dely + dnormal[2][2][kk][i]*delz; + fk[0] = (-prodnorm1*dprodnorm1[0]*fpair1)*Tap; + fk[1] = (-prodnorm1*dprodnorm1[1]*fpair1)*Tap; + fk[2] = (-prodnorm1*dprodnorm1[2]*fpair1)*Tap; + f[k][0] += fk[0]; + f[k][1] += fk[1]; + f[k][2] += fk[2]; + delkj[0] = x[k][0] - x[j][0]; + delkj[1] = x[k][1] - x[j][1]; + delkj[2] = x[k][2] - x[j][2]; + if (evflag) ev_tally_xyz(k,j,nlocal,newton_pair,0.0,0.0,fk[0],fk[1],fk[2],delkj[0],delkj[1],delkj[2]); + } + + // calculate the forces acted on the neighbors of atom j from atom i + KC_neighs_j = KC_firstneigh[j]; + for (ll = 0; ll < KC_numneigh[j]; ll++) { + l = KC_neighs_j[ll]; + if (l == j) continue; + // derivatives of the product of rji and nj respect to rl, l=0,1,2, where atom l is the neighbors of atom j + dprodnorm2[0] = dnormal[0][0][ll][j]*delx + dnormal[1][0][ll][j]*dely + dnormal[2][0][ll][j]*delz; + dprodnorm2[1] = dnormal[0][1][ll][j]*delx + dnormal[1][1][ll][j]*dely + dnormal[2][1][ll][j]*delz; + dprodnorm2[2] = dnormal[0][2][ll][j]*delx + dnormal[1][2][ll][j]*dely + dnormal[2][2][ll][j]*delz; + fl[0] = (-prodnorm2*dprodnorm2[0]*fpair2)*Tap; + fl[1] = (-prodnorm2*dprodnorm2[1]*fpair2)*Tap; + fl[2] = (-prodnorm2*dprodnorm2[2]*fpair2)*Tap; + f[l][0] += fl[0]; + f[l][1] += fl[1]; + f[l][2] += fl[2]; + delli[0] = x[l][0] - x[i][0]; + delli[1] = x[l][1] - x[i][1]; + delli[2] = x[l][2] - x[i][2]; + if (evflag) ev_tally_xyz(l,i,nlocal,newton_pair,0.0,0.0,fl[0],fl[1],fl[2],delli[0],delli[1],delli[2]); + } + + if (eflag) { + if (tap_flag) evdwl = Tap*Vkc; + else evdwl = Vkc - offset[itype][jtype]; + } + + if (evflag) ev_tally_xyz(i,j,nlocal,newton_pair,evdwl,0,fkcx,fkcy,fkcz,delx,dely,delz); + } + } + } + if (vflag_fdotr) virial_fdotr_compute(); +} + +/* ---------------------------------------------------------------------- + Calculate the normals for each atom +------------------------------------------------------------------------- */ +void PairDRIP::calc_normal() +{ + int i,j,ii,jj,inum,jnum; + int cont,id,ip,m; + double nn,xtp,ytp,ztp,delx,dely,delz,nn2; + int *ilist,*jlist; + double pv12[3],pv31[3],pv23[3],n1[3],dni[3],dnn[3][3],vet[3][3],dpvdri[3][3]; + double dn1[3][3][3],dpv12[3][3][3],dpv23[3][3][3],dpv31[3][3][3]; + + double **x = atom->x; + + // grow normal array if necessary + + if (atom->nmax > nmax) { + memory->destroy(normal); + memory->destroy(dnormal); + memory->destroy(dnormdri); + nmax = atom->nmax; + memory->create(normal,nmax,3,"DRIP:normal"); + memory->create(dnormdri,3,3,nmax,"DRIP:dnormdri"); + memory->create(dnormal,3,3,3,nmax,"DRIP:dnormal"); + } + + inum = list->inum; + ilist = list->ilist; + //Calculate normals + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + xtp = x[i][0]; + ytp = x[i][1]; + ztp = x[i][2]; + + // Initialize the arrays + for (id = 0; id < 3; id++){ + pv12[id] = 0.0; + pv31[id] = 0.0; + pv23[id] = 0.0; + n1[id] = 0.0; + dni[id] = 0.0; + normal[i][id] = 0.0; + for (ip = 0; ip < 3; ip++){ + vet[ip][id] = 0.0; + dnn[ip][id] = 0.0; + dpvdri[ip][id] = 0.0; + dnormdri[ip][id][i] = 0.0; + for (m = 0; m < 3; m++){ + dpv12[ip][id][m] = 0.0; + dpv31[ip][id][m] = 0.0; + dpv23[ip][id][m] = 0.0; + dn1[ip][id][m] = 0.0; + dnormal[ip][id][m][i] = 0.0; + } + } + } + + cont = 0; + jlist = KC_firstneigh[i]; + jnum = KC_numneigh[i]; + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + + delx = x[j][0] - xtp; + dely = x[j][1] - ytp; + delz = x[j][2] - ztp; + vet[cont][0] = delx; + vet[cont][1] = dely; + vet[cont][2] = delz; + cont++; + } + + if (cont <= 1) { + normal[i][0] = 0.0; + normal[i][1] = 0.0; + normal[i][2] = 1.0; + // derivatives of normal vector is zero + for (id = 0; id < 3; id++){ + for (ip = 0; ip < 3; ip++){ + dnormdri[id][ip][i] = 0.0; + for (m = 0; m < 3; m++){ + dnormal[id][ip][m][i] = 0.0; + } + } + } + } + else if (cont == 2) { + // for the atoms at the edge who has only two neighbor atoms + pv12[0] = vet[0][1]*vet[1][2] - vet[1][1]*vet[0][2]; + pv12[1] = vet[0][2]*vet[1][0] - vet[1][2]*vet[0][0]; + pv12[2] = vet[0][0]*vet[1][1] - vet[1][0]*vet[0][1]; + dpvdri[0][0] = 0.0; + dpvdri[0][1] = vet[0][2]-vet[1][2]; + dpvdri[0][2] = vet[1][1]-vet[0][1]; + dpvdri[1][0] = vet[1][2]-vet[0][2]; + dpvdri[1][1] = 0.0; + dpvdri[1][2] = vet[0][0]-vet[1][0]; + dpvdri[2][0] = vet[0][1]-vet[1][1]; + dpvdri[2][1] = vet[1][0]-vet[0][0]; + dpvdri[2][2] = 0.0; + + // derivatives respect to the first neighbor, atom k + dpv12[0][0][0] = 0.0; + dpv12[0][1][0] = vet[1][2]; + dpv12[0][2][0] = -vet[1][1]; + dpv12[1][0][0] = -vet[1][2]; + dpv12[1][1][0] = 0.0; + dpv12[1][2][0] = vet[1][0]; + dpv12[2][0][0] = vet[1][1]; + dpv12[2][1][0] = -vet[1][0]; + dpv12[2][2][0] = 0.0; + + // derivatives respect to the second neighbor, atom l + dpv12[0][0][1] = 0.0; + dpv12[0][1][1] = -vet[0][2]; + dpv12[0][2][1] = vet[0][1]; + dpv12[1][0][1] = vet[0][2]; + dpv12[1][1][1] = 0.0; + dpv12[1][2][1] = -vet[0][0]; + dpv12[2][0][1] = -vet[0][1]; + dpv12[2][1][1] = vet[0][0]; + dpv12[2][2][1] = 0.0; + + // derivatives respect to the third neighbor, atom n + for (id = 0; id < 3; id++){ + for (ip = 0; ip < 3; ip++){ + dpv12[id][ip][2] = 0.0; + } + } + + n1[0] = pv12[0]; + n1[1] = pv12[1]; + n1[2] = pv12[2]; + // the magnitude of the normal vector + nn2 = n1[0]*n1[0] + n1[1]*n1[1] + n1[2]*n1[2]; + nn = sqrt(nn2); + if (nn == 0) error->one(FLERR,"The magnitude of the normal vector is zero"); + // the unit normal vector + normal[i][0] = n1[0]/nn; + normal[i][1] = n1[1]/nn; + normal[i][2] = n1[2]/nn; + // derivatives of nn, dnn:3x1 vector + dni[0] = (n1[0]*dpvdri[0][0] + n1[1]*dpvdri[1][0] + n1[2]*dpvdri[2][0])/nn; + dni[1] = (n1[0]*dpvdri[0][1] + n1[1]*dpvdri[1][1] + n1[2]*dpvdri[2][1])/nn; + dni[2] = (n1[0]*dpvdri[0][2] + n1[1]*dpvdri[1][2] + n1[2]*dpvdri[2][2])/nn; + // derivatives of unit vector ni respect to ri, the result is 3x3 matrix + for (id = 0; id < 3; id++){ + for (ip = 0; ip < 3; ip++){ + dnormdri[id][ip][i] = dpvdri[id][ip]/nn - n1[id]*dni[ip]/nn2; + } + } + + // derivatives of non-normalized normal vector, dn1:3x3x3 array + for (id = 0; id < 3; id++){ + for (ip = 0; ip < 3; ip++){ + for (m = 0; m < 3; m++){ + dn1[id][ip][m] = dpv12[id][ip][m]; + } + } + } + // derivatives of nn, dnn:3x3 vector + // dnn[id][m]: the derivative of nn respect to r[id][m], id,m=0,1,2 + // r[id][m]: the id's component of atom m + for (m = 0; m < 3; m++){ + for (id = 0; id < 3; id++){ + dnn[id][m] = (n1[0]*dn1[0][id][m] + n1[1]*dn1[1][id][m] + n1[2]*dn1[2][id][m])/nn; + } + } + // dnormal[id][ip][m][i]: the derivative of normal[id] respect to r[ip][m], id,ip=0,1,2 + // for atom m, which is a neighbor atom of atom i, m=0,jnum-1 + for (m = 0; m < 3; m++){ + for (id = 0; id < 3; id++){ + for (ip = 0; ip < 3; ip++){ + dnormal[id][ip][m][i] = dn1[id][ip][m]/nn - n1[id]*dnn[ip][m]/nn2; + } + } + } + } +//############################################################################################## + + else if(cont == 3) { + // for the atoms at the edge who has only two neighbor atoms + pv12[0] = vet[0][1]*vet[1][2] - vet[1][1]*vet[0][2]; + pv12[1] = vet[0][2]*vet[1][0] - vet[1][2]*vet[0][0]; + pv12[2] = vet[0][0]*vet[1][1] - vet[1][0]*vet[0][1]; + // derivatives respect to the first neighbor, atom k + dpv12[0][0][0] = 0.0; + dpv12[0][1][0] = vet[1][2]; + dpv12[0][2][0] = -vet[1][1]; + dpv12[1][0][0] = -vet[1][2]; + dpv12[1][1][0] = 0.0; + dpv12[1][2][0] = vet[1][0]; + dpv12[2][0][0] = vet[1][1]; + dpv12[2][1][0] = -vet[1][0]; + dpv12[2][2][0] = 0.0; + // derivatives respect to the second neighbor, atom l + dpv12[0][0][1] = 0.0; + dpv12[0][1][1] = -vet[0][2]; + dpv12[0][2][1] = vet[0][1]; + dpv12[1][0][1] = vet[0][2]; + dpv12[1][1][1] = 0.0; + dpv12[1][2][1] = -vet[0][0]; + dpv12[2][0][1] = -vet[0][1]; + dpv12[2][1][1] = vet[0][0]; + dpv12[2][2][1] = 0.0; + + // derivatives respect to the third neighbor, atom n + for (id = 0; id < 3; id++){ + for (ip = 0; ip < 3; ip++){ + dpv12[id][ip][2] = 0.0; + } + } + + pv31[0] = vet[2][1]*vet[0][2] - vet[0][1]*vet[2][2]; + pv31[1] = vet[2][2]*vet[0][0] - vet[0][2]*vet[2][0]; + pv31[2] = vet[2][0]*vet[0][1] - vet[0][0]*vet[2][1]; + // derivatives respect to the first neighbor, atom k + dpv31[0][0][0] = 0.0; + dpv31[0][1][0] = -vet[2][2]; + dpv31[0][2][0] = vet[2][1]; + dpv31[1][0][0] = vet[2][2]; + dpv31[1][1][0] = 0.0; + dpv31[1][2][0] = -vet[2][0]; + dpv31[2][0][0] = -vet[2][1]; + dpv31[2][1][0] = vet[2][0]; + dpv31[2][2][0] = 0.0; + // derivatives respect to the third neighbor, atom n + dpv31[0][0][2] = 0.0; + dpv31[0][1][2] = vet[0][2]; + dpv31[0][2][2] = -vet[0][1]; + // derivatives of pv13[1] to rn + dpv31[1][0][2] = -vet[0][2]; + dpv31[1][1][2] = 0.0; + dpv31[1][2][2] = vet[0][0]; + // derivatives of pv13[2] to rn + dpv31[2][0][2] = vet[0][1]; + dpv31[2][1][2] = -vet[0][0]; + dpv31[2][2][2] = 0.0; + + // derivatives respect to the second neighbor, atom l + for (id = 0; id < 3; id++){ + for (ip = 0; ip < 3; ip++){ + dpv31[id][ip][1] = 0.0; + } + } + + pv23[0] = vet[1][1]*vet[2][2] - vet[2][1]*vet[1][2]; + pv23[1] = vet[1][2]*vet[2][0] - vet[2][2]*vet[1][0]; + pv23[2] = vet[1][0]*vet[2][1] - vet[2][0]*vet[1][1]; + // derivatives respect to the second neighbor, atom k + for (id = 0; id < 3; id++){ + for (ip = 0; ip < 3; ip++){ + dpv23[id][ip][0] = 0.0; + } + } + // derivatives respect to the second neighbor, atom l + dpv23[0][0][1] = 0.0; + dpv23[0][1][1] = vet[2][2]; + dpv23[0][2][1] = -vet[2][1]; + dpv23[1][0][1] = -vet[2][2]; + dpv23[1][1][1] = 0.0; + dpv23[1][2][1] = vet[2][0]; + dpv23[2][0][1] = vet[2][1]; + dpv23[2][1][1] = -vet[2][0]; + dpv23[2][2][1] = 0.0; + // derivatives respect to the third neighbor, atom n + dpv23[0][0][2] = 0.0; + dpv23[0][1][2] = -vet[1][2]; + dpv23[0][2][2] = vet[1][1]; + dpv23[1][0][2] = vet[1][2]; + dpv23[1][1][2] = 0.0; + dpv23[1][2][2] = -vet[1][0]; + dpv23[2][0][2] = -vet[1][1]; + dpv23[2][1][2] = vet[1][0]; + dpv23[2][2][2] = 0.0; + +//############################################################################################ + // average the normal vectors by using the 3 neighboring planes + n1[0] = (pv12[0] + pv31[0] + pv23[0])/cont; + n1[1] = (pv12[1] + pv31[1] + pv23[1])/cont; + n1[2] = (pv12[2] + pv31[2] + pv23[2])/cont; + // the magnitude of the normal vector + nn2 = n1[0]*n1[0] + n1[1]*n1[1] + n1[2]*n1[2]; + nn = sqrt(nn2); + if (nn == 0) error->one(FLERR,"The magnitude of the normal vector is zero"); + // the unit normal vector + normal[i][0] = n1[0]/nn; + normal[i][1] = n1[1]/nn; + normal[i][2] = n1[2]/nn; + + // for the central atoms, dnormdri is always zero + for (id = 0; id < 3; id++){ + for (ip = 0; ip < 3; ip++){ + dnormdri[id][ip][i] = 0.0; + } + } // end of derivatives of normals respect to atom i + + // derivatives of non-normalized normal vector, dn1:3x3x3 array + for (id = 0; id < 3; id++){ + for (ip = 0; ip < 3; ip++){ + for (m = 0; m < 3; m++){ + dn1[id][ip][m] = (dpv12[id][ip][m] + dpv23[id][ip][m] + dpv31[id][ip][m])/cont; + } + } + } + // derivatives of nn, dnn:3x3 vector + // dnn[id][m]: the derivative of nn respect to r[id][m], id,m=0,1,2 + // r[id][m]: the id's component of atom m + for (m = 0; m < 3; m++){ + for (id = 0; id < 3; id++){ + dnn[id][m] = (n1[0]*dn1[0][id][m] + n1[1]*dn1[1][id][m] + n1[2]*dn1[2][id][m])/nn; + } + } + // dnormal[id][ip][m][i]: the derivative of normal[id] respect to r[ip][m], id,ip=0,1,2 + // for atom m, which is a neighbor atom of atom i, m=0,jnum-1 + for (m = 0; m < 3; m++){ + for (id = 0; id < 3; id++){ + for (ip = 0; ip < 3; ip++){ + dnormal[id][ip][m][i] = dn1[id][ip][m]/nn - n1[id]*dnn[ip][m]/nn2; + } + } + } + } + else { + error->one(FLERR,"There are too many neighbors for calculating normals"); + } + +//############################################################################################## + } +} + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairDRIP::init_style() +{ + if (force->newton_pair == 0) + error->all(FLERR,"Pair style drip requires newton pair on"); + if (!atom->molecule_flag) + error->all(FLERR,"Pair style drip requires atom attribute molecule"); + + // need a full neighbor list, including neighbors of ghosts + + int irequest = neighbor->request(this,instance_me); + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; + neighbor->requests[irequest]->ghost = 1; + + // local KC neighbor list + // create pages if first time or if neighbor pgsize/oneatom has changed + + int create = 0; + if (ipage == NULL) create = 1; + if (pgsize != neighbor->pgsize) create = 1; + if (oneatom != neighbor->oneatom) create = 1; + + if (create) { + delete [] ipage; + pgsize = neighbor->pgsize; + oneatom = neighbor->oneatom; + + int nmypage= comm->nthreads; + ipage = new MyPage[nmypage]; + for (int i = 0; i < nmypage; i++) + ipage[i].init(oneatom,pgsize,PGDELTA); + } +} + + +/* ---------------------------------------------------------------------- + create neighbor list from main neighbor list for calculating the normals +------------------------------------------------------------------------- */ + +void PairDRIP::KC_neigh() +{ + int i,j,ii,jj,n,allnum,jnum,itype,jtype; + double xtmp,ytmp,ztmp,delx,dely,delz,rsq; + int *ilist,*jlist,*numneigh,**firstneigh; + int *neighptr; + + double **x = atom->x; + int *type = atom->type; + + if (atom->nmax > maxlocal) { + maxlocal = atom->nmax; + memory->destroy(KC_numneigh); + memory->sfree(KC_firstneigh); + memory->create(KC_numneigh,maxlocal,"DRIP:numneigh"); + KC_firstneigh = (int **) memory->smalloc(maxlocal*sizeof(int *), + "DRIP:firstneigh"); + } + + allnum = list->inum + list->gnum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + // store all KC neighs of owned and ghost atoms + // scan full neighbor list of I + + ipage->reset(); + + for (ii = 0; ii < allnum; ii++) { + i = ilist[ii]; + + n = 0; + neighptr = ipage->vget(); + + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itype = map[type[i]]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + jtype = map[type[j]]; + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + + if (rsq != 0 && rsq < cutKCsq[itype][jtype] && atom->molecule[i] == atom->molecule[j]) { + neighptr[n++] = j; + } + } + + KC_firstneigh[i] = neighptr; + KC_numneigh[i] = n; + if (n > 3) error->one(FLERR,"There are too many neighbors for some atoms, please check your configuration"); + ipage->vgot(n); + if (ipage->status()) + error->one(FLERR,"Neighbor list overflow, boost neigh_modify one"); + } +} + + +/* ---------------------------------------------------------------------- + allocate all arrays +------------------------------------------------------------------------- */ + +void PairDRIP::allocate() +{ + allocated = 1; + int n = atom->ntypes; + + memory->create(setflag,n+1,n+1,"pair:setflag"); + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + setflag[i][j] = 0; + + memory->create(cutsq,n+1,n+1,"pair:cutsq"); + memory->create(cut,n+1,n+1,"pair:cut"); + memory->create(offset,n+1,n+1,"pair:offset"); + map = new int[atom->ntypes+1]; +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairDRIP::settings(int narg, char **arg) +{ + if (narg < 1 || narg > 2) error->all(FLERR,"Illegal pair_style command"); + if (strcmp(force->pair_style,"hybrid/overlay")!=0) + error->all(FLERR,"ERROR: requires hybrid/overlay pair_style"); + + cut_global = force->numeric(FLERR,arg[0]); + if (narg == 2) tap_flag = force->numeric(FLERR,arg[1]); + + // reset cutoffs that have been explicitly set + + if (allocated) { + int i,j; + for (i = 1; i <= atom->ntypes; i++) + for (j = i; j <= atom->ntypes; j++) + if (setflag[i][j]) cut[i][j] = cut_global; + } +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more type pairs +------------------------------------------------------------------------- */ + +void PairDRIP::coeff(int narg, char **arg) +{ + int i,j,n; + + if (narg != 3 + atom->ntypes) + error->all(FLERR,"Incorrect args for pair coefficients"); + if (!allocated) allocate(); + + int ilo,ihi,jlo,jhi; + force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); + force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); + + // read args that map atom types to elements in potential file + // map[i] = which element the Ith atom type is, -1 if NULL + // nelements = # of unique elements + // elements = list of element names + + if (elements) { + for (i = 0; i < nelements; i++) delete [] elements[i]; + delete [] elements; + } + elements = new char*[atom->ntypes]; + for (i = 0; i < atom->ntypes; i++) elements[i] = NULL; + + nelements = 0; + for (i = 3; i < narg; i++) { + if (strcmp(arg[i],"NULL") == 0) { + map[i-2] = -1; + continue; + } + for (j = 0; j < nelements; j++) + if (strcmp(arg[i],elements[j]) == 0) break; + map[i-2] = j; + if (j == nelements) { + n = strlen(arg[i]) + 1; + elements[j] = new char[n]; + strcpy(elements[j],arg[i]); + nelements++; + } + } + + + read_file(arg[2]); + + double cut_one = cut_global; + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + for (int j = MAX(jlo,i); j <= jhi; j++) { + 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 PairDRIP::init_one(int i, int j) +{ + if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + + if (offset_flag && (cut[i][j] > 0.0)) { + int iparam_ij = elem2param[map[i]][map[j]]; + Param& p = params[iparam_ij]; + offset[i][j] = -p.A*pow(p.z0/cut[i][j],6); + } else offset[i][j] = 0.0; + offset[j][i] = offset[i][j]; + + return cut[i][j]; +} + +/* ---------------------------------------------------------------------- + read Kolmogorov-Crespi potential file +------------------------------------------------------------------------- */ + +void PairDRIP::read_file(char *filename) +{ + int params_per_line = 12; + char **words = new char*[params_per_line+1]; + memory->sfree(params); + params = NULL; + nparams = maxparam = 0; + + // open file on proc 0 + + FILE *fp; + if (comm->me == 0) { + fp = force->open_potential(filename); + if (fp == NULL) { + char str[128]; + snprintf(str,128,"Cannot open KC potential file %s",filename); + error->one(FLERR,str); + } + } + + // read each line out of file, skipping blank lines or leading '#' + // store line of params if all 3 element tags are in element list + + int i,j,n,m,nwords,ielement,jelement; + char line[MAXLINE],*ptr; + int eof = 0; + + while (1) { + if (comm->me == 0) { + ptr = fgets(line,MAXLINE,fp); + if (ptr == NULL) { + eof = 1; + fclose(fp); + } else n = strlen(line) + 1; + } + MPI_Bcast(&eof,1,MPI_INT,0,world); + if (eof) break; + MPI_Bcast(&n,1,MPI_INT,0,world); + MPI_Bcast(line,n,MPI_CHAR,0,world); + + // strip comment, skip line if blank + + if ((ptr = strchr(line,'#'))) *ptr = '\0'; + nwords = atom->count_words(line); + if (nwords == 0) continue; + + // concatenate additional lines until have params_per_line words + + while (nwords < params_per_line) { + n = strlen(line); + if (comm->me == 0) { + ptr = fgets(&line[n],MAXLINE-n,fp); + if (ptr == NULL) { + eof = 1; + fclose(fp); + } else n = strlen(line) + 1; + } + MPI_Bcast(&eof,1,MPI_INT,0,world); + if (eof) break; + MPI_Bcast(&n,1,MPI_INT,0,world); + MPI_Bcast(line,n,MPI_CHAR,0,world); + if ((ptr = strchr(line,'#'))) *ptr = '\0'; + nwords = atom->count_words(line); + } + + if (nwords != params_per_line) + error->all(FLERR,"Insufficient format in KC potential file"); + + // words = ptrs to all words in line + + nwords = 0; + words[nwords++] = strtok(line," \t\n\r\f"); + while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; + + // ielement,jelement = 1st args + // if these 2 args are in element list, then parse this line + // else skip to next line (continue) + + for (ielement = 0; ielement < nelements; ielement++) + if (strcmp(words[0],elements[ielement]) == 0) break; + if (ielement == nelements) continue; + for (jelement = 0; jelement < nelements; jelement++) + if (strcmp(words[1],elements[jelement]) == 0) break; + if (jelement == nelements) continue; + + // load up parameter settings and error check their values + + if (nparams == maxparam) { + maxparam += DELTA; + params = (Param *) memory->srealloc(params,maxparam*sizeof(Param), + "pair:params"); + } + + params[nparams].ielement = ielement; + params[nparams].jelement = jelement; + params[nparams].z0 = atof(words[2]); + params[nparams].C0 = atof(words[3]); + params[nparams].C2 = atof(words[4]); + params[nparams].C4 = atof(words[5]); + params[nparams].C = atof(words[6]); + params[nparams].delta = atof(words[7]); + params[nparams].lambda = atof(words[8]); + params[nparams].A = atof(words[9]); + // S provides a convenient scaling of all energies + params[nparams].S = atof(words[10]); + params[nparams].rcut = atof(words[11]); + + // energies in meV further scaled by S + double meV = 1.0e-3*params[nparams].S; + params[nparams].C *= meV; + params[nparams].A *= meV; + params[nparams].C0 *= meV; + params[nparams].C2 *= meV; + params[nparams].C4 *= meV; + + // precompute some quantities + params[nparams].delta2inv = pow(params[nparams].delta,-2); + params[nparams].z06 = pow(params[nparams].z0,6); + + nparams++; + //if(nparams >= pow(atom->ntypes,3)) break; + } + memory->destroy(elem2param); + memory->destroy(cutKCsq); + memory->create(elem2param,nelements,nelements,"pair:elem2param"); + memory->create(cutKCsq,nelements,nelements,"pair:cutKCsq"); + for (i = 0; i < nelements; i++) { + for (j = 0; j < nelements; j++) { + n = -1; + for (m = 0; m < nparams; m++) { + if (i == params[m].ielement && j == params[m].jelement) { + if (n >= 0) error->all(FLERR,"Potential file has duplicate entry"); + n = m; + } + } + if (n < 0) error->all(FLERR,"Potential file is missing an entry"); + elem2param[i][j] = n; + cutKCsq[i][j] = params[n].rcut*params[n].rcut; + } + } + delete [] words; +} + +/* ---------------------------------------------------------------------- */ + +double PairDRIP::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_lj, + double &fforce) +{ + double r,r2inv,r6inv,r8inv,forcelj,philj; + double Tap,dTap,Vkc,fpair; + + int iparam_ij = elem2param[map[itype]][map[jtype]]; + Param& p = params[iparam_ij]; + + r = sqrt(rsq); + // turn on/off taper function + if (tap_flag) { + Tap = calc_Tap(r,sqrt(cutsq[itype][jtype])); + dTap = calc_dTap(r,sqrt(cutsq[itype][jtype])); + } else {Tap = 1.0; dTap = 0.0;} + + r2inv = 1.0/rsq; + r6inv = r2inv*r2inv*r2inv; + r8inv = r2inv*r6inv; + + Vkc = -p.A*p.z06*r6inv; + // derivatives + fpair = -6.0*p.A*p.z06*r8inv; + forcelj = fpair; + fforce = factor_lj*(forcelj*Tap - Vkc*dTap/r); + + if (tap_flag) philj = Vkc*Tap; + else philj = Vkc - offset[itype][jtype]; + return factor_lj*philj; +} + +/* ---------------------------------------------------------------------- */ + +int PairDRIP::pack_forward_comm(int n, int *list, double *buf, + int /*pbc_flag*/, int * /*pbc*/) +{ + int i,j,m,l,ip,id; + + m = 0; + for (i = 0; i < n; i++) { + j = list[i]; + buf[m++] = normal[j][0]; + buf[m++] = normal[j][1]; + buf[m++] = normal[j][2]; + buf[m++] = dnormdri[0][0][j]; + buf[m++] = dnormdri[0][1][j]; + buf[m++] = dnormdri[0][2][j]; + buf[m++] = dnormdri[1][0][j]; + buf[m++] = dnormdri[1][1][j]; + buf[m++] = dnormdri[1][2][j]; + buf[m++] = dnormdri[2][0][j]; + buf[m++] = dnormdri[2][1][j]; + buf[m++] = dnormdri[2][2][j]; + for (l = 0; l < 3; l++){ + for (id = 0; id < 3; id++){ + for (ip = 0; ip < 3; ip++){ + buf[m++] = dnormal[id][ip][l][j]; + } + } + } + } + return m; +} + +/* ---------------------------------------------------------------------- */ + +void PairDRIP::unpack_forward_comm(int n, int first, double *buf) +{ + int i,m,last,l,ip,id; + + m = 0; + last = first + n; + for (i = first; i < last; i++) { + normal[i][0] = buf[m++]; + normal[i][1] = buf[m++]; + normal[i][2] = buf[m++]; + dnormdri[0][0][i] = buf[m++]; + dnormdri[0][1][i] = buf[m++]; + dnormdri[0][2][i] = buf[m++]; + dnormdri[1][0][i] = buf[m++]; + dnormdri[1][1][i] = buf[m++]; + dnormdri[1][2][i] = buf[m++]; + dnormdri[2][0][i] = buf[m++]; + dnormdri[2][1][i] = buf[m++]; + dnormdri[2][2][i] = buf[m++]; + for (l = 0; l < 3; l++){ + for (id = 0; id < 3; id++){ + for (ip = 0; ip < 3; ip++){ + dnormal[id][ip][l][i] = buf[m++]; + } + } + } + } +} + +/* ---------------------------------------------------------------------- */ diff --git a/src/USER-MISC/pair_drip.h b/src/USER-MISC/pair_drip.h new file mode 100644 index 0000000000..faa05bce4d --- /dev/null +++ b/src/USER-MISC/pair_drip.h @@ -0,0 +1,147 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + 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 + +PairStyle(drip,PairDRIP) + +#else + +#ifndef LMP_PAIR_DRIP_H +#define LMP_PAIR_DRIP_H + +#include "pair.h" +#include "my_page.h" +#include + +namespace LAMMPS_NS { + +class PairDRIP : public Pair { + public: + PairDRIP(class LAMMPS *); + virtual ~PairDRIP(); + + virtual void compute(int, int); + void settings(int, char **); + void coeff(int, char **); + double init_one(int, int); + void init_style(); + void calc_normal(); + int pack_forward_comm(int, int *, double *, int, int *); + void unpack_forward_comm(int, int, double *); + double single(int, int, int, int, double, double, double, double &); + + protected: + int me; + int maxlocal; // size of numneigh, firstneigh arrays + int pgsize; // size of neighbor page + int oneatom; // max # of neighbors for one atom + MyPage *ipage; // neighbor list pages + int *KC_numneigh; // # of pair neighbors for each atom + int **KC_firstneigh; // ptr to 1st neighbor of each atom + int tap_flag; // flag to turn on/off taper function + + + struct Param { + double z0,C0,C2,C4,C,delta,lambda,A,S; + double delta2inv,z06,rcut; + int ielement,jelement; + }; + Param *params; // parameter set for I-J interactions + char **elements; // names of unique elements + int **elem2param; // mapping from element pairs to parameters + int *map; // mapping from atom types to elements + int nelements; // # of unique elements + int nparams; // # of stored parameter sets + int maxparam; // max # of parameter sets + int nmax; // max # of atoms + + double cut_global; + double cut_normal; + double **cut; + double **cutKCsq; + double **offset; + double **normal; + double ***dnormdri; + double ****dnormal; + + void read_file( char * ); + void allocate(); + void KC_neigh(); + + + /* ----Calculate the long-range cutoff term */ + inline double calc_Tap(double r_ij, double Rcut) { + double Tap,r; + double Tap_coeff[8] = {1.0,0.0,0.0,0.0,-35.0,84.0,-70.0,20.0}; + + r = r_ij/Rcut; + if(r >= 1.0) {Tap = 0.0;} + else{ + Tap = Tap_coeff[7] * r + Tap_coeff[6]; + Tap = Tap * r + Tap_coeff[5]; + Tap = Tap * r + Tap_coeff[4]; + Tap = Tap * r + Tap_coeff[3]; + Tap = Tap * r + Tap_coeff[2]; + Tap = Tap * r + Tap_coeff[1]; + Tap = Tap * r + Tap_coeff[0]; + } + + return(Tap); + } + + /* ----Calculate the derivatives of long-range cutoff term */ + inline double calc_dTap(double r_ij, double Rcut) { + double dTap,r; + double Tap_coeff[8] = {1.0,0.0,0.0,0.0,-35.0,84.0,-70.0,20.0}; + + r = r_ij/Rcut; + if(r >= 1.0) {dTap = 0.0;} + else { + dTap = 7.0*Tap_coeff[7] * r + 6.0*Tap_coeff[6]; + dTap = dTap * r + 5.0*Tap_coeff[5]; + dTap = dTap * r + 4.0*Tap_coeff[4]; + dTap = dTap * r + 3.0*Tap_coeff[3]; + dTap = dTap * r + 2.0*Tap_coeff[2]; + dTap = dTap * r + Tap_coeff[1]; + dTap = dTap/Rcut; + } + + return(dTap); + } +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Incorrect args for pair coefficients + +Self-explanatory. Check the input script or data file. + +E: All pair coeffs are not set + +All pair coefficients must be set in the data file or by the +pair_coeff command before running a simulation. + +*/ + From 2bdd9b75447ea44359f92d90ea1a61ba6969046a Mon Sep 17 00:00:00 2001 From: Mingjian Wen Date: Mon, 15 Apr 2019 20:14:10 -0500 Subject: [PATCH 069/311] Remove single --- src/USER-MISC/pair_drip.cpp | 114 +++++++++++++----------------------- src/USER-MISC/pair_drip.h | 9 ++- 2 files changed, 44 insertions(+), 79 deletions(-) diff --git a/src/USER-MISC/pair_drip.cpp b/src/USER-MISC/pair_drip.cpp index 235766f43e..4d0a941a67 100644 --- a/src/USER-MISC/pair_drip.cpp +++ b/src/USER-MISC/pair_drip.cpp @@ -12,12 +12,13 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Wengen Ouyang (Tel Aviv University) - e-mail: w.g.ouyang at gmail dot com - based on previous versions by Jaap Kroes + Contributing author: Mingjian Wen (University of Minnesota) + e-mail: wenxx151@umn.edu + based on "pair_style kolmogorov/crespi/full" by Wengen Ouyang - This is a complete version of the potential described in - [Kolmogorov & Crespi, Phys. Rev. B 71, 235415 (2005)] + This implements the DRIP model as described in + M. Wen, S. Carr, S. Fang, E. Kaxiras, and E. B. Tadmor, Phys. Rev. B, 98, + 235404 (2018). ------------------------------------------------------------------------- */ #include @@ -47,18 +48,19 @@ using namespace LAMMPS_NS; PairDRIP::PairDRIP(LAMMPS *lmp) : Pair(lmp) { // initialize element to parameter maps + single_enable = 0; nelements = 0; elements = NULL; nparams = maxparam = 0; params = NULL; elem2param = NULL; - cutKCsq = NULL; + cutDRIPsq = NULL; map = NULL; nmax = 0; maxlocal = 0; - KC_numneigh = NULL; - KC_firstneigh = NULL; + DRIP_numneigh = NULL; + DRIP_firstneigh = NULL; ipage = NULL; pgsize = oneatom = 0; @@ -78,8 +80,8 @@ PairDRIP::PairDRIP(LAMMPS *lmp) : Pair(lmp) PairDRIP::~PairDRIP() { - memory->destroy(KC_numneigh); - memory->sfree(KC_firstneigh); + memory->destroy(DRIP_numneigh); + memory->sfree(DRIP_firstneigh); delete [] ipage; memory->destroy(normal); memory->destroy(dnormal); @@ -97,7 +99,7 @@ PairDRIP::~PairDRIP() delete [] elements; memory->destroy(params); memory->destroy(elem2param); - memory->destroy(cutKCsq); + memory->destroy(cutDRIPsq); if (allocated) delete [] map; } @@ -112,7 +114,7 @@ void PairDRIP::compute(int eflag, int vflag) double rsq,r,rhosq1,rhosq2,exp0,exp1,exp2,r2inv,r6inv,r8inv,Tap,dTap,Vkc; double frho1,frho2,sumC1,sumC2,sumC11,sumC22,sumCff,fsum,rdsq1,rdsq2; int *ilist,*jlist,*numneigh,**firstneigh; - int *KC_neighs_i,*KC_neighs_j; + int *DRIP_neighs_i,*DRIP_neighs_j; evdwl = 0.0; ev_init(eflag,vflag); @@ -139,7 +141,7 @@ void PairDRIP::compute(int eflag, int vflag) numneigh = list->numneigh; firstneigh = list->firstneigh; // Build full neighbor list - KC_neigh(); + DRIP_neigh(); // Calculate the normals calc_normal(); @@ -255,9 +257,9 @@ void PairDRIP::compute(int eflag, int vflag) f[j][2] -= fkcz + fprod2[2]*Tap; // calculate the forces acted on the neighbors of atom i from atom j - KC_neighs_i = KC_firstneigh[i]; - for (kk = 0; kk < KC_numneigh[i]; kk++) { - k = KC_neighs_i[kk]; + DRIP_neighs_i = DRIP_firstneigh[i]; + for (kk = 0; kk < DRIP_numneigh[i]; kk++) { + k = DRIP_neighs_i[kk]; if (k == i) continue; // derivatives of the product of rij and ni respect to rk, k=0,1,2, where atom k is the neighbors of atom i dprodnorm1[0] = dnormal[0][0][kk][i]*delx + dnormal[1][0][kk][i]*dely + dnormal[2][0][kk][i]*delz; @@ -276,9 +278,9 @@ void PairDRIP::compute(int eflag, int vflag) } // calculate the forces acted on the neighbors of atom j from atom i - KC_neighs_j = KC_firstneigh[j]; - for (ll = 0; ll < KC_numneigh[j]; ll++) { - l = KC_neighs_j[ll]; + DRIP_neighs_j = DRIP_firstneigh[j]; + for (ll = 0; ll < DRIP_numneigh[j]; ll++) { + l = DRIP_neighs_j[ll]; if (l == j) continue; // derivatives of the product of rji and nj respect to rl, l=0,1,2, where atom l is the neighbors of atom j dprodnorm2[0] = dnormal[0][0][ll][j]*delx + dnormal[1][0][ll][j]*dely + dnormal[2][0][ll][j]*delz; @@ -367,8 +369,8 @@ void PairDRIP::calc_normal() } cont = 0; - jlist = KC_firstneigh[i]; - jnum = KC_numneigh[i]; + jlist = DRIP_firstneigh[i]; + jnum = DRIP_numneigh[i]; for (jj = 0; jj < jnum; jj++) { j = jlist[jj]; j &= NEIGHMASK; @@ -488,7 +490,6 @@ void PairDRIP::calc_normal() } } } -//############################################################################################## else if(cont == 3) { // for the atoms at the edge who has only two neighbor atoms @@ -636,9 +637,8 @@ void PairDRIP::calc_normal() else { error->one(FLERR,"There are too many neighbors for calculating normals"); } - -//############################################################################################## } + } /* ---------------------------------------------------------------------- @@ -659,7 +659,7 @@ void PairDRIP::init_style() neighbor->requests[irequest]->full = 1; neighbor->requests[irequest]->ghost = 1; - // local KC neighbor list + // local DRIP neighbor list // create pages if first time or if neighbor pgsize/oneatom has changed int create = 0; @@ -684,7 +684,7 @@ void PairDRIP::init_style() create neighbor list from main neighbor list for calculating the normals ------------------------------------------------------------------------- */ -void PairDRIP::KC_neigh() +void PairDRIP::DRIP_neigh() { int i,j,ii,jj,n,allnum,jnum,itype,jtype; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; @@ -696,10 +696,10 @@ void PairDRIP::KC_neigh() if (atom->nmax > maxlocal) { maxlocal = atom->nmax; - memory->destroy(KC_numneigh); - memory->sfree(KC_firstneigh); - memory->create(KC_numneigh,maxlocal,"DRIP:numneigh"); - KC_firstneigh = (int **) memory->smalloc(maxlocal*sizeof(int *), + memory->destroy(DRIP_numneigh); + memory->sfree(DRIP_firstneigh); + memory->create(DRIP_numneigh,maxlocal,"DRIP:numneigh"); + DRIP_firstneigh = (int **) memory->smalloc(maxlocal*sizeof(int *), "DRIP:firstneigh"); } @@ -708,7 +708,7 @@ void PairDRIP::KC_neigh() numneigh = list->numneigh; firstneigh = list->firstneigh; - // store all KC neighs of owned and ghost atoms + // store all DRIP neighs of owned and ghost atoms // scan full neighbor list of I ipage->reset(); @@ -735,13 +735,13 @@ void PairDRIP::KC_neigh() delz = ztmp - x[j][2]; rsq = delx*delx + dely*dely + delz*delz; - if (rsq != 0 && rsq < cutKCsq[itype][jtype] && atom->molecule[i] == atom->molecule[j]) { + if (rsq != 0 && rsq < cutDRIPsq[itype][jtype] && atom->molecule[i] == atom->molecule[j]) { neighptr[n++] = j; } } - KC_firstneigh[i] = neighptr; - KC_numneigh[i] = n; + DRIP_firstneigh[i] = neighptr; + DRIP_numneigh[i] = n; if (n > 3) error->one(FLERR,"There are too many neighbors for some atoms, please check your configuration"); ipage->vgot(n); if (ipage->status()) @@ -875,7 +875,7 @@ double PairDRIP::init_one(int i, int j) } /* ---------------------------------------------------------------------- - read Kolmogorov-Crespi potential file + read DRIP file ------------------------------------------------------------------------- */ void PairDRIP::read_file(char *filename) @@ -893,7 +893,7 @@ void PairDRIP::read_file(char *filename) fp = force->open_potential(filename); if (fp == NULL) { char str[128]; - snprintf(str,128,"Cannot open KC potential file %s",filename); + snprintf(str,128,"Cannot open DRIP potential file %s",filename); error->one(FLERR,str); } } @@ -944,7 +944,7 @@ void PairDRIP::read_file(char *filename) } if (nwords != params_per_line) - error->all(FLERR,"Insufficient format in KC potential file"); + error->all(FLERR,"Insufficient format in DRIP potential file"); // words = ptrs to all words in line @@ -1001,9 +1001,9 @@ void PairDRIP::read_file(char *filename) //if(nparams >= pow(atom->ntypes,3)) break; } memory->destroy(elem2param); - memory->destroy(cutKCsq); + memory->destroy(cutDRIPsq); memory->create(elem2param,nelements,nelements,"pair:elem2param"); - memory->create(cutKCsq,nelements,nelements,"pair:cutKCsq"); + memory->create(cutDRIPsq,nelements,nelements,"pair:cutDRIPsq"); for (i = 0; i < nelements; i++) { for (j = 0; j < nelements; j++) { n = -1; @@ -1015,7 +1015,7 @@ void PairDRIP::read_file(char *filename) } if (n < 0) error->all(FLERR,"Potential file is missing an entry"); elem2param[i][j] = n; - cutKCsq[i][j] = params[n].rcut*params[n].rcut; + cutDRIPsq[i][j] = params[n].rcut*params[n].rcut; } } delete [] words; @@ -1023,40 +1023,6 @@ void PairDRIP::read_file(char *filename) /* ---------------------------------------------------------------------- */ -double PairDRIP::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, - double /*factor_coul*/, double factor_lj, - double &fforce) -{ - double r,r2inv,r6inv,r8inv,forcelj,philj; - double Tap,dTap,Vkc,fpair; - - int iparam_ij = elem2param[map[itype]][map[jtype]]; - Param& p = params[iparam_ij]; - - r = sqrt(rsq); - // turn on/off taper function - if (tap_flag) { - Tap = calc_Tap(r,sqrt(cutsq[itype][jtype])); - dTap = calc_dTap(r,sqrt(cutsq[itype][jtype])); - } else {Tap = 1.0; dTap = 0.0;} - - r2inv = 1.0/rsq; - r6inv = r2inv*r2inv*r2inv; - r8inv = r2inv*r6inv; - - Vkc = -p.A*p.z06*r6inv; - // derivatives - fpair = -6.0*p.A*p.z06*r8inv; - forcelj = fpair; - fforce = factor_lj*(forcelj*Tap - Vkc*dTap/r); - - if (tap_flag) philj = Vkc*Tap; - else philj = Vkc - offset[itype][jtype]; - return factor_lj*philj; -} - -/* ---------------------------------------------------------------------- */ - int PairDRIP::pack_forward_comm(int n, int *list, double *buf, int /*pbc_flag*/, int * /*pbc*/) { diff --git a/src/USER-MISC/pair_drip.h b/src/USER-MISC/pair_drip.h index faa05bce4d..10750985c6 100644 --- a/src/USER-MISC/pair_drip.h +++ b/src/USER-MISC/pair_drip.h @@ -39,7 +39,6 @@ class PairDRIP : public Pair { void calc_normal(); int pack_forward_comm(int, int *, double *, int, int *); void unpack_forward_comm(int, int, double *); - double single(int, int, int, int, double, double, double, double &); protected: int me; @@ -47,8 +46,8 @@ class PairDRIP : public Pair { int pgsize; // size of neighbor page int oneatom; // max # of neighbors for one atom MyPage *ipage; // neighbor list pages - int *KC_numneigh; // # of pair neighbors for each atom - int **KC_firstneigh; // ptr to 1st neighbor of each atom + int *DRIP_numneigh; // # of pair neighbors for each atom + int **DRIP_firstneigh; // ptr to 1st neighbor of each atom int tap_flag; // flag to turn on/off taper function @@ -69,7 +68,7 @@ class PairDRIP : public Pair { double cut_global; double cut_normal; double **cut; - double **cutKCsq; + double **cutDRIPsq; double **offset; double **normal; double ***dnormdri; @@ -77,7 +76,7 @@ class PairDRIP : public Pair { void read_file( char * ); void allocate(); - void KC_neigh(); + void DRIP_neigh(); /* ----Calculate the long-range cutoff term */ From fdaa3f48e987e4b3ce1890ba8fe36f26c27c1bfb Mon Sep 17 00:00:00 2001 From: Mingjian Wen Date: Mon, 15 Apr 2019 22:38:51 -0500 Subject: [PATCH 070/311] Modify all methods other than compute --- src/USER-MISC/pair_drip.cpp | 165 +++++++++++++++--------------------- src/USER-MISC/pair_drip.h | 10 +-- 2 files changed, 71 insertions(+), 104 deletions(-) diff --git a/src/USER-MISC/pair_drip.cpp b/src/USER-MISC/pair_drip.cpp index 4d0a941a67..c25acac3c3 100644 --- a/src/USER-MISC/pair_drip.cpp +++ b/src/USER-MISC/pair_drip.cpp @@ -54,9 +54,9 @@ PairDRIP::PairDRIP(LAMMPS *lmp) : Pair(lmp) nparams = maxparam = 0; params = NULL; elem2param = NULL; - cutDRIPsq = NULL; map = NULL; + cutmax = 0.0; nmax = 0; maxlocal = 0; DRIP_numneigh = NULL; @@ -68,9 +68,6 @@ PairDRIP::PairDRIP(LAMMPS *lmp) : Pair(lmp) dnormal = NULL; dnormdri = NULL; - // always compute energy offset - offset_flag = 1; - // set comm size needed by this Pair comm_forward = 39; tap_flag = 0; @@ -90,8 +87,6 @@ PairDRIP::~PairDRIP() if (allocated) { memory->destroy(setflag); memory->destroy(cutsq); - memory->destroy(cut); - memory->destroy(offset); } if (elements) @@ -99,7 +94,6 @@ PairDRIP::~PairDRIP() delete [] elements; memory->destroy(params); memory->destroy(elem2param); - memory->destroy(cutDRIPsq); if (allocated) delete [] map; } @@ -300,7 +294,7 @@ void PairDRIP::compute(int eflag, int vflag) if (eflag) { if (tap_flag) evdwl = Tap*Vkc; - else evdwl = Vkc - offset[itype][jtype]; + else evdwl = Vkc; } if (evflag) ev_tally_xyz(i,j,nlocal,newton_pair,evdwl,0,fkcx,fkcy,fkcz,delx,dely,delz); @@ -641,44 +635,6 @@ void PairDRIP::calc_normal() } -/* ---------------------------------------------------------------------- - init specific to this pair style -------------------------------------------------------------------------- */ - -void PairDRIP::init_style() -{ - if (force->newton_pair == 0) - error->all(FLERR,"Pair style drip requires newton pair on"); - if (!atom->molecule_flag) - error->all(FLERR,"Pair style drip requires atom attribute molecule"); - - // need a full neighbor list, including neighbors of ghosts - - int irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->full = 1; - neighbor->requests[irequest]->ghost = 1; - - // local DRIP neighbor list - // create pages if first time or if neighbor pgsize/oneatom has changed - - int create = 0; - if (ipage == NULL) create = 1; - if (pgsize != neighbor->pgsize) create = 1; - if (oneatom != neighbor->oneatom) create = 1; - - if (create) { - delete [] ipage; - pgsize = neighbor->pgsize; - oneatom = neighbor->oneatom; - - int nmypage= comm->nthreads; - ipage = new MyPage[nmypage]; - for (int i = 0; i < nmypage; i++) - ipage[i].init(oneatom,pgsize,PGDELTA); - } -} - /* ---------------------------------------------------------------------- create neighbor list from main neighbor list for calculating the normals @@ -735,7 +691,11 @@ void PairDRIP::DRIP_neigh() delz = ztmp - x[j][2]; rsq = delx*delx + dely*dely + delz*delz; - if (rsq != 0 && rsq < cutDRIPsq[itype][jtype] && atom->molecule[i] == atom->molecule[j]) { + + int iparam_ij = elem2param[itype][jtype]; + double rcutsq = params[iparam_ij].rcutsq; + + if (rsq != 0 && rsq < rcutsq && atom->molecule[i] == atom->molecule[j]) { neighptr[n++] = j; } } @@ -749,6 +709,43 @@ void PairDRIP::DRIP_neigh() } } +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairDRIP::init_style() +{ + if (force->newton_pair == 0) + error->all(FLERR,"Pair style drip requires newton pair on"); + if (!atom->molecule_flag) + error->all(FLERR,"Pair style drip requires atom attribute molecule"); + + // need a full neighbor list, including neighbors of ghosts + + int irequest = neighbor->request(this,instance_me); + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; + neighbor->requests[irequest]->ghost = 1; + + // local DRIP neighbor list + // create pages if first time or if neighbor pgsize/oneatom has changed + + int create = 0; + if (ipage == NULL) create = 1; + if (pgsize != neighbor->pgsize) create = 1; + if (oneatom != neighbor->oneatom) create = 1; + + if (create) { + delete [] ipage; + pgsize = neighbor->pgsize; + oneatom = neighbor->oneatom; + + int nmypage= comm->nthreads; + ipage = new MyPage[nmypage]; + for (int i = 0; i < nmypage; i++) + ipage[i].init(oneatom,pgsize,PGDELTA); + } +} /* ---------------------------------------------------------------------- allocate all arrays @@ -759,14 +756,13 @@ void PairDRIP::allocate() allocated = 1; int n = atom->ntypes; + // MOVE init of setflag ot other places; se pair_sw memory->create(setflag,n+1,n+1,"pair:setflag"); for (int i = 1; i <= n; i++) for (int j = i; j <= n; j++) setflag[i][j] = 0; memory->create(cutsq,n+1,n+1,"pair:cutsq"); - memory->create(cut,n+1,n+1,"pair:cut"); - memory->create(offset,n+1,n+1,"pair:offset"); map = new int[atom->ntypes+1]; } @@ -776,21 +772,9 @@ void PairDRIP::allocate() void PairDRIP::settings(int narg, char **arg) { - if (narg < 1 || narg > 2) error->all(FLERR,"Illegal pair_style command"); + if (narg != 0) error->all(FLERR,"Illegal pair_style command"); if (strcmp(force->pair_style,"hybrid/overlay")!=0) error->all(FLERR,"ERROR: requires hybrid/overlay pair_style"); - - cut_global = force->numeric(FLERR,arg[0]); - if (narg == 2) tap_flag = force->numeric(FLERR,arg[1]); - - // reset cutoffs that have been explicitly set - - if (allocated) { - int i,j; - for (i = 1; i <= atom->ntypes; i++) - for (j = i; j <= atom->ntypes; j++) - if (setflag[i][j]) cut[i][j] = cut_global; - } } /* ---------------------------------------------------------------------- @@ -841,12 +825,9 @@ void PairDRIP::coeff(int narg, char **arg) read_file(arg[2]); - double cut_one = cut_global; - int count = 0; for (int i = ilo; i <= ihi; i++) { for (int j = MAX(jlo,i); j <= jhi; j++) { - cut[i][j] = cut_one; setflag[i][j] = 1; count++; } @@ -864,14 +845,7 @@ double PairDRIP::init_one(int i, int j) { if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); - if (offset_flag && (cut[i][j] > 0.0)) { - int iparam_ij = elem2param[map[i]][map[j]]; - Param& p = params[iparam_ij]; - offset[i][j] = -p.A*pow(p.z0/cut[i][j],6); - } else offset[i][j] = 0.0; - offset[j][i] = offset[i][j]; - - return cut[i][j]; + return cutmax; } /* ---------------------------------------------------------------------- @@ -880,7 +854,7 @@ double PairDRIP::init_one(int i, int j) void PairDRIP::read_file(char *filename) { - int params_per_line = 12; + int params_per_line = 14; char **words = new char*[params_per_line+1]; memory->sfree(params); params = NULL; @@ -973,37 +947,33 @@ void PairDRIP::read_file(char *filename) params[nparams].ielement = ielement; params[nparams].jelement = jelement; - params[nparams].z0 = atof(words[2]); - params[nparams].C0 = atof(words[3]); - params[nparams].C2 = atof(words[4]); - params[nparams].C4 = atof(words[5]); - params[nparams].C = atof(words[6]); - params[nparams].delta = atof(words[7]); - params[nparams].lambda = atof(words[8]); - params[nparams].A = atof(words[9]); - // S provides a convenient scaling of all energies - params[nparams].S = atof(words[10]); - params[nparams].rcut = atof(words[11]); + params[nparams].C0 = atof(words[2]); + params[nparams].C2 = atof(words[3]); + params[nparams].C4 = atof(words[4]); + params[nparams].C = atof(words[5]); + params[nparams].delta = atof(words[6]); + params[nparams].lambda = atof(words[7]); + params[nparams].A = atof(words[8]); + params[nparams].z0 = atof(words[9]); + params[nparams].B = atof(words[10]); + params[nparams].eta = atof(words[11]); + params[nparams].rhocut = atof(words[12]); + params[nparams].rcut = atof(words[13]); - // energies in meV further scaled by S - double meV = 1.0e-3*params[nparams].S; - params[nparams].C *= meV; - params[nparams].A *= meV; - params[nparams].C0 *= meV; - params[nparams].C2 *= meV; - params[nparams].C4 *= meV; + // convenient precomputations + params[nparams].rhocutsq = params[nparams].rhocut * params[nparams].rhocut; + params[nparams].rcutsq = params[nparams].rcut * params[nparams].rcut; + + // set max cutoff + if(params[nparams].rcut > cutmax) cutmax = params[nparams].rcut; - // precompute some quantities - params[nparams].delta2inv = pow(params[nparams].delta,-2); - params[nparams].z06 = pow(params[nparams].z0,6); nparams++; //if(nparams >= pow(atom->ntypes,3)) break; } + memory->destroy(elem2param); - memory->destroy(cutDRIPsq); memory->create(elem2param,nelements,nelements,"pair:elem2param"); - memory->create(cutDRIPsq,nelements,nelements,"pair:cutDRIPsq"); for (i = 0; i < nelements; i++) { for (j = 0; j < nelements; j++) { n = -1; @@ -1015,7 +985,6 @@ void PairDRIP::read_file(char *filename) } if (n < 0) error->all(FLERR,"Potential file is missing an entry"); elem2param[i][j] = n; - cutDRIPsq[i][j] = params[n].rcut*params[n].rcut; } } delete [] words; diff --git a/src/USER-MISC/pair_drip.h b/src/USER-MISC/pair_drip.h index 10750985c6..c6628a96de 100644 --- a/src/USER-MISC/pair_drip.h +++ b/src/USER-MISC/pair_drip.h @@ -41,6 +41,7 @@ class PairDRIP : public Pair { void unpack_forward_comm(int, int, double *); protected: + double cutmax; // max cutoff for all species int me; int maxlocal; // size of numneigh, firstneigh arrays int pgsize; // size of neighbor page @@ -52,9 +53,10 @@ class PairDRIP : public Pair { struct Param { - double z0,C0,C2,C4,C,delta,lambda,A,S; - double delta2inv,z06,rcut; int ielement,jelement; + double C0,C2,C4,C,delta,lambda,A,z0,B,eta,rhocut,rcut; + double rhocutsq, rcutsq; + double delta2inv,z06; }; Param *params; // parameter set for I-J interactions char **elements; // names of unique elements @@ -65,11 +67,7 @@ class PairDRIP : public Pair { int maxparam; // max # of parameter sets int nmax; // max # of atoms - double cut_global; double cut_normal; - double **cut; - double **cutDRIPsq; - double **offset; double **normal; double ***dnormdri; double ****dnormal; From 835fce7a5ef846acd5aea7d923e2fed350db8624 Mon Sep 17 00:00:00 2001 From: Mingjian Wen Date: Tue, 16 Apr 2019 10:51:20 -0500 Subject: [PATCH 071/311] Copy all function from KIM implementation to PairDRIP --- src/USER-MISC/pair_drip.cpp | 671 ++++++++++++++++++++++++++++++++++++ src/USER-MISC/pair_drip.h | 6 + 2 files changed, 677 insertions(+) diff --git a/src/USER-MISC/pair_drip.cpp b/src/USER-MISC/pair_drip.cpp index c25acac3c3..2323b9d694 100644 --- a/src/USER-MISC/pair_drip.cpp +++ b/src/USER-MISC/pair_drip.cpp @@ -42,6 +42,8 @@ using namespace LAMMPS_NS; #define MAXLINE 1024 #define DELTA 4 #define PGDELTA 1 +#define DIM 3 +#define HALF 0.5 /* ---------------------------------------------------------------------- */ @@ -68,6 +70,13 @@ PairDRIP::PairDRIP(LAMMPS *lmp) : Pair(lmp) dnormal = NULL; dnormdri = NULL; + + + + nearest3neigh = NULL; + + + // set comm size needed by this Pair comm_forward = 39; tap_flag = 0; @@ -95,7 +104,669 @@ PairDRIP::~PairDRIP() memory->destroy(params); memory->destroy(elem2param); if (allocated) delete [] map; + + + memory->destroy(nearest3neigh); + } + + +/* ---------------------------------------------------------------------- */ + +void PairDRIP::compute(int eflag, int vflag) +{ + + int i,j,ii,jj,inum,jnum,itype,jtype,k,l,kk,ll; + tagint itag,jtag; + double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fpair,fpair1,fpair2, r, rsq; + int *ilist,*jlist,*numneigh,**firstneigh; + + int nbi1, nbi2, nbi3; + double ni[DIM]; + double dni_dri[DIM][DIM], dni_drnb1[DIM][DIM]; + double dni_drnb2[DIM][DIM], dni_drnb3[DIM][DIM]; + + + evdwl = 0.0; + ev_init(eflag,vflag); + + double **x = atom->x; + double **f = atom->f; + int *type = atom->type; + tagint *tag = atom->tag; + int nlocal = atom->nlocal; + int newton_pair = force->newton_pair; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + + + + + double prodnorm1,prodnorm2,fkcx,fkcy,fkcz; + double rhosq1,rhosq2,exp0,exp1,exp2,r2inv,r6inv,r8inv,Tap,dTap,Vkc; + double frho1,frho2,sumC1,sumC2,sumC11,sumC22,sumCff,fsum,rdsq1,rdsq2; + int *DRIP_neighs_i,*DRIP_neighs_j; + + + double dprodnorm1[3] = {0.0, 0.0, 0.0}; + double dprodnorm2[3] = {0.0, 0.0, 0.0}; + double fp1[3] = {0.0, 0.0, 0.0}; + double fp2[3] = {0.0, 0.0, 0.0}; + double fprod1[3] = {0.0, 0.0, 0.0}; + double fprod2[3] = {0.0, 0.0, 0.0}; + double fk[3] = {0.0, 0.0, 0.0}; + double fl[3] = {0.0, 0.0, 0.0}; + double delkj[3] = {0.0, 0.0, 0.0}; + double delli[3] = {0.0, 0.0, 0.0}; + + + + + // find nearest 3 neighbors of each atom + nearest3neigh(); + + //TODO what does this comm do? + // communicate the normal vector and its derivatives + comm->forward_comm_pair(this); + + // loop over neighbors of my atoms + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + itag = tag[i]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itype = map[type[i]]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + + // normal and its derivatives w.r.t. atom i and its 3 nearest neighs + calc_normal(i, nbi1, nbi2, nbi3, ni, dni_dri,dni_drnb1, dni_drnb2, dni_drnb3); + + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + jtype = map[type[j]]; + jtag = tag[j]; + +// // two-body interactions from full neighbor list, skip half of them +// if (itag > jtag) { +// if ((itag+jtag) % 2 == 0) continue; +// } else if (itag < jtag) { +// if ((itag+jtag) % 2 == 1) continue; +// } else { +// if (x[j][2] < ztmp) continue; +// if (x[j][2] == ztmp && x[j][1] < ytmp) continue; +// if (x[j][2] == ztmp && x[j][1] == ytmp && x[j][0] < xtmp) continue; +// } + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + int iparam_ij = elem2param[itype][jtype]; + Param& p = params[iparam_ij]; + double rcutsq = p.rcutsq; + + + // only include the interation between different layers + if (rsq>1e-20 && rsq < rcutsq && atom->molecule[i] != atom->molecule[j]) { + + double phi_attr = calc_attractive(vflag, i,j,p, delx, dely, delz, rsq); + + double phi_repul = calc_repulsive(vflag); + + + + } + } //loop over jj + } // loop over ii + +} + + +/* ---------------------------------------------------------------------- */ + +double PairDRIP::calc_attractive(int const i, int const j, Param& p, + double const rsq, double const * rvec) +{ + + double **f = atom->f; + + double const z0 = p.z0; + double const A = p.A; + double const cutoff = p.rcut; + double const r = sqrt(rsq); + + double roz0_sq = rsq / (z0 * z0); + double dtp; + double tp = tap(r, cutoff, dtp); + double r6 = A / (roz0_sq * roz0_sq * roz0_sq); + double dr6 = -6 * r6 / r; + double phi = -r6 * tp; + + double fpair = HALF * (r6 * dtp + dr6 * tp); + f[i][0] += rvec[0] * fpair / r; + f[i][1] += rvec[1] * fpair / r; + f[i][2] += rvec[2] * fpair / r; + f[j][0] -= rvec[0] * fpair / r; + f[j][1] -= rvec[1] * fpair / r; + f[j][2] -= rvec[2] * fpair / r; + + return phi; +} + + +/* ---------------------------------------------------------------------- */ + +double PairDRIP::calc_repulsive(int const i, int const j, Param& p, + double const rsq, double const * rvec, + int const nbi1, int const nbi2, int const nbi3, double const * ni, + double const * dni_dr[DIM], double const * dni_drnb1[DIM], + double const * dni_drnb2[DIM], double const * dni_drnb3[DIM]) +{ + double **f = atom->f; + double r = sqrt(rsq); + + // params + double C0 = p.C0; + double C2 = p.C2; + double C4 = p.C4; + double C = p.C; + double delta = p.delta; + double lambda = p.lambda; + double z0 = p.z0; + double cutoff = p.rcut; + + // nearest 3 neighbors of atom j + int nbj1 = nearest3neigh[j][0]; + int nbj2 = nearest3neigh[j][1]; + int nbj3 = nearest3neigh[j][2]; + + double[DIM] dgij_dri; + double[DIM] dgij_drj; + double[DIM] dgij_drk1; + double[DIM] dgij_drk2; + double[DIM] dgij_drk3; + double[DIM] dgij_drl1; + double[DIM] dgij_drl2; + double[DIM] dgij_drl3; + double[DIM] drhosqij_dri; + double[DIM] drhosqij_drj; + double[DIM] drhosqij_drnb1; + double[DIM] drhosqij_drnb2; + double[DIM] drhosqij_drnb3; + + + // derivative of rhosq w.r.t coordinates of atoms i, j, and the nearests 3 + // neighs of i + get_drhosqij(rvec, ni, dni_dri, dni_drnb1, dni_drnb2, dni_drnb3, drhosqij_dri, + drhosqij_drj, drhosqij_drnb1, drhosqij_drnb2, drhosqij_drnb3); + + // transverse decay function f(rho) and its derivative w.r.t. rhosq + double rhosqij; + double dtdij; + double tdij = td(C0, C2, C4, delta, rvec, r, ni, rhosqij, dtdij); + + // dihedral angle function and its derivateives + double dgij_drhosq; + double gij = dihedral(i, j, p, rhosqij, dgij_drhosq, dgij_dri, dgij_drj, + dgij_drk1, dgij_drk2, dgij_drk3, dgij_drl1, dgij_drl2, dgij_drl3); + + double V2 = C + tdij + gij; + + // tap part + double dtp; + double tp = tap(r, cutoff, dtp); + + /* exponential part */ + double V1 = exp(-lambda * (r - z0)); + double dV1 = -V1 * lambda; + + double phi = tp * V1 * V2; + + for (int k = 0; k < DIM; k++) { + + // forces due to derivatives of tap and V1 + double tmp = -HALF * (dtp * V1 + tp * dV1) * V2 * rvec[k] / r; + f[i][k] += tmp; + f[j][k] -= tmp; + + // the following incldue the transverse decay part tdij and the dihedral part gij + // derivative of V2 contribute to atoms i, j + f[i][k] += HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_dri[k] + dgij_dri[k]); + f[j][k] += HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drj[k] + dgij_drj[k]); + + // derivative of V2 contribute to neighs of atom i + f[nbi1][k] += HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb1[k] + dgij_drk1[k]); + f[nbi2][k] += HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb2[k] + dgij_drk2[k]); + f[nbi3][k] += HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb3[k] + dgij_drk3[k]); + + // derivative of V2 contribute to neighs of atom j + f[nbj1][k] += HALF * tp * V1 * dgij_drl1[k]; + f[nbj2][k] += HALF * tp * V1 * dgij_drl2[k]; + f[nbj3][k] += HALF * tp * V1 * dgij_drl3[k]; + } + + return phi; +} + + + +/* ---------------------------------------------------------------------- */ + +void PairDRIP::find_nearest_3_neigh() +{ + + int i,j,ii,jj,n,allnum,jnum,itype,jtype; + double xtmp,ytmp,ztmp,delx,dely,delz,rsq; + int *ilist,*jlist,*numneigh,**firstneigh; + int *neighptr; + + double **x = atom->x; + int *type = atom->type; + + + allnum = list->inum + list->gnum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + memory->destroy(nearest3neigh); + memory->create(nearest3neigh, allnum, 3, "DRIP:nearest3neigh"); + + // store all DRIP neighs of owned and ghost atoms + // scan full neighbor list of I + + ipage->reset(); + + for (ii = 0; ii < allnum; ii++) { + i = ilist[ii]; + + n = 0; + neighptr = ipage->vget(); + + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itype = map[type[i]]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + + // init nb1 to be the 1st nearest neigh, nb3 the 3rd nearest + int nb1 = -1; + int nb2 = -1; + int nb3 = -1; + double nb1_rsq = 1.1e10; + double nb2_rsq = 2.0e10; + double nb3_rsq = 3.0e10; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + jtype = map[type[j]]; + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + + int iparam_ij = elem2param[itype][jtype]; + double rcutsq = params[iparam_ij].rcutsq; + + if (rsq > 1e-20 && rsq < rcutsq && atom->molecule[i] == atom->molecule[j]) { + + // find the 3 nearest neigh + if (rsq < nb1_rsq) { + nb3 = nb2; + nb2 = nb1; + nb1 = j; + nb3_rsq = nb2_rsq; + nb2_rsq = nb1_rsq; + nb1_rsq = rsq; + } + else if (rsq < nb2_rsq) { + nb3 = nb2; + nb2 = j; + nb3_rsq = nb2_rsq; + nb2_rsq = rsq; + } + else if (rsq < nb3_rsq) { + nb3 = j; + nb3_rsq = rsq; + } + + } + } // loop over jj + + // store neighbors to be used later to compute normal + if (nb1_rsq >= 1.0e10 || nb2_rsq >= 1.0e10 || nb3_rsq >= 1.0e10) { + error->one(FLERR,"No enough neighbors to construct normal."); + } else{ + nearest3neigh[i][0] = nb1; + nearest3neigh[i][1] = nb2; + nearest3neigh[i][2] = nb3; + } + + } // loop over ii +} + + +/* ---------------------------------------------------------------------- */ + +void PairDRIP::calc_normal(int const i, double ** const nearest3neigh, + int& k1, int& k2, int& k3, double * const normal, + double ** const dn_dri, double ** const dn_drk1, + double ** const dn_drk2, double ** const dn_drk3) +{ + + k1 = nearest3neigh[i][0]; + k2 = nearest3neigh[i][1]; + k3 = nearest3neigh[i][2]; + + // normal does not depend on i, setting to zero + for (int j = 0; j < DIM; j++) { + for (int k = 0; k < DIM; k++) { + dn_dri[j][k] = 0.0; + } + } + + // get normal and derives of normal w.r.t to its 3 nearest neighbors + double **x = atom->x; + deriv_cross(x[k1], x[k2], x[k3], normal, dn_drk1, dn_drk2, dn_drk3); +} + + +/* ---------------------------------------------------------------------- */ +void PairDRIP::get_drhosqij( + double const* const rij, + double const* const ni, + VectorOfSizeDIM const* const dni_dri, + VectorOfSizeDIM const* const dni_drn1, + VectorOfSizeDIM const* const dni_drn2, + VectorOfSizeDIM const* const dni_drn3, + double* const drhosq_dri, + double* const drhosq_drj, + double* const drhosq_drn1, + double* const drhosq_drn2, + double* const drhosq_drn3) const +{ + int k; + double ni_dot_rij = 0; + double dni_dri_dot_rij[DIM]; + double dni_drn1_dot_rij[DIM]; + double dni_drn2_dot_rij[DIM]; + double dni_drn3_dot_rij[DIM]; + + ni_dot_rij = dot(ni, rij); + mat_dot_vec(dni_dri, rij, dni_dri_dot_rij); + mat_dot_vec(dni_drn1, rij, dni_drn1_dot_rij); + mat_dot_vec(dni_drn2, rij, dni_drn2_dot_rij); + mat_dot_vec(dni_drn3, rij, dni_drn3_dot_rij); + + for (k = 0; k < DIM; k++) { + drhosq_dri[k] = -2 * rij[k] - 2 * ni_dot_rij * (-ni[k] + dni_dri_dot_rij[k]); + drhosq_drj[k] = 2 * rij[k] - 2 * ni_dot_rij * ni[k]; + drhosq_drn1[k] = -2 * ni_dot_rij * dni_drn1_dot_rij[k]; + drhosq_drn2[k] = -2 * ni_dot_rij * dni_drn2_dot_rij[k]; + drhosq_drn3[k] = -2 * ni_dot_rij * dni_drn3_dot_rij[k]; + } +} + + +/* ---------------------------------------------------------------------- */ +// Compute the normalized cross product of two vector rkl, rkm, and the +// derivates w.r.t rk, rl, rm. +// NOTE, the dcross_drk, dcross_drl, and dcross_drm is actually the transpose +// of the actual one. + +void PairDRIP::deriv_cross( double const* rk, double const* rl, double const* rm, + double* const cross, double ** const dcross_drk, + double ** const dcross_drl, double ** const dcross_drm) +{ + double x[DIM]; + double y[DIM]; + double p[DIM]; + double q; + double q_cubic; + double d_invq_d_x0; + double d_invq_d_x1; + double d_invq_d_x2; + double d_invq_d_y0; + double d_invq_d_y1; + double d_invq_d_y2; + + int i, j; + + + // get x = rkl and y = rkm + for (i = 0; i < DIM; i++) { + x[i] = rl[i] - rk[i]; + y[i] = rm[i] - rk[i]; + } + + // cross product + p[0] = x[1] * y[2] - x[2] * y[1]; + p[1] = x[2] * y[0] - x[0] * y[2]; + p[2] = x[0] * y[1] - x[1] * y[0]; + + q = sqrt(p[0] * p[0] + p[1] * p[1] + p[2] * p[2]); + + // normalized cross + cross[0] = p[0] / q; + cross[1] = p[1] / q; + cross[2] = p[2] / q; + + // compute derivatives + // derivative of inverse q (i.e. 1/q) w.r.t x and y + q_cubic = q * q * q; + d_invq_d_x0 = (+p[1] * y[2] - p[2] * y[1]) / q_cubic; + d_invq_d_x1 = (-p[0] * y[2] + p[2] * y[0]) / q_cubic; + d_invq_d_x2 = (p[0] * y[1] - p[1] * y[0]) / q_cubic; + d_invq_d_y0 = (-p[1] * x[2] + p[2] * x[1]) / q_cubic; + d_invq_d_y1 = (p[0] * x[2] - p[2] * x[0]) / q_cubic; + d_invq_d_y2 = (-p[0] * x[1] + p[1] * x[0]) / q_cubic; + + // dcross/drl transposed + dcross_drl[0][0] = p[0] * d_invq_d_x0; + dcross_drl[0][1] = -y[2] / q + p[1] * d_invq_d_x0; + dcross_drl[0][2] = y[1] / q + p[2] * d_invq_d_x0; + + dcross_drl[1][0] = y[2] / q + p[0] * d_invq_d_x1; + dcross_drl[1][1] = p[1] * d_invq_d_x1; + dcross_drl[1][2] = -y[0] / q + p[2] * d_invq_d_x1; + + dcross_drl[2][0] = -y[1] / q + p[0] * d_invq_d_x2; + dcross_drl[2][1] = y[0] / q + p[1] * d_invq_d_x2; + dcross_drl[2][2] = p[2] * d_invq_d_x2; + + // dcross/drm transposed + dcross_drm[0][0] = p[0] * d_invq_d_y0; + dcross_drm[0][1] = x[2] / q + p[1] * d_invq_d_y0; + dcross_drm[0][2] = -x[1] / q + p[2] * d_invq_d_y0; + + dcross_drm[1][0] = -x[2] / q + p[0] * d_invq_d_y1; + dcross_drm[1][1] = p[1] * d_invq_d_y1; + dcross_drm[1][2] = x[0] / q + p[2] * d_invq_d_y1; + + dcross_drm[2][0] = x[1] / q + p[0] * d_invq_d_y2; + dcross_drm[2][1] = -x[0] / q + p[1] * d_invq_d_y2; + dcross_drm[2][2] = p[2] * d_invq_d_y2; + + // dcross/drk transposed + for (i = 0; i < DIM; i++) { + for (j = 0; j < DIM; j++) { + dcross_drk[i][j] = -(dcross_drl[i][j] + dcross_drm[i][j]); + } + } + +} + +/* ---------------------------------------------------------------------- */ + + +// derivartive of transverse decay function f(rho) w.r.t rho +double PairDRIP::td(double C0, double C2, double C4, double delta, + double const* const rvec, double r, + const double* const n, + double& rho_sq, double& dtd) const +{ + double n_dot_r = dot(n, rvec); + + rho_sq = r * r - n_dot_r * n_dot_r; + + if (rho_sq < 0) { // in case n is [0, 0, 1] and rho_sq is negative due to numerical error + rho_sq = 0; + } + + double del_sq = delta * delta; + double rod_sq = rho_sq / del_sq; + double td = exp(-rod_sq) * (C0 + rod_sq * (C2 + rod_sq * C4)); + dtd = -td / del_sq + exp(-rod_sq) * (C2 + 2 * C4 * rod_sq) / del_sq; + + return td; +} + + +/* ---------------------------------------------------------------------- */ +// derivartive of dihedral angle func gij w.r.t rho, and atom positions +double PairDRIP::dihedral( + const int i, const int j, Param& p, double const rhosq, double& d_drhosq, + double* const d_dri, double* const d_drj, + double* const d_drk1, double* const d_drk2, double* const d_drk3, + double* const d_drl1, double* const d_drl2, double* const d_drl3) +{ + // get parameter + double B = p.B; + double eta = p.eta; + double cut_rhosq = p.rhocutsq; + + // local vars + double cos_kl[3][3]; // cos_omega_k1ijl1, cos_omega_k1ijl2 ... + double d_dcos_kl[3][3]; // deriv of dihedral w.r.t to cos_omega_kijl + double dcos_kl[3][3][4][DIM]; // 4 indicates k, i, j, l, e.g. dcoskl[0][1][0] means + // dcos_omega_k1ijl2 / drk + + + // if larger than cutoff of rho, return 0 + if (rhosq >= cut_rhosq) { + d_drhosq = 0; + for (int dim = 0; dim < DIM; dim++) { + d_dri[dim] = 0; + d_drj[dim] = 0; + d_drk1[dim] = 0; + d_drk2[dim] = 0; + d_drk3[dim] = 0; + d_drl1[dim] = 0; + d_drl2[dim] = 0; + d_drl3[dim] = 0; + } + double dihe = 0.0; + return dihe; + } + // 3 neighs of atoms i and j + int k[3]; + int l[3]; + for (int m = 0; m < 3; m++) { + k[m] = nearest3neigh[i][m]; + l[m] = nearest3neigh[j][m]; + } + + // cos_omega_kijl and the derivatives w.r.t coordinates + for (int m = 0; m < 3; m++) { + for (int n = 0; n < 3; n++) { + cos_kl[m][n] = deriv_cos_omega( + coordinates[k[m]], coordinates[i], coordinates[j], coordinates[l[n]], + dcos_kl[m][n][0], dcos_kl[m][n][1], dcos_kl[m][n][2], dcos_kl[m][n][3]); + } + } + + double epart1 = exp(-eta * cos_kl[0][0] * cos_kl[0][1] * cos_kl[0][2]); + double epart2 = exp(-eta * cos_kl[1][0] * cos_kl[1][1] * cos_kl[1][2]); + double epart3 = exp(-eta * cos_kl[2][0] * cos_kl[2][1] * cos_kl[2][2]); + double D2 = epart1 + epart2 + epart3; + + // cutoff function + double d_drhosq_tap; + double D0 = B * tap_rho(rhosq, cut_rhosq, d_drhosq_tap); + + // dihedral energy + double dihe = D0 * D2; + + // deriv of dihedral w.r.t rhosq + d_drhosq = B * d_drhosq_tap * D2; + + // deriv of dihedral w.r.t cos_omega_kijl + d_dcos_kl[0][0] = -D0 * epart1 * eta * cos_kl[0][1] * cos_kl[0][2]; + d_dcos_kl[0][1] = -D0 * epart1 * eta * cos_kl[0][0] * cos_kl[0][2]; + d_dcos_kl[0][2] = -D0 * epart1 * eta * cos_kl[0][0] * cos_kl[0][1]; + d_dcos_kl[1][0] = -D0 * epart2 * eta * cos_kl[1][1] * cos_kl[1][2]; + d_dcos_kl[1][1] = -D0 * epart2 * eta * cos_kl[1][0] * cos_kl[1][2]; + d_dcos_kl[1][2] = -D0 * epart2 * eta * cos_kl[1][0] * cos_kl[1][1]; + d_dcos_kl[2][0] = -D0 * epart3 * eta * cos_kl[2][1] * cos_kl[2][2]; + d_dcos_kl[2][1] = -D0 * epart3 * eta * cos_kl[2][0] * cos_kl[2][2]; + d_dcos_kl[2][2] = -D0 * epart3 * eta * cos_kl[2][0] * cos_kl[2][1]; + + // initialization to be zero and later add values + for (int dim = 0; dim < DIM; dim++) { + d_drk1[dim] = 0.; + d_drk2[dim] = 0.; + d_drk3[dim] = 0.; + d_dri[dim] = 0.; + d_drj[dim] = 0.; + d_drl1[dim] = 0.; + d_drl2[dim] = 0.; + d_drl3[dim] = 0.; + } + + for (int m = 0; m < 3; m++) { + for (int dim = 0; dim < 3; dim++) { + d_drk1[dim] += d_dcos_kl[0][m] * dcos_kl[0][m][0][dim]; + d_drk2[dim] += d_dcos_kl[1][m] * dcos_kl[1][m][0][dim]; + d_drk3[dim] += d_dcos_kl[2][m] * dcos_kl[2][m][0][dim]; + d_drl1[dim] += d_dcos_kl[m][0] * dcos_kl[m][0][3][dim]; + d_drl2[dim] += d_dcos_kl[m][1] * dcos_kl[m][1][3][dim]; + d_drl3[dim] += d_dcos_kl[m][2] * dcos_kl[m][2][3][dim]; + } + for (int n = 0; n < 3; n++) { + for (int dim = 0; dim < 3; dim++) { + d_dri[dim] += d_dcos_kl[m][n] * dcos_kl[m][n][1][dim]; + d_drj[dim] += d_dcos_kl[m][n] * dcos_kl[m][n][2][dim]; + } + } + } + + return dihe; +} + + + + + + + + + + + + + + + + + + + + + + + /* ---------------------------------------------------------------------- */ diff --git a/src/USER-MISC/pair_drip.h b/src/USER-MISC/pair_drip.h index c6628a96de..6c014dd9f1 100644 --- a/src/USER-MISC/pair_drip.h +++ b/src/USER-MISC/pair_drip.h @@ -77,6 +77,12 @@ class PairDRIP : public Pair { void DRIP_neigh(); + // PARAMS + int ** nearest3neigh; // nearest 3 neighbors of atoms + + + + /* ----Calculate the long-range cutoff term */ inline double calc_Tap(double r_ij, double Rcut) { double Tap,r; From 69e7a2a237dee6bd160e19c6594549db51ce3d94 Mon Sep 17 00:00:00 2001 From: Steven Strong Date: Tue, 16 Apr 2019 11:32:47 -0500 Subject: [PATCH 072/311] add e3b water model --- doc/src/Commands_compute.txt | 1 + doc/src/Commands_pair.txt | 1 + doc/src/Eqs/e3b.tex | 15 + doc/src/compute.txt | 1 + doc/src/compute_pe_e3b.txt | 60 +++ doc/src/computes.txt | 1 + doc/src/pair_e3b.txt | 138 +++++++ doc/src/pair_style.txt | 1 + doc/src/pairs.txt | 1 + examples/USER/e3b/README | 10 + examples/USER/e3b/in.lammps | 115 ++++++ examples/USER/e3b/tip4p2005.mol | 61 +++ src/USER-MISC/compute_pe_e3b.cpp | 86 ++++ src/USER-MISC/compute_pe_e3b.h | 45 ++ src/USER-MISC/pair_e3b.cpp | 690 +++++++++++++++++++++++++++++++ src/USER-MISC/pair_e3b.h | 74 ++++ 16 files changed, 1300 insertions(+) create mode 100644 doc/src/Eqs/e3b.tex create mode 100644 doc/src/compute_pe_e3b.txt create mode 100644 doc/src/pair_e3b.txt create mode 100644 examples/USER/e3b/README create mode 100644 examples/USER/e3b/in.lammps create mode 100644 examples/USER/e3b/tip4p2005.mol create mode 100644 src/USER-MISC/compute_pe_e3b.cpp create mode 100644 src/USER-MISC/compute_pe_e3b.h create mode 100644 src/USER-MISC/pair_e3b.cpp create mode 100644 src/USER-MISC/pair_e3b.h diff --git a/doc/src/Commands_compute.txt b/doc/src/Commands_compute.txt index f566702609..e36234a306 100644 --- a/doc/src/Commands_compute.txt +++ b/doc/src/Commands_compute.txt @@ -91,6 +91,7 @@ KOKKOS, o = USER-OMP, t = OPT. "pe/atom"_compute_pe_atom.html, "pe/mol/tally"_compute_tally.html, "pe/tally"_compute_tally.html, +"pe/e3b"_compute_pe_e3b.html, "plasticity/atom"_compute_plasticity_atom.html, "pressure"_compute_pressure.html, "pressure/cylinder"_compute_pressure_cylinder.html, diff --git a/doc/src/Commands_pair.txt b/doc/src/Commands_pair.txt index e887f0178a..f56c991322 100644 --- a/doc/src/Commands_pair.txt +++ b/doc/src/Commands_pair.txt @@ -80,6 +80,7 @@ OPT. "dpd/fdt/energy (k)"_pair_dpd_fdt.html, "dpd/tstat (go)"_pair_dpd.html, "dsmc"_pair_dsmc.html, +"e3b"_pair_e3b.html, "eam (gikot)"_pair_eam.html, "eam/alloy (gikot)"_pair_eam.html, "eam/cd (o)"_pair_eam.html, diff --git a/doc/src/Eqs/e3b.tex b/doc/src/Eqs/e3b.tex new file mode 100644 index 0000000000..550538bf35 --- /dev/null +++ b/doc/src/Eqs/e3b.tex @@ -0,0 +1,15 @@ +\documentclass[12pt]{article} +\usepackage{amsmath} +\begin{document} + +\begin{align*} +E =& E_2 \sum_{i,j}e^{-k_2 r_{ij}} + E_A \sum_{\substack{i,j,k,\ell \\\in \textrm{type A}}} f(r_{ij})f(r_{k\ell}) + E_B \sum_{\substack{i,j,k,\ell \\\in \textrm{type B}}} f(r_{ij})f(r_{k\ell}) + E_C \sum_{\substack{i,j,k,\ell \\\in \textrm{type C}}} f(r_{ij})f(r_{k\ell}) \\ +f(r) =& e^{-k_3 r}s(r) \\ +s(r) =& \begin{cases} + 1 & rR_f\\ +\end{cases} +\end{align*} + +\end{document} diff --git a/doc/src/compute.txt b/doc/src/compute.txt index 87dbee57d6..047d838b2d 100644 --- a/doc/src/compute.txt +++ b/doc/src/compute.txt @@ -240,6 +240,7 @@ compute"_Commands_compute.html doc page are followed by one or more of "pe/atom"_compute_pe_atom.html - potential energy for each atom "pe/mol/tally"_compute_tally.html - "pe/tally"_compute_tally.html - +"pe/e3b"_compute_pe_e3b.html - potential energy from pair_style e3b "plasticity/atom"_compute_plasticity_atom.html - Peridynamic plasticity for each atom "pressure"_compute_pressure.html - total pressure and pressure tensor "pressure/cylinder"_compute_pressure_cylinder.html - diff --git a/doc/src/compute_pe_e3b.txt b/doc/src/compute_pe_e3b.txt new file mode 100644 index 0000000000..a47d8beaa9 --- /dev/null +++ b/doc/src/compute_pe_e3b.txt @@ -0,0 +1,60 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +compute pe/e3b command :h3 + +[Syntax:] + +compute ID group-ID pe/e3b :pre + +ID, group-ID are documented in "compute"_compute.html command +pe/e3b = style name of this compute command :ul + +[Examples:] + +compute 1 all pe/e3b :pre + +[Description:] + +Define a computation that calculates the contribution of "pair_style e3b"_pair_e3b.html to the potential energy. +The specified group must be "all". +See the "compute pe/atom"_compute_pe_atom.html command if you want per-atom +energies. +These per-atom values could be summed for a group of atoms via the "compute reduce"_compute_reduce.html command. + +The "pair_style e3b"_pair_e3b.html potential is composed of 4 terms. +This compute calculates the total e3b contribution to the energy as well as each of the four terms. +The four terms are stored as a 4-element vector in the order pe_Ea, pe_Eb, pe_Ec, pe_E2. +See "pair_style e3b"_pair_e3b.html for more details. + +:line + +[Output info:] + +This compute calculates a global scalar (the total e3b energy) and a global +vector of length 4 (the four energy terms), which can be accessed by indices +1-4. These values can be used by any command that uses global scalar +or vector values from a compute as input. See the "Howto +output"_Howto_output.html doc page for an overview of LAMMPS output +options. + +The scalar and vector values calculated by this compute are +"extensive" and in energy +"units"_units.html. + +[Restrictions:] + +This compute must be used with "pair_style e3b"_pair_e3b.html. + +[Related commands:] + +"pair_style e3b"_pair_e3b.html, +"compute pe"_compute_pe.html, +"compute pe/atom"_compute_pe_atom.html + +[Default:] none diff --git a/doc/src/computes.txt b/doc/src/computes.txt index 926b8da222..eefbe5116c 100644 --- a/doc/src/computes.txt +++ b/doc/src/computes.txt @@ -66,6 +66,7 @@ Computes :h1 compute_pair_local compute_pe compute_pe_atom + compute_pe_e3b compute_plasticity_atom compute_pressure compute_pressure_cylinder diff --git a/doc/src/pair_e3b.txt b/doc/src/pair_e3b.txt new file mode 100644 index 0000000000..1121cd4034 --- /dev/null +++ b/doc/src/pair_e3b.txt @@ -0,0 +1,138 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +pair_style e3b command :h3 + +[Syntax:] + +pair_style e3b Otype :pre +Otype = atom type for oxygen :l + +pair_coeff * * keyword :pre +one or more keyword/value pairs must be appended. :l +keyword = {preset} or {Ea} or {Eb} or {Ec} or {E2} or {K3} or {K2} or {Rs} or {Rc3} or {Rc2} or {bondL} or {neigh} :l +If the {preset} keyword is given, no others are needed. +Otherwise, all are mandatory except for {neigh}. +The {neigh} keyword is always optional. :l + {preset} arg = {2011} or {2015} = which set of predefined parameters to use + 2011 = use the potential parameters from "(Tainter 2011)"_#Tainter2011 + 2015 = use the potential parameters from "(Tainter 2015)"_#Tainter2015 + {Ea} arg = three-body energy for type A hydrogen bonding interactions (energy units) + {Eb} arg = three-body energy for type B hydrogen bonding interactions (energy units) + {Ec} arg = three-body energy for type C hydrogen bonding interactions (energy units) + {E2} arg = two-body energy correction (energy units) + {K3} arg = three-body exponential constant (inverse distance units) + {K2} arg = two-body exponential constant (inverse distance units) + {Rc3} arg = three-body cutoff (distance units) + {Rc2} arg = two-body cutoff (distance units) + {Rs} arg = three-body switching function cutoff (distance units) + {bondL} arg = intramolecular OH bond length (distance units) + {neigh} arg = approximate integer number of molecules within Rc3 of an oxygen atom :pre + +[Examples:] + +pair_style e3b 1 +pair_coeff * * Ea 35.85 Eb -240.2 Ec 449.3 E2 108269.9 K3 1.907 K2 4.872 Rc3 5.2 Rc2 5.2 Rs 5.0 bondL 0.9572 :pre + +pair_style hybrid/overlay e3b 1 lj/cut/tip4p/long 1 2 1 1 0.15 8.5 +pair_coeff * * e3b preset 2011 :pre + +[Description:] + +The {e3b} style computes an \"explicit three-body\" (E3B) potential for water "(Kumar 2008)"_#Kumar. + +:c,image(Eqs/e3b.jpg) + +This potential was developed as a water model that includes the three-body cooperativity of hydrogen bonding explicitly. +To use it in this way, it must be applied in conjunction with a conventional two-body water model, through {pair_style hybrid/overlay}. +The three body interactions are split into three types: A, B, and C. +Type A corresponds to anti-cooperative double hydrogen bond donor interactions. +Type B corresponds to the cooperative interaction of molecules that both donate and accept a hydrogen bond. +Type C corresponds to anti-cooperative double hydrogen bond acceptor interactions. +The three-body interactions are smoothly cutoff by the switching function s(r) between Rs and Rc3. +The two-body interactions are designed to correct for the effective many-body interactions implicitly included in the conventional two-body potential. +The two-body interactions are cut off sharply at Rc2, because K3 is typically significantly smaller than K2. +See "(Kumar 2008)"_#Kumar for more details. + +Only a single {pair_coeff} command is used with the {e3b} style. +The 1st two arguments must be * *. +The oxygen atom type for the pair style is passed as the only argument to the {pair_style} command, not in the {pair_coeff} command. +The hydrogen atom type is inferred by the ordering of the atoms. + +NOTE: Every atom of type Otype must be part of a water molecule. +Each water molecule must have consecutive IDs with the oxygen first. +This pair style does not test that this criteria is met. + +The {pair_coeff} command must have at least one keyword/value pair, as described above. +The {preset} keyword sets the potential parameters to the values used in "(Tainter 2011)"_#Tainter2011 or "(Tainter 2015)"_#Tainter2015. +To use the water models defined in those references, the {e3b} style should always be used in conjunction with an {lj/cut/tip4p/long} style through {pair_style hybrid/overlay}, as demonstrated in the second example above. +The {preset 2011} option should be used with the "TIP4P water model"_Howto_tip4p.html. +The {preset 2015} option should be used with the "TIP4P/2005 water model"_Howto_tip4p.html. +If the {preset} keyword is used, no other keyword is needed. +Changes to the preset parameters can be made by specifying the {preset} keyword followed by the specific parameter to change, like {Ea}. +Note that the other keywords must come after {preset} in the pair_style command. +The {e3b} style can also be used to implement any three-body potential of the same form by specifying all the keywords except {neigh}: {Ea}, {Eb}, {Ec}, {E2}, {K3}, {K2}, {Rc3}, {Rc2}, {Rs}, and {bondL}. +The keyword {bondL} specifies the intramolecular OH bond length of the water model being used. +This is needed to include H atoms that are within the cutoff even when the attached oxygen atom is not. + +This pair style allocates arrays sized according to the number of pairwise interactions within Rc3. +To do this it needs an estimate for the number of water molecules within Rc3 of an oxygen atom. +This estimate defaults to 10 and can be changed using the {neigh} keyword, which takes an integer as an argument. +If the neigh setting is too small, the simulation will fail with the error "neigh is too small". +If the neigh setting is too large, the pair style will use more memory than necessary. + +This pair style makes 4 different contributions to the potential energy from the E2, Ea, Eb, and Ec terms above. +The value of each of these terms can be computed using "compute pe/e3b"_compute_pe_e3b.html. + +:line + +[Mixing, shift, table, tail correction, restart, rRESPA info]: + +This pair style does not support the "pair_modify"_pair_modify.html +shift, table, and tail options. + +This pair style does not write its information to "binary restart +files"_restart.html, since it is stored in potential files. Thus, you +need to re-specify the pair_style and pair_coeff commands in an input +script that reads a restart file. + +This pair style is incompatible with "respa"_run_style.html. + +:line + +[Restrictions:] + +This pair style is part of the USER-MISC package. It is only enabled +if LAMMPS was built with that package. See the "Build +package"_Build_package.html doc page for more info. + +This pair style requires the "newton"_newton.html setting to be "on" +for pair interactions. + +This pair style requires a fixed number of atoms in the simulation, so it is incompatible with fixes like "fix deposit"_fix_deposit.html. +If the number of atoms changes between runs, this pair style must be re-initialized by calling the {pair_style} and {pair_coeffs} commands. +This is not a fundamental limitation of the pair style, but the code currently does not support a variable number of atoms. + +The {preset} keyword currently only works with real, metal, si, and cgs "units"_units.html. + +[Related commands:] + +"pair_coeff"_pair_coeff.html, "compute pe/e3b"_compute_pe_e3b.html + +[Default:] + +The option default for the {neigh} keyword is 10. + +:line + +:link(Kumar) +[(Kumar)] Kumar and Skinner, J. Phys. Chem. B, 112, 8311 (2008) +:link(Tainter2011) +[(Tainter 2011)] Tainter, Pieniazek, Lin, and Skinner, J. Chem. Phys., 134, 184501 (2011) +:link(Tainter2015) +[(Tainter 2015)] Tainter, Shi, and Skinner, 11, 2268 (2015) diff --git a/doc/src/pair_style.txt b/doc/src/pair_style.txt index f6fcd110d8..27cc168236 100644 --- a/doc/src/pair_style.txt +++ b/doc/src/pair_style.txt @@ -147,6 +147,7 @@ accelerated styles exist. "dpd/fdt/energy"_pair_dpd_fdt.html - DPD for constant energy and enthalpy "dpd/tstat"_pair_dpd.html - pair-wise DPD thermostatting "dsmc"_pair_dsmc.html - Direct Simulation Monte Carlo (DSMC) +"e3b"_pair_e3b.html - Explicit-three body (E3B) water model "eam"_pair_eam.html - embedded atom method (EAM) "eam/alloy"_pair_eam.html - alloy EAM "eam/cd"_pair_eam.html - concentration-dependent EAM diff --git a/doc/src/pairs.txt b/doc/src/pairs.txt index 30dcc8fd4b..119771cd0d 100644 --- a/doc/src/pairs.txt +++ b/doc/src/pairs.txt @@ -32,6 +32,7 @@ Pair Styles :h1 pair_dpd pair_dpd_fdt pair_dsmc + pair_e3b pair_eam pair_edip pair_eff diff --git a/examples/USER/e3b/README b/examples/USER/e3b/README new file mode 100644 index 0000000000..7f13c60386 --- /dev/null +++ b/examples/USER/e3b/README @@ -0,0 +1,10 @@ +The input script in.lammps simulates bulk water using the 2015 E3B potential. +It can be modified to use the 2011 E3B potential by + 1) using a tip4p molecule file instead of tip4p2005.mol + 2) changing the qdist parameter for lj/cut/tip4p/long in the pair_style + hybrid/overlay command + 3) using the 2011 "preset" command in the e3b pair_coeff command +This script also demonstrates the use of compute pe/e3b to calculate the +potential energy contribution of the e3b pair style. These potential energy +contributions can be found in the output file e3b.txt. See the LAMMPS +documentation for more details. \ No newline at end of file diff --git a/examples/USER/e3b/in.lammps b/examples/USER/e3b/in.lammps new file mode 100644 index 0000000000..3960c9ad5e --- /dev/null +++ b/examples/USER/e3b/in.lammps @@ -0,0 +1,115 @@ +#LAMMPS input file +#to simulate bulk E3B3 water model + +##################################################################### +clear + +variable samp_rate equal 10 +variable thermo_rate equal 10 +variable Wlat equal 3.10744 #for water density 0.997g/mL +variable L equal 3 #(L*2)^3 = Nmolec, L=3 -> N=216 + +variable equil equal 100 +variable run equal 100 + +variable ts equal 2.0 +variable Tdamp equal 100*${ts} +variable Pdamp equal 1000*${ts} +variable myT equal 298.0 +variable myP equal 1.0 + +units real +atom_style full + +dimension 3 + +boundary p p p + +############################################################################# +#setup box + +lattice sc ${Wlat} +region simbox block -$L $L -$L $L -$L $L units lattice + +############################################################################# +#set up potential + +create_box 2 simbox bond/types 1 angle/types 1 extra/bond/per/atom 2 & + extra/special/per/atom 2 extra/angle/per/atom 1 + +molecule h2o tip4p2005.mol +mass 1 15.9994 #oxygen +mass 2 1.008 #hydrogen + +pair_style hybrid/overlay e3b 1 lj/cut/tip4p/long 1 2 1 1 0.1546 8.5 +pair_modify table 0 table/disp 0 shift yes + +bond_style harmonic +angle_style harmonic + +kspace_style pppm/tip4p 1.0e-6 + +pair_coeff * * lj/cut/tip4p/long 0.0 0.0 +pair_coeff 1 1 lj/cut/tip4p/long 0.1852 3.1589 +pair_coeff * * e3b preset 2015 + +#intramolecular bond/angle coeffs very stiff for minimization +bond_coeff 1 100000 0.9572 +angle_coeff 1 100000 104.52 + +############################################################################# +#setup for run +thermo ${thermo_rate} +thermo_style custom step vol temp epair pe etotal press density + +timestep ${ts} +run_style verlet + +neighbor 2.0 bin +neigh_modify every 1 delay 3 check yes + +############################################################################# +#make atoms and rough minimze +create_atoms 0 box mol h2o 15856 + +#dump positions only in first batch run +dump 7 all custom ${samp_rate} dump.lammpstrj id x y z +dump_modify 7 sort id + +min_style cg +minimize 1.0e-4 1.0e-4 10000 100000 + +#potential coeffs aren't too important since will be rigid anyways +bond_coeff 1 554.13 0.9572 +angle_coeff 1 45.769 104.52 + + +############################################################################# +#initialize velocity and rigid constraint + +fix rigid all shake 1.0e-8 100 0 b 1 a 1 t 1 2 mol h2o +velocity all create ${myT} 15856 dist gaussian rot yes mom yes + +#scale velocity +run 0 +velocity all scale ${myT} + +compute e3b all pe/e3b +fix e3b all ave/time 1 1 ${thermo_rate} c_e3b c_e3b[*] & + file e3b.txt title2 "step pe_e3b pe_ea pe_eb pe_ec pe_e2" + +############################################################################# +#equilibrate bulk water at NVT + +fix 1 all nvt temp ${myT} ${myT} ${Tdamp} +run ${equil} + +############################################################################# +#run at NVT + +dump 1 all custom ${samp_rate} dump.lammpstrj id x y z type +dump_modify 1 sort id + +run ${run} + +write_restart lammps.restart diff --git a/examples/USER/e3b/tip4p2005.mol b/examples/USER/e3b/tip4p2005.mol new file mode 100644 index 0000000000..8dff52bebe --- /dev/null +++ b/examples/USER/e3b/tip4p2005.mol @@ -0,0 +1,61 @@ +#TIP4P/2005 H20 water molecule, parameters from section 6.9 of LAMMPS manual +3 atoms +2 bonds +1 angles + +Coords + +1 0.0 0.0 0.0 +2 0.58588228 0.75695033 0.0 +3 0.58588228 -0.75695033 0.0 + +Types + +1 1 +2 2 +3 2 + +Charges + +1 -1.1128 +2 0.5564 +3 0.5564 + +Bonds + +1 1 1 2 +2 1 1 3 + +Angles + +1 1 2 1 3 + +Special Bond Counts + +1 2 0 0 +2 1 1 0 +3 1 1 0 + +Special Bonds + +1 2 3 +2 1 3 +3 1 2 + +Shake Flags + +1 1 +2 1 +3 1 + +Shake Atoms + +1 1 2 3 +2 1 2 3 +3 1 2 3 + +Shake Bond Types + +1 1 1 1 +2 1 1 1 +3 1 1 1 diff --git a/src/USER-MISC/compute_pe_e3b.cpp b/src/USER-MISC/compute_pe_e3b.cpp new file mode 100644 index 0000000000..9301883ac2 --- /dev/null +++ b/src/USER-MISC/compute_pe_e3b.cpp @@ -0,0 +1,86 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + 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. + +Adapted from USER-TALLY/compute_pe_tally.cpp by Steven E Strong +Also used code from compute_pe.cpp +------------------------------------------------------------------------- */ + +#include "compute_pe_e3b.h" +#include "pair_e3b.h" + +#include "pair.h" +#include "update.h" +#include "error.h" +#include "force.h" + +using namespace LAMMPS_NS; + +/* ---------------------------------------------------------------------- */ + +ComputePEE3B::ComputePEE3B(LAMMPS *lmp, int narg, char **arg) : + Compute(lmp, narg, arg), e3b(NULL) +{ + // 0 1 2 + //compute ID grp pe/e3b + if (narg != 3) error->all(FLERR,"Illegal compute pe/e3b command"); + + scalar_flag = 1; + vector_flag = 1; + size_vector = 4; //etotA,etotB,etotC,etot2 + extvector = extscalar = 1; + timeflag = 1; + + peflag = 1; // we need Pair::ev_tally() to be run + + invoked_vector = invoked_scalar = -1; + vector = new double[size_vector]; +} + +/* ---------------------------------------------------------------------- */ + +ComputePEE3B::~ComputePEE3B() +{ + delete[] vector; +} + +/* ---------------------------------------------------------------------- */ + +void ComputePEE3B::init() { + Pair *pair = force->pair_match("e3b",false,0); + if (pair==NULL) + error->all(FLERR,"This compute must be used with pair_style e3b"); + + e3b = (PairE3B *) pair; + if (e3b==NULL) + error->all(FLERR,"something went wrong"); +} + +/* ---------------------------------------------------------------------- */ + +void ComputePEE3B::compute_vector() +{ + invoked_vector = update->ntimestep; + if (update->eflag_global != invoked_scalar) + error->all(FLERR,"Energy was not tallied on needed timestep"); + + // sum energies across procs + MPI_Allreduce(e3b->etot,vector,4,MPI_DOUBLE,MPI_SUM,world); +} + +double ComputePEE3B::compute_scalar() { + invoked_scalar = update->ntimestep; + if (invoked_scalar != invoked_vector) + compute_vector(); + + scalar = vector[0]+vector[1]+vector[2]+vector[3]; + return scalar; +} diff --git a/src/USER-MISC/compute_pe_e3b.h b/src/USER-MISC/compute_pe_e3b.h new file mode 100644 index 0000000000..a23c48b38d --- /dev/null +++ b/src/USER-MISC/compute_pe_e3b.h @@ -0,0 +1,45 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + 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 COMPUTE_CLASS + +ComputeStyle(pe/e3b,ComputePEE3B) + +#else + +#ifndef LMP_COMPUTE_PEE3B_H +#define LMP_COMPUTE_PEE3B_H + +#include "compute.h" + +namespace LAMMPS_NS { + +class ComputePEE3B : public Compute { + + public: + ComputePEE3B(class LAMMPS *, int, char **); + virtual ~ComputePEE3B(); + + void init(); + + double compute_scalar(); + void compute_vector(); + + private: + class PairE3B *e3b; +}; + +} + +#endif +#endif diff --git a/src/USER-MISC/pair_e3b.cpp b/src/USER-MISC/pair_e3b.cpp new file mode 100644 index 0000000000..84a3400787 --- /dev/null +++ b/src/USER-MISC/pair_e3b.cpp @@ -0,0 +1,690 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + 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. +------------------------------------------------------------------------- */ + +/* ---------------------------------------------------------------------- + Written by Steven E Strong and Nicholas J Hestand + Adapted from MANYBODY/pair_sw.cpp and an + implementation of E3B in GROMACS by Craig Tainter (?) +------------------------------------------------------------------------- */ + +#include "pair_e3b.h" + +#include "atom.h" +#include "neighbor.h" +#include "neigh_request.h" +#include "neigh_list.h" +#include "force.h" +#include "comm.h" +#include "memory.h" +#include "error.h" +#include "update.h" +#include "domain.h" +#include "citeme.h" + +#include +#include +#include +#include + +//these are defined here to avoid confusing hardcoded indicies, but +//they do not allow flexibility. If they are changed the code will break +#define DIM 3 +#define NUMH 2 //number of hydrogen atoms per water molecule +#define NUMO 2 //number of oxygen atoms per pair of water molecules +#define BOND_DELTA 1.01 //buffer for OH bonds that aren't perfectly rigid + +using namespace LAMMPS_NS; +/* ---------------------------------------------------------------------- */ + +PairE3B::PairE3B(LAMMPS *lmp) : Pair(lmp),pairPerAtom(10) +{ + single_enable = 0; + restartinfo = 0; + one_coeff = 1; + manybody_flag = 1; + + allocatedE3B = false; + pairO = NULL; + pairH = NULL; + exps = NULL; + del3 = NULL; + fpair3 = NULL; + sumExp = NULL; +} + +/* ---------------------------------------------------------------------- + check if allocated, since class can be destructed when incomplete +------------------------------------------------------------------------- */ + +PairE3B::~PairE3B() +{ + if (copymode) return; + + if (allocated) { + memory->destroy(setflag); + memory->destroy(cutsq); + } + if (allocatedE3B) { + memory->destroy(pairO); + memory->destroy(pairH); + memory->destroy(exps); + memory->destroy(del3); + memory->destroy(fpair3); + memory->destroy(sumExp); + } +} + +/* ---------------------------------------------------------------------- */ + +void PairE3B::compute(int eflag, int vflag) +{ + int i,j,k,h,ii,jj,hh,kk,inum,jnum,otherO; + tagint itag,jtag; + double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fpair,rsq,tmpexp; + double fxtmp,fytmp,fztmp,fix,fiy,fiz; + double delxh,delyh,delzh,rsqh,tmpr; + double scFact1,scFact2,scEng,scDer; + int *ilist,*jlist,*numneigh,**firstneigh; + bool addedH; + + if (natoms != atom->natoms) + error->all(FLERR,"pair E3B requires a fixed number of atoms"); + + //clear sumExp array + memset(sumExp,0.0,nbytes); + + evdwl = 0.0; + etot[0]=etot[1]=etot[2]=etot[3]=0.0; + if (eflag || vflag) ev_setup(eflag,vflag); + else evflag = vflag_fdotr = 0; + + double **x = atom->x; + double **f = atom->f; + tagint *tag = atom->tag; + int *type = atom->type; + int nlocal = atom->nlocal; + int newton_pair = force->newton_pair; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + int npair = 0; + // loop over half neighbor list of my atoms + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + if (type[i]!=typeO) + continue; + + itag = tag[i]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + fix = fiy = fiz = 0.0; + + // two-body interactions + jlist = firstneigh[i]; + jnum = numneigh[i]; + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + + //skip unless O-O interaction + if (type[j]!=typeO) + continue; + + jtag = tag[j]; + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; //OO distance + + //two body interaction + //not shifted b/c k2=4.87/A, so at cutoff (5.2A) e^(-kr) = 1e-11 + if (rsq < rc2sq) { + tmpr = sqrt(rsq); + tmpexp = e2 * exp(-k2*tmpr); + fpair = k2 * tmpexp / tmpr; + + fxtmp = delx*fpair; + fytmp = dely*fpair; + fztmp = delz*fpair; + fix += fxtmp; + fiy += fytmp; + fiz += fztmp; + f[j][0] -= fxtmp; + f[j][1] -= fytmp; + f[j][2] -= fztmp; + + if (evflag) { + ev_tally(i,j,nlocal,newton_pair,tmpexp,0.0,fpair,delx,dely,delz); + etot[3] += tmpexp; + } + } //end if rsqmap(tag[otherO]+hh+1); + //if hydrogen atom is missing, bond potential or shake will + //catch this, so don't need to check here + //if (h<0) + // error->one(FLERR,"hydrogen atom missing"); + h = domain->closest_image(otherO,h); + pairH[npair][kk][hh] = h; + + delxh = x[k][0] - x[h][0]; + delyh = x[k][1] - x[h][1]; + delzh = x[k][2] - x[h][2]; + rsqh = delxh*delxh + delyh*delyh + delzh*delzh; + + if (rsqh < rc3sq) { + + tmpr = sqrt(rsqh); + tmpexp = exp(-k3*tmpr); + if (tmpr > rs) { + scFact1 = rc3-tmpr; + scFact2 = sc_num + 2*tmpr; + scEng = scFact1*scFact1*scFact2*sc_denom; + scDer = k3*scEng - 6*scFact1*(rs-tmpr)*sc_denom; + } else { + scDer = k3; + scEng = 1.0; + } + + //need to keep fpair3 separate from del3 for virial + fpair3[npair][kk][hh] = scDer*tmpexp/tmpr; + tmpexp *= scEng; + exps[npair][kk][hh] = tmpexp; + del3[npair][kk][hh][0] = delxh; + del3[npair][kk][hh][1] = delyh; + del3[npair][kk][hh][2] = delzh; + + //accumulate global vector of sum(e^kr) + //tags start at 1, so subtract one to index sumExp + sumExp[tag[k]-1] += tmpexp; + sumExp[tag[h]-1] += tmpexp; + + addedH = true; + } else { + exps [npair][kk][hh] = 0.0; + fpair3[npair][kk][hh] = 0.0; + } //if < rc3sq + } //end loop through 2 Hs + } //end for kk in NUMO + //if added a pair, check if array is too small and grow + if (addedH) { + npair++; + if (npair >= pairmax) + error->one(FLERR,"neigh is too small"); + } + } //end if < rc3deltaSq + } //end for jj neigh + + //add 2-body forces on i + f[i][0] += fix; + f[i][1] += fiy; + f[i][2] += fiz; + } //end for ii + + //communicate sumExp array + //tested that no change in speed with MPI_IN_PLACE + MPI_Allreduce(MPI_IN_PLACE,sumExp,maxID,MPI_DOUBLE,MPI_SUM,world); + + //now loop through list of pairs, calculating 3body forces + int j2,otherH; + double partA,partB,partC; + for (ii = 0; ii < npair; ii++) { + + for (kk=0; kkntypes; + + memory->create(setflag,n+1,n+1,"pair:setflag"); + memory->create(cutsq,n+1,n+1,"pair:cutsq"); +} + +void PairE3B::allocateE3B() +{ + allocatedE3B = true; + + //TODO: get memory->grow working for 4d arrays + pairmax = atom->nlocal*pairPerAtom; //initial guess for size of pair lists + memory->create(pairO ,pairmax,NUMO ,"pair:pairO"); + memory->create(pairH ,pairmax,NUMO,NUMH ,"pair:pairH"); + memory->create(exps ,pairmax,NUMO,NUMH ,"pair:exps"); + memory->create(fpair3,pairmax,NUMO,NUMH ,"pair:fpair3"); + memory->create(del3 ,pairmax,NUMO,NUMH,DIM,"pair:del3"); + + natoms=atom->natoms; + maxID=find_maxID(); + if (!natoms) + error->all(FLERR,"No atoms found"); + memory->create(sumExp,maxID,"pair:sumExp"); + nbytes = sizeof(double) * maxID; +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairE3B::settings(int narg, char **arg) +{ + if (narg != 1) error->all(FLERR,"Illegal pair_style command"); + typeO=force->inumeric(FLERR,arg[0]); + if (typeO<1 || typeO>atom->ntypes) + error->all(FLERR,"Invalid Otype: out of bounds"); +} + +/* ---------------------------------------------------------------------- + coeffs must be * * keyword/value + keyword/values set the potential parameters +------------------------------------------------------------------------- */ +void PairE3B::coeff(int narg, char **arg) +{ + if (!allocated) allocate(); + + //1=* 2=* 3/4=1st keyword/value + if (narg < 4) + error->all(FLERR,"There must be at least one keyword given to pair_coeff"); + + // ensure I,J args are * * + if (strcmp(arg[0],"*") != 0 || strcmp(arg[1],"*") != 0) + error->all(FLERR,"Incorrect args for pair coefficients"); + + // clear setflag since coeff() called once with I,J = * * + int n = atom->ntypes; + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + setflag[i][j] = 0; + + setflag[typeO][typeO]=1; + + //parse keyword/value pairs + double bondL=0.0; //OH bond length + bool repeatFlag=false; + int presetFlag; + + //clear parameters + e2=ea=eb=ec=k3=k2=NAN; + rs=rc3=rc2=0.0; + + int iarg = 2; //beginning of keyword/value pairs + while(iarg < narg) { + char *keyword = arg[iarg++]; + if (checkKeyword(keyword,"Ea",1,narg-iarg)) + ea=force->numeric(FLERR,arg[iarg++]); + else if (checkKeyword(keyword,"Eb",1,narg-iarg)) + eb=force->numeric(FLERR,arg[iarg++]); + else if (checkKeyword(keyword,"Ec",1,narg-iarg)) + ec=force->numeric(FLERR,arg[iarg++]); + else if (checkKeyword(keyword,"K3",1,narg-iarg)) + k3=force->numeric(FLERR,arg[iarg++]); + else if (checkKeyword(keyword,"Rs",1,narg-iarg)) + rs=force->numeric(FLERR,arg[iarg++]); + else if (checkKeyword(keyword,"Rc3",1,narg-iarg)) + rc3=force->numeric(FLERR,arg[iarg++]); + else if (checkKeyword(keyword,"Rc2",1,narg-iarg)) + rc2=force->numeric(FLERR,arg[iarg++]); + else if (checkKeyword(keyword,"bondL",1,narg-iarg)) + bondL=force->numeric(FLERR,arg[iarg++]); + else if (checkKeyword(keyword,"E2",1,narg-iarg)) + e2=force->numeric(FLERR,arg[iarg++]); + else if (checkKeyword(keyword,"K2",1,narg-iarg)) + k2=force->numeric(FLERR,arg[iarg++]); + else if (checkKeyword(keyword,"neigh",1,narg-iarg)) + pairPerAtom=force->inumeric(FLERR,arg[iarg++]); + else if (checkKeyword(keyword,"preset",1,narg-iarg)) { + presetFlag=force->inumeric(FLERR,arg[iarg++]); + presetParam(presetFlag,repeatFlag,bondL); + } else { + char str[256]; + snprintf(str,256,"Keyword %s is unknown",keyword); + error->all(FLERR,str); + } + } + + checkInputs(bondL); + + //cutmax for neighbor listing + cutmax = std::max(rc2,rc3); + rc2sq = rc2*rc2; + rc3sq = rc3*rc3; + rc3deltaSq = (rc3+bondL)*(rc3+bondL); + + double tmpfact=1.0/(rc3-rs); + sc_denom=tmpfact*tmpfact*tmpfact; + sc_num=rc3-3*rs; +} + +/* ---------------------------------------------------------------------- + init specific to this pair styles +------------------------------------------------------------------------- */ + +void PairE3B::init_style() +{ + if (atom->tag_enable == 0) + error->all(FLERR,"Pair style E3B requires atom IDs"); + if (force->newton_pair == 0) + error->all(FLERR,"Pair style E3B requires newton pair on"); + + // need a half neighbor list + int irequest = neighbor->request(this,instance_me); + //don't need this, half is default + //neighbor->requests[irequest]->half = 0; + + if (!force->pair_match("tip4p",false,0)) + if (comm->me==0) error->warning(FLERR,"E3B pair_style is designed for use with hybrid/overlay tip4p style"); + + if (!allocatedE3B) allocateE3B(); +} + + +static const char cite_E3B1[] = + "Explicit Three-Body (E3B) potential for water:\n\n" + "@article{kumar_water_2008,\n" + "title = {Water Simulation Model with Explicit Three-Molecule Interactions},\n" + "volume = {112},\n" + "doi = {10.1021/jp8009468},\n" + "number = {28},\n" + "journal = {J Phys. Chem. B},\n" + "author = {Kumar, R. and Skinner, J. L.},\n" + "year = {2008},\n" + "pages = {8311--8318}\n" + "}\n\n"; + +static const char cite_E3B2[] = + "Explicit Three-Body (E3B) potential for water:\n\n" + "@article{tainter_robust_2011,\n" + "title = {Robust three-body water simulation model},\n" + "volume = {134},\n" + "doi = {10.1063/1.3587053},\n" + "number = {18},\n" + "journal = {J. Chem. Phys},\n" + "author = {Tainter, C. J. and Pieniazek, P. A. and Lin, Y.-S. and Skinner, J. L.},\n" + "year = {2011},\n" + "pages = {184501}\n" + "}\n\n"; + +static const char cite_E3B3[] = + "Explicit Three-Body (E3B) potential for water:\n\n" + "@article{tainter_reparametrized_2015,\n" + "title = {Reparametrized {E3B} (Explicit Three-Body) Water Model Using the {TIP4P/2005} Model as a Reference},\n" + "volume = {11},\n" + "doi = {10.1021/acs.jctc.5b00117},\n" + "number = {5},\n" + "journal = {J. Chem. Theory Comput.},\n" + "author = {Tainter, Craig J. and Shi, Liang and Skinner, James L.},\n" + "year = {2015},\n" + "pages = {2268--2277}\n" + "}\n\n"; + +void PairE3B::presetParam(const int flag,bool &repeatFlag,double &bondL) { + if (repeatFlag) { + error->all(FLERR, + "Cannot request two different sets of preset parameters"); + } + repeatFlag=true; + + if (!isnan(ea) || !isnan(eb) || !isnan(ec) || !isnan(e2) || bondL!=0.0 || + !isnan(k3) || !isnan(k2) || rs!=0.0 || rc3!=0.0 || rc2!=0.0 ) + error->all(FLERR,"Preset keyword will overwrite another keyword setting"); + + double econv,lconv; + if (strcmp(update->unit_style,"real") == 0) { + econv=1.0/4.184; + lconv=1.0; + } else if (strcmp(update->unit_style,"metal") == 0) { + econv=0.103653271; + lconv=1.0; + } else if (strcmp(update->unit_style,"si") == 0) { + econv=1.660578e-21; + lconv=1e-10; + } else if (strcmp(update->unit_style,"cgs") == 0) { + econv=1.660578e-14; + lconv=1e-8; + } else { + char str[256]; + snprintf(str,256, + "Pre-defined E3B parameters have not been set for %s units.", + update->unit_style); + error->all(FLERR,str); + } + + //here parameters are defined in kJ/mol and A + //they will be converted to the lammps units after + if (flag==2008) { + error->all(FLERR,"\"preset 2008\" is not yet supported, because this would require distinct k3 coefficients, use \"preset 2011\" or \"preset 2015\""); + if (lmp->citeme) lmp->citeme->add(cite_E3B1); + ea = 4699.6; + eb =-2152.9; + ec = 1312.7; + //ka = 1.0/1.88; + //kb = 1.0/1.71; + //kc = 1.0/1.56; + e2 = 1.925e6; + k2 = 4.67; + rs = 5.0; + rc3 = 5.2; + rc2 = 5.2; + bondL = 0.9572; + } else if (flag==2011) { + if (lmp->citeme) lmp->citeme->add(cite_E3B2); + ea = 1745.7; + eb =-4565.0; + ec = 7606.8; + k3 = 1.907; + e2 = 2.349e6; + k2 = 4.872; + rs = 5.0; + rc3 = 5.2; + rc2 = 5.2; + bondL = 0.9572; + } else if (flag==2015) { + if (lmp->citeme) lmp->citeme->add(cite_E3B3); + ea = 150.0; + eb =-1005.0; + ec = 1880.0; + k3 = 1.907; + e2 = 0.453e6; + k2 = 4.872; + rs = 5.0; + rc3 = 5.2; + rc2 = 5.2; + bondL = 0.9572; + } else + error->all(FLERR,"Unknown argument: preset only takes 2011 or 2015 as arguments"); + + //convert units + ea *= econv; + eb *= econv; + ec *= econv; + e2 *= econv; + k3 /= lconv; + k2 /= lconv; + rs *= lconv; + rc2 *= lconv; + rc3 *= lconv; + bondL *= lconv*BOND_DELTA; +} + +/* ---------------------------------------------------------------------- + init for one type pair i,j and corresponding j,i +------------------------------------------------------------------------- */ +//pair.cpp::init uses this to set cutsq array, used for neighboring, etc +double PairE3B::init_one(int i, int j) +{ + if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + + return cutmax; +} + +bool PairE3B::checkKeyword(const char *thiskey,const char *test,const int nVal, const int nRem) { + if (strcmp(thiskey,test) == 0) { + if(nRemall(FLERR,str); + } + return true; + } + return false; +} + +//find max atom ID for all atoms +//from fix_deposit.cpp +tagint PairE3B::find_maxID() +{ + tagint *tag = atom->tag; + int nlocal = atom->nlocal; + + tagint max = 0; + tagint maxID; + for (int i = 0; i < nlocal; i++) max = MAX(max,tag[i]); + MPI_Allreduce(&max,&maxID,1,MPI_LMP_TAGINT,MPI_MAX,world); + + return maxID; +} + +void PairE3B::checkInputs(const double &bondL) { + //first check that all necessary values were set + if (rc2==0.0) + error->all(FLERR,"rc2 keyword missing"); + if (rs==0.0) + error->all(FLERR,"Rs keyword missing"); + if (rc3==0.0) + error->all(FLERR,"Rc3 keyword missing"); + if (bondL==0.0) + error->all(FLERR,"bondL keyword missing"); + if (isnan(ea)) + error->all(FLERR,"Ea keyword missing"); + if (isnan(eb)) + error->all(FLERR,"Eb keyword missing"); + if (isnan(ec)) + error->all(FLERR,"Ec keyword missing"); + if (isnan(k3)) + error->all(FLERR,"K3 keyword missing"); + if (isnan(e2)) + error->all(FLERR,"E2 keyword missing"); + if (isnan(k2)) + error->all(FLERR,"K2 keyword missing"); + + //now test that values are within acceptable ranges + if (k2 < 0.0 or k3 < 0.0) + error->all(FLERR,"exponential decay is negative"); + if (bondL<0.0) + error->all(FLERR,"OH bond length is negative"); + if (rc2 < 0.0 || rc3 < 0.0 || rs < 0.0) + error->all(FLERR,"potential cutoff is negative"); + if (rs > rc3) + error->all(FLERR,"potential switching distance is larger than cutoff"); + if (rs==rc3) + error->warning(FLERR,"potential switching distance is equal to cutoff: this is untested and not conserve energy"); + if (pairPerAtom<0) + error->all(FLERR,"neigh is negative"); +} diff --git a/src/USER-MISC/pair_e3b.h b/src/USER-MISC/pair_e3b.h new file mode 100644 index 0000000000..f247b51b7a --- /dev/null +++ b/src/USER-MISC/pair_e3b.h @@ -0,0 +1,74 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + 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 + +PairStyle(e3b,PairE3B) + +#else + +#ifndef LMP_PAIR_E3B_H +#define LMP_PAIR_E3B_H + +#include "pair.h" +#include "compute_pe_e3b.h" + +namespace LAMMPS_NS { + +class PairE3B : public Pair { + public: + PairE3B(class LAMMPS *); + virtual ~PairE3B(); + virtual void compute(int, int); + void settings(int, char **); + virtual void coeff(int, char **); + virtual double init_one(int, int); + virtual void init_style(); + + //allow compute pe/e3b to access etot vector + friend void ComputePEE3B::compute_vector(); + +protected: + //potential parameters + int typeO; + double ea,eb,ec; //three body energies + double k3; //three body exponential decay (units inverse length) + double rs,rc3,rc2; //rs: switching cutuff, rc3: cutoff for 3-body + double e2,k2; //2-body energy and exp decay + double cutmax; //max cutoff of all interactions + double rc2sq,rc3sq,rc3deltaSq; + double sc_denom,sc_num; + + //list of indexes of Os and Hs in each pair + int pairmax,pairPerAtom; // size of pair list + int **pairO,***pairH; // pair lists + double ***exps,****del3,***fpair3,*sumExp; + int maxID; //size of global sumExp array + size_t nbytes; //size of sumExp array in bytes + int natoms; //to make sure number of atoms is constant + + double etot[4]; //etotA,etotB,etotC,etot2 + + virtual void allocate(); + void allocateE3B(); + bool allocatedE3B; + //for reading settings from pair_style input + bool checkKeyword(const char *,const char *,const int, const int); + void checkInputs(const double &bondL); + void presetParam(const int flag,bool &repeatFlag,double &bondL); + tagint find_maxID(); +}; +} + +#endif +#endif From 0eebb31903bbcafef2d62cf8ad109ec3dacc0dda Mon Sep 17 00:00:00 2001 From: Steven Strong Date: Tue, 16 Apr 2019 11:48:45 -0500 Subject: [PATCH 073/311] update contact info --- doc/src/compute_pe_e3b.txt | 2 +- doc/src/pair_e3b.txt | 2 ++ src/USER-MISC/README | 2 ++ src/USER-MISC/compute_pe_e3b.cpp | 4 ++-- src/USER-MISC/pair_e3b.cpp | 4 ++-- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/doc/src/compute_pe_e3b.txt b/doc/src/compute_pe_e3b.txt index a47d8beaa9..8fdfd6c1c6 100644 --- a/doc/src/compute_pe_e3b.txt +++ b/doc/src/compute_pe_e3b.txt @@ -30,7 +30,7 @@ These per-atom values could be summed for a group of atoms via the "compute redu The "pair_style e3b"_pair_e3b.html potential is composed of 4 terms. This compute calculates the total e3b contribution to the energy as well as each of the four terms. The four terms are stored as a 4-element vector in the order pe_Ea, pe_Eb, pe_Ec, pe_E2. -See "pair_style e3b"_pair_e3b.html for more details. +See "pair_style e3b"_pair_e3b.html for more details, and an example script can be found in the examples/USER/e3b directory. :line diff --git a/doc/src/pair_e3b.txt b/doc/src/pair_e3b.txt index 1121cd4034..b9e6ea2ace 100644 --- a/doc/src/pair_e3b.txt +++ b/doc/src/pair_e3b.txt @@ -89,6 +89,8 @@ If the neigh setting is too large, the pair style will use more memory than nece This pair style makes 4 different contributions to the potential energy from the E2, Ea, Eb, and Ec terms above. The value of each of these terms can be computed using "compute pe/e3b"_compute_pe_e3b.html. +See the examples/USER/e3b directory for a complete example script. + :line [Mixing, shift, table, tail correction, restart, rRESPA info]: diff --git a/src/USER-MISC/README b/src/USER-MISC/README index 9adc817986..2107242826 100644 --- a/src/USER-MISC/README +++ b/src/USER-MISC/README @@ -29,6 +29,7 @@ bond_style harmonic/shift/cut, Carsten Svaneborg, science at zqex.dk, 8 Aug 11 compute ackland/atom, Gerolf Ziegenhain, gerolf at ziegenhain.com, 4 Oct 2007 compute basal/atom, Christopher Barrett, cdb333 at cavs.msstate.edu, 3 Mar 2013 compute cnp/atom, Paulo Branicio (USC), branicio at usc.edu, 31 May 2017 +compute pe/e3b, Steven Strong (U Chicago), stevene.strong at gmail dot com, 16 Apr 19 compute entropy/atom, Pablo Piaggi (EPFL), pablo.piaggi at epfl.ch, 15 June 2018 compute pressure/cylinder, Cody K. Addington (NCSU), , 2 Oct 2018 compute stress/mop, Romain Vermorel (U Pau) & Laurent Joly (U Lyon), romain.vermorel at univ-pau.fr & ljoly.ulyon at gmail.com, 5 Sep 18 @@ -70,6 +71,7 @@ pair_style buck/mdf, Paolo Raiteri, p.raiteri at curtin.edu.au, 2 Dec 15 pair_style coul/diel, Axel Kohlmeyer, akohlmey at gmail.com, 1 Dec 11 pair_style coul/shield, Wengen Ouyang (Tel Aviv University), w.g.ouyang at gmail dot com, 30 Mar 18 pair_style dipole/sf, Mario Orsi, orsimario at gmail.com, 8 Aug 11 +pair_style e3b, Steven Strong (U Chicago), stevene.strong at gmail dot com, 16 Apr 19 pair_style edip, Luca Ferraro, luca.ferraro at caspur.it, 15 Sep 11 pair_style extep, Jaap Kroes (Radboud U), jaapkroes at gmail dot com, 28 Nov 17 pair_style gauss/cut, Axel Kohlmeyer, akohlmey at gmail.com, 1 Dec 11 diff --git a/src/USER-MISC/compute_pe_e3b.cpp b/src/USER-MISC/compute_pe_e3b.cpp index 9301883ac2..d4202a4e8c 100644 --- a/src/USER-MISC/compute_pe_e3b.cpp +++ b/src/USER-MISC/compute_pe_e3b.cpp @@ -10,8 +10,8 @@ See the README file in the top-level LAMMPS directory. -Adapted from USER-TALLY/compute_pe_tally.cpp by Steven E Strong -Also used code from compute_pe.cpp + Adapted from USER-TALLY/compute_pe_tally.cpp by Steven E Strong + contact: stevene.strong at gmail dot com ------------------------------------------------------------------------- */ #include "compute_pe_e3b.h" diff --git a/src/USER-MISC/pair_e3b.cpp b/src/USER-MISC/pair_e3b.cpp index 84a3400787..948b3c2850 100644 --- a/src/USER-MISC/pair_e3b.cpp +++ b/src/USER-MISC/pair_e3b.cpp @@ -9,12 +9,12 @@ the GNU General Public License. See the README file in the top-level LAMMPS directory. -------------------------------------------------------------------------- */ -/* ---------------------------------------------------------------------- Written by Steven E Strong and Nicholas J Hestand Adapted from MANYBODY/pair_sw.cpp and an implementation of E3B in GROMACS by Craig Tainter (?) + + contact: stevene.strong at gmail dot com ------------------------------------------------------------------------- */ #include "pair_e3b.h" From 4c565db9af71d24a277f7122b19f067357f18302 Mon Sep 17 00:00:00 2001 From: Steven Strong Date: Tue, 16 Apr 2019 11:50:33 -0500 Subject: [PATCH 074/311] update contrib authors --- src/USER-MISC/compute_pe_e3b.cpp | 4 ++-- src/USER-MISC/pair_e3b.cpp | 5 +---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/USER-MISC/compute_pe_e3b.cpp b/src/USER-MISC/compute_pe_e3b.cpp index d4202a4e8c..c2d63e074e 100644 --- a/src/USER-MISC/compute_pe_e3b.cpp +++ b/src/USER-MISC/compute_pe_e3b.cpp @@ -10,8 +10,8 @@ See the README file in the top-level LAMMPS directory. - Adapted from USER-TALLY/compute_pe_tally.cpp by Steven E Strong - contact: stevene.strong at gmail dot com + contributing author: Steven E Strong + stevene.strong at gmail dot com ------------------------------------------------------------------------- */ #include "compute_pe_e3b.h" diff --git a/src/USER-MISC/pair_e3b.cpp b/src/USER-MISC/pair_e3b.cpp index 948b3c2850..167fe7b59e 100644 --- a/src/USER-MISC/pair_e3b.cpp +++ b/src/USER-MISC/pair_e3b.cpp @@ -10,10 +10,7 @@ See the README file in the top-level LAMMPS directory. - Written by Steven E Strong and Nicholas J Hestand - Adapted from MANYBODY/pair_sw.cpp and an - implementation of E3B in GROMACS by Craig Tainter (?) - + contributing authors: Steven E Strong and Nicholas J Hestand contact: stevene.strong at gmail dot com ------------------------------------------------------------------------- */ From 5fb164d5864a0d6edda6c7be79c67796569da631 Mon Sep 17 00:00:00 2001 From: Mingjian Wen Date: Tue, 16 Apr 2019 15:04:16 -0500 Subject: [PATCH 075/311] Get total energy correct --- src/USER-MISC/pair_drip.cpp | 2105 +++++++++++++---------------------- src/USER-MISC/pair_drip.h | 119 +- 2 files changed, 840 insertions(+), 1384 deletions(-) diff --git a/src/USER-MISC/pair_drip.cpp b/src/USER-MISC/pair_drip.cpp index 2323b9d694..dbc6b25fbd 100644 --- a/src/USER-MISC/pair_drip.cpp +++ b/src/USER-MISC/pair_drip.cpp @@ -42,7 +42,6 @@ using namespace LAMMPS_NS; #define MAXLINE 1024 #define DELTA 4 #define PGDELTA 1 -#define DIM 3 #define HALF 0.5 /* ---------------------------------------------------------------------- */ @@ -61,37 +60,20 @@ PairDRIP::PairDRIP(LAMMPS *lmp) : Pair(lmp) cutmax = 0.0; nmax = 0; maxlocal = 0; - DRIP_numneigh = NULL; - DRIP_firstneigh = NULL; ipage = NULL; pgsize = oneatom = 0; - normal = NULL; - dnormal = NULL; - dnormdri = NULL; - - - - nearest3neigh = NULL; - - // set comm size needed by this Pair comm_forward = 39; - tap_flag = 0; } /* ---------------------------------------------------------------------- */ PairDRIP::~PairDRIP() { - memory->destroy(DRIP_numneigh); - memory->sfree(DRIP_firstneigh); delete [] ipage; - memory->destroy(normal); - memory->destroy(dnormal); - memory->destroy(dnormdri); if (allocated) { memory->destroy(setflag); @@ -105,1279 +87,7 @@ PairDRIP::~PairDRIP() memory->destroy(elem2param); if (allocated) delete [] map; - memory->destroy(nearest3neigh); - -} - - -/* ---------------------------------------------------------------------- */ - -void PairDRIP::compute(int eflag, int vflag) -{ - - int i,j,ii,jj,inum,jnum,itype,jtype,k,l,kk,ll; - tagint itag,jtag; - double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fpair,fpair1,fpair2, r, rsq; - int *ilist,*jlist,*numneigh,**firstneigh; - - int nbi1, nbi2, nbi3; - double ni[DIM]; - double dni_dri[DIM][DIM], dni_drnb1[DIM][DIM]; - double dni_drnb2[DIM][DIM], dni_drnb3[DIM][DIM]; - - - evdwl = 0.0; - ev_init(eflag,vflag); - - double **x = atom->x; - double **f = atom->f; - int *type = atom->type; - tagint *tag = atom->tag; - int nlocal = atom->nlocal; - int newton_pair = force->newton_pair; - - inum = list->inum; - ilist = list->ilist; - numneigh = list->numneigh; - firstneigh = list->firstneigh; - - - - - - double prodnorm1,prodnorm2,fkcx,fkcy,fkcz; - double rhosq1,rhosq2,exp0,exp1,exp2,r2inv,r6inv,r8inv,Tap,dTap,Vkc; - double frho1,frho2,sumC1,sumC2,sumC11,sumC22,sumCff,fsum,rdsq1,rdsq2; - int *DRIP_neighs_i,*DRIP_neighs_j; - - - double dprodnorm1[3] = {0.0, 0.0, 0.0}; - double dprodnorm2[3] = {0.0, 0.0, 0.0}; - double fp1[3] = {0.0, 0.0, 0.0}; - double fp2[3] = {0.0, 0.0, 0.0}; - double fprod1[3] = {0.0, 0.0, 0.0}; - double fprod2[3] = {0.0, 0.0, 0.0}; - double fk[3] = {0.0, 0.0, 0.0}; - double fl[3] = {0.0, 0.0, 0.0}; - double delkj[3] = {0.0, 0.0, 0.0}; - double delli[3] = {0.0, 0.0, 0.0}; - - - - - // find nearest 3 neighbors of each atom - nearest3neigh(); - - //TODO what does this comm do? - // communicate the normal vector and its derivatives - comm->forward_comm_pair(this); - - // loop over neighbors of my atoms - for (ii = 0; ii < inum; ii++) { - i = ilist[ii]; - itag = tag[i]; - xtmp = x[i][0]; - ytmp = x[i][1]; - ztmp = x[i][2]; - itype = map[type[i]]; - jlist = firstneigh[i]; - jnum = numneigh[i]; - - - // normal and its derivatives w.r.t. atom i and its 3 nearest neighs - calc_normal(i, nbi1, nbi2, nbi3, ni, dni_dri,dni_drnb1, dni_drnb2, dni_drnb3); - - - for (jj = 0; jj < jnum; jj++) { - j = jlist[jj]; - j &= NEIGHMASK; - jtype = map[type[j]]; - jtag = tag[j]; - -// // two-body interactions from full neighbor list, skip half of them -// if (itag > jtag) { -// if ((itag+jtag) % 2 == 0) continue; -// } else if (itag < jtag) { -// if ((itag+jtag) % 2 == 1) continue; -// } else { -// if (x[j][2] < ztmp) continue; -// if (x[j][2] == ztmp && x[j][1] < ytmp) continue; -// if (x[j][2] == ztmp && x[j][1] == ytmp && x[j][0] < xtmp) continue; -// } - - delx = xtmp - x[j][0]; - dely = ytmp - x[j][1]; - delz = ztmp - x[j][2]; - rsq = delx*delx + dely*dely + delz*delz; - int iparam_ij = elem2param[itype][jtype]; - Param& p = params[iparam_ij]; - double rcutsq = p.rcutsq; - - - // only include the interation between different layers - if (rsq>1e-20 && rsq < rcutsq && atom->molecule[i] != atom->molecule[j]) { - - double phi_attr = calc_attractive(vflag, i,j,p, delx, dely, delz, rsq); - - double phi_repul = calc_repulsive(vflag); - - - - } - } //loop over jj - } // loop over ii - -} - - -/* ---------------------------------------------------------------------- */ - -double PairDRIP::calc_attractive(int const i, int const j, Param& p, - double const rsq, double const * rvec) -{ - - double **f = atom->f; - - double const z0 = p.z0; - double const A = p.A; - double const cutoff = p.rcut; - double const r = sqrt(rsq); - - double roz0_sq = rsq / (z0 * z0); - double dtp; - double tp = tap(r, cutoff, dtp); - double r6 = A / (roz0_sq * roz0_sq * roz0_sq); - double dr6 = -6 * r6 / r; - double phi = -r6 * tp; - - double fpair = HALF * (r6 * dtp + dr6 * tp); - f[i][0] += rvec[0] * fpair / r; - f[i][1] += rvec[1] * fpair / r; - f[i][2] += rvec[2] * fpair / r; - f[j][0] -= rvec[0] * fpair / r; - f[j][1] -= rvec[1] * fpair / r; - f[j][2] -= rvec[2] * fpair / r; - - return phi; -} - - -/* ---------------------------------------------------------------------- */ - -double PairDRIP::calc_repulsive(int const i, int const j, Param& p, - double const rsq, double const * rvec, - int const nbi1, int const nbi2, int const nbi3, double const * ni, - double const * dni_dr[DIM], double const * dni_drnb1[DIM], - double const * dni_drnb2[DIM], double const * dni_drnb3[DIM]) -{ - double **f = atom->f; - double r = sqrt(rsq); - - // params - double C0 = p.C0; - double C2 = p.C2; - double C4 = p.C4; - double C = p.C; - double delta = p.delta; - double lambda = p.lambda; - double z0 = p.z0; - double cutoff = p.rcut; - - // nearest 3 neighbors of atom j - int nbj1 = nearest3neigh[j][0]; - int nbj2 = nearest3neigh[j][1]; - int nbj3 = nearest3neigh[j][2]; - - double[DIM] dgij_dri; - double[DIM] dgij_drj; - double[DIM] dgij_drk1; - double[DIM] dgij_drk2; - double[DIM] dgij_drk3; - double[DIM] dgij_drl1; - double[DIM] dgij_drl2; - double[DIM] dgij_drl3; - double[DIM] drhosqij_dri; - double[DIM] drhosqij_drj; - double[DIM] drhosqij_drnb1; - double[DIM] drhosqij_drnb2; - double[DIM] drhosqij_drnb3; - - - // derivative of rhosq w.r.t coordinates of atoms i, j, and the nearests 3 - // neighs of i - get_drhosqij(rvec, ni, dni_dri, dni_drnb1, dni_drnb2, dni_drnb3, drhosqij_dri, - drhosqij_drj, drhosqij_drnb1, drhosqij_drnb2, drhosqij_drnb3); - - // transverse decay function f(rho) and its derivative w.r.t. rhosq - double rhosqij; - double dtdij; - double tdij = td(C0, C2, C4, delta, rvec, r, ni, rhosqij, dtdij); - - // dihedral angle function and its derivateives - double dgij_drhosq; - double gij = dihedral(i, j, p, rhosqij, dgij_drhosq, dgij_dri, dgij_drj, - dgij_drk1, dgij_drk2, dgij_drk3, dgij_drl1, dgij_drl2, dgij_drl3); - - double V2 = C + tdij + gij; - - // tap part - double dtp; - double tp = tap(r, cutoff, dtp); - - /* exponential part */ - double V1 = exp(-lambda * (r - z0)); - double dV1 = -V1 * lambda; - - double phi = tp * V1 * V2; - - for (int k = 0; k < DIM; k++) { - - // forces due to derivatives of tap and V1 - double tmp = -HALF * (dtp * V1 + tp * dV1) * V2 * rvec[k] / r; - f[i][k] += tmp; - f[j][k] -= tmp; - - // the following incldue the transverse decay part tdij and the dihedral part gij - // derivative of V2 contribute to atoms i, j - f[i][k] += HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_dri[k] + dgij_dri[k]); - f[j][k] += HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drj[k] + dgij_drj[k]); - - // derivative of V2 contribute to neighs of atom i - f[nbi1][k] += HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb1[k] + dgij_drk1[k]); - f[nbi2][k] += HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb2[k] + dgij_drk2[k]); - f[nbi3][k] += HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb3[k] + dgij_drk3[k]); - - // derivative of V2 contribute to neighs of atom j - f[nbj1][k] += HALF * tp * V1 * dgij_drl1[k]; - f[nbj2][k] += HALF * tp * V1 * dgij_drl2[k]; - f[nbj3][k] += HALF * tp * V1 * dgij_drl3[k]; - } - - return phi; -} - - - -/* ---------------------------------------------------------------------- */ - -void PairDRIP::find_nearest_3_neigh() -{ - - int i,j,ii,jj,n,allnum,jnum,itype,jtype; - double xtmp,ytmp,ztmp,delx,dely,delz,rsq; - int *ilist,*jlist,*numneigh,**firstneigh; - int *neighptr; - - double **x = atom->x; - int *type = atom->type; - - - allnum = list->inum + list->gnum; - ilist = list->ilist; - numneigh = list->numneigh; - firstneigh = list->firstneigh; - - memory->destroy(nearest3neigh); - memory->create(nearest3neigh, allnum, 3, "DRIP:nearest3neigh"); - - // store all DRIP neighs of owned and ghost atoms - // scan full neighbor list of I - - ipage->reset(); - - for (ii = 0; ii < allnum; ii++) { - i = ilist[ii]; - - n = 0; - neighptr = ipage->vget(); - - xtmp = x[i][0]; - ytmp = x[i][1]; - ztmp = x[i][2]; - itype = map[type[i]]; - jlist = firstneigh[i]; - jnum = numneigh[i]; - - - // init nb1 to be the 1st nearest neigh, nb3 the 3rd nearest - int nb1 = -1; - int nb2 = -1; - int nb3 = -1; - double nb1_rsq = 1.1e10; - double nb2_rsq = 2.0e10; - double nb3_rsq = 3.0e10; - - for (jj = 0; jj < jnum; jj++) { - j = jlist[jj]; - j &= NEIGHMASK; - jtype = map[type[j]]; - delx = xtmp - x[j][0]; - dely = ytmp - x[j][1]; - delz = ztmp - x[j][2]; - rsq = delx*delx + dely*dely + delz*delz; - - int iparam_ij = elem2param[itype][jtype]; - double rcutsq = params[iparam_ij].rcutsq; - - if (rsq > 1e-20 && rsq < rcutsq && atom->molecule[i] == atom->molecule[j]) { - - // find the 3 nearest neigh - if (rsq < nb1_rsq) { - nb3 = nb2; - nb2 = nb1; - nb1 = j; - nb3_rsq = nb2_rsq; - nb2_rsq = nb1_rsq; - nb1_rsq = rsq; - } - else if (rsq < nb2_rsq) { - nb3 = nb2; - nb2 = j; - nb3_rsq = nb2_rsq; - nb2_rsq = rsq; - } - else if (rsq < nb3_rsq) { - nb3 = j; - nb3_rsq = rsq; - } - - } - } // loop over jj - - // store neighbors to be used later to compute normal - if (nb1_rsq >= 1.0e10 || nb2_rsq >= 1.0e10 || nb3_rsq >= 1.0e10) { - error->one(FLERR,"No enough neighbors to construct normal."); - } else{ - nearest3neigh[i][0] = nb1; - nearest3neigh[i][1] = nb2; - nearest3neigh[i][2] = nb3; - } - - } // loop over ii -} - - -/* ---------------------------------------------------------------------- */ - -void PairDRIP::calc_normal(int const i, double ** const nearest3neigh, - int& k1, int& k2, int& k3, double * const normal, - double ** const dn_dri, double ** const dn_drk1, - double ** const dn_drk2, double ** const dn_drk3) -{ - - k1 = nearest3neigh[i][0]; - k2 = nearest3neigh[i][1]; - k3 = nearest3neigh[i][2]; - - // normal does not depend on i, setting to zero - for (int j = 0; j < DIM; j++) { - for (int k = 0; k < DIM; k++) { - dn_dri[j][k] = 0.0; - } - } - - // get normal and derives of normal w.r.t to its 3 nearest neighbors - double **x = atom->x; - deriv_cross(x[k1], x[k2], x[k3], normal, dn_drk1, dn_drk2, dn_drk3); -} - - -/* ---------------------------------------------------------------------- */ -void PairDRIP::get_drhosqij( - double const* const rij, - double const* const ni, - VectorOfSizeDIM const* const dni_dri, - VectorOfSizeDIM const* const dni_drn1, - VectorOfSizeDIM const* const dni_drn2, - VectorOfSizeDIM const* const dni_drn3, - double* const drhosq_dri, - double* const drhosq_drj, - double* const drhosq_drn1, - double* const drhosq_drn2, - double* const drhosq_drn3) const -{ - int k; - double ni_dot_rij = 0; - double dni_dri_dot_rij[DIM]; - double dni_drn1_dot_rij[DIM]; - double dni_drn2_dot_rij[DIM]; - double dni_drn3_dot_rij[DIM]; - - ni_dot_rij = dot(ni, rij); - mat_dot_vec(dni_dri, rij, dni_dri_dot_rij); - mat_dot_vec(dni_drn1, rij, dni_drn1_dot_rij); - mat_dot_vec(dni_drn2, rij, dni_drn2_dot_rij); - mat_dot_vec(dni_drn3, rij, dni_drn3_dot_rij); - - for (k = 0; k < DIM; k++) { - drhosq_dri[k] = -2 * rij[k] - 2 * ni_dot_rij * (-ni[k] + dni_dri_dot_rij[k]); - drhosq_drj[k] = 2 * rij[k] - 2 * ni_dot_rij * ni[k]; - drhosq_drn1[k] = -2 * ni_dot_rij * dni_drn1_dot_rij[k]; - drhosq_drn2[k] = -2 * ni_dot_rij * dni_drn2_dot_rij[k]; - drhosq_drn3[k] = -2 * ni_dot_rij * dni_drn3_dot_rij[k]; - } -} - - -/* ---------------------------------------------------------------------- */ -// Compute the normalized cross product of two vector rkl, rkm, and the -// derivates w.r.t rk, rl, rm. -// NOTE, the dcross_drk, dcross_drl, and dcross_drm is actually the transpose -// of the actual one. - -void PairDRIP::deriv_cross( double const* rk, double const* rl, double const* rm, - double* const cross, double ** const dcross_drk, - double ** const dcross_drl, double ** const dcross_drm) -{ - double x[DIM]; - double y[DIM]; - double p[DIM]; - double q; - double q_cubic; - double d_invq_d_x0; - double d_invq_d_x1; - double d_invq_d_x2; - double d_invq_d_y0; - double d_invq_d_y1; - double d_invq_d_y2; - - int i, j; - - - // get x = rkl and y = rkm - for (i = 0; i < DIM; i++) { - x[i] = rl[i] - rk[i]; - y[i] = rm[i] - rk[i]; - } - - // cross product - p[0] = x[1] * y[2] - x[2] * y[1]; - p[1] = x[2] * y[0] - x[0] * y[2]; - p[2] = x[0] * y[1] - x[1] * y[0]; - - q = sqrt(p[0] * p[0] + p[1] * p[1] + p[2] * p[2]); - - // normalized cross - cross[0] = p[0] / q; - cross[1] = p[1] / q; - cross[2] = p[2] / q; - - // compute derivatives - // derivative of inverse q (i.e. 1/q) w.r.t x and y - q_cubic = q * q * q; - d_invq_d_x0 = (+p[1] * y[2] - p[2] * y[1]) / q_cubic; - d_invq_d_x1 = (-p[0] * y[2] + p[2] * y[0]) / q_cubic; - d_invq_d_x2 = (p[0] * y[1] - p[1] * y[0]) / q_cubic; - d_invq_d_y0 = (-p[1] * x[2] + p[2] * x[1]) / q_cubic; - d_invq_d_y1 = (p[0] * x[2] - p[2] * x[0]) / q_cubic; - d_invq_d_y2 = (-p[0] * x[1] + p[1] * x[0]) / q_cubic; - - // dcross/drl transposed - dcross_drl[0][0] = p[0] * d_invq_d_x0; - dcross_drl[0][1] = -y[2] / q + p[1] * d_invq_d_x0; - dcross_drl[0][2] = y[1] / q + p[2] * d_invq_d_x0; - - dcross_drl[1][0] = y[2] / q + p[0] * d_invq_d_x1; - dcross_drl[1][1] = p[1] * d_invq_d_x1; - dcross_drl[1][2] = -y[0] / q + p[2] * d_invq_d_x1; - - dcross_drl[2][0] = -y[1] / q + p[0] * d_invq_d_x2; - dcross_drl[2][1] = y[0] / q + p[1] * d_invq_d_x2; - dcross_drl[2][2] = p[2] * d_invq_d_x2; - - // dcross/drm transposed - dcross_drm[0][0] = p[0] * d_invq_d_y0; - dcross_drm[0][1] = x[2] / q + p[1] * d_invq_d_y0; - dcross_drm[0][2] = -x[1] / q + p[2] * d_invq_d_y0; - - dcross_drm[1][0] = -x[2] / q + p[0] * d_invq_d_y1; - dcross_drm[1][1] = p[1] * d_invq_d_y1; - dcross_drm[1][2] = x[0] / q + p[2] * d_invq_d_y1; - - dcross_drm[2][0] = x[1] / q + p[0] * d_invq_d_y2; - dcross_drm[2][1] = -x[0] / q + p[1] * d_invq_d_y2; - dcross_drm[2][2] = p[2] * d_invq_d_y2; - - // dcross/drk transposed - for (i = 0; i < DIM; i++) { - for (j = 0; j < DIM; j++) { - dcross_drk[i][j] = -(dcross_drl[i][j] + dcross_drm[i][j]); - } - } - -} - -/* ---------------------------------------------------------------------- */ - - -// derivartive of transverse decay function f(rho) w.r.t rho -double PairDRIP::td(double C0, double C2, double C4, double delta, - double const* const rvec, double r, - const double* const n, - double& rho_sq, double& dtd) const -{ - double n_dot_r = dot(n, rvec); - - rho_sq = r * r - n_dot_r * n_dot_r; - - if (rho_sq < 0) { // in case n is [0, 0, 1] and rho_sq is negative due to numerical error - rho_sq = 0; - } - - double del_sq = delta * delta; - double rod_sq = rho_sq / del_sq; - double td = exp(-rod_sq) * (C0 + rod_sq * (C2 + rod_sq * C4)); - dtd = -td / del_sq + exp(-rod_sq) * (C2 + 2 * C4 * rod_sq) / del_sq; - - return td; -} - - -/* ---------------------------------------------------------------------- */ -// derivartive of dihedral angle func gij w.r.t rho, and atom positions -double PairDRIP::dihedral( - const int i, const int j, Param& p, double const rhosq, double& d_drhosq, - double* const d_dri, double* const d_drj, - double* const d_drk1, double* const d_drk2, double* const d_drk3, - double* const d_drl1, double* const d_drl2, double* const d_drl3) -{ - // get parameter - double B = p.B; - double eta = p.eta; - double cut_rhosq = p.rhocutsq; - - // local vars - double cos_kl[3][3]; // cos_omega_k1ijl1, cos_omega_k1ijl2 ... - double d_dcos_kl[3][3]; // deriv of dihedral w.r.t to cos_omega_kijl - double dcos_kl[3][3][4][DIM]; // 4 indicates k, i, j, l, e.g. dcoskl[0][1][0] means - // dcos_omega_k1ijl2 / drk - - - // if larger than cutoff of rho, return 0 - if (rhosq >= cut_rhosq) { - d_drhosq = 0; - for (int dim = 0; dim < DIM; dim++) { - d_dri[dim] = 0; - d_drj[dim] = 0; - d_drk1[dim] = 0; - d_drk2[dim] = 0; - d_drk3[dim] = 0; - d_drl1[dim] = 0; - d_drl2[dim] = 0; - d_drl3[dim] = 0; - } - double dihe = 0.0; - return dihe; - } - // 3 neighs of atoms i and j - int k[3]; - int l[3]; - for (int m = 0; m < 3; m++) { - k[m] = nearest3neigh[i][m]; - l[m] = nearest3neigh[j][m]; - } - - // cos_omega_kijl and the derivatives w.r.t coordinates - for (int m = 0; m < 3; m++) { - for (int n = 0; n < 3; n++) { - cos_kl[m][n] = deriv_cos_omega( - coordinates[k[m]], coordinates[i], coordinates[j], coordinates[l[n]], - dcos_kl[m][n][0], dcos_kl[m][n][1], dcos_kl[m][n][2], dcos_kl[m][n][3]); - } - } - - double epart1 = exp(-eta * cos_kl[0][0] * cos_kl[0][1] * cos_kl[0][2]); - double epart2 = exp(-eta * cos_kl[1][0] * cos_kl[1][1] * cos_kl[1][2]); - double epart3 = exp(-eta * cos_kl[2][0] * cos_kl[2][1] * cos_kl[2][2]); - double D2 = epart1 + epart2 + epart3; - - // cutoff function - double d_drhosq_tap; - double D0 = B * tap_rho(rhosq, cut_rhosq, d_drhosq_tap); - - // dihedral energy - double dihe = D0 * D2; - - // deriv of dihedral w.r.t rhosq - d_drhosq = B * d_drhosq_tap * D2; - - // deriv of dihedral w.r.t cos_omega_kijl - d_dcos_kl[0][0] = -D0 * epart1 * eta * cos_kl[0][1] * cos_kl[0][2]; - d_dcos_kl[0][1] = -D0 * epart1 * eta * cos_kl[0][0] * cos_kl[0][2]; - d_dcos_kl[0][2] = -D0 * epart1 * eta * cos_kl[0][0] * cos_kl[0][1]; - d_dcos_kl[1][0] = -D0 * epart2 * eta * cos_kl[1][1] * cos_kl[1][2]; - d_dcos_kl[1][1] = -D0 * epart2 * eta * cos_kl[1][0] * cos_kl[1][2]; - d_dcos_kl[1][2] = -D0 * epart2 * eta * cos_kl[1][0] * cos_kl[1][1]; - d_dcos_kl[2][0] = -D0 * epart3 * eta * cos_kl[2][1] * cos_kl[2][2]; - d_dcos_kl[2][1] = -D0 * epart3 * eta * cos_kl[2][0] * cos_kl[2][2]; - d_dcos_kl[2][2] = -D0 * epart3 * eta * cos_kl[2][0] * cos_kl[2][1]; - - // initialization to be zero and later add values - for (int dim = 0; dim < DIM; dim++) { - d_drk1[dim] = 0.; - d_drk2[dim] = 0.; - d_drk3[dim] = 0.; - d_dri[dim] = 0.; - d_drj[dim] = 0.; - d_drl1[dim] = 0.; - d_drl2[dim] = 0.; - d_drl3[dim] = 0.; - } - - for (int m = 0; m < 3; m++) { - for (int dim = 0; dim < 3; dim++) { - d_drk1[dim] += d_dcos_kl[0][m] * dcos_kl[0][m][0][dim]; - d_drk2[dim] += d_dcos_kl[1][m] * dcos_kl[1][m][0][dim]; - d_drk3[dim] += d_dcos_kl[2][m] * dcos_kl[2][m][0][dim]; - d_drl1[dim] += d_dcos_kl[m][0] * dcos_kl[m][0][3][dim]; - d_drl2[dim] += d_dcos_kl[m][1] * dcos_kl[m][1][3][dim]; - d_drl3[dim] += d_dcos_kl[m][2] * dcos_kl[m][2][3][dim]; - } - for (int n = 0; n < 3; n++) { - for (int dim = 0; dim < 3; dim++) { - d_dri[dim] += d_dcos_kl[m][n] * dcos_kl[m][n][1][dim]; - d_drj[dim] += d_dcos_kl[m][n] * dcos_kl[m][n][2][dim]; - } - } - } - - return dihe; -} - - - - - - - - - - - - - - - - - - - - - - - - -/* ---------------------------------------------------------------------- */ - -void PairDRIP::compute(int eflag, int vflag) -{ - int i,j,ii,jj,inum,jnum,itype,jtype,k,l,kk,ll; - tagint itag,jtag; - double prodnorm1,prodnorm2,fkcx,fkcy,fkcz; - double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fpair,fpair1,fpair2; - double rsq,r,rhosq1,rhosq2,exp0,exp1,exp2,r2inv,r6inv,r8inv,Tap,dTap,Vkc; - double frho1,frho2,sumC1,sumC2,sumC11,sumC22,sumCff,fsum,rdsq1,rdsq2; - int *ilist,*jlist,*numneigh,**firstneigh; - int *DRIP_neighs_i,*DRIP_neighs_j; - - evdwl = 0.0; - ev_init(eflag,vflag); - - double **x = atom->x; - double **f = atom->f; - int *type = atom->type; - tagint *tag = atom->tag; - int nlocal = atom->nlocal; - int newton_pair = force->newton_pair; - double dprodnorm1[3] = {0.0, 0.0, 0.0}; - double dprodnorm2[3] = {0.0, 0.0, 0.0}; - double fp1[3] = {0.0, 0.0, 0.0}; - double fp2[3] = {0.0, 0.0, 0.0}; - double fprod1[3] = {0.0, 0.0, 0.0}; - double fprod2[3] = {0.0, 0.0, 0.0}; - double fk[3] = {0.0, 0.0, 0.0}; - double fl[3] = {0.0, 0.0, 0.0}; - double delkj[3] = {0.0, 0.0, 0.0}; - double delli[3] = {0.0, 0.0, 0.0}; - - inum = list->inum; - ilist = list->ilist; - numneigh = list->numneigh; - firstneigh = list->firstneigh; - // Build full neighbor list - DRIP_neigh(); - // Calculate the normals - calc_normal(); - - // communicate the normal vector and its derivatives - comm->forward_comm_pair(this); - - // loop over neighbors of my atoms - for (ii = 0; ii < inum; ii++) { - i = ilist[ii]; - itag = tag[i]; - 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]; - j &= NEIGHMASK; - jtype = type[j]; - jtag = tag[j]; - - // two-body interactions from full neighbor list, skip half of them - if (itag > jtag) { - if ((itag+jtag) % 2 == 0) continue; - } else if (itag < jtag) { - if ((itag+jtag) % 2 == 1) continue; - } else { - if (x[j][2] < ztmp) continue; - if (x[j][2] == ztmp && x[j][1] < ytmp) continue; - if (x[j][2] == ztmp && x[j][1] == ytmp && x[j][0] < xtmp) continue; - } - - delx = xtmp - x[j][0]; - dely = ytmp - x[j][1]; - delz = ztmp - x[j][2]; - rsq = delx*delx + dely*dely + delz*delz; - - // only include the interation between different layers - if (rsq < cutsq[itype][jtype] && atom->molecule[i] != atom->molecule[j]) { - - int iparam_ij = elem2param[map[itype]][map[jtype]]; - Param& p = params[iparam_ij]; - - r = sqrt(rsq); - r2inv = 1.0/rsq; - r6inv = r2inv*r2inv*r2inv; - r8inv = r2inv*r6inv; - // turn on/off taper function - if (tap_flag) { - Tap = calc_Tap(r,sqrt(cutsq[itype][jtype])); - dTap = calc_dTap(r,sqrt(cutsq[itype][jtype])); - } else {Tap = 1.0; dTap = 0.0;} - - // Calculate the transverse distance - // note that rho_ij does not equal to rho_ji except when normals are all along z - prodnorm1 = normal[i][0]*delx + normal[i][1]*dely + normal[i][2]*delz; - prodnorm2 = normal[j][0]*delx + normal[j][1]*dely + normal[j][2]*delz; - rhosq1 = rsq - prodnorm1*prodnorm1; // rho_ij - rhosq2 = rsq - prodnorm2*prodnorm2; // rho_ji - rdsq1 = rhosq1*p.delta2inv; // (rho_ij/delta)^2 - rdsq2 = rhosq2*p.delta2inv; // (rho_ji/delta)^2 - - // store exponents - exp0 = exp(-p.lambda*(r-p.z0)); - exp1 = exp(-rdsq1); - exp2 = exp(-rdsq2); - - sumC1 = p.C0 + p.C2*rdsq1 + p.C4*rdsq1*rdsq1; - sumC2 = p.C0 + p.C2*rdsq2 + p.C4*rdsq2*rdsq2; - sumC11 = (p.C2 + 2.0*p.C4*rdsq1)*p.delta2inv; - sumC22 = (p.C2 + 2.0*p.C4*rdsq2)*p.delta2inv; - frho1 = exp1*sumC1; - frho2 = exp2*sumC2; - sumCff = p.C + frho1 + frho2; - Vkc = -p.A*p.z06*r6inv + exp0*sumCff; - - // derivatives - fpair = -6.0*p.A*p.z06*r8inv + p.lambda*exp0/r*sumCff; - fpair1 = 2.0*exp0*exp1*(p.delta2inv*sumC1 - sumC11); - fpair2 = 2.0*exp0*exp2*(p.delta2inv*sumC2 - sumC22); - fsum = fpair + fpair1 + fpair2; - // derivatives of the product of rij and ni, the result is a vector - dprodnorm1[0] = dnormdri[0][0][i]*delx + dnormdri[1][0][i]*dely + dnormdri[2][0][i]*delz; - dprodnorm1[1] = dnormdri[0][1][i]*delx + dnormdri[1][1][i]*dely + dnormdri[2][1][i]*delz; - dprodnorm1[2] = dnormdri[0][2][i]*delx + dnormdri[1][2][i]*dely + dnormdri[2][2][i]*delz; - // derivatives of the product of rji and nj, the result is a vector - dprodnorm2[0] = dnormdri[0][0][j]*delx + dnormdri[1][0][j]*dely + dnormdri[2][0][j]*delz; - dprodnorm2[1] = dnormdri[0][1][j]*delx + dnormdri[1][1][j]*dely + dnormdri[2][1][j]*delz; - dprodnorm2[2] = dnormdri[0][2][j]*delx + dnormdri[1][2][j]*dely + dnormdri[2][2][j]*delz; - fp1[0] = prodnorm1*normal[i][0]*fpair1; - fp1[1] = prodnorm1*normal[i][1]*fpair1; - fp1[2] = prodnorm1*normal[i][2]*fpair1; - fp2[0] = prodnorm2*normal[j][0]*fpair2; - fp2[1] = prodnorm2*normal[j][1]*fpair2; - fp2[2] = prodnorm2*normal[j][2]*fpair2; - fprod1[0] = prodnorm1*dprodnorm1[0]*fpair1; - fprod1[1] = prodnorm1*dprodnorm1[1]*fpair1; - fprod1[2] = prodnorm1*dprodnorm1[2]*fpair1; - fprod2[0] = prodnorm2*dprodnorm2[0]*fpair2; - fprod2[1] = prodnorm2*dprodnorm2[1]*fpair2; - fprod2[2] = prodnorm2*dprodnorm2[2]*fpair2; - fkcx = (delx*fsum - fp1[0] - fp2[0])*Tap - Vkc*dTap*delx/r; - fkcy = (dely*fsum - fp1[1] - fp2[1])*Tap - Vkc*dTap*dely/r; - fkcz = (delz*fsum - fp1[2] - fp2[2])*Tap - Vkc*dTap*delz/r; - - f[i][0] += fkcx - fprod1[0]*Tap; - f[i][1] += fkcy - fprod1[1]*Tap; - f[i][2] += fkcz - fprod1[2]*Tap; - f[j][0] -= fkcx + fprod2[0]*Tap; - f[j][1] -= fkcy + fprod2[1]*Tap; - f[j][2] -= fkcz + fprod2[2]*Tap; - - // calculate the forces acted on the neighbors of atom i from atom j - DRIP_neighs_i = DRIP_firstneigh[i]; - for (kk = 0; kk < DRIP_numneigh[i]; kk++) { - k = DRIP_neighs_i[kk]; - if (k == i) continue; - // derivatives of the product of rij and ni respect to rk, k=0,1,2, where atom k is the neighbors of atom i - dprodnorm1[0] = dnormal[0][0][kk][i]*delx + dnormal[1][0][kk][i]*dely + dnormal[2][0][kk][i]*delz; - dprodnorm1[1] = dnormal[0][1][kk][i]*delx + dnormal[1][1][kk][i]*dely + dnormal[2][1][kk][i]*delz; - dprodnorm1[2] = dnormal[0][2][kk][i]*delx + dnormal[1][2][kk][i]*dely + dnormal[2][2][kk][i]*delz; - fk[0] = (-prodnorm1*dprodnorm1[0]*fpair1)*Tap; - fk[1] = (-prodnorm1*dprodnorm1[1]*fpair1)*Tap; - fk[2] = (-prodnorm1*dprodnorm1[2]*fpair1)*Tap; - f[k][0] += fk[0]; - f[k][1] += fk[1]; - f[k][2] += fk[2]; - delkj[0] = x[k][0] - x[j][0]; - delkj[1] = x[k][1] - x[j][1]; - delkj[2] = x[k][2] - x[j][2]; - if (evflag) ev_tally_xyz(k,j,nlocal,newton_pair,0.0,0.0,fk[0],fk[1],fk[2],delkj[0],delkj[1],delkj[2]); - } - - // calculate the forces acted on the neighbors of atom j from atom i - DRIP_neighs_j = DRIP_firstneigh[j]; - for (ll = 0; ll < DRIP_numneigh[j]; ll++) { - l = DRIP_neighs_j[ll]; - if (l == j) continue; - // derivatives of the product of rji and nj respect to rl, l=0,1,2, where atom l is the neighbors of atom j - dprodnorm2[0] = dnormal[0][0][ll][j]*delx + dnormal[1][0][ll][j]*dely + dnormal[2][0][ll][j]*delz; - dprodnorm2[1] = dnormal[0][1][ll][j]*delx + dnormal[1][1][ll][j]*dely + dnormal[2][1][ll][j]*delz; - dprodnorm2[2] = dnormal[0][2][ll][j]*delx + dnormal[1][2][ll][j]*dely + dnormal[2][2][ll][j]*delz; - fl[0] = (-prodnorm2*dprodnorm2[0]*fpair2)*Tap; - fl[1] = (-prodnorm2*dprodnorm2[1]*fpair2)*Tap; - fl[2] = (-prodnorm2*dprodnorm2[2]*fpair2)*Tap; - f[l][0] += fl[0]; - f[l][1] += fl[1]; - f[l][2] += fl[2]; - delli[0] = x[l][0] - x[i][0]; - delli[1] = x[l][1] - x[i][1]; - delli[2] = x[l][2] - x[i][2]; - if (evflag) ev_tally_xyz(l,i,nlocal,newton_pair,0.0,0.0,fl[0],fl[1],fl[2],delli[0],delli[1],delli[2]); - } - - if (eflag) { - if (tap_flag) evdwl = Tap*Vkc; - else evdwl = Vkc; - } - - if (evflag) ev_tally_xyz(i,j,nlocal,newton_pair,evdwl,0,fkcx,fkcy,fkcz,delx,dely,delz); - } - } - } - if (vflag_fdotr) virial_fdotr_compute(); -} - -/* ---------------------------------------------------------------------- - Calculate the normals for each atom -------------------------------------------------------------------------- */ -void PairDRIP::calc_normal() -{ - int i,j,ii,jj,inum,jnum; - int cont,id,ip,m; - double nn,xtp,ytp,ztp,delx,dely,delz,nn2; - int *ilist,*jlist; - double pv12[3],pv31[3],pv23[3],n1[3],dni[3],dnn[3][3],vet[3][3],dpvdri[3][3]; - double dn1[3][3][3],dpv12[3][3][3],dpv23[3][3][3],dpv31[3][3][3]; - - double **x = atom->x; - - // grow normal array if necessary - - if (atom->nmax > nmax) { - memory->destroy(normal); - memory->destroy(dnormal); - memory->destroy(dnormdri); - nmax = atom->nmax; - memory->create(normal,nmax,3,"DRIP:normal"); - memory->create(dnormdri,3,3,nmax,"DRIP:dnormdri"); - memory->create(dnormal,3,3,3,nmax,"DRIP:dnormal"); - } - - inum = list->inum; - ilist = list->ilist; - //Calculate normals - for (ii = 0; ii < inum; ii++) { - i = ilist[ii]; - xtp = x[i][0]; - ytp = x[i][1]; - ztp = x[i][2]; - - // Initialize the arrays - for (id = 0; id < 3; id++){ - pv12[id] = 0.0; - pv31[id] = 0.0; - pv23[id] = 0.0; - n1[id] = 0.0; - dni[id] = 0.0; - normal[i][id] = 0.0; - for (ip = 0; ip < 3; ip++){ - vet[ip][id] = 0.0; - dnn[ip][id] = 0.0; - dpvdri[ip][id] = 0.0; - dnormdri[ip][id][i] = 0.0; - for (m = 0; m < 3; m++){ - dpv12[ip][id][m] = 0.0; - dpv31[ip][id][m] = 0.0; - dpv23[ip][id][m] = 0.0; - dn1[ip][id][m] = 0.0; - dnormal[ip][id][m][i] = 0.0; - } - } - } - - cont = 0; - jlist = DRIP_firstneigh[i]; - jnum = DRIP_numneigh[i]; - for (jj = 0; jj < jnum; jj++) { - j = jlist[jj]; - j &= NEIGHMASK; - - delx = x[j][0] - xtp; - dely = x[j][1] - ytp; - delz = x[j][2] - ztp; - vet[cont][0] = delx; - vet[cont][1] = dely; - vet[cont][2] = delz; - cont++; - } - - if (cont <= 1) { - normal[i][0] = 0.0; - normal[i][1] = 0.0; - normal[i][2] = 1.0; - // derivatives of normal vector is zero - for (id = 0; id < 3; id++){ - for (ip = 0; ip < 3; ip++){ - dnormdri[id][ip][i] = 0.0; - for (m = 0; m < 3; m++){ - dnormal[id][ip][m][i] = 0.0; - } - } - } - } - else if (cont == 2) { - // for the atoms at the edge who has only two neighbor atoms - pv12[0] = vet[0][1]*vet[1][2] - vet[1][1]*vet[0][2]; - pv12[1] = vet[0][2]*vet[1][0] - vet[1][2]*vet[0][0]; - pv12[2] = vet[0][0]*vet[1][1] - vet[1][0]*vet[0][1]; - dpvdri[0][0] = 0.0; - dpvdri[0][1] = vet[0][2]-vet[1][2]; - dpvdri[0][2] = vet[1][1]-vet[0][1]; - dpvdri[1][0] = vet[1][2]-vet[0][2]; - dpvdri[1][1] = 0.0; - dpvdri[1][2] = vet[0][0]-vet[1][0]; - dpvdri[2][0] = vet[0][1]-vet[1][1]; - dpvdri[2][1] = vet[1][0]-vet[0][0]; - dpvdri[2][2] = 0.0; - - // derivatives respect to the first neighbor, atom k - dpv12[0][0][0] = 0.0; - dpv12[0][1][0] = vet[1][2]; - dpv12[0][2][0] = -vet[1][1]; - dpv12[1][0][0] = -vet[1][2]; - dpv12[1][1][0] = 0.0; - dpv12[1][2][0] = vet[1][0]; - dpv12[2][0][0] = vet[1][1]; - dpv12[2][1][0] = -vet[1][0]; - dpv12[2][2][0] = 0.0; - - // derivatives respect to the second neighbor, atom l - dpv12[0][0][1] = 0.0; - dpv12[0][1][1] = -vet[0][2]; - dpv12[0][2][1] = vet[0][1]; - dpv12[1][0][1] = vet[0][2]; - dpv12[1][1][1] = 0.0; - dpv12[1][2][1] = -vet[0][0]; - dpv12[2][0][1] = -vet[0][1]; - dpv12[2][1][1] = vet[0][0]; - dpv12[2][2][1] = 0.0; - - // derivatives respect to the third neighbor, atom n - for (id = 0; id < 3; id++){ - for (ip = 0; ip < 3; ip++){ - dpv12[id][ip][2] = 0.0; - } - } - - n1[0] = pv12[0]; - n1[1] = pv12[1]; - n1[2] = pv12[2]; - // the magnitude of the normal vector - nn2 = n1[0]*n1[0] + n1[1]*n1[1] + n1[2]*n1[2]; - nn = sqrt(nn2); - if (nn == 0) error->one(FLERR,"The magnitude of the normal vector is zero"); - // the unit normal vector - normal[i][0] = n1[0]/nn; - normal[i][1] = n1[1]/nn; - normal[i][2] = n1[2]/nn; - // derivatives of nn, dnn:3x1 vector - dni[0] = (n1[0]*dpvdri[0][0] + n1[1]*dpvdri[1][0] + n1[2]*dpvdri[2][0])/nn; - dni[1] = (n1[0]*dpvdri[0][1] + n1[1]*dpvdri[1][1] + n1[2]*dpvdri[2][1])/nn; - dni[2] = (n1[0]*dpvdri[0][2] + n1[1]*dpvdri[1][2] + n1[2]*dpvdri[2][2])/nn; - // derivatives of unit vector ni respect to ri, the result is 3x3 matrix - for (id = 0; id < 3; id++){ - for (ip = 0; ip < 3; ip++){ - dnormdri[id][ip][i] = dpvdri[id][ip]/nn - n1[id]*dni[ip]/nn2; - } - } - - // derivatives of non-normalized normal vector, dn1:3x3x3 array - for (id = 0; id < 3; id++){ - for (ip = 0; ip < 3; ip++){ - for (m = 0; m < 3; m++){ - dn1[id][ip][m] = dpv12[id][ip][m]; - } - } - } - // derivatives of nn, dnn:3x3 vector - // dnn[id][m]: the derivative of nn respect to r[id][m], id,m=0,1,2 - // r[id][m]: the id's component of atom m - for (m = 0; m < 3; m++){ - for (id = 0; id < 3; id++){ - dnn[id][m] = (n1[0]*dn1[0][id][m] + n1[1]*dn1[1][id][m] + n1[2]*dn1[2][id][m])/nn; - } - } - // dnormal[id][ip][m][i]: the derivative of normal[id] respect to r[ip][m], id,ip=0,1,2 - // for atom m, which is a neighbor atom of atom i, m=0,jnum-1 - for (m = 0; m < 3; m++){ - for (id = 0; id < 3; id++){ - for (ip = 0; ip < 3; ip++){ - dnormal[id][ip][m][i] = dn1[id][ip][m]/nn - n1[id]*dnn[ip][m]/nn2; - } - } - } - } - - else if(cont == 3) { - // for the atoms at the edge who has only two neighbor atoms - pv12[0] = vet[0][1]*vet[1][2] - vet[1][1]*vet[0][2]; - pv12[1] = vet[0][2]*vet[1][0] - vet[1][2]*vet[0][0]; - pv12[2] = vet[0][0]*vet[1][1] - vet[1][0]*vet[0][1]; - // derivatives respect to the first neighbor, atom k - dpv12[0][0][0] = 0.0; - dpv12[0][1][0] = vet[1][2]; - dpv12[0][2][0] = -vet[1][1]; - dpv12[1][0][0] = -vet[1][2]; - dpv12[1][1][0] = 0.0; - dpv12[1][2][0] = vet[1][0]; - dpv12[2][0][0] = vet[1][1]; - dpv12[2][1][0] = -vet[1][0]; - dpv12[2][2][0] = 0.0; - // derivatives respect to the second neighbor, atom l - dpv12[0][0][1] = 0.0; - dpv12[0][1][1] = -vet[0][2]; - dpv12[0][2][1] = vet[0][1]; - dpv12[1][0][1] = vet[0][2]; - dpv12[1][1][1] = 0.0; - dpv12[1][2][1] = -vet[0][0]; - dpv12[2][0][1] = -vet[0][1]; - dpv12[2][1][1] = vet[0][0]; - dpv12[2][2][1] = 0.0; - - // derivatives respect to the third neighbor, atom n - for (id = 0; id < 3; id++){ - for (ip = 0; ip < 3; ip++){ - dpv12[id][ip][2] = 0.0; - } - } - - pv31[0] = vet[2][1]*vet[0][2] - vet[0][1]*vet[2][2]; - pv31[1] = vet[2][2]*vet[0][0] - vet[0][2]*vet[2][0]; - pv31[2] = vet[2][0]*vet[0][1] - vet[0][0]*vet[2][1]; - // derivatives respect to the first neighbor, atom k - dpv31[0][0][0] = 0.0; - dpv31[0][1][0] = -vet[2][2]; - dpv31[0][2][0] = vet[2][1]; - dpv31[1][0][0] = vet[2][2]; - dpv31[1][1][0] = 0.0; - dpv31[1][2][0] = -vet[2][0]; - dpv31[2][0][0] = -vet[2][1]; - dpv31[2][1][0] = vet[2][0]; - dpv31[2][2][0] = 0.0; - // derivatives respect to the third neighbor, atom n - dpv31[0][0][2] = 0.0; - dpv31[0][1][2] = vet[0][2]; - dpv31[0][2][2] = -vet[0][1]; - // derivatives of pv13[1] to rn - dpv31[1][0][2] = -vet[0][2]; - dpv31[1][1][2] = 0.0; - dpv31[1][2][2] = vet[0][0]; - // derivatives of pv13[2] to rn - dpv31[2][0][2] = vet[0][1]; - dpv31[2][1][2] = -vet[0][0]; - dpv31[2][2][2] = 0.0; - - // derivatives respect to the second neighbor, atom l - for (id = 0; id < 3; id++){ - for (ip = 0; ip < 3; ip++){ - dpv31[id][ip][1] = 0.0; - } - } - - pv23[0] = vet[1][1]*vet[2][2] - vet[2][1]*vet[1][2]; - pv23[1] = vet[1][2]*vet[2][0] - vet[2][2]*vet[1][0]; - pv23[2] = vet[1][0]*vet[2][1] - vet[2][0]*vet[1][1]; - // derivatives respect to the second neighbor, atom k - for (id = 0; id < 3; id++){ - for (ip = 0; ip < 3; ip++){ - dpv23[id][ip][0] = 0.0; - } - } - // derivatives respect to the second neighbor, atom l - dpv23[0][0][1] = 0.0; - dpv23[0][1][1] = vet[2][2]; - dpv23[0][2][1] = -vet[2][1]; - dpv23[1][0][1] = -vet[2][2]; - dpv23[1][1][1] = 0.0; - dpv23[1][2][1] = vet[2][0]; - dpv23[2][0][1] = vet[2][1]; - dpv23[2][1][1] = -vet[2][0]; - dpv23[2][2][1] = 0.0; - // derivatives respect to the third neighbor, atom n - dpv23[0][0][2] = 0.0; - dpv23[0][1][2] = -vet[1][2]; - dpv23[0][2][2] = vet[1][1]; - dpv23[1][0][2] = vet[1][2]; - dpv23[1][1][2] = 0.0; - dpv23[1][2][2] = -vet[1][0]; - dpv23[2][0][2] = -vet[1][1]; - dpv23[2][1][2] = vet[1][0]; - dpv23[2][2][2] = 0.0; - -//############################################################################################ - // average the normal vectors by using the 3 neighboring planes - n1[0] = (pv12[0] + pv31[0] + pv23[0])/cont; - n1[1] = (pv12[1] + pv31[1] + pv23[1])/cont; - n1[2] = (pv12[2] + pv31[2] + pv23[2])/cont; - // the magnitude of the normal vector - nn2 = n1[0]*n1[0] + n1[1]*n1[1] + n1[2]*n1[2]; - nn = sqrt(nn2); - if (nn == 0) error->one(FLERR,"The magnitude of the normal vector is zero"); - // the unit normal vector - normal[i][0] = n1[0]/nn; - normal[i][1] = n1[1]/nn; - normal[i][2] = n1[2]/nn; - - // for the central atoms, dnormdri is always zero - for (id = 0; id < 3; id++){ - for (ip = 0; ip < 3; ip++){ - dnormdri[id][ip][i] = 0.0; - } - } // end of derivatives of normals respect to atom i - - // derivatives of non-normalized normal vector, dn1:3x3x3 array - for (id = 0; id < 3; id++){ - for (ip = 0; ip < 3; ip++){ - for (m = 0; m < 3; m++){ - dn1[id][ip][m] = (dpv12[id][ip][m] + dpv23[id][ip][m] + dpv31[id][ip][m])/cont; - } - } - } - // derivatives of nn, dnn:3x3 vector - // dnn[id][m]: the derivative of nn respect to r[id][m], id,m=0,1,2 - // r[id][m]: the id's component of atom m - for (m = 0; m < 3; m++){ - for (id = 0; id < 3; id++){ - dnn[id][m] = (n1[0]*dn1[0][id][m] + n1[1]*dn1[1][id][m] + n1[2]*dn1[2][id][m])/nn; - } - } - // dnormal[id][ip][m][i]: the derivative of normal[id] respect to r[ip][m], id,ip=0,1,2 - // for atom m, which is a neighbor atom of atom i, m=0,jnum-1 - for (m = 0; m < 3; m++){ - for (id = 0; id < 3; id++){ - for (ip = 0; ip < 3; ip++){ - dnormal[id][ip][m][i] = dn1[id][ip][m]/nn - n1[id]*dnn[ip][m]/nn2; - } - } - } - } - else { - error->one(FLERR,"There are too many neighbors for calculating normals"); - } - } - -} - - -/* ---------------------------------------------------------------------- - create neighbor list from main neighbor list for calculating the normals -------------------------------------------------------------------------- */ - -void PairDRIP::DRIP_neigh() -{ - int i,j,ii,jj,n,allnum,jnum,itype,jtype; - double xtmp,ytmp,ztmp,delx,dely,delz,rsq; - int *ilist,*jlist,*numneigh,**firstneigh; - int *neighptr; - - double **x = atom->x; - int *type = atom->type; - - if (atom->nmax > maxlocal) { - maxlocal = atom->nmax; - memory->destroy(DRIP_numneigh); - memory->sfree(DRIP_firstneigh); - memory->create(DRIP_numneigh,maxlocal,"DRIP:numneigh"); - DRIP_firstneigh = (int **) memory->smalloc(maxlocal*sizeof(int *), - "DRIP:firstneigh"); - } - - allnum = list->inum + list->gnum; - ilist = list->ilist; - numneigh = list->numneigh; - firstneigh = list->firstneigh; - - // store all DRIP neighs of owned and ghost atoms - // scan full neighbor list of I - - ipage->reset(); - - for (ii = 0; ii < allnum; ii++) { - i = ilist[ii]; - - n = 0; - neighptr = ipage->vget(); - - xtmp = x[i][0]; - ytmp = x[i][1]; - ztmp = x[i][2]; - itype = map[type[i]]; - jlist = firstneigh[i]; - jnum = numneigh[i]; - - for (jj = 0; jj < jnum; jj++) { - j = jlist[jj]; - j &= NEIGHMASK; - jtype = map[type[j]]; - delx = xtmp - x[j][0]; - dely = ytmp - x[j][1]; - delz = ztmp - x[j][2]; - rsq = delx*delx + dely*dely + delz*delz; - - - int iparam_ij = elem2param[itype][jtype]; - double rcutsq = params[iparam_ij].rcutsq; - - if (rsq != 0 && rsq < rcutsq && atom->molecule[i] == atom->molecule[j]) { - neighptr[n++] = j; - } - } - - DRIP_firstneigh[i] = neighptr; - DRIP_numneigh[i] = n; - if (n > 3) error->one(FLERR,"There are too many neighbors for some atoms, please check your configuration"); - ipage->vgot(n); - if (ipage->status()) - error->one(FLERR,"Neighbor list overflow, boost neigh_modify one"); - } } /* ---------------------------------------------------------------------- @@ -1669,28 +379,29 @@ int PairDRIP::pack_forward_comm(int n, int *list, double *buf, int i,j,m,l,ip,id; m = 0; - for (i = 0; i < n; i++) { - j = list[i]; - buf[m++] = normal[j][0]; - buf[m++] = normal[j][1]; - buf[m++] = normal[j][2]; - buf[m++] = dnormdri[0][0][j]; - buf[m++] = dnormdri[0][1][j]; - buf[m++] = dnormdri[0][2][j]; - buf[m++] = dnormdri[1][0][j]; - buf[m++] = dnormdri[1][1][j]; - buf[m++] = dnormdri[1][2][j]; - buf[m++] = dnormdri[2][0][j]; - buf[m++] = dnormdri[2][1][j]; - buf[m++] = dnormdri[2][2][j]; - for (l = 0; l < 3; l++){ - for (id = 0; id < 3; id++){ - for (ip = 0; ip < 3; ip++){ - buf[m++] = dnormal[id][ip][l][j]; - } - } - } - } +// for (i = 0; i < n; i++) { +// j = list[i]; +// buf[m++] = normal[j][0]; +// buf[m++] = normal[j][1]; +// buf[m++] = normal[j][2]; +// buf[m++] = dnormdri[0][0][j]; +// buf[m++] = dnormdri[0][1][j]; +// buf[m++] = dnormdri[0][2][j]; +// buf[m++] = dnormdri[1][0][j]; +// buf[m++] = dnormdri[1][1][j]; +// buf[m++] = dnormdri[1][2][j]; +// buf[m++] = dnormdri[2][0][j]; +// buf[m++] = dnormdri[2][1][j]; +// buf[m++] = dnormdri[2][2][j]; +// for (l = 0; l < 3; l++){ +// for (id = 0; id < 3; id++){ +// for (ip = 0; ip < 3; ip++){ +// buf[m++] = dnormal[id][ip][l][j]; +// } +// } +// } +// } + return m; } @@ -1700,29 +411,759 @@ void PairDRIP::unpack_forward_comm(int n, int first, double *buf) { int i,m,last,l,ip,id; - m = 0; - last = first + n; - for (i = first; i < last; i++) { - normal[i][0] = buf[m++]; - normal[i][1] = buf[m++]; - normal[i][2] = buf[m++]; - dnormdri[0][0][i] = buf[m++]; - dnormdri[0][1][i] = buf[m++]; - dnormdri[0][2][i] = buf[m++]; - dnormdri[1][0][i] = buf[m++]; - dnormdri[1][1][i] = buf[m++]; - dnormdri[1][2][i] = buf[m++]; - dnormdri[2][0][i] = buf[m++]; - dnormdri[2][1][i] = buf[m++]; - dnormdri[2][2][i] = buf[m++]; - for (l = 0; l < 3; l++){ - for (id = 0; id < 3; id++){ - for (ip = 0; ip < 3; ip++){ - dnormal[id][ip][l][i] = buf[m++]; - } +// m = 0; +// last = first + n; +// for (i = first; i < last; i++) { +// normal[i][0] = buf[m++]; +// normal[i][1] = buf[m++]; +// normal[i][2] = buf[m++]; +// dnormdri[0][0][i] = buf[m++]; +// dnormdri[0][1][i] = buf[m++]; +// dnormdri[0][2][i] = buf[m++]; +// dnormdri[1][0][i] = buf[m++]; +// dnormdri[1][1][i] = buf[m++]; +// dnormdri[1][2][i] = buf[m++]; +// dnormdri[2][0][i] = buf[m++]; +// dnormdri[2][1][i] = buf[m++]; +// dnormdri[2][2][i] = buf[m++]; +// for (l = 0; l < 3; l++){ +// for (id = 0; id < 3; id++){ +// for (ip = 0; ip < 3; ip++){ +// dnormal[id][ip][l][i] = buf[m++]; +// } +// } +// } +// } +// +} + + +/* ---------------------------------------------------------------------- */ + +void PairDRIP::compute(int eflag, int vflag) +{ + + int i,j,ii,jj,inum,jnum,itype,jtype,k,l,kk,ll; + tagint itag,jtag; + double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fpair,fpair1,fpair2, r, rsq; + int *ilist,*jlist,*numneigh,**firstneigh; + + int nbi1, nbi2, nbi3; + double ni[DIM]; + double dni_dri[DIM][DIM], dni_drnb1[DIM][DIM]; + double dni_drnb2[DIM][DIM], dni_drnb3[DIM][DIM]; + + + evdwl = 0.0; + ev_init(eflag,vflag); + + double **x = atom->x; + double **f = atom->f; + int *type = atom->type; + tagint *tag = atom->tag; + int nlocal = atom->nlocal; + int newton_pair = force->newton_pair; + + inum = list->inum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + + // find nearest 3 neighbors of each atom + find_nearest3neigh(); + + //TODO what does this comm do? + // communicate the normal vector and its derivatives + comm->forward_comm_pair(this); + + // loop over neighbors of my atoms + for (ii = 0; ii < inum; ii++) { + i = ilist[ii]; + itag = tag[i]; + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itype = map[type[i]]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + + // normal and its derivatives w.r.t. atom i and its 3 nearest neighs + calc_normal(i, nbi1, nbi2, nbi3, ni, dni_dri,dni_drnb1, dni_drnb2, dni_drnb3); + + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + jtype = map[type[j]]; + jtag = tag[j]; + +// // two-body interactions from full neighbor list, skip half of them +// if (itag > jtag) { +// if ((itag+jtag) % 2 == 0) continue; +// } else if (itag < jtag) { +// if ((itag+jtag) % 2 == 1) continue; +// } else { +// if (x[j][2] < ztmp) continue; +// if (x[j][2] == ztmp && x[j][1] < ytmp) continue; +// if (x[j][2] == ztmp && x[j][1] == ytmp && x[j][0] < xtmp) continue; +// } + + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + int iparam_ij = elem2param[itype][jtype]; + Param& p = params[iparam_ij]; + double rcutsq = p.rcutsq; + + + // only include the interation between different layers + if (rsq < rcutsq && atom->molecule[i] != atom->molecule[j]) { + + double rvec[DIM] = {delx, dely, delz}; + double phi_attr = calc_attractive(i,j,p, rsq, rvec); + double phi_repul = calc_repulsive(evflag, i, j, p, rsq, rvec, nbi1, nbi2, + nbi3, ni, dni_dri, dni_drnb1, dni_drnb2, dni_drnb3); + + + if (eflag) evdwl = HALF * (phi_repul + phi_attr); + + //if (evflag) ev_tally(i,j,nlocal,newton_pair, evdwl,0.0,fpair,delx,dely,delz); + + if (evflag) ev_tally(i,j,nlocal,newton_pair, evdwl,0.0,0,0,0,0); + + + + } + } //loop over jj + } // loop over ii + +} + + +/* ---------------------------------------------------------------------- */ + +double PairDRIP::calc_attractive(int const i, int const j, Param& p, + double const rsq, double const * rvec) +{ + + double **f = atom->f; + + double const z0 = p.z0; + double const A = p.A; + double const cutoff = p.rcut; + double const r = sqrt(rsq); + + double roz0_sq = rsq / (z0 * z0); + double dtp; + double tp = tap(r, cutoff, dtp); + double r6 = A / (roz0_sq * roz0_sq * roz0_sq); + double dr6 = -6 * r6 / r; + double phi = -r6 * tp; + + double fpair = HALF * (r6 * dtp + dr6 * tp); + f[i][0] += rvec[0] * fpair / r; + f[i][1] += rvec[1] * fpair / r; + f[i][2] += rvec[2] * fpair / r; + f[j][0] -= rvec[0] * fpair / r; + f[j][1] -= rvec[1] * fpair / r; + f[j][2] -= rvec[2] * fpair / r; + + return phi; +} + + +/* ---------------------------------------------------------------------- */ +double PairDRIP::calc_repulsive(int const evflag, int const i, int const j, + Param& p, double const rsq, double const * rvec, + int const nbi1, int const nbi2, int const nbi3, double const * ni, + V3 const * dni_dri, V3 const * dni_drnb1, V3 const * dni_drnb2, + V3 const * dni_drnb3) +{ + double **f = atom->f; + double r = sqrt(rsq); + + // params + double C0 = p.C0; + double C2 = p.C2; + double C4 = p.C4; + double C = p.C; + double delta = p.delta; + double lambda = p.lambda; + double z0 = p.z0; + double cutoff = p.rcut; + + // nearest 3 neighbors of atom j + int nbj1 = nearest3neigh[j][0]; + int nbj2 = nearest3neigh[j][1]; + int nbj3 = nearest3neigh[j][2]; + + V3 dgij_dri; + V3 dgij_drj; + V3 dgij_drk1; + V3 dgij_drk2; + V3 dgij_drk3; + V3 dgij_drl1; + V3 dgij_drl2; + V3 dgij_drl3; + + V3 drhosqij_dri; + V3 drhosqij_drj; + V3 drhosqij_drnb1; + V3 drhosqij_drnb2; + V3 drhosqij_drnb3; + + + // derivative of rhosq w.r.t coordinates of atoms i, j, and the nearests 3 + // neighs of i + get_drhosqij(rvec, ni, dni_dri, dni_drnb1, dni_drnb2, dni_drnb3, drhosqij_dri, + drhosqij_drj, drhosqij_drnb1, drhosqij_drnb2, drhosqij_drnb3); + + // transverse decay function f(rho) and its derivative w.r.t. rhosq + double rhosqij; + double dtdij; + double tdij = td(C0, C2, C4, delta, rvec, r, ni, rhosqij, dtdij); + + // dihedral angle function and its derivateives + double dgij_drhosq; + double gij = dihedral(i, j, p, rhosqij, dgij_drhosq, dgij_dri, dgij_drj, + dgij_drk1, dgij_drk2, dgij_drk3, dgij_drl1, dgij_drl2, dgij_drl3); + + double V2 = C + tdij + gij; + + // tap part + double dtp; + double tp = tap(r, cutoff, dtp); + + /* exponential part */ + double V1 = exp(-lambda * (r - z0)); + double dV1 = -V1 * lambda; + + double phi = tp * V1 * V2; + + for (int k = 0; k < DIM; k++) { + + // forces due to derivatives of tap and V1 + double tmp = -HALF * (dtp * V1 + tp * dV1) * V2 * rvec[k] / r; + f[i][k] += tmp; + f[j][k] -= tmp; + + // the following incldue the transverse decay part tdij and the dihedral part gij + // derivative of V2 contribute to atoms i, j + f[i][k] += HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_dri[k] + dgij_dri[k]); + f[j][k] += HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drj[k] + dgij_drj[k]); + + // derivative of V2 contribute to neighs of atom i + f[nbi1][k] += HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb1[k] + dgij_drk1[k]); + f[nbi2][k] += HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb2[k] + dgij_drk2[k]); + f[nbi3][k] += HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb3[k] + dgij_drk3[k]); + + // derivative of V2 contribute to neighs of atom j + f[nbj1][k] += HALF * tp * V1 * dgij_drl1[k]; + f[nbj2][k] += HALF * tp * V1 * dgij_drl2[k]; + f[nbj3][k] += HALF * tp * V1 * dgij_drl3[k]; + } + + return phi; +} + + + +/* ---------------------------------------------------------------------- */ + +void PairDRIP::find_nearest3neigh() +{ + + int i,j,ii,jj,n,allnum,jnum,itype,jtype; + double xtmp,ytmp,ztmp,delx,dely,delz,rsq; + int *ilist,*jlist,*numneigh,**firstneigh; + int *neighptr; + + double **x = atom->x; + int *type = atom->type; + + + allnum = list->inum + list->gnum; + ilist = list->ilist; + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + memory->destroy(nearest3neigh); + memory->create(nearest3neigh, allnum, 3, "DRIP:nearest3neigh"); + + // store all DRIP neighs of owned and ghost atoms + // scan full neighbor list of I + + ipage->reset(); + + for (ii = 0; ii < allnum; ii++) { + i = ilist[ii]; + + n = 0; + neighptr = ipage->vget(); + + xtmp = x[i][0]; + ytmp = x[i][1]; + ztmp = x[i][2]; + itype = map[type[i]]; + jlist = firstneigh[i]; + jnum = numneigh[i]; + + + // init nb1 to be the 1st nearest neigh, nb3 the 3rd nearest + int nb1 = -1; + int nb2 = -1; + int nb3 = -1; + double nb1_rsq = 1.1e10; + double nb2_rsq = 2.0e10; + double nb3_rsq = 3.0e10; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + jtype = map[type[j]]; + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + + int iparam_ij = elem2param[itype][jtype]; + double rcutsq = params[iparam_ij].rcutsq; + + if (rsq < rcutsq && atom->molecule[i] == atom->molecule[j]) { + + // find the 3 nearest neigh + if (rsq < nb1_rsq) { + nb3 = nb2; + nb2 = nb1; + nb1 = j; + nb3_rsq = nb2_rsq; + nb2_rsq = nb1_rsq; + nb1_rsq = rsq; + } + else if (rsq < nb2_rsq) { + nb3 = nb2; + nb2 = j; + nb3_rsq = nb2_rsq; + nb2_rsq = rsq; + } + else if (rsq < nb3_rsq) { + nb3 = j; + nb3_rsq = rsq; + } + + } + } // loop over jj + + // store neighbors to be used later to compute normal + if (nb1_rsq >= 1.0e10 || nb2_rsq >= 1.0e10 || nb3_rsq >= 1.0e10) { + error->one(FLERR,"No enough neighbors to construct normal."); + } else{ + nearest3neigh[i][0] = nb1; + nearest3neigh[i][1] = nb2; + nearest3neigh[i][2] = nb3; } + + } // loop over ii +} + + +/* ---------------------------------------------------------------------- */ + +void PairDRIP::calc_normal(int const i, int& k1, int& k2, int& k3, + double * const normal, V3 *const dn_dri, V3 *const dn_drk1, + V3 *const dn_drk2, V3 *const dn_drk3) +{ + + k1 = nearest3neigh[i][0]; + k2 = nearest3neigh[i][1]; + k3 = nearest3neigh[i][2]; + + // normal does not depend on i, setting to zero + for (int j = 0; j < DIM; j++) { + for (int k = 0; k < DIM; k++) { + dn_dri[j][k] = 0.0; + } + } + + // get normal and derives of normal w.r.t to its 3 nearest neighbors + double **x = atom->x; + deriv_cross(x[k1], x[k2], x[k3], normal, dn_drk1, dn_drk2, dn_drk3); +} + + +/* ---------------------------------------------------------------------- */ +void PairDRIP::get_drhosqij( double const* rij, double const* ni, + V3 const* dni_dri, V3 const* dni_drn1, + V3 const* dni_drn2, V3 const* dni_drn3, + double* const drhosq_dri, double* const drhosq_drj, + double* const drhosq_drn1, double* const drhosq_drn2, + double* const drhosq_drn3) +{ + int k; + double ni_dot_rij = 0; + double dni_dri_dot_rij[DIM]; + double dni_drn1_dot_rij[DIM]; + double dni_drn2_dot_rij[DIM]; + double dni_drn3_dot_rij[DIM]; + + ni_dot_rij = dot(ni, rij); + mat_dot_vec(dni_dri, rij, dni_dri_dot_rij); + mat_dot_vec(dni_drn1, rij, dni_drn1_dot_rij); + mat_dot_vec(dni_drn2, rij, dni_drn2_dot_rij); + mat_dot_vec(dni_drn3, rij, dni_drn3_dot_rij); + + for (k = 0; k < DIM; k++) { + drhosq_dri[k] = -2 * rij[k] - 2 * ni_dot_rij * (-ni[k] + dni_dri_dot_rij[k]); + drhosq_drj[k] = 2 * rij[k] - 2 * ni_dot_rij * ni[k]; + drhosq_drn1[k] = -2 * ni_dot_rij * dni_drn1_dot_rij[k]; + drhosq_drn2[k] = -2 * ni_dot_rij * dni_drn2_dot_rij[k]; + drhosq_drn3[k] = -2 * ni_dot_rij * dni_drn3_dot_rij[k]; } } + + /* ---------------------------------------------------------------------- */ + + +// derivartive of transverse decay function f(rho) w.r.t rho +double PairDRIP::td(double C0, double C2, double C4, double delta, + double const* const rvec, double r, + const double* const n, + double& rho_sq, double& dtd) +{ + double n_dot_r = dot(n, rvec); + + rho_sq = r * r - n_dot_r * n_dot_r; + + if (rho_sq < 0) { // in case n is [0, 0, 1] and rho_sq is negative due to numerical error + rho_sq = 0; + } + + double del_sq = delta * delta; + double rod_sq = rho_sq / del_sq; + double td = exp(-rod_sq) * (C0 + rod_sq * (C2 + rod_sq * C4)); + dtd = -td / del_sq + exp(-rod_sq) * (C2 + 2 * C4 * rod_sq) / del_sq; + + return td; +} + + +/* ---------------------------------------------------------------------- */ +// derivartive of dihedral angle func gij w.r.t rho, and atom positions +double PairDRIP::dihedral( + const int i, const int j, Param& p, double const rhosq, double& d_drhosq, + double* const d_dri, double* const d_drj, + double* const d_drk1, double* const d_drk2, double* const d_drk3, + double* const d_drl1, double* const d_drl2, double* const d_drl3) +{ + double **x = atom->x; + + // get parameter + double B = p.B; + double eta = p.eta; + double cut_rhosq = p.rhocutsq; + + // local vars + double cos_kl[3][3]; // cos_omega_k1ijl1, cos_omega_k1ijl2 ... + double d_dcos_kl[3][3]; // deriv of dihedral w.r.t to cos_omega_kijl + double dcos_kl[3][3][4][DIM]; // 4 indicates k, i, j, l, e.g. dcoskl[0][1][0] means + // dcos_omega_k1ijl2 / drk + + + // if larger than cutoff of rho, return 0 + if (rhosq >= cut_rhosq) { + d_drhosq = 0; + for (int dim = 0; dim < DIM; dim++) { + d_dri[dim] = 0; + d_drj[dim] = 0; + d_drk1[dim] = 0; + d_drk2[dim] = 0; + d_drk3[dim] = 0; + d_drl1[dim] = 0; + d_drl2[dim] = 0; + d_drl3[dim] = 0; + } + double dihe = 0.0; + return dihe; + } + // 3 neighs of atoms i and j + int k[3]; + int l[3]; + for (int m = 0; m < 3; m++) { + k[m] = nearest3neigh[i][m]; + l[m] = nearest3neigh[j][m]; + } + + // cos_omega_kijl and the derivatives w.r.t coordinates + for (int m = 0; m < 3; m++) { + for (int n = 0; n < 3; n++) { + cos_kl[m][n] = deriv_cos_omega( x[k[m]], x[i], x[j], x[l[n]], + dcos_kl[m][n][0], dcos_kl[m][n][1], dcos_kl[m][n][2], dcos_kl[m][n][3]); + } + } + + double epart1 = exp(-eta * cos_kl[0][0] * cos_kl[0][1] * cos_kl[0][2]); + double epart2 = exp(-eta * cos_kl[1][0] * cos_kl[1][1] * cos_kl[1][2]); + double epart3 = exp(-eta * cos_kl[2][0] * cos_kl[2][1] * cos_kl[2][2]); + double D2 = epart1 + epart2 + epart3; + + // cutoff function + double d_drhosq_tap; + double D0 = B * tap_rho(rhosq, cut_rhosq, d_drhosq_tap); + + // dihedral energy + double dihe = D0 * D2; + + // deriv of dihedral w.r.t rhosq + d_drhosq = B * d_drhosq_tap * D2; + + // deriv of dihedral w.r.t cos_omega_kijl + d_dcos_kl[0][0] = -D0 * epart1 * eta * cos_kl[0][1] * cos_kl[0][2]; + d_dcos_kl[0][1] = -D0 * epart1 * eta * cos_kl[0][0] * cos_kl[0][2]; + d_dcos_kl[0][2] = -D0 * epart1 * eta * cos_kl[0][0] * cos_kl[0][1]; + d_dcos_kl[1][0] = -D0 * epart2 * eta * cos_kl[1][1] * cos_kl[1][2]; + d_dcos_kl[1][1] = -D0 * epart2 * eta * cos_kl[1][0] * cos_kl[1][2]; + d_dcos_kl[1][2] = -D0 * epart2 * eta * cos_kl[1][0] * cos_kl[1][1]; + d_dcos_kl[2][0] = -D0 * epart3 * eta * cos_kl[2][1] * cos_kl[2][2]; + d_dcos_kl[2][1] = -D0 * epart3 * eta * cos_kl[2][0] * cos_kl[2][2]; + d_dcos_kl[2][2] = -D0 * epart3 * eta * cos_kl[2][0] * cos_kl[2][1]; + + // initialization to be zero and later add values + for (int dim = 0; dim < DIM; dim++) { + d_drk1[dim] = 0.; + d_drk2[dim] = 0.; + d_drk3[dim] = 0.; + d_dri[dim] = 0.; + d_drj[dim] = 0.; + d_drl1[dim] = 0.; + d_drl2[dim] = 0.; + d_drl3[dim] = 0.; + } + + for (int m = 0; m < 3; m++) { + for (int dim = 0; dim < 3; dim++) { + d_drk1[dim] += d_dcos_kl[0][m] * dcos_kl[0][m][0][dim]; + d_drk2[dim] += d_dcos_kl[1][m] * dcos_kl[1][m][0][dim]; + d_drk3[dim] += d_dcos_kl[2][m] * dcos_kl[2][m][0][dim]; + d_drl1[dim] += d_dcos_kl[m][0] * dcos_kl[m][0][3][dim]; + d_drl2[dim] += d_dcos_kl[m][1] * dcos_kl[m][1][3][dim]; + d_drl3[dim] += d_dcos_kl[m][2] * dcos_kl[m][2][3][dim]; + } + for (int n = 0; n < 3; n++) { + for (int dim = 0; dim < 3; dim++) { + d_dri[dim] += d_dcos_kl[m][n] * dcos_kl[m][n][1][dim]; + d_drj[dim] += d_dcos_kl[m][n] * dcos_kl[m][n][2][dim]; + } + } + } + + return dihe; +} + + +/* ---------------------------------------------------------------------- */ +// compute cos(omega_kijl) and the derivateives +double PairDRIP::deriv_cos_omega( double const* rk, double const* ri, + double const* rj, double const* rl, double* const dcos_drk, + double* const dcos_dri, double* const dcos_drj, double* const dcos_drl) +{ + double ejik[DIM]; + double eijl[DIM]; + double tmp1[DIM]; + double tmp2[DIM]; + double dejik_dri[DIM][DIM]; + double dejik_drj[DIM][DIM]; + double dejik_drk[DIM][DIM]; + double deijl_dri[DIM][DIM]; + double deijl_drj[DIM][DIM]; + double deijl_drl[DIM][DIM]; + + + // ejik and derivatives (Note the dejik_dri ... returned are actually the transpose) + deriv_cross(ri, rj, rk, ejik, dejik_dri, dejik_drj, dejik_drk); + + // flip sign because deriv_cross computes rij cross rik, here we need rji cross rik + for (int m = 0; m < DIM; m++) { + ejik[m] = -ejik[m]; + for (int n = 0; n < DIM; n++) { + dejik_dri[m][n] = -dejik_dri[m][n]; + dejik_drj[m][n] = -dejik_drj[m][n]; + dejik_drk[m][n] = -dejik_drk[m][n]; + } + } + + // eijl and derivatives + deriv_cross(rj, ri, rl, eijl, deijl_drj, deijl_dri, deijl_drl); + // flip sign + for (int m = 0; m < DIM; m++) { + eijl[m] = -eijl[m]; + for (int n = 0; n < DIM; n++) { + deijl_drj[m][n] = -deijl_drj[m][n]; + deijl_dri[m][n] = -deijl_dri[m][n]; + deijl_drl[m][n] = -deijl_drl[m][n]; + } + } + + // dcos_drk + mat_dot_vec(dejik_drk, eijl, dcos_drk); + // dcos_dri + mat_dot_vec(dejik_dri, eijl, tmp1); + mat_dot_vec(deijl_dri, ejik, tmp2); + for (int m = 0; m < DIM; m++) { + dcos_dri[m] = tmp1[m] + tmp2[m]; + } + // dcos_drj + mat_dot_vec(dejik_drj, eijl, tmp1); + mat_dot_vec(deijl_drj, ejik, tmp2); + for (int m = 0; m < DIM; m++) { + dcos_drj[m] = tmp1[m] + tmp2[m]; + } + // dcos drl + mat_dot_vec(deijl_drl, ejik, dcos_drl); + + // cos_oemga_kijl + double cos_omega = dot(ejik, eijl); + + return cos_omega; +} + + + + +/* ---------------------------------------------------------------------- */ +// tap cutoff function +double PairDRIP::tap(double r, double cutoff, double& dtap) +{ + double t; + double r_min = 0; + + if (r <= r_min) { + t = 1; + dtap = 0; + } + else { + double roc = (r - r_min) / (cutoff - r_min); + double roc_sq = roc * roc; + t = roc_sq * roc_sq * (-35.0 + 84.0 * roc + roc_sq * (-70.0 + 20.0 * roc)) + 1; + dtap = roc_sq * roc / (cutoff - r_min) + * (-140.0 + 420.0 * roc + roc_sq * (-420.0 + 140.0 * roc)); + } + + return t; +} + + +/* ---------------------------------------------------------------------- */ +// tap rho +double PairDRIP::tap_rho(double rhosq, double cut_rhosq, double& drhosq) +{ + double roc_sq; + double roc; + double t; + + roc_sq = rhosq / cut_rhosq; + roc = sqrt(roc_sq); + t = roc_sq * roc_sq * (-35.0 + 84.0 * roc + roc_sq * (-70.0 + 20.0 * roc)) + 1; + + // Note this dtap/drho_sq not dtap/drho + drhosq = roc_sq / cut_rhosq * (-70.0 + 210.0 * roc + roc_sq * (-210.0 + 70.0 * roc)); + + return t; +} + + +/* ---------------------------------------------------------------------- */ +// Compute the normalized cross product of two vector rkl, rkm, and the +// derivates w.r.t rk, rl, rm. +// NOTE, the dcross_drk, dcross_drl, and dcross_drm is actually the transpose +// of the actual one. + +void PairDRIP::deriv_cross( double const* rk, double const* rl, double const* rm, + double* const cross, V3 *const dcross_drk, + V3 *const dcross_drl, V3 *const dcross_drm) +{ + double x[DIM]; + double y[DIM]; + double p[DIM]; + double q; + double q_cubic; + double d_invq_d_x0; + double d_invq_d_x1; + double d_invq_d_x2; + double d_invq_d_y0; + double d_invq_d_y1; + double d_invq_d_y2; + + int i, j; + + + // get x = rkl and y = rkm + for (i = 0; i < DIM; i++) { + x[i] = rl[i] - rk[i]; + y[i] = rm[i] - rk[i]; + } + + // cross product + p[0] = x[1] * y[2] - x[2] * y[1]; + p[1] = x[2] * y[0] - x[0] * y[2]; + p[2] = x[0] * y[1] - x[1] * y[0]; + + q = sqrt(p[0] * p[0] + p[1] * p[1] + p[2] * p[2]); + + // normalized cross + cross[0] = p[0] / q; + cross[1] = p[1] / q; + cross[2] = p[2] / q; + + // compute derivatives + // derivative of inverse q (i.e. 1/q) w.r.t x and y + q_cubic = q * q * q; + d_invq_d_x0 = (+p[1] * y[2] - p[2] * y[1]) / q_cubic; + d_invq_d_x1 = (-p[0] * y[2] + p[2] * y[0]) / q_cubic; + d_invq_d_x2 = (p[0] * y[1] - p[1] * y[0]) / q_cubic; + d_invq_d_y0 = (-p[1] * x[2] + p[2] * x[1]) / q_cubic; + d_invq_d_y1 = (p[0] * x[2] - p[2] * x[0]) / q_cubic; + d_invq_d_y2 = (-p[0] * x[1] + p[1] * x[0]) / q_cubic; + + // dcross/drl transposed + dcross_drl[0][0] = p[0] * d_invq_d_x0; + dcross_drl[0][1] = -y[2] / q + p[1] * d_invq_d_x0; + dcross_drl[0][2] = y[1] / q + p[2] * d_invq_d_x0; + + dcross_drl[1][0] = y[2] / q + p[0] * d_invq_d_x1; + dcross_drl[1][1] = p[1] * d_invq_d_x1; + dcross_drl[1][2] = -y[0] / q + p[2] * d_invq_d_x1; + + dcross_drl[2][0] = -y[1] / q + p[0] * d_invq_d_x2; + dcross_drl[2][1] = y[0] / q + p[1] * d_invq_d_x2; + dcross_drl[2][2] = p[2] * d_invq_d_x2; + + // dcross/drm transposed + dcross_drm[0][0] = p[0] * d_invq_d_y0; + dcross_drm[0][1] = x[2] / q + p[1] * d_invq_d_y0; + dcross_drm[0][2] = -x[1] / q + p[2] * d_invq_d_y0; + + dcross_drm[1][0] = -x[2] / q + p[0] * d_invq_d_y1; + dcross_drm[1][1] = p[1] * d_invq_d_y1; + dcross_drm[1][2] = x[0] / q + p[2] * d_invq_d_y1; + + dcross_drm[2][0] = x[1] / q + p[0] * d_invq_d_y2; + dcross_drm[2][1] = -x[0] / q + p[1] * d_invq_d_y2; + dcross_drm[2][2] = p[2] * d_invq_d_y2; + + // dcross/drk transposed + for (i = 0; i < DIM; i++) { + for (j = 0; j < DIM; j++) { + dcross_drk[i][j] = -(dcross_drl[i][j] + dcross_drm[i][j]); + } + } + +} + + + diff --git a/src/USER-MISC/pair_drip.h b/src/USER-MISC/pair_drip.h index 6c014dd9f1..e7d892ab82 100644 --- a/src/USER-MISC/pair_drip.h +++ b/src/USER-MISC/pair_drip.h @@ -26,6 +26,10 @@ PairStyle(drip,PairDRIP) namespace LAMMPS_NS { +#define DIM 3 +typedef double V3[3]; + + class PairDRIP : public Pair { public: PairDRIP(class LAMMPS *); @@ -36,7 +40,6 @@ class PairDRIP : public Pair { void coeff(int, char **); double init_one(int, int); void init_style(); - void calc_normal(); int pack_forward_comm(int, int *, double *, int, int *); void unpack_forward_comm(int, int, double *); @@ -47,9 +50,6 @@ class PairDRIP : public Pair { int pgsize; // size of neighbor page int oneatom; // max # of neighbors for one atom MyPage *ipage; // neighbor list pages - int *DRIP_numneigh; // # of pair neighbors for each atom - int **DRIP_firstneigh; // ptr to 1st neighbor of each atom - int tap_flag; // flag to turn on/off taper function struct Param { @@ -58,70 +58,85 @@ class PairDRIP : public Pair { double rhocutsq, rcutsq; double delta2inv,z06; }; - Param *params; // parameter set for I-J interactions - char **elements; // names of unique elements - int **elem2param; // mapping from element pairs to parameters - int *map; // mapping from atom types to elements - int nelements; // # of unique elements - int nparams; // # of stored parameter sets - int maxparam; // max # of parameter sets - int nmax; // max # of atoms - - double cut_normal; - double **normal; - double ***dnormdri; - double ****dnormal; + Param *params; // parameter set for I-J interactions + char **elements; // names of unique elements + int **elem2param; // mapping from element pairs to parameters + int *map; // mapping from atom types to elements + int nelements; // # of unique elements + int nparams; // # of stored parameter sets + int maxparam; // max # of parameter sets + int nmax; // max # of atoms + int ** nearest3neigh; // nearest 3 neighbors of atoms void read_file( char * ); void allocate(); - void DRIP_neigh(); + + // DRIP specific functions + double calc_attractive(int const i, int const j, Param& p, + double const rsq, double const * rvec); + + double calc_repulsive(int const evflag, int const i, int const j, + Param& p, double const rsq, double const * rvec, + int const nbi1, int const nbi2, int const nbi3, double const * ni, + V3 const * dni_dri, V3 const * dni_drnb1, V3 const * dni_drnb2, + V3 const * dni_drnb3); - // PARAMS - int ** nearest3neigh; // nearest 3 neighbors of atoms + void find_nearest3neigh(); + + + void calc_normal(int const i, int& k1, int& k2, int& k3, + double * const normal, V3 *const dn_dri, V3 *const dn_drk1, + V3 *const dn_drk2, V3 *const dn_drk3); +void get_drhosqij( double const* rij, double const* ni, + V3 const* dni_dri, V3 const* dni_drn1, + V3 const* dni_drn2, V3 const* dni_drn3, + double* const drhosq_dri, double* const drhosq_drj, + double* const drhosq_drn1, double* const drhosq_drn2, + double* const drhosq_drn3); - /* ----Calculate the long-range cutoff term */ - inline double calc_Tap(double r_ij, double Rcut) { - double Tap,r; - double Tap_coeff[8] = {1.0,0.0,0.0,0.0,-35.0,84.0,-70.0,20.0}; - r = r_ij/Rcut; - if(r >= 1.0) {Tap = 0.0;} - else{ - Tap = Tap_coeff[7] * r + Tap_coeff[6]; - Tap = Tap * r + Tap_coeff[5]; - Tap = Tap * r + Tap_coeff[4]; - Tap = Tap * r + Tap_coeff[3]; - Tap = Tap * r + Tap_coeff[2]; - Tap = Tap * r + Tap_coeff[1]; - Tap = Tap * r + Tap_coeff[0]; - } + double td(double C0, double C2, double C4, double delta, + double const* const rvec, double r, + const double* const n, + double& rho_sq, double& dtd); - return(Tap); + double dihedral( + const int i, const int j, Param& p, double const rhosq, double& d_drhosq, + double* const d_dri, double* const d_drj, + double* const d_drk1, double* const d_drk2, double* const d_drk3, + double* const d_drl1, double* const d_drl2, double* const d_drl3); + + double deriv_cos_omega( double const* rk, double const* ri, + double const* rj, double const* rl, double* const dcos_drk, + double* const dcos_dri, double* const dcos_drj, double* const dcos_drl); + + double tap(double r, double cutoff, double& dtap); + + double tap_rho(double rhosq, double cut_rhosq, double& drhosq); + +void deriv_cross( double const* rk, double const* rl, double const* rm, + double* const cross, V3 *const dcross_drk, + V3 *const dcross_drl, V3 *const dcross_drm); + + + + inline double dot(double const* x, double const* y) { + return x[0] * y[0] + x[1] * y[1] + x[2] * y[2]; } - /* ----Calculate the derivatives of long-range cutoff term */ - inline double calc_dTap(double r_ij, double Rcut) { - double dTap,r; - double Tap_coeff[8] = {1.0,0.0,0.0,0.0,-35.0,84.0,-70.0,20.0}; - r = r_ij/Rcut; - if(r >= 1.0) {dTap = 0.0;} - else { - dTap = 7.0*Tap_coeff[7] * r + 6.0*Tap_coeff[6]; - dTap = dTap * r + 5.0*Tap_coeff[5]; - dTap = dTap * r + 4.0*Tap_coeff[4]; - dTap = dTap * r + 3.0*Tap_coeff[3]; - dTap = dTap * r + 2.0*Tap_coeff[2]; - dTap = dTap * r + Tap_coeff[1]; - dTap = dTap/Rcut; + inline void mat_dot_vec(V3 const* X, double const* y, double* const z) + { + for (int k = 0; k < 3; k++) { + z[k] = X[k][0] * y[0] + X[k][1] * y[1] + X[k][2] * y[2]; } - - return(dTap); } + + }; } From 82a87322ed8276b80b2b4b4ec39015adabc590a3 Mon Sep 17 00:00:00 2001 From: Mingjian Wen Date: Tue, 16 Apr 2019 16:54:17 -0500 Subject: [PATCH 076/311] Get the same forces as KIM implementation --- src/USER-MISC/pair_drip.cpp | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/src/USER-MISC/pair_drip.cpp b/src/USER-MISC/pair_drip.cpp index dbc6b25fbd..3b84f5e9cd 100644 --- a/src/USER-MISC/pair_drip.cpp +++ b/src/USER-MISC/pair_drip.cpp @@ -510,9 +510,9 @@ void PairDRIP::compute(int eflag, int vflag) // if (x[j][2] == ztmp && x[j][1] == ytmp && x[j][0] < xtmp) continue; // } - delx = xtmp - x[j][0]; - dely = ytmp - x[j][1]; - delz = ztmp - x[j][2]; + delx = x[j][0] - xtmp; + dely = x[j][1] - ytmp; + delz = x[j][2] - ztmp; rsq = delx*delx + dely*dely + delz*delz; int iparam_ij = elem2param[itype][jtype]; Param& p = params[iparam_ij]; @@ -527,7 +527,6 @@ void PairDRIP::compute(int eflag, int vflag) double phi_repul = calc_repulsive(evflag, i, j, p, rsq, rvec, nbi1, nbi2, nbi3, ni, dni_dri, dni_drnb1, dni_drnb2, dni_drnb3); - if (eflag) evdwl = HALF * (phi_repul + phi_attr); //if (evflag) ev_tally(i,j,nlocal,newton_pair, evdwl,0.0,fpair,delx,dely,delz); @@ -535,8 +534,6 @@ void PairDRIP::compute(int eflag, int vflag) if (evflag) ev_tally(i,j,nlocal,newton_pair, evdwl,0.0,0,0,0,0); - - } } //loop over jj } // loop over ii @@ -564,7 +561,7 @@ double PairDRIP::calc_attractive(int const i, int const j, Param& p, double dr6 = -6 * r6 / r; double phi = -r6 * tp; - double fpair = HALF * (r6 * dtp + dr6 * tp); + double fpair = -HALF * (r6 * dtp + dr6 * tp); f[i][0] += rvec[0] * fpair / r; f[i][1] += rvec[1] * fpair / r; f[i][2] += rvec[2] * fpair / r; @@ -647,24 +644,24 @@ double PairDRIP::calc_repulsive(int const evflag, int const i, int const j, for (int k = 0; k < DIM; k++) { // forces due to derivatives of tap and V1 - double tmp = -HALF * (dtp * V1 + tp * dV1) * V2 * rvec[k] / r; + double tmp = HALF * (dtp * V1 + tp * dV1) * V2 * rvec[k] / r; f[i][k] += tmp; f[j][k] -= tmp; // the following incldue the transverse decay part tdij and the dihedral part gij // derivative of V2 contribute to atoms i, j - f[i][k] += HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_dri[k] + dgij_dri[k]); - f[j][k] += HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drj[k] + dgij_drj[k]); + f[i][k] -= HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_dri[k] + dgij_dri[k]); + f[j][k] -= HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drj[k] + dgij_drj[k]); // derivative of V2 contribute to neighs of atom i - f[nbi1][k] += HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb1[k] + dgij_drk1[k]); - f[nbi2][k] += HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb2[k] + dgij_drk2[k]); - f[nbi3][k] += HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb3[k] + dgij_drk3[k]); + f[nbi1][k] -= HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb1[k] + dgij_drk1[k]); + f[nbi2][k] -= HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb2[k] + dgij_drk2[k]); + f[nbi3][k] -= HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb3[k] + dgij_drk3[k]); // derivative of V2 contribute to neighs of atom j - f[nbj1][k] += HALF * tp * V1 * dgij_drl1[k]; - f[nbj2][k] += HALF * tp * V1 * dgij_drl2[k]; - f[nbj3][k] += HALF * tp * V1 * dgij_drl3[k]; + f[nbj1][k] -= HALF * tp * V1 * dgij_drl1[k]; + f[nbj2][k] -= HALF * tp * V1 * dgij_drl2[k]; + f[nbj3][k] -= HALF * tp * V1 * dgij_drl3[k]; } return phi; @@ -725,9 +722,9 @@ void PairDRIP::find_nearest3neigh() j = jlist[jj]; j &= NEIGHMASK; jtype = map[type[j]]; - delx = xtmp - x[j][0]; - dely = ytmp - x[j][1]; - delz = ztmp - x[j][2]; + delx = x[j][0] - xtmp; + dely = x[j][1] - ytmp; + delz = x[j][2] - ztmp; rsq = delx*delx + dely*dely + delz*delz; int iparam_ij = elem2param[itype][jtype]; From c55009a0ac6314d65fa172de64108aa129788929 Mon Sep 17 00:00:00 2001 From: Trung Nguyen Date: Tue, 16 Apr 2019 23:30:25 -0500 Subject: [PATCH 077/311] Enabled neighbor list build on the device with pair_style hybrid and hybrid/overlay --- lib/gpu/lal_base_atomic.cpp | 6 ++++++ lib/gpu/lal_base_charge.cpp | 6 ++++++ lib/gpu/lal_base_dipole.cpp | 6 ++++++ lib/gpu/lal_base_dpd.cpp | 6 ++++++ lib/gpu/lal_base_three.cpp | 6 ++++++ lib/gpu/lal_device.cpp | 43 ++++++++++++++++++++++++++++--------- lib/gpu/lal_device.h | 7 ++++++ src/GPU/fix_gpu.cpp | 27 +++++++++-------------- 8 files changed, 80 insertions(+), 27 deletions(-) diff --git a/lib/gpu/lal_base_atomic.cpp b/lib/gpu/lal_base_atomic.cpp index e59dae1a6f..3d47df8a92 100644 --- a/lib/gpu/lal_base_atomic.cpp +++ b/lib/gpu/lal_base_atomic.cpp @@ -70,6 +70,12 @@ int BaseAtomicT::init_atomic(const int nlocal, const int nall, if (success!=0) return success; + success = device->init_nbor(nbor,nlocal,host_nlocal,nall,maxspecial,_gpu_host, + max_nbors,cell_size,false,_threads_per_atom); + + if (success!=0) + return success; + ucl_device=device->gpu; atom=&device->atom; diff --git a/lib/gpu/lal_base_charge.cpp b/lib/gpu/lal_base_charge.cpp index c6341f7d57..94e7502c55 100644 --- a/lib/gpu/lal_base_charge.cpp +++ b/lib/gpu/lal_base_charge.cpp @@ -71,6 +71,12 @@ int BaseChargeT::init_atomic(const int nlocal, const int nall, if (success!=0) return success; + success = device->init_nbor(nbor,nlocal,host_nlocal,nall,maxspecial,_gpu_host, + max_nbors,cell_size,false,_threads_per_atom); + + if (success!=0) + return success; + ucl_device=device->gpu; atom=&device->atom; diff --git a/lib/gpu/lal_base_dipole.cpp b/lib/gpu/lal_base_dipole.cpp index 478f0092c7..b2a41f10cf 100644 --- a/lib/gpu/lal_base_dipole.cpp +++ b/lib/gpu/lal_base_dipole.cpp @@ -72,6 +72,12 @@ int BaseDipoleT::init_atomic(const int nlocal, const int nall, if (success!=0) return success; + success = device->init_nbor(nbor,nlocal,host_nlocal,nall,maxspecial,_gpu_host, + max_nbors,cell_size,false,_threads_per_atom); + + if (success!=0) + return success; + ucl_device=device->gpu; atom=&device->atom; diff --git a/lib/gpu/lal_base_dpd.cpp b/lib/gpu/lal_base_dpd.cpp index 941f463b14..3f71c820c7 100644 --- a/lib/gpu/lal_base_dpd.cpp +++ b/lib/gpu/lal_base_dpd.cpp @@ -71,6 +71,12 @@ int BaseDPDT::init_atomic(const int nlocal, const int nall, if (success!=0) return success; + success = device->init_nbor(nbor,nlocal,host_nlocal,nall,maxspecial,_gpu_host, + max_nbors,cell_size,false,_threads_per_atom); + + if (success!=0) + return success; + ucl_device=device->gpu; atom=&device->atom; diff --git a/lib/gpu/lal_base_three.cpp b/lib/gpu/lal_base_three.cpp index aa77a48c66..ba28d697cc 100644 --- a/lib/gpu/lal_base_three.cpp +++ b/lib/gpu/lal_base_three.cpp @@ -84,6 +84,12 @@ int BaseThreeT::init_three(const int nlocal, const int nall, if (success!=0) return success; + success = device->init_nbor(nbor,nlocal,host_nlocal,nall,maxspecial,_gpu_host, + max_nbors,cell_size,false,_threads_per_atom); + + if (success!=0) + return success; + ucl_device=device->gpu; atom=&device->atom; diff --git a/lib/gpu/lal_device.cpp b/lib/gpu/lal_device.cpp index 9397f3c6c5..411e19a78a 100644 --- a/lib/gpu/lal_device.cpp +++ b/lib/gpu/lal_device.cpp @@ -301,16 +301,6 @@ int DeviceT::init(Answer &ans, const bool charge, if (!ans.init(ef_nlocal,charge,rot,*gpu)) return -3; - if (!nbor->init(&_neighbor_shared,ef_nlocal,host_nlocal,max_nbors,maxspecial, - *gpu,gpu_nbor,gpu_host,pre_cut, _block_cell_2d, - _block_cell_id, _block_nbor_build, threads_per_atom, - _warp_size, _time_device, compile_string())) - return -3; - if (_cell_size<0.0) - nbor->cell_size(cell_size,cell_size); - else - nbor->cell_size(_cell_size,cell_size); - _init_count++; return 0; } @@ -338,6 +328,39 @@ int DeviceT::init(Answer &ans, const int nlocal, return 0; } +template +int DeviceT::init_nbor(Neighbor *nbor, const int nlocal, + const int host_nlocal, const int nall, + const int maxspecial, const int gpu_host, + const int max_nbors, const double cell_size, + const bool pre_cut, const int threads_per_atom) { + int ef_nlocal=nlocal; + if (_particle_split<1.0 && _particle_split>0.0) + ef_nlocal=static_cast(_particle_split*nlocal); + + int gpu_nbor=0; + if (_gpu_mode==Device::GPU_NEIGH) + gpu_nbor=1; + else if (_gpu_mode==Device::GPU_HYB_NEIGH) + gpu_nbor=2; + #ifndef USE_CUDPP + if (gpu_nbor==1) + gpu_nbor=2; + #endif + + if (!nbor->init(&_neighbor_shared,ef_nlocal,host_nlocal,max_nbors,maxspecial, + *gpu,gpu_nbor,gpu_host,pre_cut,_block_cell_2d, + _block_cell_id, _block_nbor_build, threads_per_atom, + _warp_size, _time_device, compile_string())) + return -3; + if (_cell_size<0.0) + nbor->cell_size(cell_size,cell_size); + else + nbor->cell_size(_cell_size,cell_size); + + return 0; +} + template void DeviceT::set_single_precompute (PPPM *pppm) { diff --git a/lib/gpu/lal_device.h b/lib/gpu/lal_device.h index 695b0a62f9..68d88a3182 100644 --- a/lib/gpu/lal_device.h +++ b/lib/gpu/lal_device.h @@ -91,6 +91,13 @@ class Device { * - -5 Double precision is not supported on card **/ int init(Answer &ans, const int nlocal, const int nall); + /// Initialize neighbor list build -- callback function from pair + int init_nbor(Neighbor *nbor, const int nlocal, + const int host_nlocal, const int nall, + const int maxspecial, const int gpu_host, + const int max_nbors, const double cell_size, + const bool pre_cut, const int threads_per_atom); + /// Output a message for pair_style acceleration with device stats void init_message(FILE *screen, const char *name, const int first_gpu, const int last_gpu); diff --git a/src/GPU/fix_gpu.cpp b/src/GPU/fix_gpu.cpp index 0d5b4334c9..7be87939fe 100644 --- a/src/GPU/fix_gpu.cpp +++ b/src/GPU/fix_gpu.cpp @@ -30,7 +30,6 @@ #include "neighbor.h" #include "citeme.h" #include "error.h" -#include "utils.h" using namespace LAMMPS_NS; using namespace FixConst; @@ -219,17 +218,6 @@ void FixGPU::init() error->all(FLERR,"GPU package does not (yet) work with " "atom_style template"); - // hybrid cannot be used with force/neigh option - - if (_gpu_mode == GPU_NEIGH || _gpu_mode == GPU_HYB_NEIGH) - if (force->pair_match("^hybrid",0) != NULL) - error->all(FLERR,"Cannot use pair hybrid with GPU neighbor list builds"); - - if (_particle_split < 0) - if (force->pair_match("^hybrid",0) != NULL) - error->all(FLERR,"GPU split param must be positive " - "for hybrid pair styles"); - // neighbor list builds on the GPU with triclinic box is not yet supported if ((_gpu_mode == GPU_NEIGH || _gpu_mode == GPU_HYB_NEIGH) && @@ -243,16 +231,21 @@ void FixGPU::init() // make sure fdotr virial is not accumulated multiple times - if (force->pair_match("^hybrid",0) != NULL) { + if (force->pair_match("hybrid",1) != NULL) { PairHybrid *hybrid = (PairHybrid *) force->pair; for (int i = 0; i < hybrid->nstyles; i++) - if (!utils::strmatch(hybrid->keywords[i],"/gpu$")) + if (strstr(hybrid->keywords[i],"/gpu")==NULL) + force->pair->no_virial_fdotr_compute = 1; + } else if (force->pair_match("hybrid/overlay",1) != NULL) { + PairHybridOverlay *hybrid = (PairHybridOverlay *) force->pair; + for (int i = 0; i < hybrid->nstyles; i++) + if (strstr(hybrid->keywords[i],"/gpu")==NULL) force->pair->no_virial_fdotr_compute = 1; } // rRESPA support - if (utils::strmatch(update->integrate_style,"^respa")) + if (strstr(update->integrate_style,"respa")) _nlevels_respa = ((Respa *) update->integrate)->nlevels; } @@ -283,7 +276,7 @@ void FixGPU::min_setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixGPU::post_force(int /* vflag */) +void FixGPU::post_force(int vflag) { if (!force->pair) return; @@ -315,7 +308,7 @@ void FixGPU::min_post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixGPU::post_force_respa(int vflag, int /* ilevel */, int /* iloop */) +void FixGPU::post_force_respa(int vflag, int ilevel, int iloop) { post_force(vflag); } From 1f43efc111e9f096d61253d2c5eadac216053344 Mon Sep 17 00:00:00 2001 From: Trung Nguyen Date: Wed, 17 Apr 2019 00:09:49 -0500 Subject: [PATCH 078/311] Cleaned up the changes in Device and the base class of the pair styles --- lib/gpu/lal_base_atomic.cpp | 5 +--- lib/gpu/lal_base_charge.cpp | 5 +--- lib/gpu/lal_base_dipole.cpp | 5 +--- lib/gpu/lal_base_dpd.cpp | 4 +-- lib/gpu/lal_base_ellipsoid.cpp | 9 ++++-- lib/gpu/lal_base_three.cpp | 5 +--- lib/gpu/lal_device.cpp | 7 ++--- lib/gpu/lal_device.h | 53 ++++++++++++++++++++-------------- 8 files changed, 45 insertions(+), 48 deletions(-) diff --git a/lib/gpu/lal_base_atomic.cpp b/lib/gpu/lal_base_atomic.cpp index 3d47df8a92..da54f1dca3 100644 --- a/lib/gpu/lal_base_atomic.cpp +++ b/lib/gpu/lal_base_atomic.cpp @@ -64,15 +64,12 @@ int BaseAtomicT::init_atomic(const int nlocal, const int nall, } else _nbor_data=&(nbor->dev_nbor); - int success=device->init(*ans,false,false,nlocal,host_nlocal,nall,nbor, - maxspecial,_gpu_host,max_nbors,cell_size,false, - _threads_per_atom); + int success=device->init(*ans,false,false,nlocal,nall,maxspecial); if (success!=0) return success; success = device->init_nbor(nbor,nlocal,host_nlocal,nall,maxspecial,_gpu_host, max_nbors,cell_size,false,_threads_per_atom); - if (success!=0) return success; diff --git a/lib/gpu/lal_base_charge.cpp b/lib/gpu/lal_base_charge.cpp index 94e7502c55..a3ec710baa 100644 --- a/lib/gpu/lal_base_charge.cpp +++ b/lib/gpu/lal_base_charge.cpp @@ -65,15 +65,12 @@ int BaseChargeT::init_atomic(const int nlocal, const int nall, } else _nbor_data=&(nbor->dev_nbor); - int success=device->init(*ans,true,false,nlocal,host_nlocal,nall,nbor, - maxspecial,_gpu_host,max_nbors,cell_size,false, - _threads_per_atom); + int success=device->init(*ans,true,false,nlocal,nall,maxspecial); if (success!=0) return success; success = device->init_nbor(nbor,nlocal,host_nlocal,nall,maxspecial,_gpu_host, max_nbors,cell_size,false,_threads_per_atom); - if (success!=0) return success; diff --git a/lib/gpu/lal_base_dipole.cpp b/lib/gpu/lal_base_dipole.cpp index b2a41f10cf..9fc7e1b235 100644 --- a/lib/gpu/lal_base_dipole.cpp +++ b/lib/gpu/lal_base_dipole.cpp @@ -66,15 +66,12 @@ int BaseDipoleT::init_atomic(const int nlocal, const int nall, } else _nbor_data=&(nbor->dev_nbor); - int success=device->init(*ans,true,true,nlocal,host_nlocal,nall,nbor, - maxspecial,_gpu_host,max_nbors,cell_size,false, - _threads_per_atom); + int success=device->init(*ans,true,true,nlocal,nall,maxspecial); if (success!=0) return success; success = device->init_nbor(nbor,nlocal,host_nlocal,nall,maxspecial,_gpu_host, max_nbors,cell_size,false,_threads_per_atom); - if (success!=0) return success; diff --git a/lib/gpu/lal_base_dpd.cpp b/lib/gpu/lal_base_dpd.cpp index 3f71c820c7..eb5c2088a6 100644 --- a/lib/gpu/lal_base_dpd.cpp +++ b/lib/gpu/lal_base_dpd.cpp @@ -65,9 +65,7 @@ int BaseDPDT::init_atomic(const int nlocal, const int nall, } else _nbor_data=&(nbor->dev_nbor); - int success=device->init(*ans,false,false,nlocal,host_nlocal,nall,nbor, - maxspecial,_gpu_host,max_nbors,cell_size,false, - _threads_per_atom,true); + int success=device->init(*ans,false,false,nlocal,nall,maxspecial,true); if (success!=0) return success; diff --git a/lib/gpu/lal_base_ellipsoid.cpp b/lib/gpu/lal_base_ellipsoid.cpp index 8918a3140c..eea5344e33 100644 --- a/lib/gpu/lal_base_ellipsoid.cpp +++ b/lib/gpu/lal_base_ellipsoid.cpp @@ -71,12 +71,15 @@ int BaseEllipsoidT::init_base(const int nlocal, const int nall, _threads_per_atom=device->threads_per_atom(); - int success=device->init(*ans,false,true,nlocal,host_nlocal,nall,nbor, - maxspecial,_gpu_host,max_nbors,cell_size,true, - 1); + int success=device->init(*ans,false,true,nlocal,nall,maxspecial); if (success!=0) return success; + success = device->init_nbor(nbor,nlocal,host_nlocal,nall,maxspecial,_gpu_host, + max_nbors,cell_size,true,1); + if (success!=0) + return success; + ucl_device=device->gpu; atom=&device->atom; diff --git a/lib/gpu/lal_base_three.cpp b/lib/gpu/lal_base_three.cpp index ba28d697cc..0510b84d92 100644 --- a/lib/gpu/lal_base_three.cpp +++ b/lib/gpu/lal_base_three.cpp @@ -78,15 +78,12 @@ int BaseThreeT::init_three(const int nlocal, const int nall, if (_threads_per_atom*_threads_per_atom>device->warp_size()) return -10; - int success=device->init(*ans,false,false,nlocal,host_nlocal,nall,nbor, - maxspecial,_gpu_host,max_nbors,cell_size,false, - _threads_per_atom); + int success=device->init(*ans,false,false,nlocal,nall,maxspecial); if (success!=0) return success; success = device->init_nbor(nbor,nlocal,host_nlocal,nall,maxspecial,_gpu_host, max_nbors,cell_size,false,_threads_per_atom); - if (success!=0) return success; diff --git a/lib/gpu/lal_device.cpp b/lib/gpu/lal_device.cpp index 411e19a78a..3b7f393056 100644 --- a/lib/gpu/lal_device.cpp +++ b/lib/gpu/lal_device.cpp @@ -246,11 +246,8 @@ int DeviceT::set_ocl_params(char *ocl_vendor) { template int DeviceT::init(Answer &ans, const bool charge, const bool rot, const int nlocal, - const int host_nlocal, const int nall, - Neighbor *nbor, const int maxspecial, - const int gpu_host, const int max_nbors, - const double cell_size, const bool pre_cut, - const int threads_per_atom, const bool vel) { + const int nall, const int maxspecial, + const bool vel) { if (!_device_init) return -1; if (sizeof(acctyp)==sizeof(double) && gpu->double_precision()==false) diff --git a/lib/gpu/lal_device.h b/lib/gpu/lal_device.h index 68d88a3182..4287967210 100644 --- a/lib/gpu/lal_device.h +++ b/lib/gpu/lal_device.h @@ -53,8 +53,38 @@ class Device { const int t_per_atom, const double cell_size, char *vendor_string, const int block_pair); - /// Initialize the device for Atom and Neighbor storage - /** \param rot True if quaternions need to be stored + /// Initialize the device for Atom storage + /** \param charge True if charges need to be stored + * \param rot True if quaternions need to be stored + * \param nlocal Total number of local particles to allocate memory for + * \param host_nlocal Initial number of host particles to allocate memory for + * \param nall Total number of local+ghost particles + * + * Returns: + * - 0 if successfull + * - -1 if fix gpu not found + * - -3 if there is an out of memory error + * - -4 if the GPU library was not compiled for GPU + * - -5 Double precision is not supported on card **/ + int init(Answer &a, const bool charge, const bool rot, + const int nlocal, const int nall, const int maxspecial, + const bool vel=false); + + /// Initialize the device for Atom storage only + /** \param nlocal Total number of local particles to allocate memory for + * \param nall Total number of local+ghost particles + * + * Returns: + * - 0 if successfull + * - -1 if fix gpu not found + * - -3 if there is an out of memory error + * - -4 if the GPU library was not compiled for GPU + * - -5 Double precision is not supported on card **/ + int init(Answer &ans, const int nlocal, const int nall); + + /// Initialize neighbor list storage and build + /** \param charge True if charges need to be stored + * \param rot True if quaternions need to be stored * \param nlocal Total number of local particles to allocate memory for * \param host_nlocal Initial number of host particles to allocate memory for * \param nall Total number of local+ghost particles @@ -73,25 +103,6 @@ class Device { * - -3 if there is an out of memory error * - -4 if the GPU library was not compiled for GPU * - -5 Double precision is not supported on card **/ - int init(Answer &a, const bool charge, const bool rot, - const int nlocal, const int host_nlocal, const int nall, - Neighbor *nbor, const int maxspecial, const int gpu_host, - const int max_nbors, const double cell_size, const bool pre_cut, - const int threads_per_atom, const bool vel=false); - - /// Initialize the device for Atom storage only - /** \param nlocal Total number of local particles to allocate memory for - * \param nall Total number of local+ghost particles - * - * Returns: - * - 0 if successfull - * - -1 if fix gpu not found - * - -3 if there is an out of memory error - * - -4 if the GPU library was not compiled for GPU - * - -5 Double precision is not supported on card **/ - int init(Answer &ans, const int nlocal, const int nall); - - /// Initialize neighbor list build -- callback function from pair int init_nbor(Neighbor *nbor, const int nlocal, const int host_nlocal, const int nall, const int maxspecial, const int gpu_host, From cb30414820ebb2cce6b1e975cec80a70178defc2 Mon Sep 17 00:00:00 2001 From: Mingjian Wen Date: Wed, 17 Apr 2019 10:05:05 -0500 Subject: [PATCH 079/311] Add contribution to virial and atom virial --- src/USER-MISC/pair_drip.cpp | 288 +++++++++++++++++++++++++----------- src/USER-MISC/pair_drip.h | 10 +- 2 files changed, 203 insertions(+), 95 deletions(-) diff --git a/src/USER-MISC/pair_drip.cpp b/src/USER-MISC/pair_drip.cpp index 3b84f5e9cd..f1894b6e97 100644 --- a/src/USER-MISC/pair_drip.cpp +++ b/src/USER-MISC/pair_drip.cpp @@ -65,8 +65,11 @@ PairDRIP::PairDRIP(LAMMPS *lmp) : Pair(lmp) nearest3neigh = NULL; + +//no_virial_fdotr_compute = 1; + // set comm size needed by this Pair - comm_forward = 39; + //comm_forward = 39; } /* ---------------------------------------------------------------------- */ @@ -108,6 +111,7 @@ void PairDRIP::init_style() neighbor->requests[irequest]->full = 1; neighbor->requests[irequest]->ghost = 1; + // TODO this can be deleted // local DRIP neighbor list // create pages if first time or if neighbor pgsize/oneatom has changed @@ -373,70 +377,70 @@ void PairDRIP::read_file(char *filename) /* ---------------------------------------------------------------------- */ -int PairDRIP::pack_forward_comm(int n, int *list, double *buf, - int /*pbc_flag*/, int * /*pbc*/) -{ - int i,j,m,l,ip,id; - - m = 0; -// for (i = 0; i < n; i++) { -// j = list[i]; -// buf[m++] = normal[j][0]; -// buf[m++] = normal[j][1]; -// buf[m++] = normal[j][2]; -// buf[m++] = dnormdri[0][0][j]; -// buf[m++] = dnormdri[0][1][j]; -// buf[m++] = dnormdri[0][2][j]; -// buf[m++] = dnormdri[1][0][j]; -// buf[m++] = dnormdri[1][1][j]; -// buf[m++] = dnormdri[1][2][j]; -// buf[m++] = dnormdri[2][0][j]; -// buf[m++] = dnormdri[2][1][j]; -// buf[m++] = dnormdri[2][2][j]; -// for (l = 0; l < 3; l++){ -// for (id = 0; id < 3; id++){ -// for (ip = 0; ip < 3; ip++){ -// buf[m++] = dnormal[id][ip][l][j]; -// } -// } -// } -// } - - return m; -} +//int PairDRIP::pack_forward_comm(int n, int *list, double *buf, +// int /*pbc_flag*/, int * /*pbc*/) +//{ +// int i,j,m,l,ip,id; +// +// m = 0; +//// for (i = 0; i < n; i++) { +//// j = list[i]; +//// buf[m++] = normal[j][0]; +//// buf[m++] = normal[j][1]; +//// buf[m++] = normal[j][2]; +//// buf[m++] = dnormdri[0][0][j]; +//// buf[m++] = dnormdri[0][1][j]; +//// buf[m++] = dnormdri[0][2][j]; +//// buf[m++] = dnormdri[1][0][j]; +//// buf[m++] = dnormdri[1][1][j]; +//// buf[m++] = dnormdri[1][2][j]; +//// buf[m++] = dnormdri[2][0][j]; +//// buf[m++] = dnormdri[2][1][j]; +//// buf[m++] = dnormdri[2][2][j]; +//// for (l = 0; l < 3; l++){ +//// for (id = 0; id < 3; id++){ +//// for (ip = 0; ip < 3; ip++){ +//// buf[m++] = dnormal[id][ip][l][j]; +//// } +//// } +//// } +//// } +// +// return m; +//} /* ---------------------------------------------------------------------- */ - -void PairDRIP::unpack_forward_comm(int n, int first, double *buf) -{ - int i,m,last,l,ip,id; - -// m = 0; -// last = first + n; -// for (i = first; i < last; i++) { -// normal[i][0] = buf[m++]; -// normal[i][1] = buf[m++]; -// normal[i][2] = buf[m++]; -// dnormdri[0][0][i] = buf[m++]; -// dnormdri[0][1][i] = buf[m++]; -// dnormdri[0][2][i] = buf[m++]; -// dnormdri[1][0][i] = buf[m++]; -// dnormdri[1][1][i] = buf[m++]; -// dnormdri[1][2][i] = buf[m++]; -// dnormdri[2][0][i] = buf[m++]; -// dnormdri[2][1][i] = buf[m++]; -// dnormdri[2][2][i] = buf[m++]; -// for (l = 0; l < 3; l++){ -// for (id = 0; id < 3; id++){ -// for (ip = 0; ip < 3; ip++){ -// dnormal[id][ip][l][i] = buf[m++]; -// } -// } -// } -// } // -} - +//void PairDRIP::unpack_forward_comm(int n, int first, double *buf) +//{ +// int i,m,last,l,ip,id; +// +//// m = 0; +//// last = first + n; +//// for (i = first; i < last; i++) { +//// normal[i][0] = buf[m++]; +//// normal[i][1] = buf[m++]; +//// normal[i][2] = buf[m++]; +//// dnormdri[0][0][i] = buf[m++]; +//// dnormdri[0][1][i] = buf[m++]; +//// dnormdri[0][2][i] = buf[m++]; +//// dnormdri[1][0][i] = buf[m++]; +//// dnormdri[1][1][i] = buf[m++]; +//// dnormdri[1][2][i] = buf[m++]; +//// dnormdri[2][0][i] = buf[m++]; +//// dnormdri[2][1][i] = buf[m++]; +//// dnormdri[2][2][i] = buf[m++]; +//// for (l = 0; l < 3; l++){ +//// for (id = 0; id < 3; id++){ +//// for (ip = 0; ip < 3; ip++){ +//// dnormal[id][ip][l][i] = buf[m++]; +//// } +//// } +//// } +//// } +//// +//} +// /* ---------------------------------------------------------------------- */ @@ -457,6 +461,9 @@ void PairDRIP::compute(int eflag, int vflag) evdwl = 0.0; ev_init(eflag,vflag); + // TODO + //vflag_global = 1; + double **x = atom->x; double **f = atom->f; int *type = atom->type; @@ -475,7 +482,7 @@ void PairDRIP::compute(int eflag, int vflag) //TODO what does this comm do? // communicate the normal vector and its derivatives - comm->forward_comm_pair(this); + // comm->forward_comm_pair(this); // loop over neighbors of my atoms for (ii = 0; ii < inum; ii++) { @@ -492,6 +499,7 @@ void PairDRIP::compute(int eflag, int vflag) // normal and its derivatives w.r.t. atom i and its 3 nearest neighs calc_normal(i, nbi1, nbi2, nbi3, ni, dni_dri,dni_drnb1, dni_drnb2, dni_drnb3); + double fi[DIM] = {0., 0., 0.}; for (jj = 0; jj < jnum; jj++) { j = jlist[jj]; @@ -522,10 +530,13 @@ void PairDRIP::compute(int eflag, int vflag) // only include the interation between different layers if (rsq < rcutsq && atom->molecule[i] != atom->molecule[j]) { + double fj[DIM] = {0., 0., 0.}; double rvec[DIM] = {delx, dely, delz}; - double phi_attr = calc_attractive(i,j,p, rsq, rvec); - double phi_repul = calc_repulsive(evflag, i, j, p, rsq, rvec, nbi1, nbi2, - nbi3, ni, dni_dri, dni_drnb1, dni_drnb2, dni_drnb3); + + double phi_attr = calc_attractive(i,j,p, rsq, rvec, fi, fj); + + double phi_repul = calc_repulsive(i, j, p, rsq, rvec, nbi1, nbi2, + nbi3, ni, dni_dri, dni_drnb1, dni_drnb2, dni_drnb3, fi, fj); if (eflag) evdwl = HALF * (phi_repul + phi_attr); @@ -534,21 +545,83 @@ void PairDRIP::compute(int eflag, int vflag) if (evflag) ev_tally(i,j,nlocal,newton_pair, evdwl,0.0,0,0,0,0); +// ev_tally_xyz(int i, int j, int nlocal, int newton_pair, +// double evdwl, double ecoul, +// double fx, double fy, double fz, +// double delx, double dely, double delz) + + +// void ev_tally_xyz_full(int i, double evdwl, double ecoul, +// double fx, double fy, double fz, +// double delx, double dely, double delz) + + f[j][0] += fj[0]; + f[j][1] += fj[1]; + f[j][2] += fj[2]; + + // *2 since v_tally has a 0.5 coeff + fj[0] *= 2; fj[1] *= 2; fj[2] *= 2; + if (vflag_atom) v_tally(j, fj, x[j]); + } } //loop over jj + + f[i][0] += fi[0]; + f[i][1] += fi[1]; + f[i][2] += fi[2]; + + // *2 since v_tally has a 0.5 coeff + fi[0] *= 2; fi[1] *= 2; fi[2] *= 2; + if (vflag_atom) v_tally(i, fi, x[i]); + } // loop over ii + +if (vflag_fdotr) + virial_fdotr_compute(); + + + + + +printf("@@@ evflags in compute\n"); +printf("@@@ eflag_either=%d\n", eflag_either); +printf("@@@ eflag_global=%d\n", eflag_global); +printf("@@@ eflag_atom=%d\n", eflag_atom); +printf("@@@ vflag_either=%d\n", vflag_either); +printf("@@@ vflag_global=%d\n", vflag_global); +printf("@@@ vflag_atom=%d\n", vflag_atom); +printf("@@@ vflag_fdotr=%d\n", vflag_fdotr); + + +printf("@@@@@@@@@@@@@@@@@@@@@@@ virial\n"); +printf("%f, %f, %f, %f, %f, %f\n", virial[0], virial[1], virial[2], virial[3], virial[4], virial[5]); +printf("@@@@@@@@@@@@@@@@@@@@@@@ virial fdotr\n"); +virial[0]= virial[1]= virial[2]= virial[3]= virial[4]= virial[5]=0.; +virial_fdotr_compute(); +printf("%f, %f, %f, %f, %f, %f\n", virial[0], virial[1], virial[2], virial[3], virial[4], virial[5]); + +printf("@@@@@@@@@@@@@@@@@@@@@@@ virial from atom virial\n"); + + int allnum = list->inum + list->gnum; + double v[6] = {0., 0., 0., 0., 0., 0.}; + for (int kk=0; kkf; - double const z0 = p.z0; double const A = p.A; double const cutoff = p.rcut; @@ -562,26 +635,26 @@ double PairDRIP::calc_attractive(int const i, int const j, Param& p, double phi = -r6 * tp; double fpair = -HALF * (r6 * dtp + dr6 * tp); - f[i][0] += rvec[0] * fpair / r; - f[i][1] += rvec[1] * fpair / r; - f[i][2] += rvec[2] * fpair / r; - f[j][0] -= rvec[0] * fpair / r; - f[j][1] -= rvec[1] * fpair / r; - f[j][2] -= rvec[2] * fpair / r; + fi[0] += rvec[0] * fpair / r; + fi[1] += rvec[1] * fpair / r; + fi[2] += rvec[2] * fpair / r; + fj[0] -= rvec[0] * fpair / r; + fj[1] -= rvec[1] * fpair / r; + fj[2] -= rvec[2] * fpair / r; return phi; } /* ---------------------------------------------------------------------- */ -double PairDRIP::calc_repulsive(int const evflag, int const i, int const j, +double PairDRIP::calc_repulsive(int const i, int const j, Param& p, double const rsq, double const * rvec, int const nbi1, int const nbi2, int const nbi3, double const * ni, V3 const * dni_dri, V3 const * dni_drnb1, V3 const * dni_drnb2, - V3 const * dni_drnb3) + V3 const * dni_drnb3, double * const fi, double * const fj) { double **f = atom->f; - double r = sqrt(rsq); + double **x = atom->x; // params double C0 = p.C0; @@ -598,6 +671,14 @@ double PairDRIP::calc_repulsive(int const evflag, int const i, int const j, int nbj2 = nearest3neigh[j][1]; int nbj3 = nearest3neigh[j][2]; + double r = sqrt(rsq); + + double fnbi1[DIM]; + double fnbi2[DIM]; + double fnbi3[DIM]; + double fnbj1[DIM]; + double fnbj2[DIM]; + double fnbj3[DIM]; V3 dgij_dri; V3 dgij_drj; V3 dgij_drk1; @@ -606,7 +687,6 @@ double PairDRIP::calc_repulsive(int const evflag, int const i, int const j, V3 dgij_drl1; V3 dgij_drl2; V3 dgij_drl3; - V3 drhosqij_dri; V3 drhosqij_drj; V3 drhosqij_drnb1; @@ -645,23 +725,51 @@ double PairDRIP::calc_repulsive(int const evflag, int const i, int const j, // forces due to derivatives of tap and V1 double tmp = HALF * (dtp * V1 + tp * dV1) * V2 * rvec[k] / r; - f[i][k] += tmp; - f[j][k] -= tmp; + fi[k] += tmp; + fj[k] -= tmp; // the following incldue the transverse decay part tdij and the dihedral part gij // derivative of V2 contribute to atoms i, j - f[i][k] -= HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_dri[k] + dgij_dri[k]); - f[j][k] -= HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drj[k] + dgij_drj[k]); + fi[k] -= HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_dri[k] + dgij_dri[k]); + fj[k] -= HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drj[k] + dgij_drj[k]); // derivative of V2 contribute to neighs of atom i - f[nbi1][k] -= HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb1[k] + dgij_drk1[k]); - f[nbi2][k] -= HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb2[k] + dgij_drk2[k]); - f[nbi3][k] -= HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb3[k] + dgij_drk3[k]); + fnbi1[k] =- HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb1[k] + dgij_drk1[k]); + fnbi2[k] =- HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb2[k] + dgij_drk2[k]); + fnbi3[k] =- HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb3[k] + dgij_drk3[k]); // derivative of V2 contribute to neighs of atom j - f[nbj1][k] -= HALF * tp * V1 * dgij_drl1[k]; - f[nbj2][k] -= HALF * tp * V1 * dgij_drl2[k]; - f[nbj3][k] -= HALF * tp * V1 * dgij_drl3[k]; + fnbj1[k] =- HALF * tp * V1 * dgij_drl1[k]; + fnbj2[k] =- HALF * tp * V1 * dgij_drl2[k]; + fnbj3[k] =- HALF * tp * V1 * dgij_drl3[k]; + } + + for (int k = 0; k < DIM; k++) { + f[nbi1][k] += fnbi1[k]; + f[nbi2][k] += fnbi2[k]; + f[nbi3][k] += fnbi3[k]; + f[nbj1][k] += fnbj1[k]; + f[nbj2][k] += fnbj2[k]; + f[nbj3][k] += fnbj3[k]; + } + + if (vflag_atom) { + + // *2 since v_tally has a 0.5 coeff + for (int k = 0; k < DIM; k++) { + fnbi1[k]*=2; + fnbi2[k]*=2; + fnbi3[k]*=2; + fnbj1[k]*=2; + fnbj2[k]*=2; + fnbj3[k]*=2; + } + v_tally(nbi1, fnbi1, x[nbi1]); + v_tally(nbi2, fnbi2, x[nbi2]); + v_tally(nbi3, fnbi3, x[nbi3]); + v_tally(nbj1, fnbj1, x[nbj1]); + v_tally(nbj2, fnbj2, x[nbj2]); + v_tally(nbj3, fnbj3, x[nbj3]); } return phi; diff --git a/src/USER-MISC/pair_drip.h b/src/USER-MISC/pair_drip.h index e7d892ab82..cfc54080a0 100644 --- a/src/USER-MISC/pair_drip.h +++ b/src/USER-MISC/pair_drip.h @@ -40,8 +40,8 @@ class PairDRIP : public Pair { void coeff(int, char **); double init_one(int, int); void init_style(); - int pack_forward_comm(int, int *, double *, int, int *); - void unpack_forward_comm(int, int, double *); +// int pack_forward_comm(int, int *, double *, int, int *); +// void unpack_forward_comm(int, int, double *); protected: double cutmax; // max cutoff for all species @@ -73,13 +73,13 @@ class PairDRIP : public Pair { // DRIP specific functions double calc_attractive(int const i, int const j, Param& p, - double const rsq, double const * rvec); + double const rsq, double const * rvec, double * const fi, double * const fj); - double calc_repulsive(int const evflag, int const i, int const j, + double calc_repulsive(int const i, int const j, Param& p, double const rsq, double const * rvec, int const nbi1, int const nbi2, int const nbi3, double const * ni, V3 const * dni_dri, V3 const * dni_drnb1, V3 const * dni_drnb2, - V3 const * dni_drnb3); + V3 const * dni_drnb3, double * const fi, double * const fj); void find_nearest3neigh(); From d6f3a955990fae1a09b20548cae6e1a0227601c2 Mon Sep 17 00:00:00 2001 From: Mingjian Wen Date: Wed, 17 Apr 2019 10:53:45 -0500 Subject: [PATCH 080/311] Remove unused variables and methods --- src/USER-MISC/pair_drip.cpp | 183 +++++------------------------------- src/USER-MISC/pair_drip.h | 40 ++++---- 2 files changed, 41 insertions(+), 182 deletions(-) diff --git a/src/USER-MISC/pair_drip.cpp b/src/USER-MISC/pair_drip.cpp index f1894b6e97..39c48eb56a 100644 --- a/src/USER-MISC/pair_drip.cpp +++ b/src/USER-MISC/pair_drip.cpp @@ -56,27 +56,21 @@ PairDRIP::PairDRIP(LAMMPS *lmp) : Pair(lmp) params = NULL; elem2param = NULL; map = NULL; - cutmax = 0.0; - nmax = 0; - maxlocal = 0; - ipage = NULL; - pgsize = oneatom = 0; + +//j nmax = 0; +//j maxlocal = 0; +//j ipage = NULL; +//j pgsize = oneatom = 0; nearest3neigh = NULL; - - -//no_virial_fdotr_compute = 1; - - // set comm size needed by this Pair - //comm_forward = 39; } /* ---------------------------------------------------------------------- */ PairDRIP::~PairDRIP() { - delete [] ipage; +// delete [] ipage; if (allocated) { memory->destroy(setflag); @@ -110,26 +104,6 @@ void PairDRIP::init_style() neighbor->requests[irequest]->half = 0; neighbor->requests[irequest]->full = 1; neighbor->requests[irequest]->ghost = 1; - - // TODO this can be deleted - // local DRIP neighbor list - // create pages if first time or if neighbor pgsize/oneatom has changed - - int create = 0; - if (ipage == NULL) create = 1; - if (pgsize != neighbor->pgsize) create = 1; - if (oneatom != neighbor->oneatom) create = 1; - - if (create) { - delete [] ipage; - pgsize = neighbor->pgsize; - oneatom = neighbor->oneatom; - - int nmypage= comm->nthreads; - ipage = new MyPage[nmypage]; - for (int i = 0; i < nmypage; i++) - ipage[i].init(oneatom,pgsize,PGDELTA); - } } /* ---------------------------------------------------------------------- @@ -377,73 +351,6 @@ void PairDRIP::read_file(char *filename) /* ---------------------------------------------------------------------- */ -//int PairDRIP::pack_forward_comm(int n, int *list, double *buf, -// int /*pbc_flag*/, int * /*pbc*/) -//{ -// int i,j,m,l,ip,id; -// -// m = 0; -//// for (i = 0; i < n; i++) { -//// j = list[i]; -//// buf[m++] = normal[j][0]; -//// buf[m++] = normal[j][1]; -//// buf[m++] = normal[j][2]; -//// buf[m++] = dnormdri[0][0][j]; -//// buf[m++] = dnormdri[0][1][j]; -//// buf[m++] = dnormdri[0][2][j]; -//// buf[m++] = dnormdri[1][0][j]; -//// buf[m++] = dnormdri[1][1][j]; -//// buf[m++] = dnormdri[1][2][j]; -//// buf[m++] = dnormdri[2][0][j]; -//// buf[m++] = dnormdri[2][1][j]; -//// buf[m++] = dnormdri[2][2][j]; -//// for (l = 0; l < 3; l++){ -//// for (id = 0; id < 3; id++){ -//// for (ip = 0; ip < 3; ip++){ -//// buf[m++] = dnormal[id][ip][l][j]; -//// } -//// } -//// } -//// } -// -// return m; -//} - -/* ---------------------------------------------------------------------- */ -// -//void PairDRIP::unpack_forward_comm(int n, int first, double *buf) -//{ -// int i,m,last,l,ip,id; -// -//// m = 0; -//// last = first + n; -//// for (i = first; i < last; i++) { -//// normal[i][0] = buf[m++]; -//// normal[i][1] = buf[m++]; -//// normal[i][2] = buf[m++]; -//// dnormdri[0][0][i] = buf[m++]; -//// dnormdri[0][1][i] = buf[m++]; -//// dnormdri[0][2][i] = buf[m++]; -//// dnormdri[1][0][i] = buf[m++]; -//// dnormdri[1][1][i] = buf[m++]; -//// dnormdri[1][2][i] = buf[m++]; -//// dnormdri[2][0][i] = buf[m++]; -//// dnormdri[2][1][i] = buf[m++]; -//// dnormdri[2][2][i] = buf[m++]; -//// for (l = 0; l < 3; l++){ -//// for (id = 0; id < 3; id++){ -//// for (ip = 0; ip < 3; ip++){ -//// dnormal[id][ip][l][i] = buf[m++]; -//// } -//// } -//// } -//// } -//// -//} -// - -/* ---------------------------------------------------------------------- */ - void PairDRIP::compute(int eflag, int vflag) { @@ -452,7 +359,6 @@ void PairDRIP::compute(int eflag, int vflag) double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fpair,fpair1,fpair2, r, rsq; int *ilist,*jlist,*numneigh,**firstneigh; - int nbi1, nbi2, nbi3; double ni[DIM]; double dni_dri[DIM][DIM], dni_drnb1[DIM][DIM]; double dni_drnb2[DIM][DIM], dni_drnb3[DIM][DIM]; @@ -461,9 +367,6 @@ void PairDRIP::compute(int eflag, int vflag) evdwl = 0.0; ev_init(eflag,vflag); - // TODO - //vflag_global = 1; - double **x = atom->x; double **f = atom->f; int *type = atom->type; @@ -476,14 +379,8 @@ void PairDRIP::compute(int eflag, int vflag) numneigh = list->numneigh; firstneigh = list->firstneigh; - - // find nearest 3 neighbors of each atom find_nearest3neigh(); - //TODO what does this comm do? - // communicate the normal vector and its derivatives - // comm->forward_comm_pair(this); - // loop over neighbors of my atoms for (ii = 0; ii < inum; ii++) { i = ilist[ii]; @@ -497,7 +394,7 @@ void PairDRIP::compute(int eflag, int vflag) // normal and its derivatives w.r.t. atom i and its 3 nearest neighs - calc_normal(i, nbi1, nbi2, nbi3, ni, dni_dri,dni_drnb1, dni_drnb2, dni_drnb3); + calc_normal(i, ni, dni_dri,dni_drnb1, dni_drnb2, dni_drnb3); double fi[DIM] = {0., 0., 0.}; @@ -507,17 +404,6 @@ void PairDRIP::compute(int eflag, int vflag) jtype = map[type[j]]; jtag = tag[j]; -// // two-body interactions from full neighbor list, skip half of them -// if (itag > jtag) { -// if ((itag+jtag) % 2 == 0) continue; -// } else if (itag < jtag) { -// if ((itag+jtag) % 2 == 1) continue; -// } else { -// if (x[j][2] < ztmp) continue; -// if (x[j][2] == ztmp && x[j][1] < ytmp) continue; -// if (x[j][2] == ztmp && x[j][1] == ytmp && x[j][0] < xtmp) continue; -// } - delx = x[j][0] - xtmp; dely = x[j][1] - ytmp; delz = x[j][2] - ztmp; @@ -535,26 +421,12 @@ void PairDRIP::compute(int eflag, int vflag) double phi_attr = calc_attractive(i,j,p, rsq, rvec, fi, fj); - double phi_repul = calc_repulsive(i, j, p, rsq, rvec, nbi1, nbi2, - nbi3, ni, dni_dri, dni_drnb1, dni_drnb2, dni_drnb3, fi, fj); + double phi_repul = calc_repulsive(i, j, p, rsq, rvec, + ni, dni_dri, dni_drnb1, dni_drnb2, dni_drnb3, fi, fj); if (eflag) evdwl = HALF * (phi_repul + phi_attr); - - //if (evflag) ev_tally(i,j,nlocal,newton_pair, evdwl,0.0,fpair,delx,dely,delz); - if (evflag) ev_tally(i,j,nlocal,newton_pair, evdwl,0.0,0,0,0,0); - -// ev_tally_xyz(int i, int j, int nlocal, int newton_pair, -// double evdwl, double ecoul, -// double fx, double fy, double fz, -// double delx, double dely, double delz) - - -// void ev_tally_xyz_full(int i, double evdwl, double ecoul, -// double fx, double fy, double fz, -// double delx, double dely, double delz) - f[j][0] += fj[0]; f[j][1] += fj[1]; f[j][2] += fj[2]; @@ -582,8 +454,6 @@ if (vflag_fdotr) - - printf("@@@ evflags in compute\n"); printf("@@@ eflag_either=%d\n", eflag_either); printf("@@@ eflag_global=%d\n", eflag_global); @@ -649,9 +519,9 @@ double PairDRIP::calc_attractive(int const i, int const j, Param& p, /* ---------------------------------------------------------------------- */ double PairDRIP::calc_repulsive(int const i, int const j, Param& p, double const rsq, double const * rvec, - int const nbi1, int const nbi2, int const nbi3, double const * ni, - V3 const * dni_dri, V3 const * dni_drnb1, V3 const * dni_drnb2, - V3 const * dni_drnb3, double * const fi, double * const fj) + double const * ni, V3 const * dni_dri, V3 const * dni_drnb1, + V3 const * dni_drnb2, V3 const * dni_drnb3, + double * const fi, double * const fj) { double **f = atom->f; double **x = atom->x; @@ -666,7 +536,10 @@ double PairDRIP::calc_repulsive(int const i, int const j, double z0 = p.z0; double cutoff = p.rcut; - // nearest 3 neighbors of atom j + // nearest 3 neighbors of atoms i and j + int nbi1 = nearest3neigh[i][0]; + int nbi2 = nearest3neigh[i][1]; + int nbi3 = nearest3neigh[i][2]; int nbj1 = nearest3neigh[j][0]; int nbj2 = nearest3neigh[j][1]; int nbj3 = nearest3neigh[j][2]; @@ -733,12 +606,12 @@ double PairDRIP::calc_repulsive(int const i, int const j, fi[k] -= HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_dri[k] + dgij_dri[k]); fj[k] -= HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drj[k] + dgij_drj[k]); - // derivative of V2 contribute to neighs of atom i + // derivative of V2 contribute to nearest 3 neighs of atom i fnbi1[k] =- HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb1[k] + dgij_drk1[k]); fnbi2[k] =- HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb2[k] + dgij_drk2[k]); fnbi3[k] =- HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb3[k] + dgij_drk3[k]); - // derivative of V2 contribute to neighs of atom j + // derivative of V2 contribute to nearest 3 neighs of atom j fnbj1[k] =- HALF * tp * V1 * dgij_drl1[k]; fnbj2[k] =- HALF * tp * V1 * dgij_drl2[k]; fnbj3[k] =- HALF * tp * V1 * dgij_drl3[k]; @@ -785,7 +658,7 @@ void PairDRIP::find_nearest3neigh() int i,j,ii,jj,n,allnum,jnum,itype,jtype; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; int *ilist,*jlist,*numneigh,**firstneigh; - int *neighptr; + //int *neighptr; double **x = atom->x; int *type = atom->type; @@ -799,17 +672,10 @@ void PairDRIP::find_nearest3neigh() memory->destroy(nearest3neigh); memory->create(nearest3neigh, allnum, 3, "DRIP:nearest3neigh"); - // store all DRIP neighs of owned and ghost atoms - // scan full neighbor list of I - - ipage->reset(); - for (ii = 0; ii < allnum; ii++) { i = ilist[ii]; n = 0; - neighptr = ipage->vget(); - xtmp = x[i][0]; ytmp = x[i][1]; ztmp = x[i][2]; @@ -878,14 +744,13 @@ void PairDRIP::find_nearest3neigh() /* ---------------------------------------------------------------------- */ -void PairDRIP::calc_normal(int const i, int& k1, int& k2, int& k3, - double * const normal, V3 *const dn_dri, V3 *const dn_drk1, - V3 *const dn_drk2, V3 *const dn_drk3) +void PairDRIP::calc_normal(int const i, double * const normal, + V3 *const dn_dri, V3 *const dn_drk1, V3 *const dn_drk2, V3 *const dn_drk3) { - k1 = nearest3neigh[i][0]; - k2 = nearest3neigh[i][1]; - k3 = nearest3neigh[i][2]; + int k1 = nearest3neigh[i][0]; + int k2 = nearest3neigh[i][1]; + int k3 = nearest3neigh[i][2]; // normal does not depend on i, setting to zero for (int j = 0; j < DIM; j++) { diff --git a/src/USER-MISC/pair_drip.h b/src/USER-MISC/pair_drip.h index cfc54080a0..13f3391355 100644 --- a/src/USER-MISC/pair_drip.h +++ b/src/USER-MISC/pair_drip.h @@ -40,18 +40,8 @@ class PairDRIP : public Pair { void coeff(int, char **); double init_one(int, int); void init_style(); -// int pack_forward_comm(int, int *, double *, int, int *); -// void unpack_forward_comm(int, int, double *); protected: - double cutmax; // max cutoff for all species - int me; - int maxlocal; // size of numneigh, firstneigh arrays - int pgsize; // size of neighbor page - int oneatom; // max # of neighbors for one atom - MyPage *ipage; // neighbor list pages - - struct Param { int ielement,jelement; double C0,C2,C4,C,delta,lambda,A,z0,B,eta,rhocut,rcut; @@ -65,10 +55,10 @@ class PairDRIP : public Pair { int nelements; // # of unique elements int nparams; // # of stored parameter sets int maxparam; // max # of parameter sets - int nmax; // max # of atoms + double cutmax; // max cutoff for all species int ** nearest3neigh; // nearest 3 neighbors of atoms - void read_file( char * ); + void read_file(char * ); void allocate(); // DRIP specific functions @@ -77,17 +67,16 @@ class PairDRIP : public Pair { double calc_repulsive(int const i, int const j, Param& p, double const rsq, double const * rvec, - int const nbi1, int const nbi2, int const nbi3, double const * ni, - V3 const * dni_dri, V3 const * dni_drnb1, V3 const * dni_drnb2, - V3 const * dni_drnb3, double * const fi, double * const fj); + double const * ni, V3 const * dni_dri, + V3 const * dni_drnb1, V3 const * dni_drnb2, V3 const * dni_drnb3, + double * const fi, double * const fj); void find_nearest3neigh(); - void calc_normal(int const i, int& k1, int& k2, int& k3, - double * const normal, V3 *const dn_dri, V3 *const dn_drk1, - V3 *const dn_drk2, V3 *const dn_drk3); + void calc_normal(int const i, double * const normal, + V3 *const dn_dri, V3 *const dn_drk1, V3 *const dn_drk2, V3 *const dn_drk3); @@ -122,15 +111,13 @@ void deriv_cross( double const* rk, double const* rl, double const* rm, double* const cross, V3 *const dcross_drk, V3 *const dcross_drl, V3 *const dcross_drm); - - + // inline functions inline double dot(double const* x, double const* y) { return x[0] * y[0] + x[1] * y[1] + x[2] * y[2]; } - inline void mat_dot_vec(V3 const* X, double const* y, double* const z) - { + inline void mat_dot_vec(V3 const* X, double const* y, double* const z) { for (int k = 0; k < 3; k++) { z[k] = X[k][0] * y[0] + X[k][1] * y[1] + X[k][2] * y[2]; } @@ -161,5 +148,12 @@ E: All pair coeffs are not set All pair coefficients must be set in the data file or by the pair_coeff command before running a simulation. -*/ +E: No enough neighbors to construct normal +Cannot find three neighbors within cutoff of the target atom. +Check the configuration. + + + + +*/ From 4a4297591e9f48cc7f4910c69891bad0d2546718 Mon Sep 17 00:00:00 2001 From: Trung Nguyen Date: Wed, 17 Apr 2019 12:04:31 -0500 Subject: [PATCH 081/311] Did some more cleanups --- lib/gpu/lal_device.cpp | 2 +- lib/gpu/lal_device.h | 24 +++++++++++++----------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/lib/gpu/lal_device.cpp b/lib/gpu/lal_device.cpp index 3b7f393056..5534d32e5f 100644 --- a/lib/gpu/lal_device.cpp +++ b/lib/gpu/lal_device.cpp @@ -634,7 +634,7 @@ void DeviceT::output_kspace_times(UCL_Timer &time_in, if (screen && times[6]>0.0) { fprintf(screen,"\n\n-------------------------------------"); fprintf(screen,"--------------------------------\n"); - fprintf(screen," Device Time Info (average): "); + fprintf(screen," Device Time Info (average) for kspace: "); fprintf(screen,"\n-------------------------------------"); fprintf(screen,"--------------------------------\n"); diff --git a/lib/gpu/lal_device.h b/lib/gpu/lal_device.h index 4287967210..0c4d5f8c43 100644 --- a/lib/gpu/lal_device.h +++ b/lib/gpu/lal_device.h @@ -57,8 +57,9 @@ class Device { /** \param charge True if charges need to be stored * \param rot True if quaternions need to be stored * \param nlocal Total number of local particles to allocate memory for - * \param host_nlocal Initial number of host particles to allocate memory for * \param nall Total number of local+ghost particles + * \param maxspecial Maximum mumber of special bonded atoms per atom + * \param vel True if velocities need to be stored * * Returns: * - 0 if successfull @@ -66,7 +67,7 @@ class Device { * - -3 if there is an out of memory error * - -4 if the GPU library was not compiled for GPU * - -5 Double precision is not supported on card **/ - int init(Answer &a, const bool charge, const bool rot, + int init(Answer &ans, const bool charge, const bool rot, const int nlocal, const int nall, const int maxspecial, const bool vel=false); @@ -82,12 +83,13 @@ class Device { * - -5 Double precision is not supported on card **/ int init(Answer &ans, const int nlocal, const int nall); - /// Initialize neighbor list storage and build + /// Initialize the neighbor list storage /** \param charge True if charges need to be stored * \param rot True if quaternions need to be stored * \param nlocal Total number of local particles to allocate memory for * \param host_nlocal Initial number of host particles to allocate memory for * \param nall Total number of local+ghost particles + * \param maxspecial Maximum mumber of special bonded atoms per atom * \param gpu_host 0 if host will not perform force calculations, * 1 if gpu_nbor is true, and host needs a half nbor list, * 2 if gpu_nbor is true, and host needs a full nbor list @@ -104,10 +106,10 @@ class Device { * - -4 if the GPU library was not compiled for GPU * - -5 Double precision is not supported on card **/ int init_nbor(Neighbor *nbor, const int nlocal, - const int host_nlocal, const int nall, - const int maxspecial, const int gpu_host, - const int max_nbors, const double cell_size, - const bool pre_cut, const int threads_per_atom); + const int host_nlocal, const int nall, + const int maxspecial, const int gpu_host, + const int max_nbors, const double cell_size, + const bool pre_cut, const int threads_per_atom); /// Output a message for pair_style acceleration with device stats void init_message(FILE *screen, const char *name, @@ -191,7 +193,7 @@ class Device { /// Return host memory usage in bytes double host_memory_usage() const; - /// Return the number of procs sharing a device (size of device commincator) + /// Return the number of procs sharing a device (size of device communicator) inline int procs_per_gpu() const { return _procs_per_gpu; } /// Return the number of threads per proc inline int num_threads() const { return _nthreads; } @@ -278,12 +280,12 @@ class Device { /// Atom Data Atom atom; - // --------------------------- NBOR DATA ---------------------------- + // --------------------------- NBOR SHARED KERNELS ---------------- - /// Neighbor Data + /// Shared kernels for neighbor lists NeighborShared _neighbor_shared; - // ------------------------ LONG RANGE DATA ------------------------- + // ------------------------ LONG RANGE DATA ----------------------- // Long Range Data int _long_range_precompute; From 16bb8a1439fba129139061be0e7ebaf313c21bb5 Mon Sep 17 00:00:00 2001 From: Mingjian Wen Date: Wed, 17 Apr 2019 16:58:18 -0500 Subject: [PATCH 082/311] Clean up comments --- src/USER-MISC/pair_drip.cpp | 174 ++++++++++++------------------------ src/USER-MISC/pair_drip.h | 82 +++++++++-------- 2 files changed, 101 insertions(+), 155 deletions(-) diff --git a/src/USER-MISC/pair_drip.cpp b/src/USER-MISC/pair_drip.cpp index 39c48eb56a..11721f048e 100644 --- a/src/USER-MISC/pair_drip.cpp +++ b/src/USER-MISC/pair_drip.cpp @@ -41,49 +41,41 @@ using namespace LAMMPS_NS; #define MAXLINE 1024 #define DELTA 4 -#define PGDELTA 1 #define HALF 0.5 /* ---------------------------------------------------------------------- */ PairDRIP::PairDRIP(LAMMPS *lmp) : Pair(lmp) { - // initialize element to parameter maps single_enable = 0; - nelements = 0; - elements = NULL; - nparams = maxparam = 0; + restartinfo = 0; + params = NULL; + nearest3neigh = NULL; + elements = NULL; elem2param = NULL; map = NULL; + nelements = 0; cutmax = 0.0; - -//j nmax = 0; -//j maxlocal = 0; -//j ipage = NULL; -//j pgsize = oneatom = 0; - - nearest3neigh = NULL; } /* ---------------------------------------------------------------------- */ PairDRIP::~PairDRIP() { -// delete [] ipage; - if (allocated) { memory->destroy(setflag); memory->destroy(cutsq); + delete [] map; } - if (elements) + if (elements != NULL) { for (int i = 0; i < nelements; i++) delete [] elements[i]; - delete [] elements; + delete [] elements; + elements = NULL; + } memory->destroy(params); memory->destroy(elem2param); - if (allocated) delete [] map; - memory->destroy(nearest3neigh); } @@ -99,7 +91,6 @@ void PairDRIP::init_style() error->all(FLERR,"Pair style drip requires atom attribute molecule"); // need a full neighbor list, including neighbors of ghosts - int irequest = neighbor->request(this,instance_me); neighbor->requests[irequest]->half = 0; neighbor->requests[irequest]->full = 1; @@ -181,7 +172,6 @@ void PairDRIP::coeff(int narg, char **arg) } } - read_file(arg[2]); int count = 0; @@ -216,8 +206,8 @@ void PairDRIP::read_file(char *filename) int params_per_line = 14; char **words = new char*[params_per_line+1]; memory->sfree(params); - params = NULL; - nparams = maxparam = 0; + int nparams = 0; + int maxparam = 0; // open file on proc 0 @@ -326,9 +316,7 @@ void PairDRIP::read_file(char *filename) // set max cutoff if(params[nparams].rcut > cutmax) cutmax = params[nparams].rcut; - nparams++; - //if(nparams >= pow(atom->ntypes,3)) break; } memory->destroy(elem2param); @@ -353,18 +341,15 @@ void PairDRIP::read_file(char *filename) void PairDRIP::compute(int eflag, int vflag) { - int i,j,ii,jj,inum,jnum,itype,jtype,k,l,kk,ll; tagint itag,jtag; - double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fpair,fpair1,fpair2, r, rsq; + double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fpair,r,rsq; int *ilist,*jlist,*numneigh,**firstneigh; double ni[DIM]; double dni_dri[DIM][DIM], dni_drnb1[DIM][DIM]; double dni_drnb2[DIM][DIM], dni_drnb3[DIM][DIM]; - - evdwl = 0.0; ev_init(eflag,vflag); double **x = atom->x; @@ -381,7 +366,6 @@ void PairDRIP::compute(int eflag, int vflag) find_nearest3neigh(); - // loop over neighbors of my atoms for (ii = 0; ii < inum; ii++) { i = ilist[ii]; itag = tag[i]; @@ -392,8 +376,7 @@ void PairDRIP::compute(int eflag, int vflag) jlist = firstneigh[i]; jnum = numneigh[i]; - - // normal and its derivatives w.r.t. atom i and its 3 nearest neighs + // normal and its derivatives w.r.t. atom i and its 3 nearest neighbors calc_normal(i, ni, dni_dri,dni_drnb1, dni_drnb2, dni_drnb3); double fi[DIM] = {0., 0., 0.}; @@ -412,7 +395,6 @@ void PairDRIP::compute(int eflag, int vflag) Param& p = params[iparam_ij]; double rcutsq = p.rcutsq; - // only include the interation between different layers if (rsq < rcutsq && atom->molecule[i] != atom->molecule[j]) { @@ -425,13 +407,14 @@ void PairDRIP::compute(int eflag, int vflag) ni, dni_dri, dni_drnb1, dni_drnb2, dni_drnb3, fi, fj); if (eflag) evdwl = HALF * (phi_repul + phi_attr); + else evdwl = 0.0; if (evflag) ev_tally(i,j,nlocal,newton_pair, evdwl,0.0,0,0,0,0); f[j][0] += fj[0]; f[j][1] += fj[1]; f[j][2] += fj[2]; - // *2 since v_tally has a 0.5 coeff + // multiply 2 since v_tally has a 0.5 coeff fj[0] *= 2; fj[1] *= 2; fj[2] *= 2; if (vflag_atom) v_tally(j, fj, x[j]); @@ -442,7 +425,7 @@ void PairDRIP::compute(int eflag, int vflag) f[i][1] += fi[1]; f[i][2] += fi[2]; - // *2 since v_tally has a 0.5 coeff + // multiply 2 since v_tally has a 0.5 coeff fi[0] *= 2; fi[1] *= 2; fi[2] *= 2; if (vflag_atom) v_tally(i, fi, x[i]); @@ -452,45 +435,15 @@ void PairDRIP::compute(int eflag, int vflag) if (vflag_fdotr) virial_fdotr_compute(); - - -printf("@@@ evflags in compute\n"); -printf("@@@ eflag_either=%d\n", eflag_either); -printf("@@@ eflag_global=%d\n", eflag_global); -printf("@@@ eflag_atom=%d\n", eflag_atom); -printf("@@@ vflag_either=%d\n", vflag_either); -printf("@@@ vflag_global=%d\n", vflag_global); -printf("@@@ vflag_atom=%d\n", vflag_atom); -printf("@@@ vflag_fdotr=%d\n", vflag_fdotr); - - -printf("@@@@@@@@@@@@@@@@@@@@@@@ virial\n"); -printf("%f, %f, %f, %f, %f, %f\n", virial[0], virial[1], virial[2], virial[3], virial[4], virial[5]); -printf("@@@@@@@@@@@@@@@@@@@@@@@ virial fdotr\n"); -virial[0]= virial[1]= virial[2]= virial[3]= virial[4]= virial[5]=0.; -virial_fdotr_compute(); -printf("%f, %f, %f, %f, %f, %f\n", virial[0], virial[1], virial[2], virial[3], virial[4], virial[5]); - -printf("@@@@@@@@@@@@@@@@@@@@@@@ virial from atom virial\n"); - - int allnum = list->inum + list->gnum; - double v[6] = {0., 0., 0., 0., 0., 0.}; - for (int kk=0; kkf; double **x = atom->x; - // params double C0 = p.C0; double C2 = p.C2; double C4 = p.C4; @@ -544,8 +498,6 @@ double PairDRIP::calc_repulsive(int const i, int const j, int nbj2 = nearest3neigh[j][1]; int nbj3 = nearest3neigh[j][2]; - double r = sqrt(rsq); - double fnbi1[DIM]; double fnbi2[DIM]; double fnbi3[DIM]; @@ -566,9 +518,9 @@ double PairDRIP::calc_repulsive(int const i, int const j, V3 drhosqij_drnb2; V3 drhosqij_drnb3; + double r = sqrt(rsq); - // derivative of rhosq w.r.t coordinates of atoms i, j, and the nearests 3 - // neighs of i + // derivative of rhosq w.r.t. atoms i j and the nearests 3 neighs of i get_drhosqij(rvec, ni, dni_dri, dni_drnb1, dni_drnb2, dni_drnb3, drhosqij_dri, drhosqij_drj, drhosqij_drnb1, drhosqij_drnb2, drhosqij_drnb3); @@ -588,10 +540,11 @@ double PairDRIP::calc_repulsive(int const i, int const j, double dtp; double tp = tap(r, cutoff, dtp); - /* exponential part */ + // exponential part double V1 = exp(-lambda * (r - z0)); double dV1 = -V1 * lambda; + // total energy double phi = tp * V1 * V2; for (int k = 0; k < DIM; k++) { @@ -601,16 +554,15 @@ double PairDRIP::calc_repulsive(int const i, int const j, fi[k] += tmp; fj[k] -= tmp; - // the following incldue the transverse decay part tdij and the dihedral part gij + // contributions from the transverse decay part tdij and the dihedral part gij + // derivative of V2 contribute to atoms i, j fi[k] -= HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_dri[k] + dgij_dri[k]); fj[k] -= HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drj[k] + dgij_drj[k]); - // derivative of V2 contribute to nearest 3 neighs of atom i fnbi1[k] =- HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb1[k] + dgij_drk1[k]); fnbi2[k] =- HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb2[k] + dgij_drk2[k]); fnbi3[k] =- HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb3[k] + dgij_drk3[k]); - // derivative of V2 contribute to nearest 3 neighs of atom j fnbj1[k] =- HALF * tp * V1 * dgij_drl1[k]; fnbj2[k] =- HALF * tp * V1 * dgij_drl2[k]; @@ -627,8 +579,7 @@ double PairDRIP::calc_repulsive(int const i, int const j, } if (vflag_atom) { - - // *2 since v_tally has a 0.5 coeff + // multiply since v_tally has a 0.5 coeff for (int k = 0; k < DIM; k++) { fnbi1[k]*=2; fnbi2[k]*=2; @@ -649,16 +600,13 @@ double PairDRIP::calc_repulsive(int const i, int const j, } - /* ---------------------------------------------------------------------- */ void PairDRIP::find_nearest3neigh() { - int i,j,ii,jj,n,allnum,jnum,itype,jtype; double xtmp,ytmp,ztmp,delx,dely,delz,rsq; int *ilist,*jlist,*numneigh,**firstneigh; - //int *neighptr; double **x = atom->x; int *type = atom->type; @@ -683,12 +631,11 @@ void PairDRIP::find_nearest3neigh() jlist = firstneigh[i]; jnum = numneigh[i]; - // init nb1 to be the 1st nearest neigh, nb3 the 3rd nearest int nb1 = -1; int nb2 = -1; int nb3 = -1; - double nb1_rsq = 1.1e10; + double nb1_rsq = 1.0e10 + 1; double nb2_rsq = 2.0e10; double nb3_rsq = 3.0e10; @@ -741,13 +688,11 @@ void PairDRIP::find_nearest3neigh() } // loop over ii } - /* ---------------------------------------------------------------------- */ void PairDRIP::calc_normal(int const i, double * const normal, V3 *const dn_dri, V3 *const dn_drk1, V3 *const dn_drk2, V3 *const dn_drk3) { - int k1 = nearest3neigh[i][0]; int k2 = nearest3neigh[i][1]; int k3 = nearest3neigh[i][2]; @@ -764,9 +709,9 @@ void PairDRIP::calc_normal(int const i, double * const normal, deriv_cross(x[k1], x[k2], x[k3], normal, dn_drk1, dn_drk2, dn_drk3); } - /* ---------------------------------------------------------------------- */ -void PairDRIP::get_drhosqij( double const* rij, double const* ni, + +void PairDRIP::get_drhosqij(double const* rij, double const* ni, V3 const* dni_dri, V3 const* dni_drn1, V3 const* dni_drn2, V3 const* dni_drn3, double* const drhosq_dri, double* const drhosq_drj, @@ -795,12 +740,10 @@ void PairDRIP::get_drhosqij( double const* rij, double const* ni, } } +/* ---------------------------------------------------------------------- + derivartive of transverse decay function f(rho) w.r.t. rho +------------------------------------------------------------------------- */ - -/* ---------------------------------------------------------------------- */ - - -// derivartive of transverse decay function f(rho) w.r.t rho double PairDRIP::td(double C0, double C2, double C4, double delta, double const* const rvec, double r, const double* const n, @@ -810,7 +753,8 @@ double PairDRIP::td(double C0, double C2, double C4, double delta, rho_sq = r * r - n_dot_r * n_dot_r; - if (rho_sq < 0) { // in case n is [0, 0, 1] and rho_sq is negative due to numerical error + // in case n is [0, 0, 1] and rho_sq is negative due to numerical error + if (rho_sq < 0) { rho_sq = 0; } @@ -822,9 +766,10 @@ double PairDRIP::td(double C0, double C2, double C4, double delta, return td; } +/* ---------------------------------------------------------------------- + derivartive of dihedral angle func gij w.r.t rho, and atom positions +------------------------------------------------------------------------- */ -/* ---------------------------------------------------------------------- */ -// derivartive of dihedral angle func gij w.r.t rho, and atom positions double PairDRIP::dihedral( const int i, const int j, Param& p, double const rhosq, double& d_drhosq, double* const d_dri, double* const d_drj, @@ -935,9 +880,10 @@ double PairDRIP::dihedral( return dihe; } +/* ---------------------------------------------------------------------- + compute cos(omega_kijl) and the derivateives +------------------------------------------------------------------------- */ -/* ---------------------------------------------------------------------- */ -// compute cos(omega_kijl) and the derivateives double PairDRIP::deriv_cos_omega( double const* rk, double const* ri, double const* rj, double const* rl, double* const dcos_drk, double* const dcos_dri, double* const dcos_drj, double* const dcos_drl) @@ -954,10 +900,12 @@ double PairDRIP::deriv_cos_omega( double const* rk, double const* ri, double deijl_drl[DIM][DIM]; - // ejik and derivatives (Note the dejik_dri ... returned are actually the transpose) + // ejik and derivatives + // Note the returned dejik_dri ... are actually the transpose deriv_cross(ri, rj, rk, ejik, dejik_dri, dejik_drj, dejik_drk); - // flip sign because deriv_cross computes rij cross rik, here we need rji cross rik + // flip sign + // deriv_cross computes rij cross rik, here we need rji cross rik for (int m = 0; m < DIM; m++) { ejik[m] = -ejik[m]; for (int n = 0; n < DIM; n++) { @@ -1002,11 +950,8 @@ double PairDRIP::deriv_cos_omega( double const* rk, double const* ri, return cos_omega; } - - - /* ---------------------------------------------------------------------- */ -// tap cutoff function + double PairDRIP::tap(double r, double cutoff, double& dtap) { double t; @@ -1027,9 +972,8 @@ double PairDRIP::tap(double r, double cutoff, double& dtap) return t; } - /* ---------------------------------------------------------------------- */ -// tap rho + double PairDRIP::tap_rho(double rhosq, double cut_rhosq, double& drhosq) { double roc_sq; @@ -1047,11 +991,12 @@ double PairDRIP::tap_rho(double rhosq, double cut_rhosq, double& drhosq) } -/* ---------------------------------------------------------------------- */ -// Compute the normalized cross product of two vector rkl, rkm, and the -// derivates w.r.t rk, rl, rm. -// NOTE, the dcross_drk, dcross_drl, and dcross_drm is actually the transpose -// of the actual one. +/* ---------------------------------------------------------------------- + Compute the normalized cross product of two vector rkl, rkm, and the + derivates w.r.t rk, rl, rm. + NOTE, the returned dcross_drk, dcross_drl, and dcross_drm are actually the + transpose. +------------------------------------------------------------------------- */ void PairDRIP::deriv_cross( double const* rk, double const* rl, double const* rm, double* const cross, V3 *const dcross_drk, @@ -1134,6 +1079,3 @@ void PairDRIP::deriv_cross( double const* rk, double const* rl, double const* rm } } - - - diff --git a/src/USER-MISC/pair_drip.h b/src/USER-MISC/pair_drip.h index 13f3391355..c4a130d226 100644 --- a/src/USER-MISC/pair_drip.h +++ b/src/USER-MISC/pair_drip.h @@ -11,6 +11,17 @@ See the README file in the top-level LAMMPS directory. ------------------------------------------------------------------------- */ +/* ---------------------------------------------------------------------- + Contributing author: Mingjian Wen (University of Minnesota) + e-mail: wenxx151@umn.edu + based on "pair_style kolmogorov/crespi/full" by Wengen Ouyang + + This implements the DRIP model as described in + M. Wen, S. Carr, S. Fang, E. Kaxiras, and E. B. Tadmor, Phys. Rev. B, 98, + 235404 (2018). +------------------------------------------------------------------------- */ + + #ifdef PAIR_CLASS PairStyle(drip,PairDRIP) @@ -46,70 +57,67 @@ class PairDRIP : public Pair { int ielement,jelement; double C0,C2,C4,C,delta,lambda,A,z0,B,eta,rhocut,rcut; double rhocutsq, rcutsq; - double delta2inv,z06; }; Param *params; // parameter set for I-J interactions + int ** nearest3neigh; // nearest 3 neighbors of atoms char **elements; // names of unique elements int **elem2param; // mapping from element pairs to parameters int *map; // mapping from atom types to elements int nelements; // # of unique elements - int nparams; // # of stored parameter sets - int maxparam; // max # of parameter sets double cutmax; // max cutoff for all species - int ** nearest3neigh; // nearest 3 neighbors of atoms void read_file(char * ); void allocate(); // DRIP specific functions - double calc_attractive(int const i, int const j, Param& p, - double const rsq, double const * rvec, double * const fi, double * const fj); + double calc_attractive(int const, int const, Param&, double const, + double const *, double * const, double * const); - double calc_repulsive(int const i, int const j, - Param& p, double const rsq, double const * rvec, - double const * ni, V3 const * dni_dri, - V3 const * dni_drnb1, V3 const * dni_drnb2, V3 const * dni_drnb3, - double * const fi, double * const fj); + double calc_repulsive(int const , int const , + Param& , double const , double const * , + double const * , V3 const * , + V3 const * , V3 const * , V3 const * , + double * const , double * const ); void find_nearest3neigh(); - void calc_normal(int const i, double * const normal, - V3 *const dn_dri, V3 *const dn_drk1, V3 *const dn_drk2, V3 *const dn_drk3); + void calc_normal(int const , double * const , + V3 *const , V3 *const , V3 *const , V3 *const ); -void get_drhosqij( double const* rij, double const* ni, - V3 const* dni_dri, V3 const* dni_drn1, - V3 const* dni_drn2, V3 const* dni_drn3, - double* const drhosq_dri, double* const drhosq_drj, - double* const drhosq_drn1, double* const drhosq_drn2, - double* const drhosq_drn3); +void get_drhosqij( double const* , double const* , + V3 const* , V3 const* , + V3 const* , V3 const* , + double* const , double* const , + double* const , double* const , + double* const ); - double td(double C0, double C2, double C4, double delta, - double const* const rvec, double r, - const double* const n, - double& rho_sq, double& dtd); + double td(double , double , double , double , + double const* const , double , + const double* const , + double& , double& ); double dihedral( - const int i, const int j, Param& p, double const rhosq, double& d_drhosq, - double* const d_dri, double* const d_drj, - double* const d_drk1, double* const d_drk2, double* const d_drk3, - double* const d_drl1, double* const d_drl2, double* const d_drl3); + const int , const int , Param& , double const , double& , + double* const , double* const , + double* const , double* const , double* const , + double* const , double* const , double* const ); - double deriv_cos_omega( double const* rk, double const* ri, - double const* rj, double const* rl, double* const dcos_drk, - double* const dcos_dri, double* const dcos_drj, double* const dcos_drl); + double deriv_cos_omega( double const* , double const* , + double const* , double const* , double* const , + double* const , double* const , double* const ); - double tap(double r, double cutoff, double& dtap); + double tap(double , double , double& ); - double tap_rho(double rhosq, double cut_rhosq, double& drhosq); + double tap_rho(double , double , double& ); -void deriv_cross( double const* rk, double const* rl, double const* rm, - double* const cross, V3 *const dcross_drk, - V3 *const dcross_drl, V3 *const dcross_drm); +void deriv_cross( double const* , double const* , double const* , + double* const , V3 *const , + V3 *const , V3 *const ); // inline functions inline double dot(double const* x, double const* y) { @@ -123,7 +131,6 @@ void deriv_cross( double const* rk, double const* rl, double const* rm, } } - }; } @@ -153,7 +160,4 @@ E: No enough neighbors to construct normal Cannot find three neighbors within cutoff of the target atom. Check the configuration. - - - */ From f27ed871f9a39333f544bc3c52cb086e2464547b Mon Sep 17 00:00:00 2001 From: Mingjian Wen Date: Wed, 17 Apr 2019 18:11:31 -0500 Subject: [PATCH 083/311] Uncrustify code --- src/USER-MISC/pair_drip.cpp | 115 +++++++++++++++++------------------- src/USER-MISC/pair_drip.h | 88 ++++++++++++--------------- 2 files changed, 90 insertions(+), 113 deletions(-) diff --git a/src/USER-MISC/pair_drip.cpp b/src/USER-MISC/pair_drip.cpp index 11721f048e..e7b20e96a7 100644 --- a/src/USER-MISC/pair_drip.cpp +++ b/src/USER-MISC/pair_drip.cpp @@ -438,12 +438,11 @@ if (vflag_fdotr) } /* ---------------------------------------------------------------------- - Attractive part, i.e. the r^(-6) part + Attractive part, i.e. the r^(-6) part ------------------------------------------------------------------------- */ double PairDRIP::calc_attractive(int const i, int const j, Param& p, - double const rsq, double const * rvec, - double * const fi, double * const fj) + double const rsq, double const *rvec, double *const fi, double *const fj) { double const z0 = p.z0; double const A = p.A; @@ -458,6 +457,7 @@ double PairDRIP::calc_attractive(int const i, int const j, Param& p, double phi = -r6 * tp; double fpair = -HALF * (r6 * dtp + dr6 * tp); + fi[0] += rvec[0] * fpair / r; fi[1] += rvec[1] * fpair / r; fi[2] += rvec[2] * fpair / r; @@ -469,14 +469,13 @@ double PairDRIP::calc_attractive(int const i, int const j, Param& p, } /* ---------------------------------------------------------------------- - Repulsive part that depends on transverse distance and dihedral angle + Repulsive part that depends on transverse distance and dihedral angle ------------------------------------------------------------------------- */ -double PairDRIP::calc_repulsive(int const i, int const j, - Param& p, double const rsq, double const * rvec, - double const * ni, V3 const * dni_dri, V3 const * dni_drnb1, - V3 const * dni_drnb2, V3 const * dni_drnb3, - double * const fi, double * const fj) +double PairDRIP::calc_repulsive(int const i, int const j, Param& p, + double const rsq, double const *rvec, double const *ni, + V3 const *dni_dri, V3 const *dni_drnb1, V3 const *dni_drnb2, + V3 const *dni_drnb3, double *const fi, double *const fj) { double **f = atom->f; double **x = atom->x; @@ -548,7 +547,6 @@ double PairDRIP::calc_repulsive(int const i, int const j, double phi = tp * V1 * V2; for (int k = 0; k < DIM; k++) { - // forces due to derivatives of tap and V1 double tmp = HALF * (dtp * V1 + tp * dV1) * V2 * rvec[k] / r; fi[k] += tmp; @@ -560,13 +558,13 @@ double PairDRIP::calc_repulsive(int const i, int const j, fi[k] -= HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_dri[k] + dgij_dri[k]); fj[k] -= HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drj[k] + dgij_drj[k]); // derivative of V2 contribute to nearest 3 neighs of atom i - fnbi1[k] =- HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb1[k] + dgij_drk1[k]); - fnbi2[k] =- HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb2[k] + dgij_drk2[k]); - fnbi3[k] =- HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb3[k] + dgij_drk3[k]); + fnbi1[k] = -HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb1[k] + dgij_drk1[k]); + fnbi2[k] = -HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb2[k] + dgij_drk2[k]); + fnbi3[k] = -HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb3[k] + dgij_drk3[k]); // derivative of V2 contribute to nearest 3 neighs of atom j - fnbj1[k] =- HALF * tp * V1 * dgij_drl1[k]; - fnbj2[k] =- HALF * tp * V1 * dgij_drl2[k]; - fnbj3[k] =- HALF * tp * V1 * dgij_drl3[k]; + fnbj1[k] = -HALF * tp * V1 * dgij_drl1[k]; + fnbj2[k] = -HALF * tp * V1 * dgij_drl2[k]; + fnbj3[k] = -HALF * tp * V1 * dgij_drl3[k]; } for (int k = 0; k < DIM; k++) { @@ -581,12 +579,12 @@ double PairDRIP::calc_repulsive(int const i, int const j, if (vflag_atom) { // multiply since v_tally has a 0.5 coeff for (int k = 0; k < DIM; k++) { - fnbi1[k]*=2; - fnbi2[k]*=2; - fnbi3[k]*=2; - fnbj1[k]*=2; - fnbj2[k]*=2; - fnbj3[k]*=2; + fnbi1[k] *= 2; + fnbi2[k] *= 2; + fnbi3[k] *= 2; + fnbj1[k] *= 2; + fnbj2[k] *= 2; + fnbj3[k] *= 2; } v_tally(nbi1, fnbi1, x[nbi1]); v_tally(nbi2, fnbi2, x[nbi2]); @@ -599,14 +597,13 @@ double PairDRIP::calc_repulsive(int const i, int const j, return phi; } - /* ---------------------------------------------------------------------- */ void PairDRIP::find_nearest3neigh() { - int i,j,ii,jj,n,allnum,jnum,itype,jtype; - double xtmp,ytmp,ztmp,delx,dely,delz,rsq; - int *ilist,*jlist,*numneigh,**firstneigh; + int i, j, ii, jj, n, allnum, jnum, itype, jtype; + double xtmp, ytmp, ztmp, delx, dely, delz, rsq; + int *ilist, *jlist, *numneigh, **firstneigh; double **x = atom->x; int *type = atom->type; @@ -646,13 +643,12 @@ void PairDRIP::find_nearest3neigh() delx = x[j][0] - xtmp; dely = x[j][1] - ytmp; delz = x[j][2] - ztmp; - rsq = delx*delx + dely*dely + delz*delz; + rsq = delx * delx + dely * dely + delz * delz; int iparam_ij = elem2param[itype][jtype]; double rcutsq = params[iparam_ij].rcutsq; if (rsq < rcutsq && atom->molecule[i] == atom->molecule[j]) { - // find the 3 nearest neigh if (rsq < nb1_rsq) { nb3 = nb2; @@ -678,20 +674,20 @@ void PairDRIP::find_nearest3neigh() // store neighbors to be used later to compute normal if (nb1_rsq >= 1.0e10 || nb2_rsq >= 1.0e10 || nb3_rsq >= 1.0e10) { - error->one(FLERR,"No enough neighbors to construct normal."); - } else{ + error->one(FLERR, "No enough neighbors to construct normal."); + } + else{ nearest3neigh[i][0] = nb1; nearest3neigh[i][1] = nb2; nearest3neigh[i][2] = nb3; } - } // loop over ii } /* ---------------------------------------------------------------------- */ -void PairDRIP::calc_normal(int const i, double * const normal, - V3 *const dn_dri, V3 *const dn_drk1, V3 *const dn_drk2, V3 *const dn_drk3) +void PairDRIP::calc_normal(int const i, double *const normal, + V3 *const dn_dri, V3 *const dn_drk1, V3 *const dn_drk2, V3 *const dn_drk3) { int k1 = nearest3neigh[i][0]; int k2 = nearest3neigh[i][1]; @@ -711,12 +707,10 @@ void PairDRIP::calc_normal(int const i, double * const normal, /* ---------------------------------------------------------------------- */ -void PairDRIP::get_drhosqij(double const* rij, double const* ni, - V3 const* dni_dri, V3 const* dni_drn1, - V3 const* dni_drn2, V3 const* dni_drn3, - double* const drhosq_dri, double* const drhosq_drj, - double* const drhosq_drn1, double* const drhosq_drn2, - double* const drhosq_drn3) +void PairDRIP::get_drhosqij(double const *rij, double const *ni, + V3 const *dni_dri, V3 const *dni_drn1, V3 const *dni_drn2, V3 const *dni_drn3, + double *const drhosq_dri, double *const drhosq_drj, double *const drhosq_drn1, + double *const drhosq_drn2, double *const drhosq_drn3) { int k; double ni_dot_rij = 0; @@ -741,12 +735,11 @@ void PairDRIP::get_drhosqij(double const* rij, double const* ni, } /* ---------------------------------------------------------------------- - derivartive of transverse decay function f(rho) w.r.t. rho + derivartive of transverse decay function f(rho) w.r.t. rho ------------------------------------------------------------------------- */ double PairDRIP::td(double C0, double C2, double C4, double delta, - double const* const rvec, double r, - const double* const n, + double const *const rvec, double r, const double *const n, double& rho_sq, double& dtd) { double n_dot_r = dot(n, rvec); @@ -767,14 +760,14 @@ double PairDRIP::td(double C0, double C2, double C4, double delta, } /* ---------------------------------------------------------------------- - derivartive of dihedral angle func gij w.r.t rho, and atom positions + derivartive of dihedral angle func gij w.r.t rho, and atom positions ------------------------------------------------------------------------- */ -double PairDRIP::dihedral( - const int i, const int j, Param& p, double const rhosq, double& d_drhosq, - double* const d_dri, double* const d_drj, - double* const d_drk1, double* const d_drk2, double* const d_drk3, - double* const d_drl1, double* const d_drl2, double* const d_drl3) +double PairDRIP::dihedral(const int i, const int j, Param& p, + double const rhosq, double& d_drhosq, + double *const d_dri, double *const d_drj, + double *const d_drk1, double *const d_drk2, double *const d_drk3, + double *const d_drl1, double *const d_drl2, double *const d_drl3) { double **x = atom->x; @@ -817,7 +810,7 @@ double PairDRIP::dihedral( // cos_omega_kijl and the derivatives w.r.t coordinates for (int m = 0; m < 3; m++) { for (int n = 0; n < 3; n++) { - cos_kl[m][n] = deriv_cos_omega( x[k[m]], x[i], x[j], x[l[n]], + cos_kl[m][n] = deriv_cos_omega(x[k[m]], x[i], x[j], x[l[n]], dcos_kl[m][n][0], dcos_kl[m][n][1], dcos_kl[m][n][2], dcos_kl[m][n][3]); } } @@ -881,12 +874,12 @@ double PairDRIP::dihedral( } /* ---------------------------------------------------------------------- - compute cos(omega_kijl) and the derivateives + compute cos(omega_kijl) and the derivateives ------------------------------------------------------------------------- */ -double PairDRIP::deriv_cos_omega( double const* rk, double const* ri, - double const* rj, double const* rl, double* const dcos_drk, - double* const dcos_dri, double* const dcos_drj, double* const dcos_drl) +double PairDRIP::deriv_cos_omega(double const *rk, double const *ri, + double const *rj, double const *rl, double *const dcos_drk, + double *const dcos_dri, double *const dcos_drj, double *const dcos_drl) { double ejik[DIM]; double eijl[DIM]; @@ -990,17 +983,16 @@ double PairDRIP::tap_rho(double rhosq, double cut_rhosq, double& drhosq) return t; } - /* ---------------------------------------------------------------------- - Compute the normalized cross product of two vector rkl, rkm, and the - derivates w.r.t rk, rl, rm. - NOTE, the returned dcross_drk, dcross_drl, and dcross_drm are actually the - transpose. + Compute the normalized cross product of two vector rkl, rkm, and the + derivates w.r.t rk, rl, rm. + NOTE, the returned dcross_drk, dcross_drl, and dcross_drm are actually the + transpose. ------------------------------------------------------------------------- */ -void PairDRIP::deriv_cross( double const* rk, double const* rl, double const* rm, - double* const cross, V3 *const dcross_drk, - V3 *const dcross_drl, V3 *const dcross_drm) +void PairDRIP::deriv_cross(double const *rk, double const *rl, + double const *rm, double *const cross, + V3 *const dcross_drk, V3 *const dcross_drl, V3 *const dcross_drm) { double x[DIM]; double y[DIM]; @@ -1077,5 +1069,4 @@ void PairDRIP::deriv_cross( double const* rk, double const* rl, double const* rm dcross_drk[i][j] = -(dcross_drl[i][j] + dcross_drm[i][j]); } } - } diff --git a/src/USER-MISC/pair_drip.h b/src/USER-MISC/pair_drip.h index c4a130d226..f31f8f07b8 100644 --- a/src/USER-MISC/pair_drip.h +++ b/src/USER-MISC/pair_drip.h @@ -24,7 +24,7 @@ #ifdef PAIR_CLASS -PairStyle(drip,PairDRIP) +PairStyle(drip, PairDRIP) #else @@ -38,11 +38,11 @@ PairStyle(drip,PairDRIP) namespace LAMMPS_NS { #define DIM 3 -typedef double V3[3]; +typedef double V3[3]; class PairDRIP : public Pair { - public: +public: PairDRIP(class LAMMPS *); virtual ~PairDRIP(); @@ -52,87 +52,73 @@ class PairDRIP : public Pair { double init_one(int, int); void init_style(); - protected: - struct Param { - int ielement,jelement; - double C0,C2,C4,C,delta,lambda,A,z0,B,eta,rhocut,rcut; +protected: + struct Param + { + int ielement, jelement; + double C0, C2, C4, C, delta, lambda, A, z0, B, eta, rhocut, rcut; double rhocutsq, rcutsq; }; Param *params; // parameter set for I-J interactions - int ** nearest3neigh; // nearest 3 neighbors of atoms + int **nearest3neigh; // nearest 3 neighbors of atoms char **elements; // names of unique elements int **elem2param; // mapping from element pairs to parameters int *map; // mapping from atom types to elements int nelements; // # of unique elements double cutmax; // max cutoff for all species - void read_file(char * ); + void read_file(char *); void allocate(); // DRIP specific functions double calc_attractive(int const, int const, Param&, double const, - double const *, double * const, double * const); - - double calc_repulsive(int const , int const , - Param& , double const , double const * , - double const * , V3 const * , - V3 const * , V3 const * , V3 const * , - double * const , double * const ); + double const *, double *const, double *const); + double calc_repulsive(int const, int const, Param&, double const, + double const *, double const *, V3 const *, V3 const *, V3 const *, + V3 const *, double *const, double *const); void find_nearest3neigh(); + void calc_normal(int const, double *const, V3 *const, V3 *const, V3 *const, + V3 *const); - void calc_normal(int const , double * const , - V3 *const , V3 *const , V3 *const , V3 *const ); + void get_drhosqij(double const *, double const *, V3 const *, V3 const *, + V3 const *, V3 const *, double *const, double *const, double *const, + double *const, double *const); + double td(double, double, double, double, double const *const, double, + const double *const, double&, double&); + double dihedral(const int, const int, Param&, double const, double&, + double *const, double *const, double *const, double *const, double *const, + double *const, double *const, double *const); -void get_drhosqij( double const* , double const* , - V3 const* , V3 const* , - V3 const* , V3 const* , - double* const , double* const , - double* const , double* const , - double* const ); + double deriv_cos_omega(double const *, double const *, double const *, + double const *, double *const, double *const, double *const, + double *const); + double tap(double, double, double&); - double td(double , double , double , double , - double const* const , double , - const double* const , - double& , double& ); + double tap_rho(double, double, double&); - double dihedral( - const int , const int , Param& , double const , double& , - double* const , double* const , - double* const , double* const , double* const , - double* const , double* const , double* const ); - - double deriv_cos_omega( double const* , double const* , - double const* , double const* , double* const , - double* const , double* const , double* const ); - - double tap(double , double , double& ); - - double tap_rho(double , double , double& ); - -void deriv_cross( double const* , double const* , double const* , - double* const , V3 *const , - V3 *const , V3 *const ); + void deriv_cross(double const *, double const *, double const *, + double *const, V3 *const, V3 *const, V3 *const); // inline functions - inline double dot(double const* x, double const* y) { - return x[0] * y[0] + x[1] * y[1] + x[2] * y[2]; + inline double dot(double const *x, double const *y) + { + return x[0]*y[0]+x[1]*y[1]+x[2]*y[2]; } - - inline void mat_dot_vec(V3 const* X, double const* y, double* const z) { + inline void mat_dot_vec(V3 const *X, double const *y, double *const z) + { for (int k = 0; k < 3; k++) { - z[k] = X[k][0] * y[0] + X[k][1] * y[1] + X[k][2] * y[2]; + z[k] = X[k][0]*y[0]+X[k][1]*y[1]+X[k][2]*y[2]; } } }; - } #endif From 4621af4b9d78f7cd7e6dbe40910a596cdfd93379 Mon Sep 17 00:00:00 2001 From: Mingjian Wen Date: Wed, 17 Apr 2019 21:34:55 -0500 Subject: [PATCH 084/311] Modify to accept NULL for pair_coeff --- src/USER-MISC/pair_drip.cpp | 50 +++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/src/USER-MISC/pair_drip.cpp b/src/USER-MISC/pair_drip.cpp index e7b20e96a7..c79f623a47 100644 --- a/src/USER-MISC/pair_drip.cpp +++ b/src/USER-MISC/pair_drip.cpp @@ -49,6 +49,7 @@ PairDRIP::PairDRIP(LAMMPS *lmp) : Pair(lmp) { single_enable = 0; restartinfo = 0; + manybody_flag = 1; params = NULL; nearest3neigh = NULL; @@ -106,14 +107,9 @@ void PairDRIP::allocate() allocated = 1; int n = atom->ntypes; - // MOVE init of setflag ot other places; se pair_sw memory->create(setflag,n+1,n+1,"pair:setflag"); - for (int i = 1; i <= n; i++) - for (int j = i; j <= n; j++) - setflag[i][j] = 0; - memory->create(cutsq,n+1,n+1,"pair:cutsq"); - map = new int[atom->ntypes+1]; + map = new int[n+1]; } /* ---------------------------------------------------------------------- @@ -135,13 +131,14 @@ void PairDRIP::coeff(int narg, char **arg) { int i,j,n; - if (narg != 3 + atom->ntypes) - error->all(FLERR,"Incorrect args for pair coefficients"); if (!allocated) allocate(); - int ilo,ihi,jlo,jhi; - force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); - force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); + if (narg != 3 + atom->ntypes) + error->all(FLERR,"Incorrect args for pair coefficients"); + + // insure I,J args are * * + if (strcmp(arg[0],"*") != 0 || strcmp(arg[1],"*") != 0) + error->all(FLERR,"Incorrect args for pair coefficients"); // read args that map atom types to elements in potential file // map[i] = which element the Ith atom type is, -1 if NULL @@ -174,13 +171,20 @@ void PairDRIP::coeff(int narg, char **arg) read_file(arg[2]); + + // clear setflag since coeff() called once with I,J = * * + n = atom->ntypes; + for (i = 1; i <= n; i++) + for (j = i; j <= n; j++) + setflag[i][j] = 0; + int count = 0; - for (int i = ilo; i <= ihi; i++) { - for (int j = MAX(jlo,i); j <= jhi; j++) { - setflag[i][j] = 1; - count++; - } - } + for (i = 1; i <= n; i++) + for (j = i; j <= n; j++) + if (map[i] >= 0 && map[j] >= 0) { + setflag[i][j] = 1; + count++; + } if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); } @@ -601,7 +605,7 @@ double PairDRIP::calc_repulsive(int const i, int const j, Param& p, void PairDRIP::find_nearest3neigh() { - int i, j, ii, jj, n, allnum, jnum, itype, jtype; + int i, j, ii, jj, n, allnum, jnum, itype, jtype, size; double xtmp, ytmp, ztmp, delx, dely, delz, rsq; int *ilist, *jlist, *numneigh, **firstneigh; @@ -614,12 +618,19 @@ void PairDRIP::find_nearest3neigh() numneigh = list->numneigh; firstneigh = list->firstneigh; + size = allnum; memory->destroy(nearest3neigh); - memory->create(nearest3neigh, allnum, 3, "DRIP:nearest3neigh"); + memory->create(nearest3neigh, size, 3, "pair:nearest3neigh"); for (ii = 0; ii < allnum; ii++) { i = ilist[ii]; + // If "NULL" used in pair_coeff, i could be larger than allnum + if (i >= size) { + size = i+1; + memory->grow(nearest3neigh, size, 3, "pair:nearest3neigh"); + } + n = 0; xtmp = x[i][0]; ytmp = x[i][1]; @@ -682,6 +693,7 @@ void PairDRIP::find_nearest3neigh() nearest3neigh[i][2] = nb3; } } // loop over ii + } /* ---------------------------------------------------------------------- */ From e700ccd4dfea396b24a035c351f045eff820ac6c Mon Sep 17 00:00:00 2001 From: Mingjian Wen Date: Wed, 17 Apr 2019 22:11:24 -0500 Subject: [PATCH 085/311] Update header --- src/USER-MISC/pair_drip.cpp | 5 ++--- src/USER-MISC/pair_drip.h | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/USER-MISC/pair_drip.cpp b/src/USER-MISC/pair_drip.cpp index c79f623a47..df7f39e8cc 100644 --- a/src/USER-MISC/pair_drip.cpp +++ b/src/USER-MISC/pair_drip.cpp @@ -14,11 +14,10 @@ /* ---------------------------------------------------------------------- Contributing author: Mingjian Wen (University of Minnesota) e-mail: wenxx151@umn.edu - based on "pair_style kolmogorov/crespi/full" by Wengen Ouyang This implements the DRIP model as described in - M. Wen, S. Carr, S. Fang, E. Kaxiras, and E. B. Tadmor, Phys. Rev. B, 98, - 235404 (2018). + M. Wen, S. Carr, S. Fang, E. Kaxiras, and E. B. Tadmor, + Phys. Rev. B, 98, 235404 (2018). ------------------------------------------------------------------------- */ #include diff --git a/src/USER-MISC/pair_drip.h b/src/USER-MISC/pair_drip.h index f31f8f07b8..b229f1aced 100644 --- a/src/USER-MISC/pair_drip.h +++ b/src/USER-MISC/pair_drip.h @@ -14,11 +14,10 @@ /* ---------------------------------------------------------------------- Contributing author: Mingjian Wen (University of Minnesota) e-mail: wenxx151@umn.edu - based on "pair_style kolmogorov/crespi/full" by Wengen Ouyang This implements the DRIP model as described in - M. Wen, S. Carr, S. Fang, E. Kaxiras, and E. B. Tadmor, Phys. Rev. B, 98, - 235404 (2018). + M. Wen, S. Carr, S. Fang, E. Kaxiras, and E. B. Tadmor, + Phys. Rev. B, 98, 235404 (2018). ------------------------------------------------------------------------- */ From 941281e9e9aacf009b471783823afd83a0afb74d Mon Sep 17 00:00:00 2001 From: Steven Strong Date: Thu, 18 Apr 2019 10:11:00 -0500 Subject: [PATCH 086/311] fixed isnan error --- src/USER-MISC/pair_e3b.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/USER-MISC/pair_e3b.cpp b/src/USER-MISC/pair_e3b.cpp index 167fe7b59e..938b19b50f 100644 --- a/src/USER-MISC/pair_e3b.cpp +++ b/src/USER-MISC/pair_e3b.cpp @@ -528,8 +528,9 @@ void PairE3B::presetParam(const int flag,bool &repeatFlag,double &bondL) { } repeatFlag=true; - if (!isnan(ea) || !isnan(eb) || !isnan(ec) || !isnan(e2) || bondL!=0.0 || - !isnan(k3) || !isnan(k2) || rs!=0.0 || rc3!=0.0 || rc2!=0.0 ) + if (!std::isnan(ea) || !std::isnan(eb) || !std::isnan(ec) || + !std::isnan(e2) || !std::isnan(k3) || !std::isnan(k2) || + bondL!=0.0 || rs!=0.0 || rc3!=0.0 || rc2!=0.0 ) error->all(FLERR,"Preset keyword will overwrite another keyword setting"); double econv,lconv; @@ -658,17 +659,17 @@ void PairE3B::checkInputs(const double &bondL) { error->all(FLERR,"Rc3 keyword missing"); if (bondL==0.0) error->all(FLERR,"bondL keyword missing"); - if (isnan(ea)) + if (std::isnan(ea)) error->all(FLERR,"Ea keyword missing"); - if (isnan(eb)) + if (std::isnan(eb)) error->all(FLERR,"Eb keyword missing"); - if (isnan(ec)) + if (std::isnan(ec)) error->all(FLERR,"Ec keyword missing"); - if (isnan(k3)) + if (std::isnan(k3)) error->all(FLERR,"K3 keyword missing"); - if (isnan(e2)) + if (std::isnan(e2)) error->all(FLERR,"E2 keyword missing"); - if (isnan(k2)) + if (std::isnan(k2)) error->all(FLERR,"K2 keyword missing"); //now test that values are within acceptable ranges From dec1ad19b50a326c5c0cb4a84335df887ad93e3b Mon Sep 17 00:00:00 2001 From: Steven Strong Date: Fri, 19 Apr 2019 10:33:51 -0500 Subject: [PATCH 087/311] added e3b.jpg --- doc/src/Eqs/e3b.jpg | Bin 0 -> 28534 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/src/Eqs/e3b.jpg diff --git a/doc/src/Eqs/e3b.jpg b/doc/src/Eqs/e3b.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d3b07da409310faa7a855acbb4e57dd9f5c1fd49 GIT binary patch literal 28534 zcmdSAcTiK&+b$ZUiAWQrLqI@OI?_u(QHmfaD7}Xsdg!63C?G8qK{_G=B7_z~uTnzq z5JHF03B84W`OSCk`Of+0&Ye5={&Al@v)9_Q_ntlL-D|D)UC;Zh>xt`m0PSlPbrk>+ z5de^Ma{#WV0LlR3TmQj-&crt$AtU(@Zj+Ibl2P2gbBE$K1;w4aG30h_&-5PMnZm@_!bex z&224O01?TpTSUafM5JW5NN>b4m1IwgghG$GX z`c|KKb#y&6#3vp1ePmY|Z13Tf_zSsoJqft|pYJFFt_prV{Qm*|+MU`(9LX;S zf*qC`bg5D**w#d`cl#WVZK&*Fkq=?5Gb3v5YXP@t7J|TjkO-vAS#2IL!Ak>MH`FC) z;_Ni$;H=d_J-hM}^P^h)mO9{&yu0$@Q%#eFf5;^vE3W0sM;a509n*hjK4&MD`EGqy zp^&qSC5dUq(|i>y^x*i^@Fo`Vdxzz!Me?D_t62DhgwUyihWRAPcdY4Po?A*jriULs z1%obM9!UKO*3K++t1i}E4TMv*q zn|HF}JNI_)DFQjnvrkV6XNObZtX;ZQ!qjLUTG)VOQBj?VG2d(*jM#kteV;#Q=u}~-cq8DSbA1dHDI{X=4umhRDfpttQDCT z?+1udS(R>9Qm7^^J-WDJb^P}ZD}j%a+DnmUcFawNJ0c=9H;o?|Kh7ZV8ICp}XT>}`Z>75H55gVm5xwiZd z@G4l#RKBos6=`pbMC<(L+nn&vjDH_KM*M(`9oB2sT%xVpEy`lOZR!$g*bTVX7=cfC zxN;VLUt~4&9eyZ~!G-*4zl*Q$`-Nn&WFSR5y>H_f0)(AsuEM{O(84yCP0CL1F#A6! zuPz+h9??z3Z+7VhUD)Fyp`he0~R zep{!?EcEZ%YN$$>=$2wx<8zYxeQx<;1MiWhN8dUtoDTitx0{M4?bb09z1FH{*8sm4 zZVJJ=CV`#IedMFs4|SFVRLmaDjCwmxq!KV;uO`Y~_tJ_YtaEeYk-x41kIKQz$4ON` z-#vgBFJ;iX_L?gFUO*M5XkX&yswFQ$lc$+M$+1qoxLbuTff0faLIu=Q4-uq`8T@Lf8YRBV!78lOw2#PBW?=0+~ z5?<4<(q{;G5JD1$Jf~we>ullB-gTXxADRlc=gZ6dq(GdYwXFG7O^oUMEw<2BvX5l9 z9wY;H+bV&CwWdBNq1%0K))`TdwVcU6dXRV&ogaUsDQP94v+2%xr#;f`@nz_;eyX z@^nW3M}vy{KoLJE{Zh?8Zc3EpYC_?X9NcOtaW-hU5BuVUhY_%0DTK)R&sdh()--+- z*@F|Q&Zb3lV(`_}-)q3WjsA?Z)M&T%#`3wfvo zQxeDzt)P^qOB_V(0Y%efE-^i!1(_YNjtoNEQHFqulses&Dxq$PTq>WsS%GeXd_nDD zL=V0?oeFOwP|;s3Hjr|O~* zjo&`XyB#8oGU%V=%KIxJPs4wep9}F3!!NB=@|E(-DA6}n6w11nT^O-)6h8;RNf5TXY;p}tsEUGff-u+{}Sibx$OW3Ts$3j8>IO1tz&$qHNxF;L;S?#wajKUtuHVk8ba#y7}WpoB3IXGOiasq>uKsrWxq?pc|( zaSDDD86oos5OU(hJt41Zu6Q%9zv^7>SYHG1=5dM_RN7a(#uBCx9epuDFFMLnT4WNK zzB(1XQ+@UkaQcZ2&cW9hX3a4fB)gUgI^5}ki90P9d$hYJwWb6=_0ZU>7T68sj&WuZ zcol}0^=5s8+(L76tP)g$W?R)aQR8-ug&QfCVX-?)e{k0T`>`B-F8Th5+sTtF=FY=v z{#)n`d6@gvJ0>7Jr3mCoRR+%Pg`D~u$}$jnN)}954|Wo5RyKU8xPTA-RaM+|N!t*P zfCjv)Yqs6;q(&)V&`su`XhRa)_Mo7 z-m#Kye_P1Cj#JUH>T7_EHMlQq--?8moxX1Sw^2{L44Nj#<;Gny;r@Q;+>#?TW)>wa z3UT<59sLniK8=!r^f0d+t2B?x48Upu62(w!RBwim#i(-??~%xdh>Jv4C~0by5r1YE zd!NxL8MCI%tfm6+-io~U@yAtuw~lPRHoafHu37=YPSN*VYp_ge3h+m=SV-6r32iXR zQ?i8?ScmZsk9urK|42zzfvb7`XE5S5_vJS|RrNRozr3b%JbKJDx@6bSLV&AR2qfV= z1q>^wvk>={i2hgH4VArmvE33fA{IaNlgrEUT#?m1u`%^d2`yn@yLTex{x}6SEWKl^ zHeG)ksudi&Ur|QWIz7%mZ$E1Nd>|lxBGn`+p`uj$o3ee?{&pLA&!M@f36@6Tjn37B zo#sJI*r2tdjkN0hBpx!gG|1_5*P+wbvsW+2h>hfVppDY!Pk!|7qd6(dhw8K`sri^6 zOcYegu-fePxfm@fse8WpJVp-K9!QU`Yhpx2HLe`9k)brLz2#RFAH1zs;j6QWRWXCD zH)?Zw`zr#M^a{&*Yj3aoeK6HMK{K&EhG@VuPXr}n88$=XU zo&lP4zNZseyq1Y`O#7VPmY#DYAA?Cg!WcOeCj`uD?80X{WZvkTk9qmWsr7}d<)4M; zop2U+UZu7T)k>mun!hU+U*v3NFVD7(?cPUG8PgRGCH5D5MPsrlm)7XnL{ZUvKLHBj zK>$h&QK_Y55wBo^QTJHaV)@(3KDk7jd&=@!>?ph&0jhRE`l za7uZ7+=u>)TPOGCfZGF8s#bb*m$WZmAud&1Yqo_K*au?0HarCknk`-Ce8%Pil{(PG zGs~z^YRovmVgUSQnPBou;K!)stbsnMyXyAP%oH+5@o zXRU5G`oPR#OeO(l0dRw$3~%O@!*ifes?KuxRDD(DDw-x}87tU}(*pP_kYOJ1i^m<8 zKk^HrFqaMf!@lVqx#6|Vn#OGudIDDO#ug+;54BAm1F52-%$yto?OQ2)0u_6iCNVUN zfK%==rK7-JDaFe-`IN!J$lm}6@dzI>en!wjz~w0>L;`#GqCh;lb=-%-pV1+{q7tiC)0~cd=5>;(ZRm?{rHmNz7Z| zII*nVWcVxb^PWkA6j5Pz0z-A2Xz{BxVvd9d|(f#j` zrM+=5QfFE-lOo3_fhT%irq}@(`5`>~#V5#e`H!$q+@-3)OQX5M0&qzA^EJKbTZlJ%_q2p=tWrJAv7#S*v zfa=Wa1J!0B;KL`fcYT5RT7a5pqk}=dzna$o{&}%<);_wv=oJo$N1-mcrObk7d(|pa z7Queagvu9kBsFmI0ws2j@W`|VYm@2yVw{i=rj#iv@lB6^Te&ZO#io!qbTA-A#uCPC zq{N@}j>ChTk%p7R<)R=4+y)kr6$)$j?X#mmj4dgQut)TQ-S$u@4)i&e?Yp30jG{ZT zJU4uHze8p#aVfNBjPI$Y55M9Oe^$yjhE(-(9r)q~zKdS*wnu%- zY0G+I)JI zDMrt!Z8^T^UR_&dx>$sNQ4Gvb!NFL-MbI7c5vooSCef!j_*wDQn`Ng!>K6-$)JjT0 zl3&{#FzNbe_0;25mq#i5hTpdEeyZ~Bog@3i$%;?4BYfyO(@pdD0rtdp&ENx0vRLv_ zjCB*>0={Z;-jN)2!he>%>>L>@J*CyXa8y$&i{vRw3_J$ob&4+{&2^qQNR+GZSaS+P zqg41r7#NQZkm4FKlMN~!-bT}(_13*aS@IOZ_6!D0Ygk=?tB;W{% zvrfBeMf*}e&UzBp4iTFC>udeeC9`A{TXJ6;j3Z6xhxq;L?}VC<%rL@TCJ2J(%q|KL z`ijQPx+*7wN^2FQ?S+o%*MFR+IHG*QFTQ(dwISS8a4$c#GM6&_iw@l<9xUHCUasQ} zG8W?6Syf%2=|KR%J@xm+?{ie+r0r}=zI2IptUPKXObynppeBs0OXRf8onj}V;p{P! zgez5xuTR?L!k4s!Mot0ZM96v3(^z6P;tfc-`NtsDgTKO3P=;^Xk&`Bb z1d>9QMRTo-A4rvcqg4TYW+#~+`}sUgte*$Shox7BKDQYJK=Umtra;pkqT9h=?6&aY znRTXK+9v-Nj-#%&yDUOGbaG`e=}a9GMSmYbf!s~Jv(GYn;H^f@vc#*@`2u^1JH)zy zEuCGF#w5S+L1Uj+$v)Aa?|na|olVy6BHsT{Mi&eUwBD=4t!t#L`xEA)!1#9oQTbg= zceXa<5;<1FjMjqWYwcmR=hjXh9OrS~J4_yCS-rAk^znxRIUY;`mwJ;0B5Tq#v1_w( zATiOFURbao)I{->!^>CQQz~-cWo<+Fn53E9s5iT@=FrT8+7z~m1k5p%adOW8_0I1V zP)iuoRbh1!L*14A4h}q-D!=;IMCH!{tNR&8Jbu|f+BK3H%H?pxl}vPoCY6hmD)~4i z=5xyKj}O45wR&7pMu<+*V47@gHF3p?oEB7Pw>Lq4d6wZxnEi4q8rOuVxI-qR8$M>r zQvt`9J}h!B%mtwy@~BatdA}&8Z|PaqZ5QB%?8|R!)I-4`L_B_>7qK5QS2Wn+Ubf~< zM#y4Kem(lv_&Nv*XHyXgux4T4$lSyNQN@*)^CR$EqA)JhBXkRjHr!d<^bk2l zVU8V9)~5lDGQaeCcC2=~bX=Ob(fwjH@PW>Y0GhSG<~5pjm)RbCXT@{p3HD=tlqR^M z;<`2|aJOAayG>$=Gweb3p+^^mlgBq>k{w@gD^1mi>H&~5Se%*xx9z|vfZTcSCZ^m~2{n$FgvrRd&rEy2%S9l812%vBdHTR#$aWqKBqlLqtx z0`i*K9e1b2+v)lZoO`i(l*(dQHCJ_E4Ljr2nVL3{fTlmB4Wn(~Xw;6~{-oOaB zPd0$TmPL4IRJ>7|O0`p)aFFPDIuuK6MH8&`J?5Jj1F}3gF6Za(Av!;!LcJry0#n3; zh+}R~U1fe^EH|4h)MRA$Imu_57D^iO;?1*m?&$GSgNrxH+_@5KW7c#(vU=(b0Qf^W z#jLLhK0swYnvtbHm?~N~pDOt`aSd?HFWD_f0pW)A-geAMvdvIE)|G&KSW12e$1+e= zvvp*})YlvBD|S98a{#Y_xy}NdS&kkG2_4UWE2~1D9g>?ODEsS8`%F^0O&ro%Eh`F8 z)N&KNSfI`o+NB{qqhmDS1DjFzJu#rIdalob`jYIG*??YpKX>|xNh3E^#(0G$L!n?& zSDChkWmRmGM}=vlY@Eu5h=`cFyfGJSV0VUFS>5CNQhMJ-7g91b2|hKUW$pK=9n z!oT(bxflI@k*`RH)eNtN*Wkvq+KcxY3iC?oPAzCR^o zIeXN>#Fu=3Jb`d(N?kFRyHSZMW{HeSV`Wal)%`#@aHeh9KUj9pJ6M$4P0HEm9>E0N zi@Ad7f-(pr&ss0IitG*R?r+Mhnh#o(^<)aCRF=9)FIpcsv{v5oDWl2lisl{M0{)7#lTJy9Z3+d^C2=AXQsGUwpa z9;Xb$8Htq_NgTzm?-Ye2%nD{&-s#XyRGk6ru())r=lprq5Tv~vIU-9LH*YA3iDnC$Om)p7oE!U2(k-;H%b*aJuSR?+L|Gf=28%jHW)By9s3~_lcdJ1OK!fNeuA|LZ*vbcs9y{K z;-=sO3ub}bxU&0~@(x%w5T8u6ZHwNU(7u3?R2NG9mB51OYXBMQqpV@(N@!V5TUFlI zYPuKOu$U_JS)&GYsyq(2$CRvj>?BV=hzE>U1k`N1LyS5;ugdhVfwfyLSH6BM)uyfLUoVjB(Md|U{3Be_sU2?LpSgZRCmdoT$WmX zYOjuWxa0HM+7Yitg6DHW1gdMLSH}dUrv==iE;@vdH@{kZ zv3rX_MXOXUs0Ib1kg z{$=hAX$BHsW2!vDlTx2~D_8K-WYL4gR*(vGWlZ<1X zTX}T$C9!E!6KHtWZ>00qZ`kGY{0BNThukGGNkIv3H$cB-fb`DAF$x=@!j5RgY@B@J zPZto5XtU|@6cxF&x2hg9X5%+uGx}NWj-W@@BfPhL&!c4@M&tY4{m=|Dp~Oe!l4>SH zBYoeB{M@UqntC@f{ZO12beBD&YyH259f6> zwV{EdjEY;NCB4h($Lr}GZdEMGNiC}f=RzL2)5{U)f8TdU@~v=>1n~64h_O%0KPx&r zb0JE20^UWnK|9KqQ4;?wuS?sUidP;Sgy~D@#Bz*z9|It{nY~5qheVzk7o@g0c1e&d z&Qu$o9apYeWU*$Md>pU*)e#>~H#cBzw^1mM{RxJ$86v^EEP?zoa^lmIdzf72#C<=S z)#iDNWYwb=du}mL`iDJ^v#on|-KG zXgd7cqD)IfeZQa6*Ra;SW4ZG%Q}%cNrUUz@d0T2r=q#mAqRZ(W3E>Wvz2}K5%2qhl zv{eD7Uq%>BQ$DzL%o#pz^5d+8X|Xf%i*#h%_Gn%7bh%;F$|V(U9bBorsKtdqJfeSm|O86S1>BT zuO^9ub|IR301I{m%XdU0i@>%>xSsotr*{{JBr)hLKlDB$@@46X!!NmxygOZ zlgeXzuFmPcTe1n%=-g*V^I<6MDw$Lldft0g;%889Gfg~7o9Jy>^3tsHGAnHtn_)w_ zU@(UX2&hY^BU=L1-T;-(0+)<}&BlX_vd1oU7rbGDPzP7pFSS#)Yrc_$bKx2iAq8(X zf}k19U%|`t68F1TDcedf<@IzgZ&gpJLgsKc(}|~-D5+luXj)Vb)sxp>GVCirLMlTxR)H-*pPCbknV}$ zFYU42p3$~0AEeoRyvQab>jNBW(wTgF4M;0`c8HHC`I`}Gx+JKlt$lWETdZs`;A}Kb z`3#PD93K!U$M6c9@r=Aj`Ok3mF3mE6Z*RYf@zMIwK9F_GpQKz&(rH4D;G=L2=pM4F zTjaS40v%EQOOu$X3YCcJD#5R?ev8RCs|*@3<}+<!1HitqduhEQCnCF2t`mec)-Ae0>wTIOBx?HFfwEYxWlbNB<%8`LB^~XFm!6 zNMg>aZf|r#`^poMd7i46YnO02d%W=CQ0xNZlB|Pb z-l#sO&oZeiVWAE4a>dQiunpbUxEbRqv^2f!Y3(wX#D~hdVO+}i3i)#6AmN52JE|^IVDxdFOGkk9xaws5X z^ORq9)_=pCLCd55v+WgRRm1245x^Qzhxe7@HGr2G>3`Y_-t3leeL0&8m7Ky<3fL#; z-ULfuX=1EnV7d(C00Wftn&{iXlLz&HC!KzU>5EqB08vvCesI~ zkEBtqU20m&md9}&Go1D#!GuW$oxXWiqa(zU*t z!oN%2eRn4in2iud7nY9FKfgv(ftd#VAxi&|gbA3Ol*rxZZ#o9%nCr?IgE-z*?BNGr zn$GRlZ2LijK(MA-) z9@F{bu1&em@7eIGPOeI2)1W0YAZVog1rqeLs!gf{RCo23b#AqdhyZw! z%gRs}9%7N@@VNla>r&*2f8E7KGNiI9D{}0!xHx=5sE%odeN^E19-q7HN$Gnw6!WC% z>oC42LFR4(_H#t9A48JHGFub`$60I0%H`|ka3isiESQM^3x~A2?4m@bABtl{U=%pj8x7pzb;)P|it&w&M*V zli6k-Z@=w)advDG8(6NgF!Jd#n0z0kx>o)aVaUZtV$oBmQZ!dT$j7 zk5}ipNL&b}i|Bsyx%|3#E8u} z{%q!>1}OF-f9*ViGv0%_;W^HAe0aQiqhLAQi%BOV@QD)2YR^@1Vhj7YWUY@^w zMlH-ca|PqM`hcZ#XTWUGa8(>cooXo^E)1lwODWe~1BNtRp23B+jd^43T6!jg?(Xky z^_9?(NUeZRl5QVsUrLKME!d6bUu_9q18Uy;Xm0_g%MNW>XtG`3rPOU5&_!jYfk4P` zpu>Sh$|e2jwury6-EefK0hWL{$?7*Ka66A#b<`MMutx9(PgEG-*k3=C0UZ-cW%d2w z!X9lI*MR4>?_O*gndRh_kNRh#qFO8QnOmP;Bf0KX2T|55?G$$s?<#72Z;L~VyM)?L z5@v^Qv}&dE!JP0>0X8y9<|50#5Q2d@)g8KU$jfzeJ`~fH-mOLLNYz%=U;qFFFspIW z5>|*thW6nK&9lAvp5J6s(gbu>7KR`b^U9xq*+!c|3z4vP-8`gY$v51&L;*pRxcsF{_<@3}02toQ0ojD`^S zYS95etlGYhsds&)sjlI4St}iC-hR1&f>q@65>;ZfF9|tdVb@=X9X`|+M4=;5sGo24 z)N?-OHYXSy@pyuzb7E)^qC~inp%Pizpr%z^`X#qj3Id~EWqW+@jq42%Bh-8e6Au|l zKDkK^P(#8w3wWt~G)Fz&Em?I!mPjE$&JyS$O(RQp40rE$5bc4{T3N@ibG3=hmV>@Q&dF z%JiCNPuc?Pl4nZggUej7{$=OBcm_&#g&rw^x<$!2N{%%g`SL#9h!M?F>_~6D%!W`t z2e_O$BWDC&AQ<9@U2&fIA#+|@J@7Z3IwzFj2hg!d5H$Uc=Hs9V3^t1kLT#o-`vS$y z5-v5duwc4Z9hJ&AT@Tr{&~&*Z2(IvNJQD4dQvrVS4H*vOcRylJ<6=!9XMjXb(;9$s#$u(^ zH!y(_Op(>0*ZH<$5L;*%uFl%b8Ph_*)81B$RpMR}E&{RAm*DspN)09_&K@vtwHQ^r zkjA;L=2ZmH#A{y-*Lzd>&{cq&Y*zlJ{G@+n`L$eDs$E>0CPqc!w+tLIIm~vO^DED< zeU?g8V$aaP($R%ieWr*^Mez+cpIYti;1<2)J=+!Dk9~VyBUum;SAx+Hn!PEMNsbwrJpw;2zcHz>VkrPIhv- z2M7Y(aZtf|O{)O86S~2U$$Y(O$&3ICkt zK=7%&+`(q!1;9Zue!K$s5pdWJA*2hYCr$^NQ_8^14ZZCY1_Fi&5+CCiwcmi5ZdTcV zLBO3?bpJunJr>GzC4jg3<$X{|2D0ouDlYKp;K*4GH+sPA&^yJu(0{L#Z6Nd%D2yyu zvd16$Q~gkoWT>FS{T*vasIiiEe3yFgwARgR&Z`%CzJI(Z99wZq%}#l#;QPz}!Yj(G zfr<9%cCcv0#%x_&<;0Ac#vUeKHs{JK6g86)SgJZXgcSmE@8^A&Bvz30?tiW3I40da z&Pqi&wj`+LSU?1UMf8&YDybdY*>7RP(_ z@)Jghc+Tqe)r-)l={0P*8;2Xsb5HEb_`xxvmnN&UfNQ{H8EUh}Bf>U0VL$&q2tn<=0EccX<_e>??m z^!Z=@f#?;t@{DNicBnMV2|?k_fFN}P*?w)ll$Nn>n>|sS(*(62g1yoRVz?B*#%n?4 zlOS)pw<}+ZKf>l=mYPiM#ZrGB5{O4uR8x?#^q z9ru_1Jhy(m;i1-lVMWZnU;cY@ttQi2NzNen-5{)1@sP9=>bSy32l%fAMW+!68VvtZ5gWzj4!8`Ks87 zl(;i|-(wGn6!GJ7hBVNNwjdp*Gn+`gz-puYlXB_Fp{3oH)1Iu|?e*>e%OZ&PU$X|N zy|=1_Evm$CY;8V8U^_gt`rM|5!oK79BA{!ePJ#3$6#6ePq%WBQZF-M=A#XE!2`(G6AW9OELT&sQ^ zIu7R~2(!G^@hp(-qvTslA06Kc#S-!ggk=k>mNw<@!C8k5NwN1e;J{8ZNTE?ES9FKw zNlQ%W#O%Cn)L4OL(mx7_wP%K}X#0!Vg)6OKE@zXlq)}`+xGFG=FS;A@Ls02q7zM|Z z!#@Va^Uos;ZN6o?96(d3y8OW==HshfcsX6g*@QT@o5C?qB*qt|u zPBa=C0<&;cI>Jsp4*#Es)O4>*tk{%q?~;4d_k0(;A6=qNC0&oMH1e7{x(i_Z!E93( z{DddQ*EO6rW)@^j(ZiOjE4Pl}tsM9i$y$Ha9#9?a(*K&3f#1ftRx?m4m~`8^*DFOH zoY?p#I7n0B5Rp6`(}SK!@eR=#c3uJ&*vG#4)X9qK^>ayMy9w_};VANv%f_&D9H^KyW(S_U4~W@J7W zvo`kA#xy8e+Ur!rZ9H;)0o|}yGqz|c82!6r_1USi_H%Uc+1Be{|J}oL4T~|h1pDpTpVEhGUPtLkNVch7ruwD5xdMSW zt3Oxm64p7guYZ=NM+g+z`rd zl{l}yJf7CdF0c?|^dJbD)5SEz!7rsvK!{xuO^-h6%8AxJisjuzo%aBb6&jE zpfB@qY3zN~+us`9te>khwO!Rc(+T;ei3kU<@OplsmAkt~-qrj>?v#Ud2Kk}Fq|ez$ zG@*`Sg0p@0SC@6XWa&%i@Flx7EQ!sfH*u@_>AK&WUU>XZnJp z!D8@tuMi_xa3$vB_(k2R5ltZTWI$w&`S`Z;(QyPZT}-^1t6`G1y>8O8k;Rmf^&z!k zCDD5FTT0yJ4Mz4axr(yR!w(Q zZfOVB9roZ+Oe0)aM^(R$27aQH`9zldJU9QynEihk_ojesvLzsG1!uxyeD|G>G`(u< z2jXku;XpmZMR)6>k4cT{0X)>;jQMdtiI!q_hfN%8B?BCToRloA>{t_HZSPtalb+%! z8$bRtf#U9&>`x~u<|f|ao2Dktt1GEm_Lc2G$2SNVArB^nB>5Tb0v|UP(!D|?4oTNn zbw6%C>G9_b?%g~x2Q~>Yhw;aMN(&^8&4Cxjc7_*ruUlk4hGiq4Kq#EuNWOILlx1W+ zoV{|wI&Z#j)kT}4epussX#^mTJI>>0UBj}z(QbDgO!aUrwoqTb9PR*oqV#`7vIKC=c20w z8rKaBoD}PN+mbgKiZHPN!`BtV{lhCXfVo0X)w58U=A`N;ZxlsaneH%2SI{AFPqvO` zV6?rj)aK#bcik&ez;xo|s3NGW4=!J-x`(rD3Y^oUM zBH{h$fW<*x?w_3jEw=OjBZmIp zi&wc-F~W7gN9MCX|7|m0xU^_x7)wZO{TqMS&M(5u^5}TVqvF{M!fbQUj(bdGDV8LE z%B5aEY1(&y@yobqO}gm?$6N?@p#WuP-6WWWJ!Ki6qeJaXLRq=FpvEV(m>?q}UZwrO zyTwyTN8g!XXnxFcH1sB?dFDSXuN>0#&Dc@0y6m%xGO<-+`5|$UPB90I&8}ko_Qo0d z>6u6SCTcG(J!mB8&M1ER%sz#v*_!`mGg^t@X!^e!r1`IhHdz}bDEx1tp@XnC5HaD_Y{IP?@=KHPb3P@@_APs&>mw&LE5C9`cIoT zhWk&sLtpP(|2)o%QfxkV@^rmRv+v*+UB&SV*Z0G!Z_jM`uYR%9n#{L-F&vU{7TtH3 zkmjkuZiz@wVcOL6;~VG{y#~1R(5v-s7R{cznt7wD$E$u6#Qb=_)H(HP@6rVXbm>ud zSQDvj2@tqI4bD}~n}E*)c25JpWg==q^U}15;_D=T{4Fc9_J9|W3~3}0Hl%+GfddJb z{k4K84+$V}iD2+>qwy%0bP*$kq)m39&v2B~fCwGK-ubM49J@zu32OisL(7IBM%$||)j zYtuEw9ycVn2Wgw zZ0!=K)6^;S*+*S{`XJ#yPp*QA8q29 zvX~fnrAH?~#5j7#;j{b6%Y87^%!p$=o@FJTh&|@~y{WKnnKnPXED_iLHru~q%L)0W zv(m$$c@N`3rV%fcN`1bjZXyluwYU%#5UNRAKqSPSn1+c)mgKG;hg2C?4hf9E6lxp& z<=9Bp7NBff#Cu|Na7?H|FSj>wq#w#i+>!a#;nHxa`@myGN>#uv($Qi@G^3B2Z`&eq zwv`Qpd9H%|1bUhAt~J%Hr?)Y^$!GLY^XR|2xC8xS8&Y?pd0hwpA+h?NYl0Hn3v z#E92ze_P6F)*5$LUu-W477b;z&84=jdnv_b;rSik&TU&_8Ldd|sjJHN5%}5QR&&_N z!1w0hR>LB1VqjbnFb|c5Ua}Dlja%G&uvsfC`C8S*$<+_Sj@jd(I%< zecHlXsH=Kcq_m6YW+zvXJ^PP)K>*@a6mh->!;endsVuDti1pM9HC*|_ed?$#R-34# zYT`x0EV^vQx2Bl%_t&&yr-|tDs1y^b5XVR-4I?>0*LVG3pU4^Jt8?PkR5lQW19#bw z%!vR?B45Sifq_WJI?3CQ)(P2jkR>0CQ-<2TaZ z9FZoNTQ|E(Wr|5?Z*$rGdMM~RAUE5W?PyRaYn{B8)`zbSpi(jWdx~?ba*@vSc@y_F zPg)b{cTe>lu;OITdA#b4zPnUMSvn%_GDQwDd2FHvo?+#+yav=`RJl1YF_SCRw6C3~ z@(QyTgI%_nyC>3pV^y3C-0wQ9RmTUbpb)TW-0rw&zdMx!_o~6HghC%CrN|Cq4UCS9 zGjg&HQ(b8$%nSjN6k@2sXlIzVGfzOl*aNU_oBqUxqist9zeoKKQs1d1tKxq|N!mlv z!h#kzTmawC02AY>4+uK{H<0jL>20NcOy z_y4=M`MY*>r>LT^pF<+cmC$;j)Am%1iK41J)CX zhO{g`7f%9BBySf)76D`G)1|U)bx5N|nB{@KN_9TJQJ{1G$@v=cE8w^5(yhh{(Ce8K z_AqvHu6D-V+GBmANJTO;*q$ObRh@DGOjU} zKdy3hI`|w509Qt>e0TdY5Cj4ZQl+=eJLq&a_$@>Gq$CBZ$iA}$v3%enR;ifR-p-Z) zcz#|Rhv(of$;!M^{Z|llQXYIP+?jPnmVXVnS0)t{*y6s*uH7l;Qdqh;jgMjqaN(GK zD|W1PxC7>Ir8MSGxlnCFSIJ~&mq2SFFvCgnhcna9sw6ZM*%TWXq>WLJD88HI00Y$=86;LyY3i30Ge5CgS>rV)B)_23(2ioq|7NyO3*>TT#()g6@a- zD-~PA?&%~vrcYl#5BJ0`Ua!=!{Ny~IqsL&Fjm`gG5T#<+AgY#a=tZNQ6mPe4Q&QVt zV1#gkIg?7kXQQQdo0R3enV%Yzr9;{( z-J<&#CzEbx{yXbMy(ys`4>lWxs?zZmksOLgcPxVIzKgs9_)0qWu$g;)jiNg63Ex^0 zjRyW7rF?f>Q_Z?=5Cy+Y6H$6m1ESJFdWnF7bSovHC>;_?=p}%Nf*=rz1gTMJA~m6R z5J)JYNhkD#-h0QJ@9z7%=j?CqbM`I&&AcmFYci8HZ<*(La+kg^HG&gAoIO+}FgsQi zSkM~Wd`rBm;{$0Wx8i3$k2I5PAJWh?37ys|7u}j~8!q(?t?D|SuFdpaO}yu3tNmQK z+?zi1s$gg$yTqaUE-d&90u@fGku|$&VXI$%`2u6b_w`4eiip+~B^IbuN^dsqksTjI zn#;`QAg}3l*~k(Q3Q^KUA2zi}1XJ`6+V@*OqQ%ml3*r3tOafA_RpWIwhX!Y$!Jj7F2kRQ*Z(c z4}Jsszj=xF6{we4X-FdKEx7xHYz{EqnIgim!e){;CK=w#E{1>{-Ek6ZfNHiv8W|2q%x3p#FOA8DEzv+s&Q#g#LtL^KRAgH3Pfk2OO&y9e zdB)iVqOg>x>uV%VH=fowH{nd-W}y&SuVsG$)SIAS%_}qT{>t;HW7My((}~yU9BZe6 z|9+SK$E%O%B7W_0^V*)bh7MsqVUyJKh%ts%0;%z2L@KRaMF9R79Y1>XTwC^1;jHwJ z{$D>|O6QG~N#oV{-9NY6z!C4G_(N%xswPDiedX~*aV4-u;>)@GgEkxiuVKdh9tnu9 zfu{61oWJA!iT^o+@ms%@PWy+pf``N=w$2{N2ZNV-^nxrJPtozm`Tuj^Ps=HS2(@cG z$&Q)UTbo_xbo8+V6+*qhR^gj|E5vdd?MkL{+QHtFcAII3<@I`{9GL_ z(Ahq8G-9v;M}jipw4j#2;EBLs4?dM0PiJbA|JGTWM;{hAhT}rl{Rum#h#2s)ena?e)IxO&=BWmR)@e?7y>7T;B0- zgFI2;^R{YKuAg$&rH)@sH%72_KMh%Hif#wKcVb$jK0Dvxbzpn8Vdz=@fLS_+Kwi=(cLDQ20efR1aeN2>$uID-R^S*N!fno2pETPh=_Lg2!;7_vaeh!PA*24 zr%`5yATC=!MP86!$PxX3n|D2mRm5@em^ujm_MI@* zJBtxz-1U6op&5;j=K~g=TY>n7x2xk5um zf7CJmmovOZQ}NAl3}s>6^9qhO2y$vG5lT$$IO4JFgtnR$o`i4NM_eA`oJ>~WXKcS6 za9xb2#m|}A;Wyx8*&UIU@|=WUQ+W}^uQFmqX-kw1KAUbE#3tm!>VgmUMr88SRq7!; zb{vj6!l48Dp_+zeA`T&@3IcI0^X*&>8OhT#M;Gteac&0jzNTNEDeAx!_(}|*m>oQ2@wcxr(+vK|-Ka#KmgBk_Bw?(=l3Q#I{Vg=J zii3++t;<2j)G}oZQS{n7G5k`bMA`a=P=5~v8OG(_MU-O0?xl{guL_KpX?t$l@qpR< z;re3%4~+3TH(qaAqs0zrw-YL3|6P>8#u8-Bgg#^Z;Y&4qsu{nvc%Fto`VGLB5${nO zj>AvhRhhUJciskZcfj?0Z?oXBa);E!tc`uQ0qMxvc#FpFjw5Z> z+#dZo!Mb|*N!hAIT(NS4J2#kfYx|d4$+uf~cru)GzIR5ZNSJF_xyb_Y^*aWzJWIQB zg;~`j`Z&$Yr}&xmNap^JDO{BcvX8xVd2_y7rtqyf4i^}A6Th5%!pt{dIp{H1=O$T*3ozNg7 zn%0M~)%k;82(65HzO%9EAh)aM8G`G`oHtb7;j~4u6APMCdyJYbI;s6q!fh`LoE=$J zBOcr4IRXcY4d@GCF%<5`CpYOro@jiV;kAb^&T>$PCt9)=rFLl=g;I@V7lnkdUtj0? z_?|oDiw_^Vn+D)3va1S}FZ_XSUvMC~x~^f-Tf5RTIKW-`gq*G1 zj8Ab2g%&J+bfqq8oznSDH{$Mo^H=}8FNdJex&PD@GPx50Qbe~v<*MA}I|+HuuHq6a z+1QlVDJZ+4w+nUM?%<*OZ1UZJ3y=TC^@O|z^lc+=R21j*ieTx8GXt^+QGIHdMWX{ANR<4evZyl8!)_Fos#Tzq7=}aGI{bi)(Sl2 zmgMu;-rJzaPz$md$kch^WM;y#Jgw!}x!`GQ-|XfKD90ZHzp9GG6*T2etGd0N-I49? z;UNA(-&xrCMDhaq$?0f;y}{_WtWO2sW=&4?ISW^qAT{EcUkE0*iEtGIy-Q#CP?dS; zEWMyhm3mme(mX8wbDKN=3p;Di*9d8N>0Qj`@b{)0OmT*2_lbl?Ur+;U*%xoD<93;D zqTmEcSEJ-}Eu2OUJ8Ey-lkwG3d+I5-)0v z+7!-$A1h-G%ShzFj5)`ElmuUyM3t3Py|=jOR^_;8^P_-D0mR|4$0Lo8Mf9I&%OR}R z;TXOP52DVka-{p^g=O|?j=g$b`G$t_@nCI=eYJ|P|aDaZ*+rLbIcyk-hW+bMKANkpIA7Q?&EccN<(97jalCxFdU`&ChV zuNhqt@YDi`$FH+nbDnkS=?z6>$@nLOz>FWA!0(oeWVe@Fm{xP6R{Ag;9aZZ&ktrY4O_8JMM0v5xZ}M0{bF<$*|% zY-Iohi}|_#T1acR`0B4=c|t^)rdGeId$0;1Q98%}*lKp%j?ZD#3Cob1a@!!jgvEtJ zH}!g#AGXUg(j5Y3^IDvSS&C0dng^PaMi)(X>kV`3oRTJj=u=-;Hq1kPBtM~t^=ADqVi z$_x5M{jp)M(Be!njv}6QeTC&yRtj#YlY|B?kB672E!{%s3sc-S{>?mk`^NR|`b?kh z^7v*%lS}mdL!lRB1zAxS`8!w^;~H*BBXMFGI5KApr7_5~6qS7CF>MZWKi1bG)>B1h z7Z^W&Sak0c#ab9{!SiDr8jisE0CQFG(~3RgC|+W(ccRsomzuA`tVxWtqy}wNap~@I zO131U+(*0gPBF>4_PeNBnbHSrU5XsmxCPdhQ3WyOE5jZQ-1eXKMSG>Y<%YV#EXyLz zV0yB~L8*li>|?m9b-;yLuF*xRQDuP2^(ZLMZ$MJz0o%tBS6Mgt+h#?EgASbI0t>~D z*=KrVi&4x|2f-_+14i^aw}b7}`pPO@$lYqXDw6S5a*9pq8yGGHNp=Ka`E;PP>VBoOCI_@!alI0zx9ar(Rp-{k9&=Whw86kHo^bGXF6ik=R=VzR zX)S9MRN^ZcUODy)B6BOxadl6~q~hrYbYfPBj<$;Pj~Jhdrs%bK;uezbDt12Tuo5Mm;_XYiM+BWuC8Czm9EU6V z>8B++O22$ZQqbaefQz^D{A}^!Hp+6Es3d@vw=V=mI6Aug9k!`r`tU=)8 z_UN$|Pc=&`DjJq4=bkVTujDLHR={a@@^Dihhu*IlkDXFs)&%x6YhxCVvv^pvhj$T> z+T4|q>d!wG@c7Cv;TT!c?%}J$m&hla8jx5yZ@a;=dCX|epv|g|`8KZRrlFz9k6+WO z_EPHXqO{YzzX6Z7(i1J`o%yeBWse#d#oOXK=}}l?U(qg|iSVsyw-fZet z5sT^)+1S$h4am4OdUkVkH_zWY8^_~RJ!jf2d*wJ7gOw@6wo|X_%pb@XdZaz>-H-)v z9YJU{hOx(9A-rOU&b|OsbKW}IR-?|P=>l^m+BRzu==i~#1-acnD@kiv8`;N-gF>(5 zs13WhVWr!Oo<^&~DN?C62a+s09@5kC{V977nU8r-jvyFjdwO(^NIXlyw&6!y4GoYZ zVlFb>NGQ48`df+f+Fh*hCU((M(*K#qWQ*0I-Ya^__FK5qG;tI-`YO;rg#;*${^9PiC2;lM+Dz^^MExSI(xxa434kW#oB zYAIZ4tO}>E?1^ZE25%%XWNuOq)UxQ+KNYB!+mqmH*}Nqe;MbBw=cD8lnUy^!om4bk zF2Bmbd8b?f8~!bw$))?&ej83=)x8dXztSZ@Az|D(BLr`qWP@5JLDgTE7o5HLsnOCq z!+*x)c@{!E=G81YE((Z9Jz@wFRLfJ(F44EQa!~eK5PzcxLdF%#?J)V9^-8A&-N9k! zrI@tSLd%+(uy|_r>C1<}a&*EUT?+a~ZGHk#21wtl%8POyB3m&LW;z`b&+MawtbW%bGVhe zX|He(%Q=$`0eRYlu~&j%R^(5eiN$V#ok`_gj=~x`Jhp8CTt;WOc2V`_BCI-TdZ+{^ zQ`WsySDA1LkL_Xm!DxwZX}nwWNA4uQ_W>lfiam2>(P9@mN_?&nS=4Smxfeq22340hXsBxN$))dxjuby*Mv^;$c zLpt&3qt#(A((t~}ub&lmwOxcsr5<=o{5L?VuTsenNc|o^y?6X_X?APSGFPL{E3}ot zXM~H3owm{59zb;r_#)3{JL!oqgZlAt8dMWe_zLOA*un4YR$GGOVyU4uWU5(}K>st= z@{qWy^#Y>Fy~$|dR_Db?leCoRn?)&&S9)Y=y*92q<~gVR*?zWuOd$YYKH}Re6gpex zf{z_#1PIuZn0r7x$(Vc6B+v(0G@4_#4M2O14`V=)p{~go{dq0hJFydMSk-r zI&E5~#>HxS?}(2M_+Q`5c%VuseJi^O?3>_uRMeE^SHgE8Ll;lwORPb?d#GBx8TfW8Z(L4`#f%mo!&~KwK^<`+qJ->H< za!}6rCjOp>DEC|)(!fQBfT^qhq@nl)9t3Cvy+a_6hp(US{=@7p{XfkGx^C(zdWH{p zUe+2^2lB7a0R2?aJcCA1!oC0hM;ULrS*Q$E+1<40>-xTCws{;rS~+_$-iI-XydgT# zyGlVQ@}QS1R2b)VZob1$5iEHk8f^2QgTE||O5{p?rkjzJTJyCEcZm;VGDE&k{g@P> ztL`1Etm-ODZ;4ea&P6q}ncU^N{At)$l*u_Il_Kn(Kj!k_)SE8|Rnfo=S#ho}-q=dK zJ<0W%RC|eMnCgBkw!l>Sh>W%o=o(bFswXlwY3`FnEx8R z8>jw<-N)3C%+H67?dDY0`Uz98*K=9x6v*G<^El}ZO3) z*M;Ezlw>mzMTmf z0`8$m7Aj`%&%XQ^>v>k>(7(+tBIuj=gfI%dglO>qRzi2DO_g&mGcwwXD6>}5QZ&dL zne*=ZZYf<`35${I(BRHB3G%fY1nMA1ytR&-+7`+v?Ebja1FUqcbj#j-lSdm4q+0GCJ)0F9fh$%#^Iw z<}Hn+F&J!PJ*o2G0#E&sqTgU8S6B(;O$NA7=;_ZMfqU0U`?I&oyxH?Kh8RCHm9zH( zsHcSs`P-aFon+_>k3O}S*TLtF(NVb~KBLS~|ER8*IMdOK8EqbPh#*0%v;DuU6j6*3 zRi*X{^P_RC3vS{gVPfxKYdErF_af{iZ04J7S@U#Q=>03xnvI}~7jDXQa}Rm(3XjUw z2cvmtS`9m`>unMHNp7k{Q3Vrj3*mg9sKz?{IfU!<3)KR|JcqzZBg@nYt|10-#biMR z9wu47Auk$7d+D$QyVRL>vGCgkl&y*|*{kTW5oLh6=8)&UC$5-Zpr&a5YU+}H@E`Es zfE#~+zI}nSVoVNf0LU2DH|K;&ZNj#9MxE$> zlcf&Zrbai_PHmiZME?6?FN5}5EG$}QI$CDBf6iRlURRMI#_dFIf!cK_BcB9akhwcT zn~KEnM`q~d>@ptvU+o+o=i(MQH;KqOt|Hf~&rT||+8oy0{TO211@kFz=XicI%CmAE zT;nJQ?jOh(W_XPF?>C6|Z zRhpa4IQ&mde<>lCf+m;NSj%djFUfMz_`7tzI~=TQ*n>zS*Ry7JVG{oVPu zd75|alI4hoOJF8gPHJ~g)xfdta2Xy_vre~yOKvF zP6lu=7>2k_aY5HeNhNUJ%w#^>1jN@!d} zqQaOH#q}YK&r&7*V;{Xv;~g6gMCc%h`=Bnger+y6aSm z^=VTgYSYQJBUaj-WiBT>QFA4Oho!b=WeK6GT#>@iOa>JZ_gYoZ7r~6)-vE_}uYqF= z4JXpQprM1HBklNsFT|WqbAmHiCO5Q7nE65H=g5|dg<@PHGk0NJn%mI*N>uc?qI*5< zN=l7=a>Xsn8;$GiJw;zFfI9cu=!>lMl2II%w2Cdr+vUceXZwj}!w;D^a|WE7Rqzlt z{;_N!uGqFPSz=L4o0c{$jABk&){uJ_|8TFY9<9&eiV z8TTDqBjcuNXC0;f9s>r4AtB$oIh+B!_krm_JbBiNwhbMBBwepHoi009b66XFWFYUQ zD=;=H?0;`{R6%^G!mQgvhU+?%87J@>e)C+#0*MYDF5hcbFt|}+m?(dJo_s&0k6g@g zXH9;8$rwr>80dC%l11QGoM75MMOR*s?g4cbj1NnsC+#8OM|Fw7cOC;1^xNoBruK53 zeG92z7*c$w(u~;I`N931XLRx6e|!A)2nQOy8`1Il?8ei)MBG@0{D`Cr^XU6NxzegM z-c+iUKU37WRWjuskFqPnCb_qI7$_m@{rOG(0^(zkhHHYlir*sA2Yeb>NBLlu`x&r< zH@8wJY}AeXVy_K5{xR{`=uib{epCNl@B}Zi!O;SJQWsbkDWW6vA#26XeW0X*+|}3b z;b(F@suw}wykF0gtX8D|e&EseHIC-tLQN4!?B?7wLZfkyu1!&t>F&2J9Qw9-x`9_$ zb^h?yE>S6AvFTY?(ga^3abcWUYGG4gqu7wxJW!?1q8+M95wn|c>}ysY1;SiPfMDt@ zcVlX>sVbZSz<925U1rVMR~E+YWvA+-E_4>!6IH!*F#vsKTM$rFSaXAFYBAH($JbIR z)@vnhAP0YVe2iSle2u$D5t2yqIrI$1RVY8`u#DmR~>QNS{2TntCT8 zUbjFI6Dlp_7=)WlDxY_sg`~TzooH}5jBHh@JW731YZ+}Cs@A+Z3~hb@k6MeX;lB~a z%60|p2h8s4*FMB9Gb{1ZE${5yByejOSjQq!Wmm)O8P==)2j}Xg_688wBy1p3q-c zn~U)F?5eTuoECY&MWSPb2wb{DZh}=A0Z~QxRFg2$DykpzD7Ge{$2sY? zjg*N{I@OLAH**s`4CVwixdwlTlc;0q73g*kzrFllxx|0Ae++NHUTT_*{=xWRYh>Gs z>^ViSBORX`!M;(_z6N}@*;0u$ z4|@C8m%dPs904wwjrkb;5#KMgSWUDiZ8jLTV?PrIOkxX?e~j?3^?_NHQZ0d_ON~eO zRk^_Gni0sM$_kO@aXl#VFsrwGkB9=GBqQqkuHwt&i~ z?mK~)@MF#_8pESNcqKi8eR+~po9TY*mA(7K8RcyglsiqlYS8}tpO@{wwEVfAv_0ox zFO}Y`oCDhrcZ2jvlwE@~w!)ASv&Fd{#PhvLd*AMLhf(qxLSOEo-LbI_L?kT9yp0r9 z7$@VaOsY_luGcJ9~^$2TS-WEE6itO@yzO?D{`GeG8sP)n!pM z_U!upQqpFdz7a=tF{Fg*@%{AiHuRIRd5dh`WVi_-CG_@opheG<*FQH(FjE zJf>v0Tx>xn7Z!K_aZi8LEiH9AQ@#`U8-Vi>RSn}YqRoBTuDp(KmXbJ184^9a?$yvJ zza>*Do)p%Z`asy@QA^rhUVk@fFZB^ajsz=28XV>0CVx3EVzt5nQ>r6ndGSN@B=>aV zV|(Sm2n=S6hFT~s1wMrJRo1jiW%3t#|5efwneviy# zs)Vd?{1ewp%dzZJaF5pFfQO^Z7k|@+uz7w0+0FOvp-_4epK`L<;oMc_tCJb!VeRe+ z9HasN%pZtniz-saOEoR|8?IFLRd@~Q_;skpx2g1x&9If|b7IulK59NKi#Y=Lt2_fO z6uzmr$B1u5c}KS5*G~$;`xSSg(3MZz@I57U&7kMPnp0S{ZLY+_a-5;e7-f0~kQiP(Rd6pIw`T!L_!0eQgrV)pdm zQBb9ifQ{^Zf8%knr5)y<66Vb-5K(Oy{b+uuU!j6|a6}j0S6d*4ciu|TH7XO(J8QNs zC(#wWTa-WZUT-JvdoRMxDWx7hm=n7p8ke9&M81178;FI~R5e8IQ2vV=C!exHC&ZcZHl7jWC(4ELm)4}$#J%W4+KVn8iN~4xQT=5t z{_Lu)D|l5jK!>EwYS<;&Yg|ILph*^d@v{kWxQ*LarXl<=*F_{MKc9x0Detwz%GlZE mB`eI9%-=ROr~WKpNsaQK>xBPVzlwYD_FoV4?^dzjqyGbdM5WRI literal 0 HcmV?d00001 From d3c5d7e4232c3c82e1d3b930543e2fcbcfa99dad Mon Sep 17 00:00:00 2001 From: Mingjian Wen Date: Fri, 19 Apr 2019 13:56:26 -0500 Subject: [PATCH 088/311] Add documentation --- doc/src/Eqs/pair_drip.jpg | Bin 0 -> 63713 bytes doc/src/Eqs/pair_drip.tex | 15 ++++ doc/src/pair_drip.txt | 139 ++++++++++++++++++++++++++++++++++++++ doc/src/pairs.txt | 1 + src/USER-MISC/README | 1 + 5 files changed, 156 insertions(+) create mode 100644 doc/src/Eqs/pair_drip.jpg create mode 100644 doc/src/Eqs/pair_drip.tex create mode 100644 doc/src/pair_drip.txt diff --git a/doc/src/Eqs/pair_drip.jpg b/doc/src/Eqs/pair_drip.jpg new file mode 100644 index 0000000000000000000000000000000000000000..726bb32cb84c3952fb121870464754a317331f37 GIT binary patch literal 63713 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 literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/pair_drip.tex b/doc/src/Eqs/pair_drip.tex new file mode 100644 index 0000000000..3b7a3ea991 --- /dev/null +++ b/doc/src/Eqs/pair_drip.tex @@ -0,0 +1,15 @@ +\documentclass[12pt]{article} +\usepackage{amsmath} +\usepackage{bm} + +\begin{document} + +\begin{eqnarray*} +E &=& \frac{1}{2} \sum_{i} \sum_{j\notin\text{layer}\,i} (\phi_{ij} + \phi_{ji}) \\ +\phi_{ij} &=& f_\text{c}(x_r) \left[ e^{-\lambda(r_{ij} - z_0 )} \left[C+f(\rho_{ij})+ g(\rho_{ij}, \{\alpha_{ij}^{(m)}\}) \right]- A\left (\frac{z_0}{r_{ij}} \right)^6 \right] \\ +\end{eqnarray*} + + + + +\end{document} \ No newline at end of file diff --git a/doc/src/pair_drip.txt b/doc/src/pair_drip.txt new file mode 100644 index 0000000000..fada61a329 --- /dev/null +++ b/doc/src/pair_drip.txt @@ -0,0 +1,139 @@ +"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands_all.html) + +:line + +pair_style drip command :h3 + +[Syntax:] + +pair_style hybrid/overlay drip \[styles ...\] :pre + +styles = other styles to be overlayed with drip (optional) :ul + +[Examples:] + +pair_style hybrid/overlay drip +pair_coeff * * none +pair_coeff * * drip C.drip C :pre + +pair_style hybrid/overlay drip rebo +pair_coeff * * drip C.drip C +pair_coeff * * rebo CH.airebo C :pre + +pair_style hybrid/overlay drip rebo +pair_coeff * * drip C.drip C NULL +pair_coeff * * rebo CH.airebo C H :pre + + +[Description:] + +Style {drip} computes the interlayer interactions of layered materials using +the dihedral-angle-corrected registry-dependent (DRIP) potential as described +in "(Wen)"_#Wen1, which is based on the "(Kolmogorov)"_#Kolmogorov1 potential +and provides an improvded prediction for forces. +The total potential energy of a system is + +:c,image(Eqs/pair_drip.jpg) + +where the {r^-6} term models the attractive London dispersion, +the exponential term is designed to capture the registry effect due to +overlapping {pi} bonds, and {fc} is a cutoff function. + + +This potential (DRIP) only provides the interlayer interactions between +graphene layers. So, to perform a realistic simulation, it should be used in +combination with an intralayer potential such as "REBO"_pair_airebo.html and +"Tersoff"_pair_tersoff.html. +To keep the intralayer interactions unaffected, we should avoid applying DRIP +to contribute energy to intralayer interactions. This can be achieved by +assigning different molecular IDs to atoms in different layers, and DRIP is +implemented such that only atoms with different molecular ID can interact with +each other. For this purpose, "atom style"_atom_style.html "molecular" or +"full" has to be used. + +On the other way around, "REBO"_pair_airebo.html ("Tersoff"_pair_tersoff.html +or any other potential used to provide the intralayer interactions) should not +interfere with the interlayer interactions described by DRIP. This is typically +automatically achieved using the commands provided in the {Examples} section +above, since the cutoff distance for carbon-carbon interaction in the intralayer +potentials (e.g. 2 Angstrom for "REBO"_pair_airebo.html) is much smaller than +the equilibrium layer distance of graphene layers (about 3.4 Angstrom). +If you want, you can enforce this by assigning different atom types to atoms in +different layers, and apply an intralayer potential to one atom type. +See "pair_hybrid"_pair_hybrid.html for details. + +:line + +The "pair_coeff"_pair_coeff.html command for DRIP takes {4+N} arguments, where +{N} is the number of LAMMPS atom types. The fist three arguments must be fixed +to be {* * drip}, the fourth argument is the path to the DRIP parameter file, +and the remaining N arguments specifying the mapping between element in the +parameter file and atom types. For example, if your LAMMPS simulation has 3 atom +types and you want all of them to be C, you would use the following pair_coeff +command: + +pair_coeff * * drip C.drip C C C :pre + +If a mapping value is specified as NULL, the mapping is not performed. This +could be useful when DRIP is used to model part of the system where other +element exists. Suppose you have a hydrocarbon system, with C of atom type 1 +and H of atom type 2, you can use the following command to inform DRIP not to +model H atoms: + +pair_style hybrid/overlay drip rebo +pair_coeff * * drip C.drip C NULL +pair_coeff * * rebo CH.airebo C H :pre + +NOTE: The parameter file developed in "(Wen)"_#Wen1 is provided with LAMMPS (see +the "potentials" directory). + + + +:line + +[Mixing, shift, table, tail correction, and restart info]: + +This pair style does not support the pair_modify mix, shift, table, +and tail options. + +This pair style does not write their information to binary restart files, since +it is stored in potential files. Thus, you need to re-specify the pair_style and +pair_coeff commands in an input script that reads a restart file. + +[Restrictions:] + +This pair style is part of the USER-MISC package. It is only enabled if LAMMPS +was built with that package. See the "Build package"_Build_package.html doc +page for more info. + +This pair potential requires the "newton"_newton.html setting to be "on" for +pair interactions. + + +The {C.drip} parameter file provided with LAMMPS (see the "potentials" +directory) is parameterized for metal "units"_units.html. You can use the DRIP +potential with any LAMMPS units, but you would need to create your own cutstom +parameter file with coefficients listed in the appropriate units, if your +simulation doesn't use "metal" units. + + +[Related commands:] + +"pair_style lebedeva_z"_pair_lebedeva_z.html, +"pair_style kolmogorov/crespi/z"_pair_kolmogorov_crespi_z.html, +"pair_style kolmogorov/crespi/full"_pair_kolmogorov_crespi_full.html, +"pair_style ilp/graphene/hbn"_pair_ilp_graphene_hbn.html. + + +:line + +:link(Wen1) +[(Wen)] M. Wen, S. Carr, S. Fang, E. Kaxiras, and E. B. Tadmor, Phys. Rev. B, 98, 235404 (2018) + +:link(Kolmogorov1) +[(Kolmogorov)] A. N. Kolmogorov, V. H. Crespi, Phys. Rev. B 71, 235415 (2005) + diff --git a/doc/src/pairs.txt b/doc/src/pairs.txt index 30dcc8fd4b..fc9ad974bc 100644 --- a/doc/src/pairs.txt +++ b/doc/src/pairs.txt @@ -31,6 +31,7 @@ Pair Styles :h1 pair_dipole pair_dpd pair_dpd_fdt + pair_drip pair_dsmc pair_eam pair_edip diff --git a/src/USER-MISC/README b/src/USER-MISC/README index 9adc817986..a9d8f8a4a7 100644 --- a/src/USER-MISC/README +++ b/src/USER-MISC/README @@ -70,6 +70,7 @@ pair_style buck/mdf, Paolo Raiteri, p.raiteri at curtin.edu.au, 2 Dec 15 pair_style coul/diel, Axel Kohlmeyer, akohlmey at gmail.com, 1 Dec 11 pair_style coul/shield, Wengen Ouyang (Tel Aviv University), w.g.ouyang at gmail dot com, 30 Mar 18 pair_style dipole/sf, Mario Orsi, orsimario at gmail.com, 8 Aug 11 +pair_style drip, Mingjian Wen, University of Minnesota, wenxx151 at umn.edu, 17 Apr 19 pair_style edip, Luca Ferraro, luca.ferraro at caspur.it, 15 Sep 11 pair_style extep, Jaap Kroes (Radboud U), jaapkroes at gmail dot com, 28 Nov 17 pair_style gauss/cut, Axel Kohlmeyer, akohlmey at gmail.com, 1 Dec 11 From ba7882c1ff82a0da4722595334cadd6afb11c5c9 Mon Sep 17 00:00:00 2001 From: Mingjian Wen Date: Fri, 19 Apr 2019 14:17:57 -0500 Subject: [PATCH 089/311] Add parameter file and example --- examples/USER/misc/drip/C.drip | 15 + examples/USER/misc/drip/CH.airebo | 37595 ++++++++++++++++ examples/USER/misc/drip/README.txt | 6 + examples/USER/misc/drip/data.C | 416 + examples/USER/misc/drip/data.CH | 562 + examples/USER/misc/drip/in.CH_drip | 30 + examples/USER/misc/drip/in.C_drip | 29 + .../misc/drip/log.19Apr2019.g++.in.CH_drip | 109 + .../misc/drip/log.19Apr2019.g++.in.C_drip | 108 + potentials/C.drip | 15 + 10 files changed, 38885 insertions(+) create mode 100644 examples/USER/misc/drip/C.drip create mode 100644 examples/USER/misc/drip/CH.airebo create mode 100644 examples/USER/misc/drip/README.txt create mode 100644 examples/USER/misc/drip/data.C create mode 100644 examples/USER/misc/drip/data.CH create mode 100644 examples/USER/misc/drip/in.CH_drip create mode 100644 examples/USER/misc/drip/in.C_drip create mode 100644 examples/USER/misc/drip/log.19Apr2019.g++.in.CH_drip create mode 100644 examples/USER/misc/drip/log.19Apr2019.g++.in.C_drip create mode 100644 potentials/C.drip diff --git a/examples/USER/misc/drip/C.drip b/examples/USER/misc/drip/C.drip new file mode 100644 index 0000000000..43d5ca4208 --- /dev/null +++ b/examples/USER/misc/drip/C.drip @@ -0,0 +1,15 @@ +# DATE: 2019-04-19 CONTRIBUTOR: Mingjian Wen, wenxx151@umn.edu +# +# Parameters of the Dihedral-angle-corrected registry-dependent interlayer (DRIP) +# potential for multilayer graphene structures. +# +# Cite as M. Wen, S. Carr, S. Fang, E. Kaxiras, and E. B. Tadmor, Phys. Rev. B, 98, 235404 (2018). + + +# C0 C2 C4 C delta lambda A z0 B eta rho_cut r_cut +C C 1.1598e-02 1.2981e-02 3.2515e-02 7.8151e-03 8.3679e-01 2.7158 2.2216e-02 3.34 7.6799e-03 1.1432 1.562 12.0 + + +# C0, C2, C4, C, A, and B in [eV] +# delta, z0, eta, rho_cut, and r_cut in [Angstrom] +# lambda in [1/Angstrom] diff --git a/examples/USER/misc/drip/CH.airebo b/examples/USER/misc/drip/CH.airebo new file mode 100644 index 0000000000..c89077194f --- /dev/null +++ b/examples/USER/misc/drip/CH.airebo @@ -0,0 +1,37595 @@ +# DATE: 2011-10-25 CONTRIBUTOR: Ase Henry, ase@gatech.edu CITATION: Stuart, Tutein and Harrison, J Chem Phys, 112, 6472-6486 (2000) +# AIREBO Brenner/Stuart potential +# Cite as S. J. Stuart, A. B. Tutein, J. A. Harrison, +# "A reactive potential for hydrocarbons with intermolecular interactions", +# J. Chem. Phys. 112 (2000) 6472-6486. + +1.7 rcmin_CC +1.3 rcmin_CH +1.1 rcmin_HH +2.0 rcmax_CC +1.8 rcmax_CH +1.7 rcmax_HH +2.0 rcmaxp_CC +1.6 rcmaxp_CH +1.7 rcmaxp_HH +0.1 smin +2.0 Nmin +3.0 Nmax +3.2 NCmin +3.7 NCmax +0.3134602960832605 Q_CC +0.3407757282257080 Q_CH +0.370 Q_HH +4.746539060659529 alpha_CC +4.102549828548784 alpha_CH +3.536 alpha_HH +10953.54416216992 A_CC +149.940987228812 A_CH +31.6731 A_HH +12388.79197798375 BIJc_CC1 +17.56740646508968 BIJc_CC2 +30.71493208065162 BIJc_CC3 +32.35518665873256 BIJc_CH1 +0.0 BIJc_CH2 +0.0 BIJc_CH3 +28.2297 BIJc_HH1 +0.0 BIJc_HH2 +0.0 BIJc_HH3 +4.720452312717397 Beta_CC1 +1.433213249951261 Beta_CC2 +1.382691250599169 Beta_CC3 +1.434458059249837 Beta_CH1 +0.0 Beta_CH2 +0.0 Beta_CH3 +1.708 Beta_HH1 +1.0 Beta_HH2 +1.0 Beta_HH3 +0.0 rho_CC +1.09 rho_CH +0.7415887 rho_HH +3.4 rcLJmin_CC +3.025 rcLJmin_CH +2.65 rcLJmin_HH +3.816370964 rcLJmax_CC +3.395447696 rcLJmax_CH +2.974524428 rcLJmax_HH +0.77 bLJmin_CC +0.75 bLJmin_CH +0.32 bLJmin_HH +0.81 bLJmax_CC +0.9 bLJmax_CH +0.42 bLJmax_HH +0.002843732471143 epsilon_CC +0.002064935027177 epsilon_CH +0.001499422575693 epsilon_HH +3.4 sigma_CC +3.025 sigma_CH +2.65 sigma_HH +0.3078851086 epsilonT_CCCC +0.1786600912 epsilonT_CCCH +0.1249753356 epsilonT_HCCH + +# gC1 and gC2 + +5 +-1.0 +-0.6666666667 +-0.5 +-0.3333333333 +1.0 + + 0.2816950000 + 1.0627430000 + 2.1363075000 + 2.5334145000 + 1.5544035000 + 0.3862485000 + 0.2827390000 + 1.0718770000 + 2.1681365000 + 2.5885710000 + 1.6019100000 + 0.4025160000 + 0.6900250000 + 5.4601600000 + 23.0108000000 + 54.9086400000 + 68.6124000000 + 34.7051520000 + 0.2718560918 + 0.4892740137 + -0.4328177539 + -0.5616817383 + 1.2708702246 + -0.0375008379 + + 0.2816950000 + 1.0627430000 + 2.1363075000 + 2.5334145000 + 1.5544035000 + 0.3862485000 + 0.2827390000 + 1.0718770000 + 2.1681365000 + 2.5885710000 + 1.6019100000 + 0.4025160000 + 0.6900250000 + 5.4601600000 + 23.0108000000 + 54.9086400000 + 68.6124000000 + 34.7051520000 + 0.3754514434 + 1.4072691309 + 2.2551320117 + 2.0288747461 + 1.4269207324 + 0.5063519355 + +# gH + +4 +-1.0 +-0.8333333333 +-0.5 +1.0 + + 270.4568000026 + 1549.6358000143 + 3781.7719000316 + 4582.1544000348 + 2721.4308000191 + 630.6336000042 + 16.9534406250 + -21.0823875000 + -102.4683000000 + -210.6432299999 + -229.8471299999 + -94.9946400000 + 19.0650249321 + 2.0177562840 + -2.5664219198 + 3.2913322346 + -2.6535615062 + 0.8376699753 + +# pCC + +4 +0.0 +4.0 +0.0 +4.0 + + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0986400000 + 0.0657600000 + 0.0000000000 + 0.0000000000 + 0.0657600000 + -0.0438400000 + -0.0025000000 + 0.0060000000 + -0.0045000000 + 0.0010000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2339100000 + -0.6402960000 + 0.4802220000 + -0.1067160000 + -0.1559400000 + 0.4268640000 + -0.3201480000 + 0.0711440000 + 0.4650000000 + -0.5985000000 + 0.2493750000 + -0.0332500000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.9074060000 + 2.4787080000 + -1.0327950000 + 0.1377060000 + 1.2716040000 + -1.6524720000 + 0.6885300000 + -0.0918040000 + -1.2900000000 + 1.1610000000 + -0.3386250000 + 0.0322500000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.8700000000 + -3.4830000000 + 1.0158750000 + -0.0967500000 + -2.5800000000 + 2.3220000000 + -0.6772500000 + 0.0645000000 + -0.1380150000 + 0.0000000000 + 0.5932650000 + -0.3955100000 + 0.3312360000 + 0.0000000000 + -1.5027480000 + 1.0018320000 + -0.2484270000 + 0.0000000000 + 1.1270610000 + -0.7513740000 + 0.0552060000 + 0.0000000000 + -0.2504580000 + 0.1669720000 + -0.3654800000 + 1.0205280000 + -0.7653960000 + 0.1700880000 + 1.0582800000 + -2.9471040000 + 2.2103280000 + -0.4911840000 + -0.7937100000 + 2.2103280000 + -1.6577460000 + 0.3683880000 + 0.1763800000 + -0.4911840000 + 0.3683880000 + -0.0818640000 + 0.6832080000 + -0.9109440000 + 0.3795600000 + -0.0506080000 + -2.0496240000 + 2.7328320000 + -1.1386800000 + 0.1518240000 + 1.5372180000 + -2.0496240000 + 0.8540100000 + -0.1138680000 + -0.3416040000 + 0.4554720000 + -0.1897800000 + 0.0253040000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.7452810000 + 0.0000000000 + -2.4934230000 + 1.6622820000 + -0.9937080000 + 0.0000000000 + 3.3245640000 + -2.2163760000 + 0.4140450000 + 0.0000000000 + -1.3852350000 + 0.9234900000 + -0.0552060000 + 0.0000000000 + 0.1846980000 + -0.1231320000 + 0.3434400000 + -1.0303200000 + 0.7727400000 + -0.1717200000 + -0.4579200000 + 1.3737600000 + -1.0303200000 + 0.2289600000 + 0.1908000000 + -0.5724000000 + 0.4293000000 + -0.0954000000 + -0.0254400000 + 0.0763200000 + -0.0572400000 + 0.0127200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + +# pCH + +4 +0.0 +4.0 +0.0 +4.0 + + 0.0000000000 + 0.0000000000 + 0.6280110000 + -0.4186740000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0300000000 + 0.0000000000 + -3.1001400000 + 2.0667600000 + -0.0200000000 + 0.0000000000 + 2.0667600000 + -1.3778400000 + -1.1595980000 + 3.2854440000 + -2.4640830000 + 0.5475740000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4966950000 + -3.6001800000 + 2.7001350000 + -0.6000300000 + -0.3311300000 + 2.4001200000 + -1.8000900000 + 0.4000200000 + -6.7698340000 + 8.6212080000 + -3.5921700000 + 0.4789560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 44.5208070000 + -58.1453640000 + 24.2272350000 + -3.2302980000 + -29.6805380000 + 38.7635760000 + -16.1514900000 + 2.1535320000 + 24.3142400000 + -21.8828160000 + 6.3824880000 + -0.6078560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -72.9427200000 + 65.6484480000 + -19.1474640000 + 1.8235680000 + 48.6284800000 + -43.7656320000 + 12.7649760000 + -1.2157120000 + -0.6502100000 + 0.0000000000 + -1.0558290000 + 0.7038860000 + 1.5845040000 + 0.0000000000 + 1.5611040000 + -1.0407360000 + -1.1883780000 + 0.0000000000 + -1.1708280000 + 0.7805520000 + 0.2640840000 + 0.0000000000 + 0.2601840000 + -0.1734560000 + 9.9867120000 + -26.3732760000 + 19.7799570000 + -4.3955460000 + -26.3537880000 + 68.3007840000 + -51.2255880000 + 11.3834640000 + 19.7653410000 + -51.2255880000 + 38.4191910000 + -8.5375980000 + -4.3922980000 + 11.3834640000 + -8.5375980000 + 1.8972440000 + -32.2817400000 + 43.0423200000 + -17.9343000000 + 2.3912400000 + 96.8452200000 + -129.1269600000 + 53.8029000000 + -7.1737200000 + -72.6339150000 + 96.8452200000 + -40.3521750000 + 5.3802900000 + 16.1408700000 + -21.5211600000 + 8.9671500000 + -1.1956200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -5.3172460000 + 0.0000000000 + 40.2945870000 + -26.8630580000 + 6.6795480000 + 0.0000000000 + -52.4957760000 + 34.9971840000 + -2.7831450000 + 0.0000000000 + 21.8732400000 + -14.5821600000 + 0.3710860000 + 0.0000000000 + -2.9164320000 + 1.9442880000 + -32.4571320000 + 97.3713960000 + -73.0285470000 + 16.2285660000 + 43.2761760000 + -129.8285280000 + 97.3713960000 + -21.6380880000 + -18.0317400000 + 54.0952200000 + -40.5714150000 + 9.0158700000 + 2.4042320000 + -7.2126960000 + 5.4095220000 + -1.2021160000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 24.6068000000 + 0.0000000000 + -73.8204000000 + 49.2136000000 + -22.1461200000 + 0.0000000000 + 66.4383600000 + -44.2922400000 + 6.4592850000 + 0.0000000000 + -19.3778550000 + 12.9185700000 + -0.6151700000 + 0.0000000000 + 1.8455100000 + -1.2303400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + +# piCC + +6 +0.0 +4.0 +0.0 +4.0 +0.0 +9.0 + + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1952414550000000 + -0.1301609700000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1301609700000000 + 0.0867739800000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1952414550000000 + -0.1301609700000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2460512699999999 + -0.1640341799999999 + 0.0000000000000000 + 0.0000000000000000 + -0.1640341799999999 + 0.1093561200000001 + 0.0000000000000000 + 0.0000000000000000 + -0.1301609700000000 + 0.0867739800000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1640341799999999 + 0.1093561200000001 + 0.0000000000000000 + 0.0000000000000000 + 0.1093561200000001 + -0.0729040800000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1859428215000000 + 0.6024559355999999 + -0.4518419517000000 + 0.1004093226000000 + 0.1239618810000000 + -0.4016372904000000 + 0.3012279677999999 + -0.0669395484000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1859428215000000 + 0.6024559355999999 + -0.4518419517000000 + 0.1004093226000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3234498210000000 + 0.9186318863999997 + -0.6208630397999997 + 0.1076980643999998 + 0.2156332139999999 + -0.6124212575999999 + 0.4139086932000001 + -0.0717987096000001 + 0.1239618810000000 + -0.4016372904000000 + 0.3012279677999999 + -0.0669395484000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2156332139999999 + -0.6124212575999999 + 0.4139086932000001 + -0.0717987096000001 + -0.1437554760000001 + 0.4082808384000002 + -0.2759391288000001 + 0.0478658064000000 + 0.1388410212000000 + -0.1785098844000000 + 0.0743791185000000 + -0.0099172158000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4016472399000000 + 0.5355296532000000 + -0.2231373555000000 + 0.0297516474000000 + 0.2677648266000000 + -0.3570197688000000 + 0.1487582370000000 + -0.0198344316000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4016472399000000 + 0.5355296532000000 + -0.2231373555000000 + 0.0297516474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 4.5450778986000007 + -5.3987902596000001 + 2.0451633165000001 + -0.2545255422000000 + -3.0300519324000001 + 3.5991935063999998 + -1.3634422110000000 + 0.1696836948000000 + 0.2677648266000000 + -0.3570197688000000 + 0.1487582370000000 + -0.0198344316000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0300519324000001 + 3.5991935063999998 + -1.3634422110000000 + 0.1696836948000000 + 2.0200346216000002 + -2.3994623376000002 + 0.9089614740000000 + -0.1131224632000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1170126711000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0520056316000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1170126711000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0520056316000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1170126711000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0520056316000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1170126711000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0520056316000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1170126711000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0520056316000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1170126711000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0780084474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0520056316000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1101605377500000 + -0.0734403585000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1081921266000000 + 0.0721280844000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0811440949500000 + -0.0540960633000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0180320211000000 + 0.0120213474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.5308662927499996 + 1.0205775285000001 + 0.0000000000000000 + 0.0000000000000000 + 4.2922496105999990 + -2.8614997404000002 + 0.0000000000000000 + 0.0000000000000000 + -3.1601247079499992 + 2.1067498053000002 + 0.0000000000000000 + 0.0000000000000000 + 0.6759999350999999 + -0.4506666234000001 + 0.0000000000000000 + 0.0000000000000000 + 1.0205775285000001 + -0.6803850190000000 + 0.0000000000000000 + 0.0000000000000000 + -2.8614997404000002 + 1.9076664936000003 + 0.0000000000000000 + 0.0000000000000000 + 2.1067498053000002 + -1.4044998702000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4506666234000001 + 0.3004444156000000 + -0.3953362375000001 + 1.0369354002000000 + -0.7777015501500000 + 0.1728225667000000 + 0.8000527127999999 + -2.0066802120000000 + 1.5050101590000000 + -0.3344467020000000 + -0.6000395345999999 + 1.5050101590000000 + -1.1287576192500000 + 0.2508350265000000 + 0.1333421188000000 + -0.3344467020000000 + 0.2508350265000000 + -0.0557411170000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.3103306184999992 + -9.0968349185999990 + 6.7318116889499997 + -1.4555961530999999 + -8.5868161127999993 + 23.8242035591999937 + -17.5957091693999956 + 3.7890715931999996 + 6.3613620845999996 + -17.6319026693999987 + 13.0195943770499980 + -2.8024286948999997 + -1.3786360187999998 + 3.8132005931999995 + -2.8144931948999998 + 0.6052619321999999 + -2.2068870789999999 + 6.0645566123999997 + -4.4878744592999995 + 0.9703974353999998 + 5.7245440751999999 + -15.8828023728000005 + 11.7304727795999995 + -2.5260477287999996 + -4.2409080563999995 + 11.7546017795999980 + -8.6797295846999987 + 1.8682857965999997 + 0.9190906791999999 + -2.5421337287999997 + 1.8763287965999997 + -0.4035079547999999 + 1.4805008319000001 + -1.9673896319999999 + 0.8197456799999999 + -0.1092994240000000 + -3.5413013375999998 + 4.7217351167999997 + -1.9673896319999997 + 0.2623186176000000 + 2.6559760031999997 + -3.5413013375999993 + 1.4755422239999998 + -0.1967389632000000 + -0.5902168896000000 + 0.7869558527999999 + -0.3278982720000000 + 0.0437197696000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -19.2295206957000033 + 24.4584372960000032 + -9.9185720400000008 + 1.2982590720000002 + 48.8229586128000079 + -61.7340105504000007 + 24.9051738960000009 + -3.2480382528000007 + -36.6172189596000024 + 46.3005079128000006 + -18.6788804219999989 + 2.4360286896000005 + 8.1371597688000001 + -10.2890017584000013 + 4.1508623160000004 + -0.5413397088000000 + 12.8196804638000010 + -16.3056248640000021 + 6.6123813600000005 + -0.8655060480000000 + -32.5486390752000005 + 41.1560070336000052 + -16.6034492640000018 + 2.1653588352000002 + 24.4114793064000004 + -30.8670052752000004 + 12.4525869480000004 + -1.6240191264000001 + -5.4247731792000007 + 6.8593345056000006 + -2.7672415440000000 + 0.3608931392000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.2914572557999993 + -3.1368362039999997 + 0.9712843094999998 + -0.0996618390000000 + -7.9931075507999978 + 7.5284068895999994 + -2.3310823427999994 + 0.2391884136000000 + 5.9948306630999983 + -5.6463051671999986 + 1.7483117570999998 + -0.1793913102000000 + -1.3321845917999997 + 1.2547344815999997 + -0.3885137237999999 + 0.0398647356000000 + -2.1943048371999994 + 2.0912241359999992 + -0.6475228729999998 + 0.0664412260000000 + 5.3287383671999988 + -5.0189379263999987 + 1.5540548951999997 + -0.1594589424000000 + -3.9965537753999993 + 3.7642034447999992 + -1.1655411713999997 + 0.1195942068000000 + 0.8881230611999998 + -0.8364896543999999 + 0.2590091492000000 + -0.0265764904000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 51.2174335277999973 + -34.7252003400000007 + 7.7793458265000002 + -0.5762478390000000 + -125.8865034036000026 + 85.2980168160000147 + -19.1108755836000022 + 1.4156204136000001 + 98.0036935526999997 + -66.4204326120000133 + 14.8837136877000020 + -1.1024973102000000 + -23.3736279005999990 + 15.8476161360000010 + -3.5521839306000000 + 0.2631247356000000 + -34.1449556852000029 + 23.1501335600000040 + -5.1862305510000013 + 0.3841652260000000 + 83.9243356024000065 + -56.8653445440000098 + 12.7405837224000020 + -0.9437469424000001 + -65.3357957018000093 + 44.2802884080000041 + -9.9224757918000019 + 0.7349982068000001 + 15.5824186004000005 + -10.5650774240000018 + 2.3681226204000003 + -0.1754164904000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 18.8699219402999923 + -9.8715457799999946 + 1.7195853929999991 + -0.0996618419999999 + -45.3977355935999753 + 23.6917098719999899 + -4.1270049431999976 + 0.2391884207999999 + 34.0686926951999851 + -17.7687824039999924 + 3.0952537073999986 + -0.1793913155999999 + -7.5798832655999968 + 3.9486183119999980 + -0.6878341571999995 + 0.0398647368000000 + -12.5799479601999984 + 6.5810305199999988 + -1.1463902619999997 + 0.0664412280000000 + 30.2651570623999930 + -15.7944732479999974 + 2.7513366287999990 + -0.1594589472000000 + -22.7124617967999924 + 11.8458549359999967 + -2.0635024715999997 + 0.1195942104000000 + 5.0532555103999988 + -2.6324122079999994 + 0.4585561047999999 + -0.0265764912000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0187635363000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1549554239999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1366075680000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0394199040000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0125090242000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1033036160000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0910717120000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0262799360000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0187635363000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1549554239999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1366075680000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0394199040000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0125090242000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1033036160000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0910717120000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0262799360000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0187635363000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1549554239999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1366075680000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0394199040000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0125090242000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1033036160000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0910717120000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0262799360000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.0321606498499998 + 4.6881070998999999 + 0.0000000000000000 + 0.0000000000000000 + 9.1366163297999989 + -6.0910775531999999 + 0.0000000000000000 + 0.0000000000000000 + -3.8069234707500001 + 2.5379489805000000 + 0.0000000000000000 + 0.0000000000000000 + 0.5075897961000000 + -0.3383931974000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 24.1765592188500023 + -16.1177061459000015 + 0.0000000000000000 + 0.0000000000000000 + -30.8078686818000023 + 20.5385791212000015 + 0.0000000000000000 + 0.0000000000000000 + 12.6594244507500004 + -8.4396163005000009 + 0.0000000000000000 + 0.0000000000000000 + -1.6721732601000001 + 1.1147821734000001 + 0.0000000000000000 + 0.0000000000000000 + -16.1177061459000015 + 10.7451374305999998 + 0.0000000000000000 + 0.0000000000000000 + 20.5385791212000015 + -13.6923860807999986 + 0.0000000000000000 + 0.0000000000000000 + -8.4396163005000009 + 5.6264108669999997 + 0.0000000000000000 + 0.0000000000000000 + 1.1147821734000001 + -0.7431881155999999 + 1.7964189073000001 + -9.9371338973999990 + 7.4528504230499992 + -1.6561889829000001 + -2.4750911663999995 + 13.2495118631999986 + -9.9371338973999990 + 2.2082519771999998 + 1.0312879859999999 + -5.5206299429999994 + 4.1404724572499996 + -0.9201049905000001 + -0.1375050648000000 + 0.7360839924000000 + -0.5520629942999999 + 0.1226806654000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -44.4148786822999924 + 125.9369562125999806 + -94.4527171594499890 + 20.9894927020999980 + 57.1409193383999963 + -161.7845013575999928 + 121.3383760181999946 + -26.9640835595999988 + -23.5724663909999990 + 66.7014588990000021 + -50.0260941742499909 + 11.1169098164999998 + 3.1219955187999995 + -8.8305278531999996 + 6.6228958898999997 + -1.4717546421999999 + 30.4859639041999984 + -86.0604782867999916 + 64.5453587151000079 + -14.3434130477999986 + -39.2202895175999942 + 110.5595581391999929 + -82.9196686044000018 + 18.4265930231999988 + 16.1842872989999975 + -45.5939825580000004 + 34.1954869185000021 + -7.5989970929999995 + -2.1439049731999997 + 6.0371976743999998 + -4.5278982558000003 + 1.0061996123999999 + 41.0697356006999996 + -54.7530359903999937 + 22.8137649960000033 + -3.0418353327999998 + -52.4181452760000042 + 69.8908603680000056 + -29.1211918200000000 + 3.8828255760000001 + 21.8408938650000017 + -29.1211918200000000 + 12.1338299250000006 + -1.6178439899999999 + -2.9121191820000001 + 3.8828255760000001 + -1.6178439899999999 + 0.2157125320000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -58.7754249068999997 + 72.4365406656000062 + -30.1818919440000002 + 4.0242522591999998 + 71.7688591056000007 + -88.1435659967999925 + 36.7264858320000016 + -4.8968647776000003 + -29.9036912940000015 + 36.7264858320000016 + -15.3027024300000001 + 2.0403603240000003 + 3.9871588392000001 + -4.8968647776000003 + 2.0403603240000003 + -0.2720480432000001 + 34.4529747782000015 + -41.9835046752000025 + 17.4931269480000005 + -2.3324169264000001 + -41.7636522936000034 + 50.6527056287999997 + -21.1052940120000017 + 2.8140392016000000 + 17.4015217890000002 + -21.1052940120000017 + 8.7938725049999995 + -1.1725163339999998 + -2.3202029051999999 + 2.8140392016000000 + -1.1725163339999998 + 0.1563355111999999 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -22.5910445969999856 + 16.9389155015999862 + -5.2449352712999966 + 0.5381739305999996 + 29.8518848603999807 + -22.5852206687999839 + 6.9932470283999955 + -0.7175652407999995 + -12.4382853584999911 + 9.4105086119999921 + -2.9138529284999981 + 0.2989855169999998 + 1.6584380477999987 + -1.2547344815999988 + 0.3885137237999997 + -0.0398647356000000 + 15.0606963979999851 + -11.2926103343999884 + 3.4966235141999964 + -0.3587826203999996 + -19.9012565735999800 + 15.0568137791999828 + -4.6621646855999952 + 0.4783768271999995 + 8.2921902389999929 + -6.2736724079999924 + 1.9425686189999980 + -0.1993236779999998 + -1.1056253651999990 + 0.8364896543999990 + -0.2590091491999997 + 0.0265764904000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 132.0402867341999809 + -94.3691021639999832 + 21.4156989368999930 + -1.5863480693999996 + -133.2574315811999668 + 96.4624295519999748 + -21.9475812491999918 + 1.6257467591999992 + 44.7574818254999798 + -32.8519189799999864 + 7.4931545204999956 + -0.5550484829999996 + -5.0106466433999977 + 3.7277438639999976 + -0.8522720693999993 + 0.0631312643999999 + -88.0268578227999967 + 62.9127347760000006 + -14.2771326246000001 + 1.0575653796000002 + 88.8382877207999968 + -64.3082863680000116 + 14.6317208328000028 + -1.0838311728000001 + -29.8383212170000043 + 21.9012793200000040 + -4.9954363470000018 + 0.3700323220000001 + 3.3404310956000010 + -2.4851625760000013 + 0.5681813796000004 + -0.0420875096000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -104.3657106932998886 + 53.3063472119999489 + -9.2857611221999896 + 0.5381739467999993 + 139.1294649887998673 + -71.0751296159999271 + 12.3810148295999856 + -0.7175652623999991 + -58.0317834119999389 + 29.6146373399999696 + -5.1587561789999938 + 0.2989855259999996 + 7.7430087215999910 + -3.9486183119999954 + 0.6878341571999992 + -0.0398647367999999 + 69.5771404621999920 + -35.5375648079999991 + 6.1905074148000008 + -0.3587826312000001 + -92.7529766592000016 + 47.3834197440000082 + -8.2540098864000022 + 0.4783768416000003 + 38.6878556080000138 + -19.7430915600000105 + 3.4391707860000027 + -0.1993236840000002 + -5.1620058144000041 + 2.6324122080000025 + -0.4585561048000005 + 0.0265764912000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5694553116999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.4011244799999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.4783081999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2025453600000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.7129702077999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.2674163199999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9855388000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1350302400000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5694553116999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.4011244799999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.4783081999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2025453600000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.7129702077999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.2674163199999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9855388000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1350302400000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5694553116999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.4011244799999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.4783081999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2025453600000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.7129702077999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.2674163199999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9855388000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1350302400000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1796984025000000 + 0.1197989350000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.5390952075000000 + -0.3593968050000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3593968050000000 + 0.2395978700000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0598994675000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.7523780425000002 + -15.7744311360000005 + 11.8308233519999995 + -2.6290718559999999 + -6.7580597519999994 + 16.2193434048000000 + -12.1645075536000000 + 2.7032239007999999 + 1.9711007609999998 + -4.7306418263999994 + 3.5479813698000000 + -0.7884403043999999 + -0.1877238820000000 + 0.4505373168000000 + -0.3379029876000000 + 0.0750895528000000 + -7.0045704549999996 + 16.5234516479999982 + -12.3925887360000004 + 2.7539086080000001 + 6.7580597519999994 + -16.2193434048000000 + 12.1645075536000000 + -2.7032239007999999 + -1.9711007609999998 + 4.7306418263999994 + -3.5479813698000000 + 0.7884403043999999 + 0.1877238820000000 + -0.4505373168000000 + 0.3379029876000000 + -0.0750895528000000 + 1.7561266437000007 + -2.3348907144000020 + 0.9728711310000014 + -0.1297161508000003 + -0.0000000000000012 + 0.0000000000000029 + -0.0000000000000020 + 0.0000000000000004 + 0.0000000000000005 + -0.0000000000000012 + 0.0000000000000008 + -0.0000000000000002 + -0.0000000000000001 + 0.0000000000000002 + -0.0000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -46.0039935710999970 + 61.0691501591999995 + -25.4454792330000004 + 3.3927305643999999 + 36.4935226607999965 + -48.6580302144000001 + 20.2741792560000000 + -2.7032239007999999 + -10.6439441093999996 + 14.1919254792000000 + -5.9133022830000002 + 0.7884403043999999 + 1.0137089628000000 + -1.3516119503999999 + 0.5631716460000000 + -0.0750895528000000 + 44.1854485514000146 + -58.7342594448000099 + 24.4726081020000059 + -3.2630144136000014 + -36.4935226608000107 + 48.6580302144000143 + -20.2741792560000071 + 2.7032239008000012 + 10.6439441094000031 + -14.1919254792000071 + 5.9133022830000037 + -0.7884403044000006 + -1.0137089628000004 + 1.3516119504000006 + -0.5631716460000002 + 0.0750895528000001 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1101605377500000 + -0.0734403585000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.5308662927499996 + 1.0205775285000001 + 0.0000000000000000 + 0.0000000000000000 + 1.0205775285000001 + -0.6803850190000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1081921266000000 + 0.0721280844000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 4.2922496105999990 + -2.8614997404000002 + 0.0000000000000000 + 0.0000000000000000 + -2.8614997404000002 + 1.9076664936000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0811440949500000 + -0.0540960633000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.1601247079499992 + 2.1067498053000002 + 0.0000000000000000 + 0.0000000000000000 + 2.1067498053000002 + -1.4044998702000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0180320211000000 + 0.0120213474000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6759999350999999 + -0.4506666234000001 + 0.0000000000000000 + 0.0000000000000000 + -0.4506666234000001 + 0.3004444156000000 + -0.3953362375000001 + 1.0369354002000000 + -0.7777015501500000 + 0.1728225667000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.3103306184999992 + -9.0968349185999990 + 6.7318116889499997 + -1.4555961531000001 + -2.2068870789999999 + 6.0645566123999997 + -4.4878744593000004 + 0.9703974354000000 + 0.8000527127999999 + -2.0066802120000000 + 1.5050101590000000 + -0.3344467020000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.5868161127999993 + 23.8242035591999972 + -17.5957091693999992 + 3.7890715932000001 + 5.7245440751999999 + -15.8828023728000005 + 11.7304727795999995 + -2.5260477288000001 + -0.6000395345999999 + 1.5050101590000000 + -1.1287576192500000 + 0.2508350265000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.3613620845999996 + -17.6319026693999987 + 13.0195943770500016 + -2.8024286949000006 + -4.2409080564000003 + 11.7546017796000015 + -8.6797295847000004 + 1.8682857965999999 + 0.1333421188000000 + -0.3344467020000000 + 0.2508350265000000 + -0.0557411170000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.3786360188000000 + 3.8132005932000004 + -2.8144931949000003 + 0.6052619322000001 + 0.9190906792000001 + -2.5421337288000001 + 1.8763287966000000 + -0.4035079547999999 + 1.4805008319000001 + -1.9673896319999999 + 0.8197456799999999 + -0.1092994240000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -19.2295206957000033 + 24.4584372960000032 + -9.9185720400000008 + 1.2982590720000002 + 12.8196804638000010 + -16.3056248640000021 + 6.6123813600000005 + -0.8655060480000000 + -3.5413013375999998 + 4.7217351167999997 + -1.9673896319999997 + 0.2623186176000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 48.8229586128000079 + -61.7340105504000007 + 24.9051738960000009 + -3.2480382528000007 + -32.5486390752000005 + 41.1560070336000052 + -16.6034492640000018 + 2.1653588352000002 + 2.6559760031999997 + -3.5413013375999993 + 1.4755422239999998 + -0.1967389632000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -36.6172189596000024 + 46.3005079128000006 + -18.6788804219999989 + 2.4360286896000005 + 24.4114793064000004 + -30.8670052752000004 + 12.4525869480000004 + -1.6240191264000001 + -0.5902168896000000 + 0.7869558527999999 + -0.3278982720000000 + 0.0437197696000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 8.1371597688000001 + -10.2890017584000013 + 4.1508623160000004 + -0.5413397088000000 + -5.4247731792000007 + 6.8593345056000006 + -2.7672415440000000 + 0.3608931392000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.2914572557999993 + -3.1368362039999997 + 0.9712843094999998 + -0.0996618390000000 + -2.1943048371999994 + 2.0912241359999992 + -0.6475228729999998 + 0.0664412260000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.9931075507999978 + 7.5284068895999994 + -2.3310823427999994 + 0.2391884136000000 + 5.3287383671999988 + -5.0189379263999987 + 1.5540548951999997 + -0.1594589424000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.9948306630999983 + -5.6463051671999986 + 1.7483117570999998 + -0.1793913102000000 + -3.9965537753999993 + 3.7642034447999992 + -1.1655411713999997 + 0.1195942068000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.3321845917999997 + 1.2547344815999997 + -0.3885137237999999 + 0.0398647356000000 + 0.8881230611999998 + -0.8364896543999999 + 0.2590091492000000 + -0.0265764904000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 51.2174335277999973 + -34.7252003400000007 + 7.7793458265000002 + -0.5762478390000000 + -34.1449556852000029 + 23.1501335600000040 + -5.1862305510000013 + 0.3841652260000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -125.8865034036000026 + 85.2980168160000147 + -19.1108755836000022 + 1.4156204136000001 + 83.9243356024000065 + -56.8653445440000098 + 12.7405837224000020 + -0.9437469424000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 98.0036935526999997 + -66.4204326120000133 + 14.8837136877000020 + -1.1024973102000000 + -65.3357957018000093 + 44.2802884080000041 + -9.9224757918000019 + 0.7349982068000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -23.3736279005999990 + 15.8476161360000010 + -3.5521839306000000 + 0.2631247356000000 + 15.5824186004000005 + -10.5650774240000018 + 2.3681226204000003 + -0.1754164904000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 18.8699219402999923 + -9.8715457799999946 + 1.7195853929999991 + -0.0996618419999999 + -12.5799479601999984 + 6.5810305199999988 + -1.1463902619999997 + 0.0664412280000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -45.3977355935999753 + 23.6917098719999899 + -4.1270049431999976 + 0.2391884207999999 + 30.2651570623999930 + -15.7944732479999974 + 2.7513366287999990 + -0.1594589472000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 34.0686926951999851 + -17.7687824039999924 + 3.0952537073999986 + -0.1793913155999999 + -22.7124617967999924 + 11.8458549359999967 + -2.0635024715999997 + 0.1195942104000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5798832655999968 + 3.9486183119999980 + -0.6878341571999995 + 0.0398647368000000 + 5.0532555103999988 + -2.6324122079999994 + 0.4585561047999999 + -0.0265764912000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0187635363000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0125090242000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1549554239999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1033036160000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1366075680000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0910717120000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0394199040000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0262799360000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0187635363000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0125090242000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1549554239999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1033036160000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1366075680000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0910717120000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0394199040000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0262799360000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0187635363000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0125090242000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1549554239999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1033036160000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1366075680000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0910717120000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0394199040000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0262799360000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 4.2228846869999987 + -2.8152564579999999 + 0.0000000000000000 + 0.0000000000000000 + -11.0322309923999988 + 7.3548206615999998 + 0.0000000000000000 + 0.0000000000000000 + 8.1954232442999988 + -5.4636154962000010 + 0.0000000000000000 + 0.0000000000000000 + -1.7862051654000000 + 1.1908034436000001 + 0.0000000000000000 + 0.0000000000000000 + -11.0322309923999988 + 7.3548206615999998 + 0.0000000000000000 + 0.0000000000000000 + 29.4624929663999993 + -19.6416619776000019 + 0.0000000000000000 + 0.0000000000000000 + -21.8606197247999994 + 14.5737464832000008 + 0.0000000000000000 + 0.0000000000000000 + 4.7529154943999998 + -3.1686103296000003 + 0.0000000000000000 + 0.0000000000000000 + 8.1954232442999988 + -5.4636154962000010 + 0.0000000000000000 + 0.0000000000000000 + -21.8606197247999994 + 14.5737464832000008 + 0.0000000000000000 + 0.0000000000000000 + 16.2182772935999999 + -10.8121848624000023 + 0.0000000000000000 + 0.0000000000000000 + -3.5253116208000002 + 2.3502077472000003 + 0.0000000000000000 + 0.0000000000000000 + -1.7862051654000000 + 1.1908034436000001 + 0.0000000000000000 + 0.0000000000000000 + 4.7529154943999998 + -3.1686103296000003 + 0.0000000000000000 + 0.0000000000000000 + -3.5253116208000002 + 2.3502077472000003 + 0.0000000000000000 + 0.0000000000000000 + 0.7659025824000001 + -0.5106017216000001 + -6.4539249160000001 + 18.7708587479999949 + -13.9570580609999997 + 3.0477524580000002 + 17.1048773232000002 + -49.5868839695999952 + 36.8269049772000017 + -8.0223086616000003 + -12.7236579923999980 + 36.8751629771999987 + -27.3839287329000030 + 5.9642314962000009 + 2.7808128872000002 + -8.0544806615999995 + 5.9803174962000005 + -1.3020514436000004 + 17.1048773232000002 + -49.5868839695999952 + 36.8269049772000017 + -8.0223086616000003 + -45.7490319551999889 + 132.4958518656000024 + -98.2821148992000104 + 21.3561259776000014 + 33.9967739664000064 + -98.4268888992000086 + 73.0028361744000023 + -15.8595944832000022 + -7.4148386592000008 + 21.4526419776000026 + -15.9078524832000010 + 3.4543543296000006 + -12.7236579923999997 + 36.8751629771999987 + -27.3839287329000030 + 5.9642314962000009 + 33.9967739663999993 + -98.4268888992000086 + 73.0028361744000165 + -15.8595944832000004 + -25.2613304747999976 + 73.1114166744000045 + -54.2205646307999984 + 11.7765708624000016 + 5.5086289944000004 + -15.9319814832000013 + 11.8127643624000012 + -2.5645157472000006 + 2.7808128872000002 + -8.0544806615999995 + 5.9803174962000005 + -1.3020514436000004 + -7.4148386592000008 + 21.4526419776000026 + -15.9078524832000010 + 3.4543543296000006 + 5.5086289944000004 + -15.9319814832000013 + 11.8127643624000012 + -2.5645157472000006 + -1.2008064432000003 + 3.4704403296000006 + -2.5725587472000004 + 0.5582257216000001 + 39.8894121000000013 + -50.7093326999999903 + 20.7656306250000000 + -2.7364611499999998 + -107.5650035999999830 + 136.5474131999999940 + -55.8049815000000038 + 7.3437953999999994 + 80.6737526999999801 + -102.4105598999999955 + 41.8537361250000046 + -5.5078465500000000 + -17.9275005999999983 + 22.7579021999999966 + -9.3008302500000006 + 1.2239659000000001 + -107.5650035999999972 + 136.5474131999999940 + -55.8049815000000038 + 7.3437953999999994 + 288.7152523199999905 + -365.7688358399999515 + 149.1343596000000105 + -19.5939748799999975 + -216.5364392399999645 + 274.3266268799999921 + -111.8507697000000007 + 14.6954811599999999 + 48.1192087200000032 + -60.9614726399999967 + 24.8557266000000006 + -3.2656624800000000 + 80.6737526999999943 + -102.4105598999999955 + 41.8537361250000046 + -5.5078465500000000 + -216.5364392400000213 + 274.3266268799999921 + -111.8507697000000007 + 14.6954811599999999 + 162.4023294299999804 + -205.7449701599999798 + 83.8880772750000006 + -11.0216108699999999 + -36.0894065399999988 + 45.7211044800000010 + -18.6417949500000013 + 2.4492468600000001 + -17.9275005999999983 + 22.7579021999999966 + -9.3008302500000006 + 1.2239659000000001 + 48.1192087200000032 + -60.9614726399999967 + 24.8557266000000006 + -3.2656624800000000 + -36.0894065399999988 + 45.7211044800000010 + -18.6417949500000013 + 2.4492468600000001 + 8.0198681199999999 + -10.1602454400000006 + 4.1426211000000004 + -0.5442770800000001 + -11.9141455994999941 + 11.5908520439999947 + -3.4999733044999992 + 0.3484810289999999 + 31.2390159023999878 + -30.3275138687999863 + 9.1769633783999964 + -0.9160839407999998 + -23.4292619267999918 + 22.7456354015999942 + -6.8827225337999982 + 0.6870629555999997 + 5.2065026503999983 + -5.0545856447999986 + 1.5294938963999996 + -0.1526806568000000 + 31.2390159023999843 + -30.3275138687999899 + 9.1769633783999964 + -0.9160839407999998 + -81.3681242063999548 + 78.8087587967999639 + -23.8895779823999916 + 2.3899521887999993 + 61.0260931547999803 + -59.1065690975999729 + 17.9171834867999920 + -1.7924641415999993 + -13.5613540343999954 + 13.1347931327999969 + -3.9815963303999986 + 0.3983253647999999 + -23.4292619267999882 + 22.7456354015999906 + -6.8827225337999982 + 0.6870629555999997 + 61.0260931547999803 + -59.1065690975999729 + 17.9171834867999955 + -1.7924641415999993 + -45.7695698660999852 + 44.3299268231999832 + -13.4378876150999957 + 1.3443481061999996 + 10.1710155257999979 + -9.8510948495999990 + 2.9861972477999990 + -0.2987440236000000 + 5.2065026503999983 + -5.0545856447999986 + 1.5294938963999996 + -0.1526806568000000 + -13.5613540343999954 + 13.1347931327999969 + -3.9815963303999986 + 0.3983253647999999 + 10.1710155257999979 + -9.8510948495999990 + 2.9861972477999990 + -0.2987440236000000 + -2.2602256723999994 + 2.1891321887999995 + -0.6635993883999999 + 0.0663875608000000 + -135.7455229915000245 + 92.5172767399999998 + -20.7448023915000022 + 1.5366520290000003 + 370.6031730607999748 + -252.4316724479999721 + 56.5982632008000053 + -4.1924639408000006 + -282.7374677955999687 + 192.5863143359999867 + -43.1827734005999986 + 3.1987239556000002 + 64.9572541768000065 + -44.2469854080000005 + 9.9224278667999997 + -0.7349946568000001 + 370.6031730607999748 + -252.4316724480000289 + 56.5982632008000053 + -4.1924639408000006 + -1001.6410292688001391 + 681.9045713280002019 + -152.8863145488000157 + 11.3249121888000026 + 765.5860359516002518 + -521.2161084960000608 + 116.8669639116000099 + -8.6568121415999997 + -176.5103475448000268 + 120.1758818880000064 + -26.9492044248000013 + 1.9962373648000000 + -282.7374677955999687 + 192.5863143359999867 + -43.1827734005999986 + 3.1987239556000002 + 765.5860359516000244 + -521.2161084960000608 + 116.8669639116000099 + -8.6568121415999997 + -584.9559749637001005 + 398.2528413720000344 + -89.3018939337000006 + 6.6149551062000000 + 134.7753046586000210 + -91.7631914159999980 + 20.5789413186000019 + -1.5243660235999998 + 64.9572541768000065 + -44.2469854080000005 + 9.9224278667999997 + -0.7349946568000001 + -176.5103475448000268 + 120.1758818880000064 + -26.9492044248000013 + 1.9962373648000000 + 134.7753046586000210 + -91.7631914159999980 + 20.5789413186000019 + -1.5243660235999998 + -31.0134205908000027 + 21.1168336479999965 + -4.7362260707999999 + 0.3508315608000000 + -49.4848264664999746 + 26.2405983299999868 + -4.5854146104999991 + 0.2657560369999998 + 133.8931721307999396 + -70.8746726159999696 + 12.3806633795999943 + -0.7175439623999997 + -100.4470670980999500 + 53.1560044619999772 + -9.2854975346999957 + 0.5381579717999998 + 22.3336540217999939 + -11.8124454359999937 + 2.0634438965999995 + -0.1195906604000000 + 133.8931721307999396 + -70.8746726159999696 + 12.3806633795999943 + -0.7175439623999997 + -357.7270527887998810 + 189.0525821759999303 + -33.0151960655999872 + 1.9134562463999991 + 268.3768535915999109 + -141.7894366319999335 + 24.7613970491999922 + -1.4350921847999993 + -59.6755514647999803 + 31.5087636959999884 + -5.5025326775999988 + 0.3189093743999999 + -100.4470670980999643 + 53.1560044619999914 + -9.2854975346999957 + 0.5381579717999998 + 268.3768535915999109 + -141.7894366319999335 + 24.7613970491999922 + -1.4350921847999993 + -201.3438131936999298 + 106.3420774739999501 + -18.5710477868999924 + 1.0763191385999997 + 44.7702575985999829 + -23.6315727719999913 + 4.1268995081999993 + -0.2391820307999999 + 22.3336540217999939 + -11.8124454359999937 + 2.0634438965999995 + -0.1195906604000000 + -59.6755514647999803 + 31.5087636959999884 + -5.5025326775999988 + 0.3189093743999999 + 44.7702575985999829 + -23.6315727719999913 + 4.1268995081999993 + -0.2391820307999999 + -9.9549879107999981 + 5.2514606159999992 + -0.9170887795999998 + 0.0531515624000000 + 0.7858877775000047 + -0.0838432500000021 + 0.0001730625000003 + -0.0000088750000000 + -1.8374687780000103 + 0.2012238000000045 + -0.0004153500000007 + 0.0000213000000000 + 1.3509135835000063 + -0.1509178500000028 + 0.0003115125000004 + -0.0000159750000000 + -0.2881194630000009 + 0.0335373000000004 + -0.0000692250000000 + 0.0000035500000000 + -1.8374687780000101 + 0.2012238000000045 + -0.0004153500000007 + 0.0000213000000000 + 4.2207095280000200 + -0.4829371200000090 + 0.0009968400000013 + -0.0000511200000001 + -3.0839681460000103 + 0.3622028400000043 + -0.0007476300000006 + 0.0000383400000000 + 0.6490755880000003 + -0.0804895199999999 + 0.0001661399999999 + -0.0000085200000000 + 1.3509135835000063 + -0.1509178500000028 + 0.0003115125000004 + -0.0000159750000000 + -3.0839681460000108 + 0.3622028400000043 + -0.0007476300000006 + 0.0000383400000000 + 2.2518031095000022 + -0.2716521300000003 + 0.0005607224999999 + -0.0000287550000000 + -0.4732126909999979 + 0.0603671399999987 + -0.0001246049999998 + 0.0000063900000000 + -0.2881194630000009 + 0.0335373000000004 + -0.0000692250000000 + 0.0000035500000000 + 0.6490755880000003 + -0.0804895199999999 + 0.0001661399999999 + -0.0000085200000000 + -0.4732126909999979 + 0.0603671399999987 + -0.0001246049999998 + 0.0000063900000000 + 0.0991165979999985 + -0.0134149199999992 + 0.0000276899999999 + -0.0000014200000000 + 0.7871924025000062 + -0.0842160000000026 + 0.0001996875000003 + -0.0000088750000000 + -1.8405998780000177 + 0.2021184000000074 + -0.0004792500000010 + 0.0000213000000000 + 1.3532619085000168 + -0.1515888000000072 + 0.0003594375000010 + -0.0000159750000000 + -0.2886413130000054 + 0.0336864000000023 + -0.0000798750000003 + 0.0000035500000000 + -1.8405998780000132 + 0.2021184000000054 + -0.0004792500000007 + 0.0000213000000000 + 4.2282241680000388 + -0.4850841600000161 + 0.0011502000000022 + -0.0000511200000001 + -3.0896041260000380 + 0.3638131200000160 + -0.0008626500000022 + 0.0000383400000001 + 0.6503280280000123 + -0.0808473600000053 + 0.0001917000000008 + -0.0000085200000000 + 1.3532619085000075 + -0.1515888000000030 + 0.0003594375000004 + -0.0000159750000000 + -3.0896041260000238 + 0.3638131200000099 + -0.0008626500000014 + 0.0000383400000001 + 2.2560300945000247 + -0.2728598400000106 + 0.0006469875000015 + -0.0000287550000001 + -0.4741520210000086 + 0.0606355200000037 + -0.0001437750000005 + 0.0000063900000000 + -0.2886413130000007 + 0.0336864000000003 + -0.0000798750000000 + 0.0000035500000000 + 0.6503280280000028 + -0.0808473600000012 + 0.0001917000000002 + -0.0000085200000000 + -0.4741520210000038 + 0.0606355200000017 + -0.0001437750000003 + 0.0000063900000000 + 0.0993253380000016 + -0.0134745600000007 + 0.0000319500000001 + -0.0000014200000000 + -46.8607035974999846 + 17.1221579999999953 + -2.0678986874999996 + 0.0827161250000000 + 112.5143505220000009 + -41.0931791999999874 + 4.9629568499999985 + -0.1985187000000000 + -84.4129508914999889 + 30.8198843999999923 + -3.7222176374999982 + 0.1488890250000000 + 18.7705170869999911 + -6.8488631999999967 + 0.8271594749999995 + -0.0330864500000000 + 112.5143505219999867 + -41.0931791999999945 + 4.9629568499999994 + -0.1985187000000000 + -270.2236567919999288 + 98.6236300799999697 + -11.9110964399999943 + 0.4764448799999998 + 202.7493065939999042 + -73.9677225599999701 + 8.9333223299999958 + -0.3573336599999999 + -45.0916521319999788 + 16.4372716799999949 + -1.9851827399999988 + 0.0794074800000000 + -84.4129508914999889 + 30.8198843999999923 + -3.7222176374999991 + 0.1488890250000000 + 202.7493065939999610 + -73.9677225599999844 + 8.9333223299999975 + -0.3573336599999999 + -152.1231529454999531 + 55.4757919199999776 + -6.6999917474999968 + 0.2680002449999999 + 33.8323330989999818 + -12.3279537599999927 + 1.4888870549999993 + -0.0595556100000000 + 18.7705170869999982 + -6.8488631999999985 + 0.8271594750000000 + -0.0330864500000000 + -45.0916521319999930 + 16.4372716799999985 + -1.9851827399999995 + 0.0794074800000000 + 33.8323330989999960 + -12.3279537599999962 + 1.4888870549999995 + -0.0595556100000000 + -7.5243380219999976 + 2.7395452799999989 + -0.3308637899999998 + 0.0132345800000000 + 0.0000000000000000 + 0.0000000000000000 + -32.6217780473999994 + 21.7478520315999972 + 0.0000000000000000 + 0.0000000000000000 + 42.1036102331999942 + -28.0690734888000009 + 0.0000000000000000 + 0.0000000000000000 + -17.3069209304999987 + 11.5379472869999997 + 0.0000000000000000 + 0.0000000000000000 + 2.2865894573999999 + -1.5243929716000000 + 0.0000000000000000 + 0.0000000000000000 + 80.7563291291999974 + -53.8375527528000006 + 0.0000000000000000 + 0.0000000000000000 + -103.7670803135999904 + 69.1780535423999936 + 0.0000000000000000 + 0.0000000000000000 + 42.5275334640000011 + -28.3516889759999984 + 0.0000000000000000 + 0.0000000000000000 + -5.6073377951999994 + 3.7382251968000002 + 0.0000000000000000 + 0.0000000000000000 + -60.5672468468999909 + 40.3781645645999987 + 0.0000000000000000 + 0.0000000000000000 + 77.8253102351999928 + -51.8835401567999952 + 0.0000000000000000 + 0.0000000000000000 + -31.8956500979999973 + 21.2637667320000006 + 0.0000000000000000 + 0.0000000000000000 + 4.2055033464000005 + -2.8036688975999997 + 0.0000000000000000 + 0.0000000000000000 + 13.4593881881999984 + -8.9729254587999989 + 0.0000000000000000 + 0.0000000000000000 + -17.2945133855999984 + 11.5296755904000001 + 0.0000000000000000 + 0.0000000000000000 + 7.0879222439999996 + -4.7252814960000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9345562992000001 + 0.6230375328000000 + 44.2256531812000020 + -132.2389900727999930 + 99.1792425546000089 + -22.0398316788000024 + -57.1087958436000065 + 170.7439982111999939 + -128.0579986584000096 + 28.4573330352000013 + 23.4803316015000050 + -70.1983325880000137 + 52.6487494410000068 + -11.6997220980000023 + -3.1027108802000005 + 9.2757776784000008 + -6.9568332588000015 + 1.5459629464000002 + -138.5907206816000041 + 397.2227929391999623 + -297.9170947044000286 + 66.2037988232000032 + 178.4133265968000046 + -511.2056480831998897 + 383.4042360623999457 + -85.2009413472000006 + -73.3938860820000087 + 210.1673533679999650 + -157.6255150260000164 + 35.0278922279999989 + 9.7018514776000000 + -27.7703137824000024 + 20.8277353368000036 + -4.6283856304000004 + 105.4788598592000142 + -301.6030611396000722 + 226.2022958546999973 + -50.2671768566000026 + -135.7846198235999964 + 388.1433357647999856 + -291.1075018236000460 + 64.6905559607999976 + 55.8681749264999965 + -159.6001399019999667 + 119.7001049265000034 + -26.6000233170000016 + -7.3860899902000003 + 21.0910186536000026 + -15.8182639902000002 + 3.5151697756000004 + -23.2462882296000011 + 66.5586023016000041 + -49.9189517261999995 + 11.0931003835999995 + 29.9256277248000018 + -85.6571172480000058 + 64.2428379360000008 + -14.2761862080000022 + -12.3115115519999989 + 35.2179655199999999 + -26.4134741400000017 + 5.8696609200000003 + 1.6275348736000002 + -4.6537287359999997 + 3.4902965520000002 + -0.7756214560000001 + -50.0478950811999894 + 64.5349948775999991 + -26.8895811989999984 + 3.5852774931999991 + 69.5343934043999923 + -89.6509583711999767 + 37.3545659879999903 + -4.9806087983999987 + -28.9726639184999897 + 37.3545659879999903 + -15.5644024949999960 + 2.0752536659999996 + 3.8630218557999996 + -4.9806087983999987 + 2.0752536659999996 + -0.2767004887999999 + 183.1902844943999753 + -243.4800953951999531 + 101.4500397479999805 + -13.5266719663999986 + -250.0931194127999788 + 331.8487242623999691 + -138.2703017759999966 + 18.4360402367999967 + 104.2054664220000006 + -138.2703017759999966 + 57.6126257399999915 + -7.6816834319999989 + -13.8940621895999961 + 18.4360402367999967 + -7.6816834319999989 + 1.0242244575999997 + -151.8031018499999618 + 201.5326388519999909 + -83.9719328549999915 + 11.1962577139999979 + 206.0974818899999832 + -273.2155583040000124 + 113.8398159599999957 + -15.1786421279999963 + -85.8739507874999930 + 113.8398159599999815 + -47.4332566499999970 + 6.3244342199999988 + 11.4498601049999991 + -15.1786421279999963 + 6.3244342199999988 + -0.8432578959999998 + 35.4079979087999988 + -46.8875383343999914 + 19.5364743059999952 + -2.6048632407999994 + -47.9516943455999893 + 63.4177924127999972 + -26.4240801719999965 + 3.5232106895999991 + 19.9798726439999967 + -26.4240801719999965 + 11.0100334049999979 + -1.4680044539999997 + -2.6639830191999998 + 3.5232106895999991 + -1.4680044539999997 + 0.1957339271999999 + 42.6442853668999575 + -40.0053803687999618 + 11.9066088158999897 + -1.1642323157999992 + -56.7584044271999559 + 53.3405071583999586 + -15.8754784211999898 + 1.5523097543999986 + 23.6493351779999799 + -22.2252113159999816 + 6.6147826754999954 + -0.6467957309999994 + -3.1532446903999967 + 2.9633615087999976 + -0.8819710233999991 + 0.0862394307999999 + -120.2324494991998876 + 109.5640452863999030 + -32.7718093751999717 + 3.2246967023999971 + 159.8769737135998525 + -146.0853937151998707 + 43.6957458335999576 + -4.2995956031999967 + -66.6154057139999480 + 60.8689140479999509 + -18.2065607639999811 + 1.7914981679999984 + 8.8820540951999920 + -8.1158552063999920 + 2.4275414351999975 + -0.2388664223999998 + 89.9558741243999265 + -82.1730339647999273 + 24.5788570313999770 + -2.4185225267999977 + -119.6268492851999099 + 109.5640452863999030 + -32.7718093751999717 + 3.2246967023999975 + 49.8445205354999530 + -45.6516855359999596 + 13.6549205729999876 + -1.3436236259999990 + -6.6459360713999933 + 6.0868914047999940 + -1.8206560763999984 + 0.1791498167999998 + -19.8930995831999802 + 18.2606742143999838 + -5.4619682291999947 + 0.5374494503999995 + 26.4589082855999749 + -24.3475656191999761 + 7.2826243055999935 + -0.7165992671999993 + -11.0245451189999901 + 10.1448190079999918 + -3.0344267939999972 + 0.2985830279999998 + 1.4699393491999986 + -1.3526425343999988 + 0.4045902391999996 + -0.0398110704000000 + -184.9754434746999721 + 126.2750600519999864 + -28.5549122366999981 + 2.1151786841999995 + 189.3135113616000069 + -129.2160267359999750 + 29.2643043155999933 + -2.1677262455999999 + -64.5253657339999904 + 44.0523311399999926 + -9.9912321314999986 + 0.7400912689999999 + 7.3273586311999983 + -5.0036281519999983 + 1.1364106841999997 + -0.0841785692000000 + 549.7599647855997773 + -378.5554258559998857 + 85.6643485175999899 + -6.3455072976000002 + -561.1830773327999395 + 387.2884078079999881 + -87.7923953568000002 + 6.5031403967999992 + 190.7604902219999872 + -132.0071299200000112 + 29.9734807320000023 + -2.2202578319999997 + -21.6066616295999978 + 14.9909026559999994 + -3.4092032976000000 + 0.2525335776000000 + -412.5384365891999892 + 283.9165693919999285 + -64.2482613882000066 + 4.7591304731999999 + 421.1681889995999200 + -290.4663058559999627 + 65.8442965176000001 + -4.8773552975999994 + -143.1874014164999949 + 99.0053474399999942 + -22.4801105490000026 + 1.6651933740000002 + 16.2206007222000004 + -11.2431769920000004 + 2.5569024732000005 + -0.1894001832000000 + 91.7723027975999912 + -63.0925709760000046 + 14.2773914196000007 + -1.0575845496000000 + -93.7177668888000142 + 64.5480679679999980 + -14.6320658928000018 + 1.0838567328000002 + 31.8714375370000056 + -22.0011883200000042 + 4.9955801220000016 + -0.3700429720000001 + -3.6115132716000011 + 2.4984837760000009 + -0.5682005496000003 + 0.0420889296000000 + 130.2289587202998575 + -70.6241013659999197 + 12.3802240670999844 + -0.7175173373999989 + -173.8642248983998115 + 94.1654684879999024 + -16.5069654227999791 + 0.9566897831999988 + 72.5249910409999359 + -39.2356118699999570 + 6.8779022594999919 + -0.3986207429999995 + -9.6772489387999912 + 5.2314149159999950 + -0.9170536345999990 + 0.0531494323999999 + -395.8553984243995956 + 212.1429210479998346 + -37.1411466587999683 + 2.1525807671999981 + 528.3530069471995603 + -282.8572280639997985 + 49.5215288783999625 + -2.8701076895999975 + -220.3917782279998789 + 117.8571783599999208 + -20.6339703659999856 + 1.1958782039999993 + 29.4073208303999856 + -15.7142904479999928 + 2.7511960487999989 + -0.1594504272000000 + 296.6730858182997963 + -159.1071907859998760 + 27.8558599940999869 + -1.6144355753999990 + -395.9838742103997902 + 212.1429210479998915 + -37.1411466587999826 + 2.1525807671999990 + 165.1767999209999402 + -88.3928837699999690 + 15.4754777744999963 + -0.8969086529999999 + -22.0398861227999987 + 11.7857178359999999 + -2.0633970366000001 + 0.1195878204000000 + -65.8302577373999753 + 35.3571535079999890 + -6.1901911097999989 + 0.3587634612000000 + 87.8715804911999783 + -47.1428713439999996 + 8.2535881464000003 + -0.4783512816000001 + -36.6539405380000005 + 19.6428630600000034 + -3.4389950610000017 + 0.1993130340000001 + 4.8908171384000028 + -2.6190484080000020 + 0.4585326748000005 + -0.0265750712000000 + -5.5045576885001175 + 0.4527535500000591 + -0.0009345375000100 + 0.0000479250000006 + 7.1137969800001573 + -0.6036714000000785 + 0.0012460500000132 + -0.0000639000000007 + -2.8825180750000672 + 0.2515297500000336 + -0.0005191875000056 + 0.0000266250000003 + 0.3770856100000094 + -0.0335373000000047 + 0.0000692250000008 + -0.0000035500000000 + 11.3420452620003189 + -1.0866085200001598 + 0.0022428900000267 + -0.0001150200000015 + -14.5769179680004157 + 1.4488113600002079 + -0.0029905200000346 + 0.0001533600000019 + 5.8290238200001756 + -0.6036714000000871 + 0.0012460500000144 + -0.0000639000000008 + -0.7554527760000237 + 0.0804895200000117 + -0.0001661400000019 + 0.0000085200000001 + -8.7249969465002888 + 0.8149563900001421 + -0.0016821675000234 + 0.0000862650000013 + 11.2135694760003659 + -1.0866085200001803 + 0.0022428900000296 + -0.0001150200000016 + -4.4888016150001500 + 0.4527535500000732 + -0.0009345375000119 + 0.0000479250000006 + 0.5821940820000193 + -0.0603671400000094 + 0.0001246050000015 + -0.0000063900000001 + 2.0359828770000856 + -0.1811014200000415 + 0.0003738150000067 + -0.0000191700000004 + -2.6167403280001054 + 0.2414685600000509 + -0.0004984200000082 + 0.0000255600000004 + 1.0495264700000413 + -0.1006119000000198 + 0.0002076750000032 + -0.0000106500000002 + -0.1363117960000050 + 0.0134149200000024 + -0.0000276900000004 + 0.0000014200000000 + -5.5116026635001862 + 0.4547664000000811 + -0.0010783125000117 + 0.0000479250000006 + 7.1231902800002480 + -0.6063552000001071 + 0.0014377500000154 + -0.0000639000000007 + -2.8864319500001070 + 0.2526480000000459 + -0.0005990625000066 + 0.0000266250000003 + 0.3776074600000149 + -0.0336864000000064 + 0.0000798750000009 + -0.0000035500000000 + 11.3589532020005066 + -1.0914393600002181 + 0.0025879500000312 + -0.0001150200000015 + -14.5994618880006595 + 1.4552524800002826 + -0.0034506000000403 + 0.0001533600000019 + 5.8384171200002770 + -0.6063552000001183 + 0.0014377500000168 + -0.0000639000000008 + -0.7567052160000375 + 0.0808473600000159 + -0.0001917000000022 + 0.0000085200000001 + -8.7376779015004544 + 0.8185795200001927 + -0.0019409625000273 + 0.0000862650000013 + 11.2304774160005767 + -1.0914393600002443 + 0.0025879500000344 + -0.0001150200000016 + -4.4958465900002356 + 0.4547664000000990 + -0.0010783125000139 + 0.0000479250000006 + 0.5831334120000303 + -0.0606355200000127 + 0.0001437750000018 + -0.0000063900000001 + 2.0388008670001336 + -0.1819065600000558 + 0.0004313250000078 + -0.0000191700000004 + -2.6204976480001649 + 0.2425420800000685 + -0.0005751000000095 + 0.0000255600000004 + 1.0510920200000642 + -0.1010592000000266 + 0.0002396250000037 + -0.0000106500000002 + -0.1365205360000077 + 0.0134745600000031 + -0.0000319500000004 + 0.0000014200000000 + 251.7870357364997460 + -92.4596531999998916 + 11.1666529124999840 + -0.4466670749999995 + -335.9416609199996060 + 123.2795375999998271 + -14.8888705499999823 + 0.5955560999999993 + 140.0572560499998076 + -51.3664739999999256 + 6.2036960624999917 + -0.2481483749999996 + -18.6815509399999762 + 6.8488631999999914 + -0.8271594749999989 + 0.0330864500000000 + -606.1577789579991986 + 221.9031676799996831 + -26.7999669899999589 + 1.0720009799999985 + 808.7561809919991447 + -295.8708902399996532 + 35.7332893199999475 + -1.4293346399999980 + -337.2264340799995921 + 123.2795375999998413 + -14.8888705499999787 + 0.5955560999999991 + 44.9852749439999400 + -16.4372716799999807 + 1.9851827399999973 + -0.0794074799999999 + 454.3998712184992428 + -166.4273757599997339 + 20.0999752424999656 + -0.8040007349999987 + -606.2862547439991658 + 221.9031676799996831 + -26.7999669899999589 + 1.0720009799999983 + 252.8027918099996327 + -92.4596531999998632 + 11.1666529124999840 + -0.4466670749999994 + -33.7233517079999530 + 12.3279537599999820 + -1.4888870549999980 + 0.0595556099999999 + -100.8806544929998097 + 36.9838612799999282 + -4.4666611649999908 + 0.1786668299999996 + 134.6054428319997385 + -49.3118150399999138 + 5.9555482199999883 + -0.2382224399999995 + -56.1263831799999053 + 20.5465895999999653 + -2.4814784249999957 + 0.0992593499999998 + 7.4871428239999887 + -2.7395452799999958 + 0.3308637899999995 + -0.0132345800000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3353203725000000 + 0.2235469150000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.8047688940000000 + -0.5365125960000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6035766705000000 + 0.4023844470000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1341281490000000 + -0.0894187660000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 56.1396151825000089 + -135.0033327360000044 + 101.2524995520000033 + -22.5005554560000007 + -49.5027190080000068 + 118.8065256192000163 + -89.1048942144000051 + 19.8010876031999992 + 14.4382930439999981 + -34.6519033056000012 + 25.9889274792000009 + -5.7753172175999996 + -1.3750755280000000 + 3.3001812671999997 + -2.4751359503999999 + 0.5500302112000000 + -125.9664885020000042 + 302.9633875199999693 + -227.2225406400000054 + 50.4938979200000020 + 110.2406780160000039 + -264.5776272383999412 + 198.4332204287999843 + -44.0962712064000044 + -32.1535310880000011 + 77.1684746111999971 + -57.8763559583999978 + 12.8614124351999983 + 3.0622410560000000 + -7.3493785343999996 + 5.5120339008000006 + -1.2248964224000001 + 90.0868110965000000 + -216.6912079679999863 + 162.5184059759999968 + -36.1152013279999977 + -78.7312587600000029 + 188.9550210239999899 + -141.7162657679999995 + 31.4925035040000019 + 22.9632838050000032 + -55.1118811320000077 + 41.3339108490000058 + -9.1853135219999995 + -2.1869794100000002 + 5.2487505839999997 + -3.9365629379999998 + 0.8747917640000000 + -20.5720296569999981 + 49.4801736959999943 + -37.1101302719999921 + 8.2466956160000002 + 17.9932997519999986 + -43.1839194047999939 + 32.3879395535999990 + -7.1973199008000002 + -5.2480457610000002 + 12.5953098263999994 + -9.4464823697999982 + 2.0992183043999999 + 0.4998138820000000 + -1.1995533167999999 + 0.8996649876000000 + -0.1999255528000000 + -157.0620940015000429 + 216.2579120640000099 + -90.1074633599999970 + 12.0143284479999988 + 141.4799946432000013 + -194.6321208576000004 + 81.0967170240000002 + -10.8128956031999994 + -41.2649984375999992 + 56.7677019167999930 + -23.6532091320000006 + 3.1537612175999996 + 3.9299998511999998 + -5.4064478016000006 + 2.2526865840000001 + -0.3003582112000000 + 311.4225038820000009 + -432.5158241280000198 + 180.2149267199999656 + -24.0286568960000011 + -280.7129412863999391 + 389.2642417152000007 + -162.1934340479999719 + 21.6257912063999989 + 81.8746078751999846 + -113.5354038336000144 + 47.3064182640000013 + -6.3075224351999992 + -7.7975817024000005 + 10.8128956032000012 + -4.5053731680000002 + 0.6007164224000000 + -192.3943393994999838 + 270.3223900799999342 + -112.6343291999999963 + 15.0179105600000007 + 173.4794213039999988 + -243.2901510719999578 + 101.3708962799999824 + -13.5161195039999988 + -50.5981645469999961 + 70.9596273960000019 + -29.5665114150000008 + 3.9422015220000004 + 4.8188728140000006 + -6.7580597520000003 + 2.8158582299999999 + -0.3754477640000000 + 37.9715111430000007 + -54.0644780160000025 + 22.5268658399999993 + -3.0035821120000001 + -34.2464746608000041 + 48.6580302144000001 + -20.2741792560000036 + 2.7032239008000003 + 9.9885551094000000 + -14.1919254791999983 + 5.9133022830000002 + -0.7884403044000000 + -0.9512909627999999 + 1.3516119504000002 + -0.5631716460000000 + 0.0750895528000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352400000000010 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769450000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215560000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473690000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352400000000010 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769450000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215560000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473690000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352400000000010 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769450000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215560000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473690000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352400000000010 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769450000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215560000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473690000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352400000000010 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769450000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215560000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473690000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352400000000010 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769450000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215560000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473690000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.0321606498499998 + 4.6881070998999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 24.1765592188499987 + -16.1177061459000015 + 0.0000000000000000 + 0.0000000000000000 + -16.1177061459000015 + 10.7451374305999998 + 0.0000000000000000 + 0.0000000000000000 + 9.1366163297999989 + -6.0910775531999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -30.8078686817999952 + 20.5385791212000015 + 0.0000000000000000 + 0.0000000000000000 + 20.5385791212000015 + -13.6923860808000022 + 0.0000000000000000 + 0.0000000000000000 + -3.8069234707500001 + 2.5379489805000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 12.6594244507499987 + -8.4396163005000009 + 0.0000000000000000 + 0.0000000000000000 + -8.4396163005000009 + 5.6264108670000006 + 0.0000000000000000 + 0.0000000000000000 + 0.5075897961000000 + -0.3383931974000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.6721732600999999 + 1.1147821734000001 + 0.0000000000000000 + 0.0000000000000000 + 1.1147821734000001 + -0.7431881156000000 + 1.7964189073000001 + -9.9371338973999990 + 7.4528504230499992 + -1.6561889829000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -44.4148786822999995 + 125.9369562125999948 + -94.4527171594500032 + 20.9894927021000015 + 30.4859639041999984 + -86.0604782868000200 + 64.5453587151000079 + -14.3434130477999986 + -2.4750911663999995 + 13.2495118631999986 + -9.9371338973999990 + 2.2082519771999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 57.1409193383999963 + -161.7845013575999928 + 121.3383760181999946 + -26.9640835595999988 + -39.2202895176000013 + 110.5595581392000071 + -82.9196686044000160 + 18.4265930231999988 + 1.0312879859999999 + -5.5206299429999994 + 4.1404724572499996 + -0.9201049905000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -23.5724663909999990 + 66.7014588990000021 + -50.0260941742499980 + 11.1169098164999998 + 16.1842872989999975 + -45.5939825580000075 + 34.1954869185000021 + -7.5989970929999995 + -0.1375050648000000 + 0.7360839924000000 + -0.5520629942999999 + 0.1226806654000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1219955187999999 + -8.8305278531999996 + 6.6228958898999997 + -1.4717546422000001 + -2.1439049731999997 + 6.0371976743999998 + -4.5278982558000003 + 1.0061996123999999 + 41.0697356006999996 + -54.7530359903999937 + 22.8137649960000033 + -3.0418353327999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -58.7754249068999925 + 72.4365406655999919 + -30.1818919439999931 + 4.0242522591999990 + 34.4529747782000015 + -41.9835046751999954 + 17.4931269480000005 + -2.3324169264000001 + -52.4181452760000042 + 69.8908603680000056 + -29.1211918200000000 + 3.8828255760000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 71.7688591055999865 + -88.1435659967999783 + 36.7264858319999945 + -4.8968647775999994 + -41.7636522935999963 + 50.6527056287999997 + -21.1052940120000017 + 2.8140392016000000 + 21.8408938650000017 + -29.1211918200000000 + 12.1338299250000006 + -1.6178439899999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -29.9036912939999979 + 36.7264858319999945 + -15.3027024299999965 + 2.0403603239999999 + 17.4015217890000002 + -21.1052940120000017 + 8.7938725049999995 + -1.1725163340000000 + -2.9121191820000001 + 3.8828255760000001 + -1.6178439899999999 + 0.2157125320000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.9871588391999992 + -4.8968647775999994 + 2.0403603239999999 + -0.2720480432000000 + -2.3202029051999999 + 2.8140392016000000 + -1.1725163340000000 + 0.1563355112000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -22.5910445969999856 + 16.9389155015999862 + -5.2449352712999966 + 0.5381739305999996 + 15.0606963979999851 + -11.2926103343999884 + 3.4966235141999964 + -0.3587826203999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 29.8518848603999807 + -22.5852206687999839 + 6.9932470283999955 + -0.7175652407999995 + -19.9012565735999800 + 15.0568137791999828 + -4.6621646855999952 + 0.4783768271999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.4382853584999911 + 9.4105086119999921 + -2.9138529284999981 + 0.2989855169999998 + 8.2921902389999929 + -6.2736724079999924 + 1.9425686189999980 + -0.1993236779999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.6584380477999987 + -1.2547344815999988 + 0.3885137237999997 + -0.0398647356000000 + -1.1056253651999990 + 0.8364896543999990 + -0.2590091491999997 + 0.0265764904000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 132.0402867341999809 + -94.3691021639999832 + 21.4156989368999930 + -1.5863480693999996 + -88.0268578227999967 + 62.9127347760000006 + -14.2771326246000001 + 1.0575653796000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -133.2574315811999668 + 96.4624295519999748 + -21.9475812491999918 + 1.6257467591999992 + 88.8382877207999968 + -64.3082863680000116 + 14.6317208328000028 + -1.0838311728000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 44.7574818254999798 + -32.8519189799999864 + 7.4931545204999956 + -0.5550484829999996 + -29.8383212170000043 + 21.9012793200000040 + -4.9954363470000018 + 0.3700323220000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.0106466433999977 + 3.7277438639999976 + -0.8522720693999993 + 0.0631312643999999 + 3.3404310956000010 + -2.4851625760000013 + 0.5681813796000004 + -0.0420875096000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -104.3657106932998886 + 53.3063472119999489 + -9.2857611221999896 + 0.5381739467999993 + 69.5771404621999920 + -35.5375648079999991 + 6.1905074148000008 + -0.3587826312000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 139.1294649887998673 + -71.0751296159999271 + 12.3810148295999856 + -0.7175652623999991 + -92.7529766592000016 + 47.3834197440000082 + -8.2540098864000022 + 0.4783768416000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -58.0317834119999389 + 29.6146373399999696 + -5.1587561789999938 + 0.2989855259999996 + 38.6878556080000138 + -19.7430915600000105 + 3.4391707860000027 + -0.1993236840000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.7430087215999910 + -3.9486183119999954 + 0.6878341571999992 + -0.0398647367999999 + -5.1620058144000041 + 2.6324122080000025 + -0.4585561048000005 + 0.0265764912000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5694553116999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.7129702077999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.4011244799999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.2674163199999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.4783081999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9855388000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2025453600000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1350302400000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5694553116999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.7129702077999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.4011244799999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.2674163199999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.4783081999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9855388000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2025453600000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1350302400000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5694553116999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.7129702077999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.4011244799999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.2674163199999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.4783081999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9855388000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2025453600000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1350302400000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.6217780473999994 + 21.7478520315999972 + 0.0000000000000000 + 0.0000000000000000 + 80.7563291291999974 + -53.8375527528000006 + 0.0000000000000000 + 0.0000000000000000 + -60.5672468468999909 + 40.3781645645999987 + 0.0000000000000000 + 0.0000000000000000 + 13.4593881881999984 + -8.9729254587999989 + 0.0000000000000000 + 0.0000000000000000 + 42.1036102331999942 + -28.0690734887999973 + 0.0000000000000000 + 0.0000000000000000 + -103.7670803135999904 + 69.1780535423999936 + 0.0000000000000000 + 0.0000000000000000 + 77.8253102351999928 + -51.8835401567999952 + 0.0000000000000000 + 0.0000000000000000 + -17.2945133855999984 + 11.5296755904000001 + 0.0000000000000000 + 0.0000000000000000 + -17.3069209304999987 + 11.5379472869999997 + 0.0000000000000000 + 0.0000000000000000 + 42.5275334640000011 + -28.3516889759999984 + 0.0000000000000000 + 0.0000000000000000 + -31.8956500979999973 + 21.2637667320000006 + 0.0000000000000000 + 0.0000000000000000 + 7.0879222439999996 + -4.7252814960000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2865894573999999 + -1.5243929716000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6073377951999994 + 3.7382251968000002 + 0.0000000000000000 + 0.0000000000000000 + 4.2055033464000005 + -2.8036688975999997 + 0.0000000000000000 + 0.0000000000000000 + -0.9345562992000001 + 0.6230375328000000 + 44.2256531812000020 + -132.2389900727999930 + 99.1792425546000089 + -22.0398316788000024 + -138.5907206816000041 + 397.2227929391999623 + -297.9170947044000286 + 66.2037988232000032 + 105.4788598592000000 + -301.6030611396000722 + 226.2022958547000258 + -50.2671768566000026 + -23.2462882296000011 + 66.5586023016000041 + -49.9189517262000066 + 11.0931003835999995 + -57.1087958435999994 + 170.7439982111999939 + -128.0579986583999812 + 28.4573330352000013 + 178.4133265968000046 + -511.2056480832000034 + 383.4042360624000594 + -85.2009413472000006 + -135.7846198235999964 + 388.1433357647999856 + -291.1075018236000460 + 64.6905559607999976 + 29.9256277248000018 + -85.6571172480000058 + 64.2428379360000008 + -14.2761862080000022 + 23.4803316015000014 + -70.1983325879999995 + 52.6487494410000068 + -11.6997220980000023 + -73.3938860819999945 + 210.1673533680000219 + -157.6255150260000164 + 35.0278922279999989 + 55.8681749265000036 + -159.6001399020000235 + 119.7001049265000034 + -26.6000233170000016 + -12.3115115520000007 + 35.2179655199999999 + -26.4134741400000017 + 5.8696609200000003 + -3.1027108802000001 + 9.2757776784000008 + -6.9568332588000015 + 1.5459629464000002 + 9.7018514776000000 + -27.7703137823999988 + 20.8277353368000000 + -4.6283856304000004 + -7.3860899902000003 + 21.0910186535999991 + -15.8182639902000002 + 3.5151697756000004 + 1.6275348736000002 + -4.6537287359999997 + 3.4902965520000002 + -0.7756214560000001 + -50.0478950811999823 + 64.5349948775999849 + -26.8895811989999878 + 3.5852774931999987 + 183.1902844943999753 + -243.4800953951999247 + 101.4500397479999805 + -13.5266719663999968 + -151.8031018499999618 + 201.5326388519999625 + -83.9719328549999773 + 11.1962577139999979 + 35.4079979087999988 + -46.8875383343999914 + 19.5364743059999952 + -2.6048632407999994 + 69.5343934043999639 + -89.6509583711999625 + 37.3545659879999832 + -4.9806087983999978 + -250.0931194127999504 + 331.8487242623999123 + -138.2703017759999398 + 18.4360402367999932 + 206.0974818899999548 + -273.2155583039999556 + 113.8398159599999815 + -15.1786421279999963 + -47.9516943455999893 + 63.4177924127999830 + -26.4240801719999965 + 3.5232106895999991 + -28.9726639184999897 + 37.3545659879999832 + -15.5644024949999924 + 2.0752536659999992 + 104.2054664219999722 + -138.2703017759999682 + 57.6126257399999844 + -7.6816834319999980 + -85.8739507874999788 + 113.8398159599999815 + -47.4332566499999899 + 6.3244342199999988 + 19.9798726439999967 + -26.4240801719999965 + 11.0100334049999979 + -1.4680044539999997 + 3.8630218557999982 + -4.9806087983999978 + 2.0752536659999992 + -0.2767004887999999 + -13.8940621895999961 + 18.4360402367999932 + -7.6816834319999980 + 1.0242244575999997 + 11.4498601049999973 + -15.1786421279999963 + 6.3244342199999988 + -0.8432578959999998 + -2.6639830191999998 + 3.5232106895999991 + -1.4680044539999997 + 0.1957339272000000 + 42.6442853668999931 + -40.0053803687999974 + 11.9066088159000003 + -1.1642323158000001 + -120.2324494991999728 + 109.5640452863999741 + -32.7718093751999930 + 3.2246967023999997 + 89.9558741243999833 + -82.1730339647999841 + 24.5788570313999983 + -2.4185225267999999 + -19.8930995831999979 + 18.2606742143999980 + -5.4619682291999991 + 0.5374494503999999 + -56.7584044271999986 + 53.3405071583999941 + -15.8754784212000004 + 1.5523097544000002 + 159.8769737135999662 + -146.0853937151999560 + 43.6957458335999860 + -4.2995956031999993 + -119.6268492851999810 + 109.5640452863999741 + -32.7718093751999930 + 3.2246967023999993 + 26.4589082855999962 + -24.3475656191999974 + 7.2826243055999988 + -0.7165992671999999 + 23.6493351779999976 + -22.2252113159999993 + 6.6147826754999990 + -0.6467957310000000 + -66.6154057139999907 + 60.8689140479999864 + -18.2065607639999953 + 1.7914981679999997 + 49.8445205354999885 + -45.6516855359999880 + 13.6549205729999983 + -1.3436236259999998 + -11.0245451189999990 + 10.1448190079999989 + -3.0344267939999998 + 0.2985830280000000 + -3.1532446904000002 + 2.9633615088000003 + -0.8819710234000000 + 0.0862394308000000 + 8.8820540951999991 + -8.1158552063999991 + 2.4275414351999998 + -0.2388664223999999 + -6.6459360713999995 + 6.0868914047999993 + -1.8206560763999997 + 0.1791498168000000 + 1.4699393491999997 + -1.3526425343999997 + 0.4045902391999999 + -0.0398110704000000 + -184.9754434747000289 + 126.2750600520000148 + -28.5549122367000052 + 2.1151786842000004 + 549.7599647856001184 + -378.5554258559999994 + 85.6643485176000183 + -6.3455072976000011 + -412.5384365892000460 + 283.9165693920000422 + -64.2482613882000066 + 4.7591304732000008 + 91.7723027976000196 + -63.0925709760000046 + 14.2773914196000042 + -1.0575845496000000 + 189.3135113616000353 + -129.2160267360000034 + 29.2643043156000076 + -2.1677262455999999 + -561.1830773328000532 + 387.2884078080000450 + -87.7923953568000144 + 6.5031403968000010 + 421.1681889996000336 + -290.4663058560000763 + 65.8442965176000143 + -4.8773552976000012 + -93.7177668888000142 + 64.5480679680000122 + -14.6320658928000036 + 1.0838567328000002 + -64.5253657340000046 + 44.0523311400000068 + -9.9912321315000003 + 0.7400912690000001 + 190.7604902220000156 + -132.0071299200000112 + 29.9734807320000058 + -2.2202578320000006 + -143.1874014165000233 + 99.0053474400000084 + -22.4801105490000026 + 1.6651933740000002 + 31.8714375370000056 + -22.0011883200000042 + 4.9955801220000016 + -0.3700429720000001 + 7.3273586312000010 + -5.0036281520000010 + 1.1364106842000001 + -0.0841785692000000 + -21.6066616296000049 + 14.9909026560000029 + -3.4092032976000008 + 0.2525335776000001 + 16.2206007222000039 + -11.2431769920000022 + 2.5569024732000005 + -0.1894001832000000 + -3.6115132716000002 + 2.4984837760000005 + -0.5682005496000001 + 0.0420889296000000 + 130.2289587202999428 + -70.6241013659999624 + 12.3802240670999915 + -0.7175173373999993 + -395.8553984243998229 + 212.1429210479999199 + -37.1411466587999826 + 2.1525807671999990 + 296.6730858182999100 + -159.1071907859999612 + 27.8558599940999905 + -1.6144355753999995 + -65.8302577373999895 + 35.3571535079999961 + -6.1901911097999989 + 0.3587634612000000 + -173.8642248983998968 + 94.1654684879999451 + -16.5069654227999898 + 0.9566897831999992 + 528.3530069471997876 + -282.8572280639999121 + 49.5215288783999910 + -2.8701076895999988 + -395.9838742103999607 + 212.1429210479999483 + -37.1411466587999897 + 2.1525807671999995 + 87.8715804911999925 + -47.1428713439999996 + 8.2535881464000003 + -0.4783512816000000 + 72.5249910409999643 + -39.2356118699999783 + 6.8779022594999955 + -0.3986207429999997 + -220.3917782279999642 + 117.8571783599999776 + -20.6339703659999927 + 1.1958782039999996 + 165.1767999209999687 + -88.3928837699999974 + 15.4754777744999981 + -0.8969086529999999 + -36.6539405380000005 + 19.6428630599999998 + -3.4389950610000004 + 0.1993130340000000 + -9.6772489387999947 + 5.2314149159999976 + -0.9170536345999994 + 0.0531494324000000 + 29.4073208303999962 + -15.7142904479999963 + 2.7511960487999998 + -0.1594504272000000 + -22.0398861227999987 + 11.7857178359999999 + -2.0633970366000001 + 0.1195878204000000 + 4.8908171384000010 + -2.6190484080000003 + 0.4585326748000001 + -0.0265750712000000 + -5.5045576884998377 + 0.4527535499999218 + -0.0009345374999876 + 0.0000479249999993 + 11.3420452619995764 + -1.0866085199997961 + 0.0022428899999674 + -0.0001150199999983 + -8.7249969464996404 + 0.8149563899998263 + -0.0016821674999721 + 0.0000862649999985 + 2.0359828769999018 + -0.1811014199999522 + 0.0003738149999923 + -0.0000191699999996 + 7.1137969799997833 + -0.6036713999998966 + 0.0012460499999836 + -0.0000638999999991 + -14.5769179679994441 + 1.4488113599997343 + -0.0029905199999576 + 0.0001533599999978 + 11.2135694759995364 + -1.0866085199997786 + 0.0022428899999646 + -0.0001150199999981 + -2.6167403279998775 + 0.2414685599999410 + -0.0004984199999905 + 0.0000255599999995 + -2.8825180749999051 + 0.2515297499999547 + -0.0005191874999928 + 0.0000266249999996 + 5.8290238199997608 + -0.6036713999998863 + 0.0012460499999820 + -0.0000638999999990 + -4.4888016149998080 + 0.4527535499999084 + -0.0009345374999855 + 0.0000479249999992 + 1.0495264699999514 + -0.1006118999999768 + 0.0002076749999963 + -0.0000106499999998 + 0.3770856099999864 + -0.0335372999999935 + 0.0000692249999990 + -0.0000035499999999 + -0.7554527759999667 + 0.0804895199999842 + -0.0001661399999975 + 0.0000085199999999 + 0.5821940819999744 + -0.0603671399999879 + 0.0001246049999981 + -0.0000063899999999 + -0.1363117959999940 + 0.0134149199999972 + -0.0000276899999996 + 0.0000014200000000 + -5.5116026634997457 + 0.4547663999998953 + -0.0010783124999857 + 0.0000479249999993 + 11.3589532019993378 + -1.0914393599997261 + 0.0025879499999623 + -0.0001150199999983 + -8.7376779014994366 + 0.8185795199997661 + -0.0019409624999676 + 0.0000862649999985 + 2.0388008669998454 + -0.1819065599999353 + 0.0004313249999910 + -0.0000191699999996 + 7.1231902799996636 + -0.6063551999998610 + 0.0014377499999810 + -0.0000638999999991 + -14.5994618879991389 + 1.4552524799996427 + -0.0034505999999509 + 0.0001533599999978 + 11.2304774159992817 + -1.0914393599997021 + 0.0025879499999590 + -0.0001150199999981 + -2.6204976479998088 + 0.2425420799999205 + -0.0005750999999890 + 0.0000255599999995 + -2.8864319499998530 + 0.2526479999999392 + -0.0005990624999917 + 0.0000266249999996 + 5.8384171199996304 + -0.6063551999998473 + 0.0014377499999791 + -0.0000638999999990 + -4.4958465899997018 + 0.4547663999998769 + -0.0010783124999832 + 0.0000479249999992 + 1.0510920199999245 + -0.1010591999999689 + 0.0002396249999957 + -0.0000106499999998 + 0.3776074599999789 + -0.0336863999999913 + 0.0000798749999988 + -0.0000035499999999 + -0.7567052159999486 + 0.0808473599999789 + -0.0001916999999971 + 0.0000085199999999 + 0.5831334119999604 + -0.0606355199999838 + 0.0001437749999978 + -0.0000063899999999 + -0.1365205359999907 + 0.0134745599999963 + -0.0000319499999995 + 0.0000014200000000 + 251.7870357365003713 + -92.4596532000001332 + 11.1666529125000178 + -0.4466670750000007 + -606.1577789580009039 + 221.9031676800003083 + -26.7999669900000406 + 1.0720009800000017 + 454.3998712185007207 + -166.4273757600003023 + 20.0999752425000366 + -0.8040007350000014 + -100.8806544930002360 + 36.9838612800000845 + -4.4666611650000103 + 0.1786668300000004 + -335.9416609200004586 + 123.2795376000001681 + -14.8888705500000214 + 0.5955561000000008 + 808.7561809920013047 + -295.8708902400004490 + 35.7332893200000541 + -1.4293346400000022 + -606.2862547440010985 + 221.9031676800003652 + -26.7999669900000441 + 1.0720009800000017 + 134.6054428320002785 + -49.3118150400000985 + 5.9555482200000114 + -0.2382224400000005 + 140.0572560500002055 + -51.3664740000000748 + 6.2036960625000095 + -0.2481483750000004 + -337.2264340800005584 + 123.2795376000001966 + -14.8888705500000231 + 0.5955561000000009 + 252.8027918100004001 + -92.4596532000001616 + 11.1666529125000178 + -0.4466670750000007 + -56.1263831800001043 + 20.5465896000000399 + -2.4814784250000046 + 0.0992593500000002 + -18.6815509400000295 + 6.8488632000000109 + -0.8271594750000013 + 0.0330864500000001 + 44.9852749440000750 + -16.4372716800000234 + 1.9851827400000031 + -0.0794074800000001 + -33.7233517080000524 + 12.3279537600000193 + -1.4888870550000024 + 0.0595556100000001 + 7.4871428240000135 + -2.7395452800000046 + 0.3308637900000005 + -0.0132345800000000 + 0.0000000000000000 + 0.0000000000000000 + 204.6814854389999709 + -136.4543236259999901 + 0.0000000000000000 + 0.0000000000000000 + -270.4943405699999630 + 180.3295603799999753 + 0.0000000000000000 + 0.0000000000000000 + 112.7059752374999988 + -75.1373168249999992 + 0.0000000000000000 + 0.0000000000000000 + -15.0274633649999991 + 10.0183089100000000 + 0.0000000000000000 + 0.0000000000000000 + -270.4943405699999630 + 180.3295603799999753 + 0.0000000000000000 + 0.0000000000000000 + 357.4400451840000414 + -238.2933634559999803 + 0.0000000000000000 + 0.0000000000000000 + -148.9333521599999983 + 99.2889014399999894 + 0.0000000000000000 + 0.0000000000000000 + 19.8577802880000007 + -13.2385201919999993 + 0.0000000000000000 + 0.0000000000000000 + 112.7059752374999988 + -75.1373168249999992 + 0.0000000000000000 + 0.0000000000000000 + -148.9333521599999983 + 99.2889014399999894 + 0.0000000000000000 + 0.0000000000000000 + 62.0555634000000040 + -41.3703755999999956 + 0.0000000000000000 + 0.0000000000000000 + -8.2740751199999991 + 5.5160500800000003 + 0.0000000000000000 + 0.0000000000000000 + -15.0274633649999991 + 10.0183089100000000 + 0.0000000000000000 + 0.0000000000000000 + 19.8577802880000007 + -13.2385201919999993 + 0.0000000000000000 + 0.0000000000000000 + -8.2740751199999991 + 5.5160500800000003 + 0.0000000000000000 + 0.0000000000000000 + 1.1032100160000000 + -0.7354733440000000 + -221.1055395120000071 + 694.3984831799999711 + -520.7988623850000067 + 115.7330805300000094 + 278.7592949099999373 + -885.4177802399999564 + 664.0633351800000810 + -147.5696300400000212 + -112.8727612125000093 + 361.0594071000000440 + -270.7945553250000330 + 60.1765678499999979 + 14.7584174950000016 + -47.4421726800000059 + 35.5816295099999991 + -7.9070287800000010 + 278.7592949099999942 + -885.4177802400001838 + 664.0633351800000810 + -147.5696300400000212 + -351.5299650720000955 + 1129.6239523200001713 + -847.2179642400000148 + 188.2706587200000001 + 142.2576037800000108 + -460.5649308000000133 + 345.4236981000000242 + -76.7608218000000022 + -18.5931725040000018 + 60.5098382400000006 + -45.3823786800000022 + 10.0849730400000013 + -112.8727612125000093 + 361.0594071000000440 + -270.7945553250000330 + 60.1765678499999979 + 142.2576037800000108 + -460.5649308000000133 + 345.4236981000000242 + -76.7608218000000022 + -57.5184953249999964 + 187.6888395000000003 + -140.7666296250000073 + 31.2814732499999977 + 7.5130877100000006 + -24.6506705999999980 + 18.4880029500000020 + -4.1084451000000000 + 14.7584174950000016 + -47.4421726800000059 + 35.5816295099999991 + -7.9070287800000001 + -18.5931725040000018 + 60.5098382400000006 + -45.3823786800000022 + 10.0849730399999995 + 7.5130877100000006 + -24.6506705999999980 + 18.4880029499999985 + -4.1084451000000000 + -0.9809390280000001 + 3.2368216800000003 + -2.4276162599999997 + 0.5394702800000000 + 191.0667307679999567 + -232.3364261399999577 + 96.8068442249999919 + -12.9075792299999978 + -257.3214441299999748 + 309.7819015199999626 + -129.0757922999999892 + 17.2101056399999948 + 107.8726573874999985 + -129.0757922999999892 + 53.7815801249999978 + -7.1708773499999996 + -14.4412777849999969 + 17.2101056399999983 + -7.1708773499999996 + 0.9561169799999999 + -257.3214441299999748 + 309.7819015199999058 + -129.0757922999999892 + 17.2101056399999948 + 346.2666576479999776 + -413.0425353599999312 + 172.1010563999999761 + -22.9468075199999966 + -145.1204170199999908 + 172.1010564000000045 + -71.7087734999999924 + 9.5611698000000001 + 19.4242905360000009 + -22.9468075200000001 + 9.5611698000000001 + -1.2748226400000000 + 107.8726573874999701 + -129.0757922999999892 + 53.7815801249999907 + -7.1708773499999987 + -145.1204170199999908 + 172.1010563999999761 + -71.7087734999999924 + 9.5611697999999983 + 60.8179416749999930 + -71.7087734999999924 + 29.8786556250000004 + -3.9838207499999996 + -8.1402678900000005 + 9.5611698000000001 + -3.9838207500000000 + 0.5311760999999999 + -14.4412777849999969 + 17.2101056399999948 + -7.1708773499999987 + 0.9561169799999998 + 19.4242905359999973 + -22.9468075199999966 + 9.5611697999999983 + -1.2748226399999998 + -8.1402678900000005 + 9.5611697999999983 + -3.9838207499999996 + 0.5311760999999999 + 1.0895302519999999 + -1.2748226400000000 + 0.5311760999999999 + -0.0708234800000000 + -91.7268526394999384 + 94.0688623799999277 + -26.5321536524999857 + 2.4120022049999981 + 119.7366670799999042 + -125.4251498399999036 + 35.3762048699999738 + -3.2160029399999974 + -49.2348889499999558 + 52.2604790999999622 + -14.7400853624999861 + 1.3400012249999991 + 6.5063950599999956 + -6.9680638799999954 + 1.9653447149999987 + -0.1786668299999999 + 119.7366670799999042 + -125.4251498399999036 + 35.3762048699999738 + -3.2160029399999974 + -156.4774906319998422 + 167.2335331199998905 + -47.1682731599999627 + 4.2880039199999960 + 64.3563114299999484 + -69.6806387999999401 + 19.6534471499999839 + -1.7866682999999985 + -8.5059399239999927 + 9.2907518399999933 + -2.6204596199999983 + 0.2382224399999998 + -49.2348889499999558 + 52.2604790999999622 + -14.7400853624999897 + 1.3400012249999991 + 64.3563114299999484 + -69.6806387999999401 + 19.6534471499999839 + -1.7866682999999985 + -26.4640285124999792 + 29.0335994999999798 + -8.1889363124999939 + 0.7444451249999995 + 3.4973281349999974 + -3.8711465999999977 + 1.0918581749999994 + -0.0992593499999999 + 6.5063950599999956 + -6.9680638799999954 + 1.9653447149999987 + -0.1786668299999999 + -8.5059399239999927 + 9.2907518399999933 + -2.6204596199999983 + 0.2382224399999998 + 3.4973281349999974 + -3.8711465999999977 + 1.0918581749999994 + -0.0992593499999999 + -0.4621492179999996 + 0.5161528799999997 + -0.1455810899999999 + 0.0132345800000000 + 24.0740975205001106 + -2.4277887000000864 + 0.0034937325000216 + -0.0002587950000018 + -34.6645998000001612 + 3.2370516000001230 + -0.0046583100000299 + 0.0003450600000024 + 15.0989722500000738 + -1.3487715000000551 + 0.0019409625000130 + -0.0001437750000010 + -2.0714531000000118 + 0.1798362000000081 + -0.0002587950000018 + 0.0000191700000001 + -34.6645998000001612 + 3.2370516000001235 + -0.0046583100000299 + 0.0003450600000024 + 49.3908652080002355 + -4.3160688000001688 + 0.0062110800000399 + -0.0004600800000031 + -21.4221701700001006 + 1.7983620000000724 + -0.0025879500000166 + 0.0001917000000013 + 2.9311909560000142 + -0.2397816000000101 + 0.0003450600000022 + -0.0000255600000002 + 15.0989722500000720 + -1.3487715000000551 + 0.0019409625000130 + -0.0001437750000010 + -21.4221701700001006 + 1.7983620000000724 + -0.0025879500000166 + 0.0001917000000013 + 9.2770054875000412 + -0.7493175000000296 + 0.0010783125000066 + -0.0000798750000005 + -1.2681430650000054 + 0.0999090000000038 + -0.0001437750000008 + 0.0000106500000001 + -2.0714531000000118 + 0.1798362000000081 + -0.0002587950000018 + 0.0000191700000001 + 2.9311909560000142 + -0.2397816000000101 + 0.0003450600000022 + -0.0000255600000002 + -1.2681430650000054 + 0.0999090000000038 + -0.0001437750000008 + 0.0000106500000001 + 0.1732469420000007 + -0.0133212000000004 + 0.0000191700000001 + -0.0000014200000000 + 24.0935071455002721 + -2.4355525500001534 + 0.0042701175000289 + -0.0002587950000018 + -34.6904793000003693 + 3.2474034000002079 + -0.0056934900000389 + 0.0003450600000024 + 15.1097553750001588 + -1.3530847500000884 + 0.0023722875000164 + -0.0001437750000010 + -2.0728908500000220 + 0.1804113000000122 + -0.0003163050000022 + 0.0000191700000001 + -34.6904793000003622 + 3.2474034000002079 + -0.0056934900000389 + 0.0003450600000024 + 49.4253712080004988 + -4.3298712000002757 + 0.0075913200000511 + -0.0004600800000031 + -21.4365476700002091 + 1.8041130000001138 + -0.0031630500000209 + 0.0001917000000013 + 2.9331079560000273 + -0.2405484000000150 + 0.0004217400000027 + -0.0000255600000002 + 15.1097553750001588 + -1.3530847500000884 + 0.0023722875000164 + -0.0001437750000010 + -21.4365476700002091 + 1.8041130000001140 + -0.0031630500000209 + 0.0001917000000013 + 9.2829961125000828 + -0.7517137500000454 + 0.0013179375000082 + -0.0000798750000005 + -1.2689418150000105 + 0.1002285000000056 + -0.0001757250000010 + 0.0000106500000001 + -2.0728908500000220 + 0.1804113000000122 + -0.0003163050000022 + 0.0000191700000001 + 2.9331079560000273 + -0.2405484000000150 + 0.0004217400000027 + -0.0000255600000002 + -1.2689418150000105 + 0.1002285000000056 + -0.0001757250000010 + 0.0000106500000001 + 0.1733534420000013 + -0.0133638000000006 + 0.0000234300000001 + -0.0000014200000000 + 24.1214570055004529 + -2.4448691700002163 + 0.0050465025000343 + -0.0002587950000018 + -34.7277457800006175 + 3.2598255600002939 + -0.0067286700000462 + 0.0003450600000024 + 15.1252830750002651 + -1.3582606500001246 + 0.0028036125000195 + -0.0001437750000010 + -2.0749612100000361 + 0.1811014200000171 + -0.0003738150000026 + 0.0000191700000001 + -34.7277457800006175 + 3.2598255600002939 + -0.0067286700000462 + 0.0003450600000024 + 49.4750598480008250 + -4.3464340800003880 + 0.0089715600000605 + -0.0004600800000031 + -21.4572512700003450 + 1.8110142000001597 + -0.0037381500000247 + 0.0001917000000013 + 2.9358684360000451 + -0.2414685600000209 + 0.0004984200000032 + -0.0000255600000002 + 15.1252830750002616 + -1.3582606500001246 + 0.0028036125000195 + -0.0001437750000010 + -21.4572512700003450 + 1.8110142000001597 + -0.0037381500000247 + 0.0001917000000013 + 9.2916226125001380 + -0.7545892500000633 + 0.0015575625000096 + -0.0000798750000005 + -1.2700920150000172 + 0.1006119000000078 + -0.0002076750000012 + 0.0000106500000001 + -2.0749612100000361 + 0.1811014200000171 + -0.0003738150000026 + 0.0000191700000001 + 2.9358684360000451 + -0.2414685600000209 + 0.0004984200000032 + -0.0000255600000002 + -1.2700920150000172 + 0.1006119000000078 + -0.0002076750000012 + 0.0000106500000001 + 0.1735068020000020 + -0.0134149200000009 + 0.0000276900000001 + -0.0000014200000000 + 24.1594998705007029 + -2.4557385600002908 + 0.0058228875000397 + -0.0002587950000018 + -34.7784696000009532 + 3.2743180800003930 + -0.0077638500000534 + 0.0003450600000024 + 15.1464180000004074 + -1.3642992000001666 + 0.0032349375000225 + -0.0001437750000010 + -2.0777792000000561 + 0.1819065600000228 + -0.0004313250000031 + 0.0000191700000001 + -34.7784696000009532 + 3.2743180800003930 + -0.0077638500000534 + 0.0003450600000024 + 49.5426916080012703 + -4.3657574400005181 + 0.0103518000000699 + -0.0004600800000031 + -21.4854311700005276 + 1.8190656000002128 + -0.0043132500000285 + 0.0001917000000013 + 2.9396257560000691 + -0.2425420800000277 + 0.0005751000000037 + -0.0000255600000002 + 15.1464180000004074 + -1.3642992000001666 + 0.0032349375000225 + -0.0001437750000010 + -21.4854311700005276 + 1.8190656000002128 + -0.0043132500000285 + 0.0001917000000013 + 9.3033642375002099 + -0.7579440000000840 + 0.0017971875000111 + -0.0000798750000005 + -1.2716575650000261 + 0.1010592000000103 + -0.0002396250000013 + 0.0000106500000001 + -2.0777792000000561 + 0.1819065600000228 + -0.0004313250000031 + 0.0000191700000001 + 2.9396257560000691 + -0.2425420800000277 + 0.0005751000000037 + -0.0000255600000002 + -1.2716575650000261 + 0.1010592000000103 + -0.0002396250000013 + 0.0000106500000001 + 0.1737155420000029 + -0.0134745600000011 + 0.0000319500000001 + -0.0000014200000000 + -1365.2531474894988150 + 499.2821272799995995 + -60.2999257274999536 + 2.4120022049999981 + 1817.7717268799983685 + -665.7095030399993902 + 80.3999009699999192 + -3.2160029399999974 + -756.7494971999993822 + 277.3789595999998028 + -33.4999587374999663 + 1.3400012249999991 + 100.8416761599999063 + -36.9838612799999709 + 4.4666611649999961 + -0.1786668299999999 + 1817.7717268799983685 + -665.7095030399995039 + 80.3999009699999192 + -3.2160029399999974 + -2420.5242370319979273 + 887.6126707199993007 + -107.1998679599999207 + 4.2880039199999960 + 1007.7091224299991836 + -369.8386127999996802 + 44.6666116499999646 + -1.7866682999999985 + -134.2863147239999080 + 49.3118150399999564 + -5.9555482199999954 + 0.2382224399999998 + -756.7494971999992686 + 277.3789595999998028 + -33.4999587374999663 + 1.3400012249999991 + 1007.7091224299990699 + -369.8386127999996802 + 44.6666116499999646 + -1.7866682999999985 + -419.5276997624996511 + 154.0994219999998904 + -18.6110881874999841 + 0.7444451249999995 + 55.9058176349999627 + -20.5465895999999830 + 2.4814784249999979 + -0.0992593499999999 + 100.8416761599999063 + -36.9838612799999709 + 4.4666611649999961 + -0.1786668299999999 + -134.2863147239999080 + 49.3118150399999564 + -5.9555482199999954 + 0.2382224399999998 + 55.9058176349999627 + -20.5465895999999830 + 2.4814784249999979 + -0.0992593499999999 + -7.4499478179999956 + 2.7395452799999984 + -0.3308637899999998 + 0.0132345800000000 + 0.0000000000000000 + 0.0000000000000000 + 1.8107300115000000 + -1.2071533409999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.4143066819999999 + 1.6095377879999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.0059611175000001 + -0.6706407450000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1341281490000000 + 0.0894187660000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 225.3083766705000244 + -539.2915199999999913 + 404.4686400000000503 + -89.8819200000000080 + -202.2343199999999968 + 485.3623680000000604 + -364.0217760000000453 + 80.8937280000000101 + 58.9850100000000026 + -141.5640239999999892 + 106.1730180000000132 + -23.5940039999999982 + -5.6176200000000005 + 13.4822880000000005 + -10.1117160000000013 + 2.2470479999999999 + -262.9603688939999984 + 629.1734400000000278 + -471.8800800000000208 + 104.8622400000000141 + 235.9400400000000104 + -566.2560960000000705 + 424.6920720000000529 + -94.3760159999999928 + -68.8158449999999959 + 165.1580280000000300 + -123.8685210000000154 + 27.5263379999999991 + 6.5538900000000009 + -15.7293360000000000 + 11.7970019999999991 + -2.6215560000000000 + 100.2041203725000003 + -239.6851199999999835 + 179.7638400000000161 + -39.9475199999999973 + -89.8819200000000080 + 215.7166080000000079 + -161.7874560000000201 + 35.9527679999999989 + 26.2155599999999964 + -62.9173439999999999 + 47.1880080000000035 + -10.4862240000000000 + -2.4967199999999998 + 5.9921279999999992 + -4.4940959999999999 + 0.9986880000000000 + -12.5283093829999999 + 29.9606400000000015 + -22.4704800000000020 + 4.9934399999999997 + 11.2352400000000010 + -26.9645760000000010 + 20.2234320000000025 + -4.4940959999999999 + -3.2769449999999996 + 7.8646680000000000 + -5.8985010000000004 + 1.3107780000000000 + 0.3120900000000000 + -0.7490160000000000 + 0.5617620000000000 + -0.1248360000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888939999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880079999999964 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803724999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763839999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888939999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880079999999964 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803724999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763839999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888939999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880079999999964 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803724999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763839999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888939999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880079999999964 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803724999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763839999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888939999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880079999999964 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803724999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763839999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888939999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880079999999964 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803724999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763839999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888939999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880079999999964 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803724999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763839999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1796984025000000 + 0.1197989350000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.5390952075000000 + -0.3593968050000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3593968050000000 + 0.2395978700000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0598994675000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.7523780425000002 + -15.7744311360000005 + 11.8308233519999995 + -2.6290718559999999 + -7.0045704549999996 + 16.5234516479999982 + -12.3925887360000004 + 2.7539086080000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -6.7580597519999994 + 16.2193434048000000 + -12.1645075536000000 + 2.7032239007999999 + 6.7580597519999994 + -16.2193434048000000 + 12.1645075536000000 + -2.7032239007999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.9711007609999998 + -4.7306418263999994 + 3.5479813698000000 + -0.7884403043999999 + -1.9711007609999998 + 4.7306418263999994 + -3.5479813698000000 + 0.7884403043999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1877238820000000 + 0.4505373168000000 + -0.3379029876000000 + 0.0750895528000000 + 0.1877238820000000 + -0.4505373168000000 + 0.3379029876000000 + -0.0750895528000000 + 1.7561266437000007 + -2.3348907144000020 + 0.9728711310000014 + -0.1297161508000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -46.0039935710999970 + 61.0691501591999995 + -25.4454792330000004 + 3.3927305643999999 + 44.1854485514000146 + -58.7342594448000099 + 24.4726081020000059 + -3.2630144136000014 + -0.0000000000000012 + 0.0000000000000029 + -0.0000000000000020 + 0.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 36.4935226607999965 + -48.6580302144000001 + 20.2741792560000000 + -2.7032239007999999 + -36.4935226608000107 + 48.6580302144000143 + -20.2741792560000071 + 2.7032239008000012 + 0.0000000000000005 + -0.0000000000000012 + 0.0000000000000008 + -0.0000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -10.6439441093999996 + 14.1919254792000000 + -5.9133022830000002 + 0.7884403043999999 + 10.6439441094000031 + -14.1919254792000071 + 5.9133022830000037 + -0.7884403044000006 + -0.0000000000000001 + 0.0000000000000002 + -0.0000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.0137089628000000 + -1.3516119503999999 + 0.5631716460000000 + -0.0750895528000000 + -1.0137089628000004 + 1.3516119504000006 + -0.5631716460000002 + 0.0750895528000001 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0049586079000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2021309517000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1347539678000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3353203725000000 + 0.2235469150000000 + 0.0000000000000000 + 0.0000000000000000 + 0.8047688940000000 + -0.5365125960000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6035766705000000 + 0.4023844470000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1341281490000000 + -0.0894187660000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 56.1396151825000018 + -135.0033327360000044 + 101.2524995520000033 + -22.5005554560000007 + -125.9664885020000042 + 302.9633875199999693 + -227.2225406399999770 + 50.4938979199999949 + 90.0868110964999858 + -216.6912079679999579 + 162.5184059759999968 + -36.1152013279999977 + -20.5720296569999981 + 49.4801736959999943 + -37.1101302719999921 + 8.2466956160000002 + -49.5027190080000068 + 118.8065256192000163 + -89.1048942144000051 + 19.8010876031999992 + 110.2406780160000039 + -264.5776272383999412 + 198.4332204287999843 + -44.0962712064000044 + -78.7312587600000029 + 188.9550210239999615 + -141.7162657679999711 + 31.4925035039999983 + 17.9932997519999986 + -43.1839194047999939 + 32.3879395535999990 + -7.1973199008000002 + 14.4382930439999981 + -34.6519033056000012 + 25.9889274792000009 + -5.7753172175999996 + -32.1535310880000011 + 77.1684746111999971 + -57.8763559583999978 + 12.8614124351999983 + 22.9632838049999997 + -55.1118811319999935 + 41.3339108489999987 + -9.1853135219999995 + -5.2480457610000002 + 12.5953098263999994 + -9.4464823697999982 + 2.0992183043999999 + -1.3750755280000000 + 3.3001812671999997 + -2.4751359503999999 + 0.5500302112000000 + 3.0622410560000000 + -7.3493785343999996 + 5.5120339008000006 + -1.2248964224000001 + -2.1869794100000002 + 5.2487505839999997 + -3.9365629379999998 + 0.8747917640000000 + 0.4998138820000000 + -1.1995533167999999 + 0.8996649876000000 + -0.1999255528000000 + -157.0620940015000429 + 216.2579120640000099 + -90.1074633599999970 + 12.0143284479999988 + 311.4225038820000009 + -432.5158241280000198 + 180.2149267199999940 + -24.0286568960000011 + -192.3943393995000122 + 270.3223900799999910 + -112.6343292000000105 + 15.0179105600000007 + 37.9715111430000007 + -54.0644780160000025 + 22.5268658399999993 + -3.0035821120000001 + 141.4799946432000013 + -194.6321208576000004 + 81.0967170240000002 + -10.8128956031999994 + -280.7129412863999960 + 389.2642417152000007 + -162.1934340480000003 + 21.6257912063999989 + 173.4794213039999988 + -243.2901510719999862 + 101.3708962799999966 + -13.5161195040000006 + -34.2464746608000041 + 48.6580302144000001 + -20.2741792560000036 + 2.7032239008000003 + -41.2649984375999992 + 56.7677019167999930 + -23.6532091319999971 + 3.1537612175999996 + 81.8746078751999988 + -113.5354038336000144 + 47.3064182640000013 + -6.3075224351999992 + -50.5981645469999961 + 70.9596273959999877 + -29.5665114149999972 + 3.9422015219999995 + 9.9885551094000000 + -14.1919254791999983 + 5.9133022830000002 + -0.7884403044000000 + 3.9299998511999998 + -5.4064478016000006 + 2.2526865840000001 + -0.3003582112000000 + -7.7975817024000005 + 10.8128956032000012 + -4.5053731680000002 + 0.6007164224000000 + 4.8188728140000006 + -6.7580597520000003 + 2.8158582299999999 + -0.3754477640000000 + -0.9512909628000000 + 1.3516119504000002 + -0.5631716460000000 + 0.0750895528000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473689999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352399999999992 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999980 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769449999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215559999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553889999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473689999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352399999999992 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999980 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769449999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215559999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553889999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473689999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352399999999992 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999980 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769449999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215559999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553889999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473689999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352399999999992 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999980 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769449999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215559999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553889999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473689999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352399999999992 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999980 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769449999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215559999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553889999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.1313400465000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -12.9643642139999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 10.3474531604999989 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5768473689999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4940959999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2352399999999992 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.9881919999999980 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.2769449999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.6215559999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553889999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1248360000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3120900000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2496720000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.8107300115000000 + -1.2071533409999999 + 0.0000000000000000 + 0.0000000000000000 + -2.4143066819999999 + 1.6095377879999999 + 0.0000000000000000 + 0.0000000000000000 + 1.0059611175000001 + -0.6706407450000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1341281490000000 + 0.0894187660000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 225.3083766704999960 + -539.2915199999999913 + 404.4686400000000503 + -89.8819200000000080 + -262.9603688939999984 + 629.1734400000000278 + -471.8800800000000208 + 104.8622400000000141 + 100.2041203725000003 + -239.6851200000000119 + 179.7638400000000161 + -39.9475200000000044 + -12.5283093829999999 + 29.9606400000000015 + -22.4704800000000020 + 4.9934399999999997 + -202.2343199999999968 + 485.3623680000000036 + -364.0217760000000453 + 80.8937280000000101 + 235.9400400000000104 + -566.2560960000000705 + 424.6920720000000529 + -94.3760160000000070 + -89.8819200000000080 + 215.7166080000000079 + -161.7874560000000201 + 35.9527680000000061 + 11.2352400000000010 + -26.9645760000000010 + 20.2234320000000025 + -4.4940959999999999 + 58.9850100000000026 + -141.5640239999999892 + 106.1730180000000132 + -23.5940039999999982 + -68.8158449999999959 + 165.1580280000000016 + -123.8685210000000154 + 27.5263379999999991 + 26.2155600000000035 + -62.9173440000000070 + 47.1880080000000035 + -10.4862240000000000 + -3.2769449999999996 + 7.8646680000000000 + -5.8985010000000004 + 1.3107780000000000 + -5.6176200000000005 + 13.4822880000000005 + -10.1117160000000013 + 2.2470479999999999 + 6.5538900000000009 + -15.7293360000000000 + 11.7970019999999991 + -2.6215560000000000 + -2.4967199999999998 + 5.9921279999999992 + -4.4940959999999999 + 0.9986880000000000 + 0.3120900000000000 + -0.7490160000000000 + 0.5617620000000000 + -0.1248360000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888940000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803725000022 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880080000000035 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763840000000030 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888940000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803725000022 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880080000000035 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763840000000030 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888940000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803725000022 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880080000000035 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763840000000030 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888940000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803725000022 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880080000000035 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763840000000030 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888940000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803725000022 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880080000000035 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763840000000030 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888940000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803725000022 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880080000000035 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763840000000030 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 45.5445366704999941 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -53.2358888940000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 20.3090803725000022 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.5414293830000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.4468640000000050 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 47.1880080000000035 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9763840000000030 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2470479999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.7970019999999991 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.7631689999999995 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.2431120000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6553890000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.1235240000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3107780000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4993440000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0624180000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + +# piCH + +6 +0.0 +4.0 +0.0 +4.0 +0.0 +9.0 + + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.3500000000000001 + 0.9000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000000 + -0.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000000 + -0.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + -0.6000000000000001 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -63.4499999999999886 + 80.9999999999999858 + -33.7499999999999929 + 4.4999999999999991 + 42.2999999999999972 + -53.9999999999999858 + 22.4999999999999964 + -2.9999999999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 42.2999999999999972 + -53.9999999999999858 + 22.4999999999999964 + -2.9999999999999996 + -28.1999999999999957 + 36.0000000000000000 + -15.0000000000000000 + 2.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 179.5499999999999545 + -161.9999999999999716 + 47.2499999999999929 + -4.4999999999999991 + -119.6999999999999886 + 107.9999999999999716 + -31.4999999999999964 + 2.9999999999999996 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -119.6999999999999886 + 107.9999999999999716 + -31.4999999999999964 + 2.9999999999999996 + 79.7999999999999972 + -72.0000000000000000 + 21.0000000000000000 + -2.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.8000000000000003 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + -5.4000000000000004 + 3.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 4.0500000000000007 + -2.7000000000000002 + 0.0000000000000000 + 0.0000000000000000 + -0.9000000000000000 + 0.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.6000000000000005 + -2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + -2.7000000000000002 + 1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.6000000000000001 + -0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.1499999999999986 + 45.0000000000000000 + -33.7500000000000000 + 7.5000000000000000 + 43.2000000000000028 + -108.0000000000000000 + 81.0000000000000000 + -18.0000000000000000 + -32.3999999999999986 + 81.0000000000000000 + -60.7500000000000000 + 13.5000000000000000 + 7.2000000000000002 + -18.0000000000000000 + 13.5000000000000000 + -3.0000000000000000 + 12.0999999999999996 + -30.0000000000000000 + 22.5000000000000000 + -5.0000000000000000 + -28.8000000000000007 + 72.0000000000000000 + -54.0000000000000000 + 12.0000000000000000 + 21.6000000000000014 + -54.0000000000000000 + 40.5000000000000000 + -9.0000000000000000 + -4.7999999999999998 + 12.0000000000000000 + -9.0000000000000000 + 2.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 80.8499999999999943 + -108.0000000000000000 + 45.0000000000000000 + -6.0000000000000000 + -244.8000000000000114 + 324.0000000000000000 + -135.0000000000000000 + 18.0000000000000000 + 183.5999999999999943 + -243.0000000000000000 + 101.2500000000000000 + -13.5000000000000000 + -40.7999999999999972 + 54.0000000000000000 + -22.5000000000000000 + 3.0000000000000000 + -53.9000000000000057 + 72.0000000000000000 + -30.0000000000000000 + 4.0000000000000000 + 163.1999999999999886 + -216.0000000000000000 + 90.0000000000000000 + -12.0000000000000000 + -122.4000000000000057 + 162.0000000000000000 + -67.5000000000000000 + 9.0000000000000000 + 27.1999999999999993 + -36.0000000000000000 + 15.0000000000000000 + -2.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 60.6000000000000369 + -54.0000000000000284 + 15.7500000000000107 + -1.5000000000000011 + -1.8000000000001068 + 0.0000000000000999 + -0.0000000000000306 + 0.0000000000000031 + 1.3500000000000831 + -0.0000000000000759 + 0.0000000000000226 + -0.0000000000000022 + -0.3000000000000198 + 0.0000000000000173 + -0.0000000000000049 + 0.0000000000000004 + -40.4000000000000270 + 36.0000000000000213 + -10.5000000000000036 + 1.0000000000000004 + 1.2000000000000515 + -0.0000000000000426 + 0.0000000000000111 + -0.0000000000000009 + -0.9000000000000317 + 0.0000000000000253 + -0.0000000000000062 + 0.0000000000000004 + 0.2000000000000040 + -0.0000000000000027 + 0.0000000000000004 + 0.0000000000000000 + -3.9810265070966766 + 2.7143362548386434 + -0.6107256573386948 + 0.0452389375806441 + 9.5544636170320238 + -6.5144070116127439 + 1.4657415776128673 + -0.1085734501935457 + -7.1658477127740188 + 4.8858052587095582 + -1.0993061832096505 + 0.0814300876451593 + 1.5924106028386709 + -1.0857345019354574 + 0.2442902629354779 + -0.0180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 12.5430795212900357 + -8.1430087645159333 + 1.8321769720160854 + -0.1357168127419323 + -30.4633908510960865 + 19.5432210348382434 + -4.3972247328386054 + 0.3257203505806374 + 22.8475431383220666 + -14.6574157761286834 + 3.2979185496289536 + -0.2442902629354781 + -5.0772318085160153 + 3.2572035058063742 + -0.7328707888064342 + 0.0542867250967729 + -8.3620530141933571 + 5.4286725096772885 + -1.2214513146773900 + 0.0904778751612881 + 20.3089272340640541 + -13.0288140232254914 + 2.9314831552257354 + -0.2171469003870915 + -15.2316954255480397 + 9.7716105174191163 + -2.1986123664193014 + 0.1628601752903186 + 3.3848212056773415 + -2.1714690038709143 + 0.4885805258709557 + -0.0361911500645152 + -0.0226194687903220 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0542867250967729 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0407150438225796 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6678584063709662 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.9628601752903188 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.4721451314677392 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3085734501935460 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9814300876451594 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0226194687903220 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0542867250967729 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0407150438225796 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6678584063709662 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.9628601752903188 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.4721451314677392 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3085734501935460 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9814300876451594 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0226194687903220 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0542867250967729 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0407150438225796 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6678584063709662 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.9628601752903188 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.4721451314677392 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3085734501935460 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9814300876451594 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0226194687903220 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0542867250967729 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0407150438225796 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6678584063709662 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.9628601752903188 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.4721451314677392 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3085734501935460 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9814300876451594 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -25.2000000000000028 + 16.8000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 32.4000000000000057 + -21.6000000000000014 + 0.0000000000000000 + 0.0000000000000000 + -13.5000000000000000 + 9.0000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 1.8000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 16.8000000000000007 + -11.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + -21.6000000000000014 + 14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 9.0000000000000018 + -6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 82.3499999999999943 + -217.8000000000000114 + 163.3499999999999943 + -36.2999999999999972 + -110.6999999999999886 + 291.6000000000000227 + -218.6999999999999886 + 48.6000000000000085 + 46.1250000000000000 + -121.5000000000000000 + 91.1250000000000000 + -20.2500000000000036 + -6.1500000000000004 + 16.2000000000000028 + -12.1500000000000021 + 2.7000000000000002 + -54.8999999999999986 + 145.1999999999999886 + -108.9000000000000057 + 24.1999999999999993 + 73.7999999999999972 + -194.4000000000000341 + 145.8000000000000114 + -32.3999999999999986 + -30.7500000000000000 + 81.0000000000000000 + -60.7500000000000000 + 13.5000000000000000 + 4.0999999999999996 + -10.8000000000000007 + 8.0999999999999996 + -1.7999999999999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 9.7500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.6250000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.7500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -6.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 9.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.7500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1460.4000000000000909 + 1306.8000000000001819 + -381.1499999999999773 + 36.2999999999999972 + 1954.8000000000001819 + -1749.6000000000001364 + 510.3000000000000114 + -48.6000000000000085 + -814.5000000000001137 + 729.0000000000001137 + -212.6250000000000000 + 20.2500000000000036 + 108.5999999999999943 + -97.2000000000000028 + 28.3500000000000014 + -2.7000000000000002 + 973.5999999999999091 + -871.2000000000000455 + 254.0999999999999943 + -24.2000000000000028 + -1303.2000000000000455 + 1166.4000000000000909 + -340.2000000000000455 + 32.4000000000000057 + 543.0000000000000000 + -486.0000000000000568 + 141.7500000000000000 + -13.5000000000000000 + -72.4000000000000057 + 64.8000000000000114 + -18.8999999999999986 + 1.8000000000000000 + 21.4975431383220581 + -14.6574157761286745 + 3.2979185496289514 + -0.2442902629354779 + -28.6633908510960751 + 19.5432210348382327 + -4.3972247328386018 + 0.3257203505806372 + 11.9430795212900307 + -8.1430087645159297 + 1.8321769720160841 + -0.1357168127419322 + -1.5924106028386709 + 1.0857345019354574 + -0.2442902629354779 + 0.0180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -72.8926294149661658 + 43.9722473283860253 + -9.8937556488868559 + 0.7328707888064337 + 96.7901725532882438 + -58.6296631045147052 + 13.1916741985158090 + -0.9771610517419118 + -40.3292385638700992 + 24.4290262935477962 + -5.4965309160482541 + 0.4071504382257967 + 5.3772318085160133 + -3.2572035058063733 + 0.7328707888064341 + -0.0542867250967729 + 48.5950862766441105 + -29.3148315522573526 + 6.5958370992579045 + -0.4885805258709559 + -64.5267817021921530 + 39.0864420696764654 + -8.7944494656772036 + 0.6514407011612744 + 26.8861590425800614 + -16.2860175290318594 + 3.6643539440321682 + -0.2714336254838643 + -3.5848212056773412 + 2.1714690038709143 + -0.4885805258709557 + 0.0361911500645152 + 0.1221451314677389 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1628601752903186 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0678584063709661 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.7664353944032172 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2885805258709571 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.7035752191128983 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.8442902629354787 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5257203505806380 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1357168127419324 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1221451314677389 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1628601752903186 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0678584063709661 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.7664353944032172 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2885805258709571 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.7035752191128983 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.8442902629354787 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5257203505806380 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1357168127419324 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1221451314677389 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1628601752903186 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0678584063709661 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.7664353944032172 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2885805258709571 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.7035752191128983 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.8442902629354787 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5257203505806380 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1357168127419324 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1221451314677389 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1628601752903186 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0678584063709661 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.7664353944032172 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2885805258709571 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.7035752191128983 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.8442902629354787 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5257203505806380 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1357168127419324 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9000000000000000 + 0.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6000000000000001 + -0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6749999999999999 + 0.8999999999999997 + -0.6749999999999997 + 0.1499999999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4499999999999999 + -0.5999999999999998 + 0.4499999999999998 + -0.1000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3750000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.6999999999999975 + -5.3999999999999968 + 1.5749999999999993 + -0.1499999999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.7999999999999985 + 3.5999999999999988 + -1.0499999999999998 + 0.1000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.8000000000000003 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.4000000000000004 + 3.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 3.6000000000000005 + -2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 4.0500000000000007 + -2.7000000000000002 + 0.0000000000000000 + 0.0000000000000000 + -2.7000000000000002 + 1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9000000000000000 + 0.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.6000000000000001 + -0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.1499999999999986 + 45.0000000000000000 + -33.7500000000000000 + 7.5000000000000000 + 12.0999999999999996 + -30.0000000000000000 + 22.5000000000000000 + -5.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + -108.0000000000000000 + 81.0000000000000000 + -18.0000000000000000 + -28.8000000000000007 + 72.0000000000000000 + -54.0000000000000000 + 12.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.3999999999999986 + 81.0000000000000000 + -60.7500000000000000 + 13.5000000000000000 + 21.6000000000000014 + -54.0000000000000000 + 40.5000000000000000 + -9.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000002 + -18.0000000000000000 + 13.5000000000000000 + -3.0000000000000000 + -4.7999999999999998 + 12.0000000000000000 + -9.0000000000000000 + 2.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 80.8499999999999943 + -108.0000000000000000 + 45.0000000000000000 + -6.0000000000000000 + -53.9000000000000057 + 72.0000000000000000 + -30.0000000000000000 + 4.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -244.8000000000000114 + 324.0000000000000000 + -135.0000000000000000 + 18.0000000000000000 + 163.1999999999999886 + -216.0000000000000000 + 90.0000000000000000 + -12.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 183.5999999999999943 + -243.0000000000000000 + 101.2500000000000000 + -13.5000000000000000 + -122.4000000000000057 + 162.0000000000000000 + -67.5000000000000000 + 9.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.7999999999999972 + 54.0000000000000000 + -22.5000000000000000 + 3.0000000000000000 + 27.1999999999999993 + -36.0000000000000000 + 15.0000000000000000 + -2.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 60.6000000000000369 + -54.0000000000000284 + 15.7500000000000107 + -1.5000000000000011 + -40.4000000000000270 + 36.0000000000000213 + -10.5000000000000036 + 1.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000001068 + 0.0000000000000999 + -0.0000000000000306 + 0.0000000000000031 + 1.2000000000000515 + -0.0000000000000426 + 0.0000000000000111 + -0.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3500000000000831 + -0.0000000000000759 + 0.0000000000000226 + -0.0000000000000022 + -0.9000000000000317 + 0.0000000000000253 + -0.0000000000000062 + 0.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000198 + 0.0000000000000173 + -0.0000000000000049 + 0.0000000000000004 + 0.2000000000000040 + -0.0000000000000027 + 0.0000000000000004 + 0.0000000000000000 + -3.9810265070966766 + 2.7143362548386434 + -0.6107256573386948 + 0.0452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 12.5430795212900303 + -8.1430087645159297 + 1.8321769720160841 + -0.1357168127419322 + -8.3620530141933536 + 5.4286725096772868 + -1.2214513146773895 + 0.0904778751612881 + 9.5544636170320238 + -6.5144070116127439 + 1.4657415776128673 + -0.1085734501935457 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -30.4633908510960723 + 19.5432210348382327 + -4.3972247328386018 + 0.3257203505806372 + 20.3089272340640505 + -13.0288140232254879 + 2.9314831552257345 + -0.2171469003870915 + -7.1658477127740188 + 4.8858052587095582 + -1.0993061832096505 + 0.0814300876451593 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 22.8475431383220560 + -14.6574157761286745 + 3.2979185496289514 + -0.2442902629354779 + -15.2316954255480361 + 9.7716105174191163 + -2.1986123664193009 + 0.1628601752903186 + 1.5924106028386709 + -1.0857345019354574 + 0.2442902629354779 + -0.0180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.0772318085160126 + 3.2572035058063720 + -0.7328707888064336 + 0.0542867250967729 + 3.3848212056773415 + -2.1714690038709148 + 0.4885805258709558 + -0.0361911500645152 + -0.0226194687903220 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6678584063709662 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0542867250967729 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.9628601752903188 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3085734501935460 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0407150438225796 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.4721451314677392 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9814300876451594 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0226194687903220 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6678584063709662 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0542867250967729 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.9628601752903188 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3085734501935460 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0407150438225796 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.4721451314677392 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9814300876451594 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0226194687903220 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6678584063709662 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0542867250967729 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.9628601752903188 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3085734501935460 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0407150438225796 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.4721451314677392 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9814300876451594 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0226194687903220 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6678584063709662 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4452389375806441 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0542867250967729 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.9628601752903188 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.3085734501935460 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0407150438225796 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.4721451314677392 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9814300876451594 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.4000000000000004 + 1.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + -4.8000000000000007 + 0.0000000000000000 + 0.0000000000000000 + -5.4000000000000004 + 3.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 1.2000000000000002 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + -4.8000000000000007 + 0.0000000000000000 + 0.0000000000000000 + -21.6000000000000014 + 14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 16.2000000000000028 + -10.8000000000000007 + 0.0000000000000000 + 0.0000000000000000 + -3.6000000000000005 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + -5.4000000000000004 + 3.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 16.2000000000000028 + -10.8000000000000007 + 0.0000000000000000 + 0.0000000000000000 + -12.1500000000000021 + 8.1000000000000014 + 0.0000000000000000 + 0.0000000000000000 + 2.7000000000000002 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 1.2000000000000002 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.6000000000000005 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 2.7000000000000002 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + -0.6000000000000001 + 0.4000000000000000 + 49.2000000000000028 + -120.0000000000000000 + 90.0000000000000000 + -20.0000000000000000 + -132.6000000000000227 + 324.0000000000000000 + -243.0000000000000000 + 54.0000000000000000 + 99.4500000000000171 + -243.0000000000000000 + 182.2500000000000000 + -40.5000000000000000 + -22.1000000000000014 + 54.0000000000000000 + -40.5000000000000000 + 9.0000000000000000 + -132.5999999999999943 + 324.0000000000000000 + -243.0000000000000000 + 54.0000000000000000 + 352.8000000000000114 + -864.0000000000000000 + 648.0000000000000000 + -144.0000000000000000 + -264.6000000000000227 + 648.0000000000000000 + -486.0000000000000000 + 108.0000000000000000 + 58.7999999999999972 + -144.0000000000000000 + 108.0000000000000000 + -24.0000000000000000 + 99.4500000000000028 + -243.0000000000000000 + 182.2500000000000000 + -40.5000000000000000 + -264.6000000000000227 + 648.0000000000000000 + -486.0000000000000000 + 108.0000000000000000 + 198.4499999999999886 + -486.0000000000000000 + 364.5000000000000000 + -81.0000000000000000 + -44.1000000000000014 + 108.0000000000000000 + -81.0000000000000000 + 18.0000000000000000 + -22.1000000000000014 + 54.0000000000000000 + -40.5000000000000000 + 9.0000000000000000 + 58.7999999999999972 + -144.0000000000000000 + 108.0000000000000000 + -24.0000000000000000 + -44.1000000000000014 + 108.0000000000000000 + -81.0000000000000000 + 18.0000000000000000 + 9.8000000000000007 + -24.0000000000000000 + 18.0000000000000000 + -4.0000000000000000 + -102.7999999999999972 + 144.0000000000000000 + -60.0000000000000000 + 8.0000000000000000 + 311.3999999999999773 + -432.0000000000000000 + 180.0000000000000000 + -24.0000000000000000 + -233.5499999999999829 + 324.0000000000000000 + -135.0000000000000000 + 18.0000000000000000 + 51.8999999999999986 + -72.0000000000000000 + 30.0000000000000000 + -4.0000000000000000 + 311.3999999999999773 + -432.0000000000000000 + 180.0000000000000000 + -24.0000000000000000 + -943.2000000000000455 + 1296.0000000000000000 + -540.0000000000000000 + 72.0000000000000000 + 707.3999999999999773 + -972.0000000000000000 + 405.0000000000000000 + -54.0000000000000000 + -157.1999999999999886 + 216.0000000000000000 + -90.0000000000000000 + 12.0000000000000000 + -233.5499999999999829 + 324.0000000000000000 + -135.0000000000000000 + 18.0000000000000000 + 707.4000000000000909 + -972.0000000000000000 + 405.0000000000000000 + -54.0000000000000000 + -530.5499999999999545 + 729.0000000000000000 + -303.7500000000000000 + 40.5000000000000000 + 117.9000000000000057 + -162.0000000000000000 + 67.5000000000000000 + -9.0000000000000000 + 51.8999999999999986 + -72.0000000000000000 + 30.0000000000000000 + -4.0000000000000000 + -157.1999999999999886 + 216.0000000000000000 + -90.0000000000000000 + 12.0000000000000000 + 117.9000000000000057 + -162.0000000000000000 + 67.5000000000000000 + -9.0000000000000000 + -26.1999999999999993 + 36.0000000000000000 + -15.0000000000000000 + 2.0000000000000000 + -480.8000000000000114 + 432.0000000000000000 + -126.0000000000000000 + 12.0000000000000000 + 1202.4000000000000909 + -1080.0000000000000000 + 315.0000000000000568 + -30.0000000000000036 + -901.8000000000000682 + 810.0000000000001137 + -236.2500000000000000 + 22.5000000000000036 + 200.4000000000000341 + -180.0000000000000284 + 52.5000000000000071 + -5.0000000000000000 + 1202.4000000000003183 + -1080.0000000000002274 + 315.0000000000000568 + -30.0000000000000071 + -2887.2000000000007276 + 2592.0000000000004547 + -756.0000000000001137 + 72.0000000000000142 + 2165.4000000000005457 + -1944.0000000000002274 + 567.0000000000000000 + -54.0000000000000071 + -481.2000000000000455 + 432.0000000000000568 + -126.0000000000000142 + 12.0000000000000000 + -901.8000000000000682 + 810.0000000000002274 + -236.2500000000000284 + 22.5000000000000036 + 2165.4000000000005457 + -1944.0000000000004547 + 567.0000000000000000 + -54.0000000000000071 + -1624.0500000000001819 + 1458.0000000000002274 + -425.2500000000000568 + 40.5000000000000071 + 360.9000000000000341 + -324.0000000000000568 + 94.5000000000000000 + -9.0000000000000000 + 200.4000000000000341 + -180.0000000000000284 + 52.5000000000000071 + -5.0000000000000000 + -481.2000000000000455 + 432.0000000000000568 + -126.0000000000000142 + 12.0000000000000000 + 360.9000000000000341 + -324.0000000000000568 + 94.5000000000000000 + -9.0000000000000000 + -80.2000000000000028 + 72.0000000000000000 + -21.0000000000000000 + 2.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.0500000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.0500000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.0500000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.0500000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.0500000000000007 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 33.6000000000000014 + -22.3999999999999986 + 0.0000000000000000 + 0.0000000000000000 + -43.2000000000000028 + 28.8000000000000043 + 0.0000000000000000 + 0.0000000000000000 + 18.0000000000000000 + -12.0000000000000018 + 0.0000000000000000 + 0.0000000000000000 + -2.4000000000000004 + 1.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + -100.8000000000000114 + 67.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 129.6000000000000227 + -86.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + -54.0000000000000000 + 36.0000000000000071 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + -4.8000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 75.6000000000000085 + -50.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + -97.2000000000000171 + 64.8000000000000114 + 0.0000000000000000 + 0.0000000000000000 + 40.5000000000000000 + -27.0000000000000036 + 0.0000000000000000 + 0.0000000000000000 + -5.4000000000000004 + 3.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + -16.8000000000000007 + 11.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 21.6000000000000014 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + -9.0000000000000018 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 1.2000000000000002 + -0.8000000000000000 + -109.8000000000000114 + 290.3999999999999773 + -217.7999999999999829 + 48.3999999999999986 + 147.5999999999999943 + -388.8000000000000114 + 291.6000000000000227 + -64.7999999999999972 + -61.5000000000000000 + 162.0000000000000000 + -121.5000000000000000 + 27.0000000000000000 + 8.1999999999999993 + -21.6000000000000014 + 16.1999999999999993 + -3.6000000000000001 + 329.4000000000000341 + -871.2000000000000455 + 653.3999999999999773 + -145.1999999999999886 + -442.8000000000000114 + 1166.4000000000000909 + -874.8000000000000682 + 194.4000000000000341 + 184.5000000000000000 + -486.0000000000000568 + 364.5000000000000000 + -81.0000000000000000 + -24.6000000000000014 + 64.8000000000000114 + -48.6000000000000085 + 10.8000000000000007 + -247.0499999999999829 + 653.4000000000000909 + -490.0499999999999545 + 108.9000000000000057 + 332.0999999999999659 + -874.8000000000000682 + 656.1000000000000227 + -145.8000000000000114 + -138.3750000000000000 + 364.5000000000000568 + -273.3750000000000000 + 60.7500000000000000 + 18.4499999999999993 + -48.6000000000000085 + 36.4500000000000028 + -8.0999999999999996 + 54.8999999999999986 + -145.1999999999999886 + 108.9000000000000057 + -24.1999999999999993 + -73.7999999999999972 + 194.4000000000000341 + -145.8000000000000114 + 32.3999999999999986 + 30.7500000000000000 + -81.0000000000000000 + 60.7500000000000000 + -13.5000000000000000 + -4.0999999999999996 + 10.8000000000000007 + -8.0999999999999996 + 1.7999999999999998 + -13.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 18.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 39.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -54.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 22.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -29.2500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 40.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -16.8750000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -9.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.7500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1947.2000000000000455 + -1742.3999999999998636 + 508.1999999999999318 + -48.3999999999999986 + -2606.4000000000005457 + 2332.8000000000001819 + -680.3999999999999773 + 64.8000000000000114 + 1086.0000000000000000 + -972.0000000000001137 + 283.5000000000000000 + -27.0000000000000036 + -144.8000000000000114 + 129.5999999999999943 + -37.7999999999999972 + 3.6000000000000005 + -5841.6000000000003638 + 5227.2000000000007276 + -1524.5999999999999091 + 145.1999999999999886 + 7819.2000000000007276 + -6998.4000000000005457 + 2041.2000000000002728 + -194.4000000000000341 + -3258.0000000000004547 + 2916.0000000000004547 + -850.5000000000000000 + 81.0000000000000142 + 434.4000000000000341 + -388.8000000000000114 + 113.4000000000000057 + -10.8000000000000007 + 4381.2000000000007276 + -3920.4000000000005457 + 1143.4500000000000455 + -108.9000000000000057 + -5864.4000000000014552 + 5248.8000000000001819 + -1530.9000000000000909 + 145.8000000000000114 + 2443.5000000000004547 + -2187.0000000000004547 + 637.8750000000000000 + -60.7500000000000142 + -325.8000000000000114 + 291.6000000000000227 + -85.0500000000000114 + 8.1000000000000014 + -973.5999999999999091 + 871.2000000000000455 + -254.0999999999999943 + 24.2000000000000028 + 1303.2000000000000455 + -1166.4000000000000909 + 340.2000000000000455 + -32.4000000000000057 + -543.0000000000000000 + 486.0000000000000568 + -141.7500000000000000 + 13.5000000000000000 + 72.4000000000000057 + -64.8000000000000114 + 18.8999999999999986 + -1.8000000000000000 + 11.1999999999999993 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000014 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000036 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.1999999999999993 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000014 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000036 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.1999999999999993 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000014 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000036 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.1999999999999993 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000014 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000036 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.1999999999999993 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000014 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000036 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.2000000000000002 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.6000000000000005 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.7000000000000002 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6000000000000001 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.8999999999999998 + -1.1999999999999997 + 0.8999999999999996 + -0.1999999999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.6999999999999993 + 3.5999999999999988 + -2.6999999999999988 + 0.5999999999999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.0249999999999995 + -2.6999999999999988 + 2.0249999999999995 + -0.4499999999999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4499999999999999 + 0.5999999999999998 + -0.4499999999999998 + 0.1000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.1250000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5999999999999961 + 7.1999999999999966 + -2.0999999999999992 + 0.1999999999999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 22.7999999999999901 + -21.5999999999999908 + 6.2999999999999972 + -0.5999999999999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.0999999999999943 + 16.1999999999999922 + -4.7249999999999979 + 0.4499999999999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.7999999999999985 + -3.5999999999999988 + 1.0499999999999998 + -0.1000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -25.2000000000000028 + 16.8000000000000007 + 0.0000000000000000 + 0.0000000000000000 + 16.8000000000000007 + -11.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 32.4000000000000057 + -21.6000000000000014 + 0.0000000000000000 + 0.0000000000000000 + -21.6000000000000014 + 14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.5000000000000000 + 9.0000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 9.0000000000000018 + -6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.8000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 82.3499999999999943 + -217.8000000000000114 + 163.3499999999999943 + -36.2999999999999972 + -54.8999999999999986 + 145.1999999999999886 + -108.9000000000000057 + 24.1999999999999993 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -110.6999999999999886 + 291.6000000000000227 + -218.6999999999999886 + 48.6000000000000085 + 73.7999999999999972 + -194.4000000000000341 + 145.8000000000000114 + -32.3999999999999986 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 46.1250000000000000 + -121.5000000000000000 + 91.1250000000000000 + -20.2500000000000036 + -30.7500000000000000 + 81.0000000000000000 + -60.7500000000000000 + 13.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -6.1500000000000004 + 16.2000000000000028 + -12.1500000000000021 + 2.7000000000000002 + 4.0999999999999996 + -10.8000000000000007 + 8.0999999999999996 + -1.7999999999999998 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 9.7500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -6.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -13.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 9.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.6250000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.7500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.7500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1460.4000000000000909 + 1306.8000000000001819 + -381.1499999999999773 + 36.2999999999999972 + 973.5999999999999091 + -871.2000000000000455 + 254.0999999999999943 + -24.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1954.8000000000001819 + -1749.6000000000001364 + 510.3000000000000114 + -48.6000000000000085 + -1303.2000000000000455 + 1166.4000000000000909 + -340.2000000000000455 + 32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -814.5000000000001137 + 729.0000000000001137 + -212.6250000000000000 + 20.2500000000000036 + 543.0000000000000000 + -486.0000000000000568 + 141.7500000000000000 + -13.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 108.5999999999999943 + -97.2000000000000028 + 28.3500000000000014 + -2.7000000000000002 + -72.4000000000000057 + 64.8000000000000114 + -18.8999999999999986 + 1.8000000000000000 + 21.4975431383220581 + -14.6574157761286745 + 3.2979185496289514 + -0.2442902629354779 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -72.8926294149661658 + 43.9722473283860253 + -9.8937556488868559 + 0.7328707888064337 + 48.5950862766441105 + -29.3148315522573526 + 6.5958370992579045 + -0.4885805258709559 + -28.6633908510960751 + 19.5432210348382327 + -4.3972247328386018 + 0.3257203505806372 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 96.7901725532882438 + -58.6296631045147052 + 13.1916741985158090 + -0.9771610517419118 + -64.5267817021921530 + 39.0864420696764654 + -8.7944494656772036 + 0.6514407011612744 + 11.9430795212900307 + -8.1430087645159297 + 1.8321769720160841 + -0.1357168127419322 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -40.3292385638700992 + 24.4290262935477962 + -5.4965309160482541 + 0.4071504382257967 + 26.8861590425800614 + -16.2860175290318594 + 3.6643539440321682 + -0.2714336254838643 + -1.5924106028386709 + 1.0857345019354574 + -0.2442902629354779 + 0.0180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.3772318085160133 + -3.2572035058063733 + 0.7328707888064341 + -0.0542867250967729 + -3.5848212056773412 + 2.1714690038709143 + -0.4885805258709557 + 0.0361911500645152 + 0.1221451314677389 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.7664353944032172 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.8442902629354787 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1628601752903186 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2885805258709571 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5257203505806380 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0678584063709661 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.7035752191128983 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1357168127419324 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1221451314677389 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.7664353944032172 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.8442902629354787 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1628601752903186 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2885805258709571 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5257203505806380 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0678584063709661 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.7035752191128983 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1357168127419324 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1221451314677389 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.7664353944032172 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.8442902629354787 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1628601752903186 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2885805258709571 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5257203505806380 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0678584063709661 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.7035752191128983 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1357168127419324 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.1221451314677389 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -8.7664353944032172 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.8442902629354787 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.1628601752903186 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2885805258709571 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5257203505806380 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0678584063709661 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.7035752191128983 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.1357168127419324 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.0090477875161288 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.6271433625483865 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.4180955750322576 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 33.6000000000000014 + -22.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + -100.8000000000000114 + 67.2000000000000171 + 0.0000000000000000 + 0.0000000000000000 + 75.6000000000000085 + -50.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + -16.8000000000000007 + 11.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + -43.2000000000000028 + 28.8000000000000043 + 0.0000000000000000 + 0.0000000000000000 + 129.6000000000000227 + -86.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + -97.2000000000000171 + 64.8000000000000114 + 0.0000000000000000 + 0.0000000000000000 + 21.6000000000000014 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 18.0000000000000000 + -12.0000000000000018 + 0.0000000000000000 + 0.0000000000000000 + -54.0000000000000071 + 36.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 40.5000000000000000 + -27.0000000000000036 + 0.0000000000000000 + 0.0000000000000000 + -9.0000000000000018 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + -2.4000000000000004 + 1.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + -4.8000000000000007 + 0.0000000000000000 + 0.0000000000000000 + -5.4000000000000004 + 3.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 1.2000000000000002 + -0.8000000000000000 + -109.7999999999999829 + 290.3999999999999773 + -217.7999999999999829 + 48.3999999999999986 + 329.4000000000000341 + -871.2000000000000455 + 653.4000000000000909 + -145.1999999999999886 + -247.0499999999999829 + 653.4000000000000909 + -490.0499999999999545 + 108.9000000000000057 + 54.8999999999999986 + -145.1999999999999886 + 108.9000000000000057 + -24.1999999999999993 + 147.5999999999999943 + -388.8000000000000114 + 291.6000000000000227 + -64.8000000000000114 + -442.8000000000000114 + 1166.4000000000000909 + -874.8000000000000682 + 194.4000000000000341 + 332.0999999999999659 + -874.8000000000000682 + 656.1000000000000227 + -145.8000000000000114 + -73.7999999999999972 + 194.4000000000000341 + -145.8000000000000114 + 32.3999999999999986 + -61.4999999999999929 + 162.0000000000000284 + -121.5000000000000000 + 27.0000000000000000 + 184.5000000000000000 + -486.0000000000000568 + 364.5000000000000000 + -81.0000000000000000 + -138.3750000000000000 + 364.5000000000000568 + -273.3750000000000000 + 60.7500000000000000 + 30.7500000000000000 + -81.0000000000000000 + 60.7500000000000000 + -13.5000000000000000 + 8.1999999999999993 + -21.6000000000000014 + 16.1999999999999993 + -3.6000000000000001 + -24.6000000000000014 + 64.8000000000000114 + -48.6000000000000085 + 10.8000000000000007 + 18.4499999999999993 + -48.6000000000000085 + 36.4500000000000028 + -8.0999999999999996 + -4.0999999999999996 + 10.8000000000000007 + -8.0999999999999996 + 1.7999999999999998 + -13.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 39.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -29.2500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 18.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -54.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 40.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -9.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 22.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -16.8750000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.7500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1947.2000000000000455 + -1742.3999999999998636 + 508.2000000000000455 + -48.3999999999999986 + -5841.6000000000003638 + 5227.2000000000007276 + -1524.5999999999999091 + 145.1999999999999886 + 4381.2000000000007276 + -3920.4000000000000909 + 1143.4500000000000455 + -108.9000000000000199 + -973.5999999999999091 + 871.2000000000000455 + -254.0999999999999943 + 24.2000000000000028 + -2606.4000000000005457 + 2332.8000000000001819 + -680.3999999999999773 + 64.8000000000000114 + 7819.2000000000007276 + -6998.4000000000005457 + 2041.2000000000000455 + -194.4000000000000341 + -5864.4000000000014552 + 5248.8000000000001819 + -1530.9000000000000909 + 145.8000000000000114 + 1303.2000000000000455 + -1166.4000000000000909 + 340.2000000000000455 + -32.4000000000000057 + 1086.0000000000000000 + -972.0000000000001137 + 283.5000000000000000 + -27.0000000000000036 + -3258.0000000000004547 + 2916.0000000000004547 + -850.5000000000000000 + 81.0000000000000142 + 2443.5000000000004547 + -2187.0000000000004547 + 637.8750000000000000 + -60.7500000000000142 + -543.0000000000000000 + 486.0000000000000568 + -141.7500000000000000 + 13.5000000000000000 + -144.8000000000000114 + 129.5999999999999943 + -37.7999999999999972 + 3.6000000000000005 + 434.4000000000000341 + -388.8000000000000114 + 113.4000000000000057 + -10.8000000000000007 + -325.8000000000000114 + 291.6000000000000227 + -85.0500000000000114 + 8.1000000000000014 + 72.4000000000000057 + -64.8000000000000114 + 18.8999999999999986 + -1.8000000000000000 + 11.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000085 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000085 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000085 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000085 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 11.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -33.6000000000000085 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 25.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -5.6000000000000005 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -14.4000000000000021 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 43.2000000000000028 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -32.4000000000000057 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 7.2000000000000011 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 6.0000000000000009 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -18.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.5000000000000018 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.0000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.9000000000000000 + 0.6000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.6000000000000001 + -0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.6749999999999999 + 0.8999999999999997 + -0.6749999999999997 + 0.1499999999999999 + 0.4499999999999999 + -0.5999999999999998 + 0.4499999999999998 + -0.1000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3750000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.6999999999999975 + -5.3999999999999968 + 1.5749999999999993 + -0.1499999999999999 + -3.7999999999999985 + 3.5999999999999988 + -1.0499999999999998 + 0.1000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.3000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.2000000000000002 + -0.8000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -3.6000000000000005 + 2.4000000000000004 + 0.0000000000000000 + 0.0000000000000000 + 2.7000000000000002 + -1.8000000000000003 + 0.0000000000000000 + 0.0000000000000000 + -0.6000000000000001 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.8999999999999998 + -1.1999999999999997 + 0.8999999999999996 + -0.1999999999999999 + -2.6999999999999993 + 3.5999999999999988 + -2.6999999999999988 + 0.5999999999999998 + 2.0249999999999995 + -2.6999999999999988 + 2.0249999999999995 + -0.4499999999999998 + -0.4499999999999999 + 0.5999999999999998 + -0.4499999999999998 + 0.1000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.5000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 1.1250000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2500000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -7.5999999999999961 + 7.1999999999999966 + -2.0999999999999992 + 0.1999999999999999 + 22.7999999999999901 + -21.5999999999999908 + 6.2999999999999972 + -0.5999999999999998 + -17.0999999999999943 + 16.1999999999999922 + -4.7249999999999979 + 0.4499999999999998 + 3.7999999999999985 + -3.5999999999999988 + 1.0499999999999998 + -0.1000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.4000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -1.2000000000000002 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.9000000000000001 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -0.2000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + +# piHH + +6 +0.0 +4.0 +0.0 +4.0 +0.0 +9.0 + + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 3.3727308659999999 + -2.2484872439999997 + 0.0000000000000000 + 0.0000000000000000 + -2.2484872439999997 + 1.4989914959999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.2484872439999997 + 1.4989914959999999 + 0.0000000000000000 + 0.0000000000000000 + 1.4989914959999999 + -0.9993276639999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4969744879999993 + 13.4909234639999980 + -10.1181925979999985 + 2.2484872439999997 + 2.9979829919999998 + -8.9939489759999987 + 6.7454617319999990 + -1.4989914959999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.9979829919999998 + -8.9939489759999987 + 6.7454617319999990 + -1.4989914959999999 + -1.9986553279999999 + 5.9959659839999997 + -4.4969744879999993 + 0.9993276639999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4969744879999993 + 2.9979829919999998 + 0.0000000000000000 + 0.0000000000000000 + 13.4909234639999980 + -8.9939489759999987 + 0.0000000000000000 + 0.0000000000000000 + -10.1181925979999985 + 6.7454617319999990 + 0.0000000000000000 + 0.0000000000000000 + 2.2484872439999997 + -1.4989914959999999 + 0.0000000000000000 + 0.0000000000000000 + 2.9979829919999998 + -1.9986553279999999 + 0.0000000000000000 + 0.0000000000000000 + -8.9939489759999987 + 5.9959659839999997 + 0.0000000000000000 + 0.0000000000000000 + 6.7454617319999990 + -4.4969744879999993 + 0.0000000000000000 + 0.0000000000000000 + -1.4989914959999999 + 0.9993276639999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.9959659839999997 + -17.9878979519999973 + 13.4909234639999980 + -2.9979829919999998 + -17.9878979519999973 + 53.9636938559999919 + -40.4727703919999939 + 8.9939489759999987 + 13.4909234639999980 + -40.4727703919999939 + 30.3545777939999937 + -6.7454617319999990 + -2.9979829919999998 + 8.9939489759999987 + -6.7454617319999990 + 1.4989914959999999 + -3.9973106559999998 + 11.9919319679999994 + -8.9939489759999987 + 1.9986553279999999 + 11.9919319679999994 + -35.9757959039999946 + 26.9818469279999960 + -5.9959659839999997 + -8.9939489759999987 + 26.9818469279999960 + -20.2363851959999970 + 4.4969744879999993 + 1.9986553279999999 + -5.9959659839999997 + 4.4969744879999993 + -0.9993276639999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -4.4969744879999993 + 2.9979829919999998 + 0.0000000000000000 + 0.0000000000000000 + 2.9979829919999998 + -1.9986553279999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.4909234639999980 + -8.9939489759999987 + 0.0000000000000000 + 0.0000000000000000 + -8.9939489759999987 + 5.9959659839999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -10.1181925979999985 + 6.7454617319999990 + 0.0000000000000000 + 0.0000000000000000 + 6.7454617319999990 + -4.4969744879999993 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 2.2484872439999997 + -1.4989914959999999 + 0.0000000000000000 + 0.0000000000000000 + -1.4989914959999999 + 0.9993276639999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.9959659839999997 + -17.9878979519999973 + 13.4909234639999980 + -2.9979829919999998 + -3.9973106559999998 + 11.9919319679999994 + -8.9939489759999987 + 1.9986553279999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -17.9878979519999973 + 53.9636938559999919 + -40.4727703919999939 + 8.9939489759999987 + 11.9919319679999994 + -35.9757959039999946 + 26.9818469279999960 + -5.9959659839999997 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 13.4909234639999980 + -40.4727703919999939 + 30.3545777939999937 + -6.7454617319999990 + -8.9939489759999987 + 26.9818469279999960 + -20.2363851959999970 + 4.4969744879999993 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + -2.9979829919999998 + 8.9939489759999987 + -6.7454617319999990 + 1.4989914959999999 + 1.9986553279999999 + -5.9959659839999997 + 4.4969744879999993 + -0.9993276639999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 5.9959659839999997 + -3.9973106559999998 + 0.0000000000000000 + 0.0000000000000000 + -17.9878979519999973 + 11.9919319679999994 + 0.0000000000000000 + 0.0000000000000000 + 13.4909234639999980 + -8.9939489759999987 + 0.0000000000000000 + 0.0000000000000000 + -2.9979829919999998 + 1.9986553279999999 + 0.0000000000000000 + 0.0000000000000000 + -17.9878979519999973 + 11.9919319679999994 + 0.0000000000000000 + 0.0000000000000000 + 53.9636938559999919 + -35.9757959039999946 + 0.0000000000000000 + 0.0000000000000000 + -40.4727703919999939 + 26.9818469279999960 + 0.0000000000000000 + 0.0000000000000000 + 8.9939489759999987 + -5.9959659839999997 + 0.0000000000000000 + 0.0000000000000000 + 13.4909234639999980 + -8.9939489759999987 + 0.0000000000000000 + 0.0000000000000000 + -40.4727703919999939 + 26.9818469279999960 + 0.0000000000000000 + 0.0000000000000000 + 30.3545777939999937 + -20.2363851959999970 + 0.0000000000000000 + 0.0000000000000000 + -6.7454617319999990 + 4.4969744879999993 + 0.0000000000000000 + 0.0000000000000000 + -2.9979829919999998 + 1.9986553279999999 + 0.0000000000000000 + 0.0000000000000000 + 8.9939489759999987 + -5.9959659839999997 + 0.0000000000000000 + 0.0000000000000000 + -6.7454617319999990 + 4.4969744879999993 + 0.0000000000000000 + 0.0000000000000000 + 1.4989914959999999 + -0.9993276639999999 + -7.9946213120000005 + 23.9838639359999988 + -17.9878979519999973 + 3.9973106559999998 + 23.9838639359999988 + -71.9515918079999892 + 53.9636938559999919 + -11.9919319679999994 + -17.9878979519999973 + 53.9636938559999919 + -40.4727703919999939 + 8.9939489759999987 + 3.9973106559999998 + -11.9919319679999994 + 8.9939489759999987 + -1.9986553279999999 + 23.9838639359999988 + -71.9515918079999892 + 53.9636938559999919 + -11.9919319679999994 + -71.9515918079999892 + 215.8547754239999108 + -161.8910815680000042 + 35.9757959039999946 + 53.9636938559999919 + -161.8910815679999473 + 121.4183111759999605 + -26.9818469279999960 + -11.9919319679999994 + 35.9757959039999946 + -26.9818469279999960 + 5.9959659839999997 + -17.9878979519999973 + 53.9636938559999919 + -40.4727703919999939 + 8.9939489759999987 + 53.9636938559999919 + -161.8910815679999473 + 121.4183111759999889 + -26.9818469279999960 + -40.4727703919999939 + 121.4183111759999747 + -91.0637333819999810 + 20.2363851959999970 + 8.9939489759999987 + -26.9818469279999960 + 20.2363851959999970 + -4.4969744879999993 + 3.9973106559999998 + -11.9919319679999994 + 8.9939489759999987 + -1.9986553279999999 + -11.9919319679999994 + 35.9757959039999946 + -26.9818469279999960 + 5.9959659839999997 + 8.9939489759999987 + -26.9818469279999960 + 20.2363851959999970 + -4.4969744879999993 + -1.9986553279999999 + 5.9959659839999997 + -4.4969744879999993 + 0.9993276639999999 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + 0.0000000000000000 + +# Tij + +6 +0.0 +4.0 +0.0 +4.0 +0.0 +9.0 + + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -2.6355000000 + 1.7570000000 + 0.0000000000 + 0.0000000000 + 6.3252000000 + -4.2168000000 + 0.0000000000 + 0.0000000000 + -4.7439000000 + 3.1626000000 + 0.0000000000 + 0.0000000000 + 1.0542000000 + -0.7028000000 + 0.0000000000 + 0.0000000000 + 6.3252000000 + -4.2168000000 + 0.0000000000 + 0.0000000000 + -15.1804800000 + 10.1203200000 + 0.0000000000 + 0.0000000000 + 11.3853600000 + -7.5902400000 + 0.0000000000 + 0.0000000000 + -2.5300800000 + 1.6867200000 + 0.0000000000 + 0.0000000000 + -4.7439000000 + 3.1626000000 + 0.0000000000 + 0.0000000000 + 11.3853600000 + -7.5902400000 + 0.0000000000 + 0.0000000000 + -8.5390200000 + 5.6926800000 + 0.0000000000 + 0.0000000000 + 1.8975600000 + -1.2650400000 + 0.0000000000 + 0.0000000000 + 1.0542000000 + -0.7028000000 + 0.0000000000 + 0.0000000000 + -2.5300800000 + 1.6867200000 + 0.0000000000 + 0.0000000000 + 1.8975600000 + -1.2650400000 + 0.0000000000 + 0.0000000000 + -0.4216800000 + 0.2811200000 + 3.0080000000 + -9.3276000000 + 6.9957000000 + -1.5546000000 + -7.2192000000 + 22.3862400000 + -16.7896800000 + 3.7310400000 + 5.4144000000 + -16.7896800000 + 12.5922600000 + -2.7982800000 + -1.2032000000 + 3.7310400000 + -2.7982800000 + 0.6218400000 + -7.2192000000 + 22.3862400000 + -16.7896800000 + 3.7310400000 + 17.3260800000 + -53.7269760000 + 40.2952320000 + -8.9544960000 + -12.9945600000 + 40.2952320000 + -30.2214240000 + 6.7158720000 + 2.8876800000 + -8.9544960000 + 6.7158720000 + -1.4924160000 + 5.4144000000 + -16.7896800000 + 12.5922600000 + -2.7982800000 + -12.9945600000 + 40.2952320000 + -30.2214240000 + 6.7158720000 + 9.7459200000 + -30.2214240000 + 22.6660680000 + -5.0369040000 + -2.1657600000 + 6.7158720000 + -5.0369040000 + 1.1193120000 + -1.2032000000 + 3.7310400000 + -2.7982800000 + 0.6218400000 + 2.8876800000 + -8.9544960000 + 6.7158720000 + -1.4924160000 + -2.1657600000 + 6.7158720000 + -5.0369040000 + 1.1193120000 + 0.4812800000 + -1.4924160000 + 1.1193120000 + -0.2487360000 + -0.1012000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.5829120000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.3278880000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1012000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.5829120000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.3278880000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1012000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.5829120000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.3278880000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1012000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.5829120000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.3278880000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1012000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.5829120000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.3278880000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1012000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.5829120000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.3278880000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1012000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2428800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.5829120000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1821600000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.4371840000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.3278880000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 14.2317000000 + -9.4878000000 + 0.0000000000 + 0.0000000000 + -18.9756000000 + 12.6504000000 + 0.0000000000 + 0.0000000000 + 7.9065000000 + -5.2710000000 + 0.0000000000 + 0.0000000000 + -1.0542000000 + 0.7028000000 + 0.0000000000 + 0.0000000000 + -34.1560800000 + 22.7707200000 + 0.0000000000 + 0.0000000000 + 45.5414400000 + -30.3609600000 + 0.0000000000 + 0.0000000000 + -18.9756000000 + 12.6504000000 + 0.0000000000 + 0.0000000000 + 2.5300800000 + -1.6867200000 + 0.0000000000 + 0.0000000000 + 25.6170600000 + -17.0780400000 + 0.0000000000 + 0.0000000000 + -34.1560800000 + 22.7707200000 + 0.0000000000 + 0.0000000000 + 14.2317000000 + -9.4878000000 + 0.0000000000 + 0.0000000000 + -1.8975600000 + 1.2650400000 + 0.0000000000 + 0.0000000000 + -5.6926800000 + 3.7951200000 + 0.0000000000 + 0.0000000000 + 7.5902400000 + -5.0601600000 + 0.0000000000 + 0.0000000000 + -3.1626000000 + 2.1084000000 + 0.0000000000 + 0.0000000000 + 0.4216800000 + -0.2811200000 + -16.2432000000 + 50.3690400000 + -37.7767800000 + 8.3948400000 + 21.6576000000 + -67.1587200000 + 50.3690400000 + -11.1931200000 + -9.0240000000 + 27.9828000000 + -20.9871000000 + 4.6638000000 + 1.2032000000 + -3.7310400000 + 2.7982800000 + -0.6218400000 + 38.9836800000 + -120.8856960000 + 90.6642720000 + -20.1476160000 + -51.9782400000 + 161.1809280000 + -120.8856960000 + 26.8634880000 + 21.6576000000 + -67.1587200000 + 50.3690400000 + -11.1931200000 + -2.8876800000 + 8.9544960000 + -6.7158720000 + 1.4924160000 + -29.2377600000 + 90.6642720000 + -67.9982040000 + 15.1107120000 + 38.9836800000 + -120.8856960000 + 90.6642720000 + -20.1476160000 + -16.2432000000 + 50.3690400000 + -37.7767800000 + 8.3948400000 + 2.1657600000 + -6.7158720000 + 5.0369040000 + -1.1193120000 + 6.4972800000 + -20.1476160000 + 15.1107120000 + -3.3579360000 + -8.6630400000 + 26.8634880000 + -20.1476160000 + 4.4772480000 + 3.6096000000 + -11.1931200000 + 8.3948400000 + -1.8655200000 + -0.4812800000 + 1.4924160000 + -1.1193120000 + 0.2487360000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 14.2317000000 + -9.4878000000 + 0.0000000000 + 0.0000000000 + -34.1560800000 + 22.7707200000 + 0.0000000000 + 0.0000000000 + 25.6170600000 + -17.0780400000 + 0.0000000000 + 0.0000000000 + -5.6926800000 + 3.7951200000 + 0.0000000000 + 0.0000000000 + -18.9756000000 + 12.6504000000 + 0.0000000000 + 0.0000000000 + 45.5414400000 + -30.3609600000 + 0.0000000000 + 0.0000000000 + -34.1560800000 + 22.7707200000 + 0.0000000000 + 0.0000000000 + 7.5902400000 + -5.0601600000 + 0.0000000000 + 0.0000000000 + 7.9065000000 + -5.2710000000 + 0.0000000000 + 0.0000000000 + -18.9756000000 + 12.6504000000 + 0.0000000000 + 0.0000000000 + 14.2317000000 + -9.4878000000 + 0.0000000000 + 0.0000000000 + -3.1626000000 + 2.1084000000 + 0.0000000000 + 0.0000000000 + -1.0542000000 + 0.7028000000 + 0.0000000000 + 0.0000000000 + 2.5300800000 + -1.6867200000 + 0.0000000000 + 0.0000000000 + -1.8975600000 + 1.2650400000 + 0.0000000000 + 0.0000000000 + 0.4216800000 + -0.2811200000 + -16.2432000000 + 50.3690400000 + -37.7767800000 + 8.3948400000 + 38.9836800000 + -120.8856960000 + 90.6642720000 + -20.1476160000 + -29.2377600000 + 90.6642720000 + -67.9982040000 + 15.1107120000 + 6.4972800000 + -20.1476160000 + 15.1107120000 + -3.3579360000 + 21.6576000000 + -67.1587200000 + 50.3690400000 + -11.1931200000 + -51.9782400000 + 161.1809280000 + -120.8856960000 + 26.8634880000 + 38.9836800000 + -120.8856960000 + 90.6642720000 + -20.1476160000 + -8.6630400000 + 26.8634880000 + -20.1476160000 + 4.4772480000 + -9.0240000000 + 27.9828000000 + -20.9871000000 + 4.6638000000 + 21.6576000000 + -67.1587200000 + 50.3690400000 + -11.1931200000 + -16.2432000000 + 50.3690400000 + -37.7767800000 + 8.3948400000 + 3.6096000000 + -11.1931200000 + 8.3948400000 + -1.8655200000 + 1.2032000000 + -3.7310400000 + 2.7982800000 + -0.6218400000 + -2.8876800000 + 8.9544960000 + -6.7158720000 + 1.4924160000 + 2.1657600000 + -6.7158720000 + 5.0369040000 + -1.1193120000 + -0.4812800000 + 1.4924160000 + -1.1193120000 + 0.2487360000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.9836640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 1.7487360000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.3115520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.3036000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.7286400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.5464800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0404800000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0971520000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0728640000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -76.8511800000 + 51.2341200000 + 0.0000000000 + 0.0000000000 + 102.4682400000 + -68.3121600000 + 0.0000000000 + 0.0000000000 + -42.6951000000 + 28.4634000000 + 0.0000000000 + 0.0000000000 + 5.6926800000 + -3.7951200000 + 0.0000000000 + 0.0000000000 + 102.4682400000 + -68.3121600000 + 0.0000000000 + 0.0000000000 + -136.6243200000 + 91.0828800000 + 0.0000000000 + 0.0000000000 + 56.9268000000 + -37.9512000000 + 0.0000000000 + 0.0000000000 + -7.5902400000 + 5.0601600000 + 0.0000000000 + 0.0000000000 + -42.6951000000 + 28.4634000000 + 0.0000000000 + 0.0000000000 + 56.9268000000 + -37.9512000000 + 0.0000000000 + 0.0000000000 + -23.7195000000 + 15.8130000000 + 0.0000000000 + 0.0000000000 + 3.1626000000 + -2.1084000000 + 0.0000000000 + 0.0000000000 + 5.6926800000 + -3.7951200000 + 0.0000000000 + 0.0000000000 + -7.5902400000 + 5.0601600000 + 0.0000000000 + 0.0000000000 + 3.1626000000 + -2.1084000000 + 0.0000000000 + 0.0000000000 + -0.4216800000 + 0.2811200000 + 87.7132800000 + -271.9928159999 + 203.9946120000 + -45.3321360000 + -116.9510400000 + 362.6570879999 + -271.9928159999 + 60.4428480000 + 48.7296000000 + -151.1071200000 + 113.3303400000 + -25.1845200000 + -6.4972800000 + 20.1476160000 + -15.1107120000 + 3.3579360000 + -116.9510400000 + 362.6570880000 + -271.9928160000 + 60.4428480000 + 155.9347200000 + -483.5427840000 + 362.6570880000 + -80.5904640000 + -64.9728000000 + 201.4761600000 + -151.1071200000 + 33.5793600000 + 8.6630400000 + -26.8634880000 + 20.1476160000 + -4.4772480000 + 48.7296000000 + -151.1071200000 + 113.3303400000 + -25.1845200000 + -64.9728000000 + 201.4761600000 + -151.1071200000 + 33.5793600000 + 27.0720000000 + -83.9484000000 + 62.9613000000 + -13.9914000000 + -3.6096000000 + 11.1931200000 + -8.3948400000 + 1.8655200000 + -6.4972800000 + 20.1476160000 + -15.1107120000 + 3.3579360000 + 8.6630400000 + -26.8634880000 + 20.1476160000 + -4.4772480000 + -3.6096000000 + 11.1931200000 + -8.3948400000 + 1.8655200000 + 0.4812800000 + -1.4924160000 + 1.1193120000 + -0.2487360000 + -2.9509920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -5.2462080000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.9108000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -2.9509920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -5.2462080000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.9108000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -2.9509920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -5.2462080000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.9108000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -2.9509920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -5.2462080000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.9108000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -2.9509920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -5.2462080000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.9108000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -2.9509920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -5.2462080000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.9108000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -2.9509920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 3.9346560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -5.2462080000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -1.6394400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 2.1859200000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.9108000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.2185920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.2914560000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.1214400000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + -0.0161920000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 + 0.0000000000 diff --git a/examples/USER/misc/drip/README.txt b/examples/USER/misc/drip/README.txt new file mode 100644 index 0000000000..26a8e3dd00 --- /dev/null +++ b/examples/USER/misc/drip/README.txt @@ -0,0 +1,6 @@ +in.C_drip: + Use DRIP and REBO to relax a bilayer graphene. + +in.CH_drip: + Use DRIP and REBO to relax a bilayer graphene with additional hydrogen atoms + on top of it. diff --git a/examples/USER/misc/drip/data.C b/examples/USER/misc/drip/data.C new file mode 100644 index 0000000000..18ff6af645 --- /dev/null +++ b/examples/USER/misc/drip/data.C @@ -0,0 +1,416 @@ +LAMMPS data file + +400 atoms +1 atom types + +0.0 2.465000000000000e+01 xlo xhi +0.0 2.134752620328641e+01 ylo yhi +0.0 3.000000000000000e+01 zlo zhi +1.232500000000000e+01 0.000000000000000e+00 0.000000000000000e+00 xy xz yz + +Masses + +1 12.011 + +Atoms # molecular + +1 1 1 0.000000000000000e+00 0.000000000000000e+00 1.498097531971289e+01 +2 1 1 9.859999999999999e+00 1.707802096262913e+01 1.489139792549795e+01 +3 1 1 2.588250000000000e+01 6.404257860985923e+00 1.495586615731768e+01 +4 1 1 2.711500000000000e+01 7.115842067762138e+00 1.501795235919980e+01 +5 1 1 4.930000000000000e+00 8.539010481314564e+00 1.492827527515956e+01 +6 1 1 6.162499999999999e+00 9.250594688090777e+00 1.500678649580791e+01 +7 1 1 3.204499999999999e+01 1.565485254907670e+01 1.511662064028576e+01 +8 1 1 3.081250000000000e+01 1.494326834230049e+01 1.505500683988625e+01 +9 1 1 7.395000000000000e+00 8.539010481314564e+00 1.504923694256975e+01 +10 1 1 8.627500000000000e+00 9.250594688090777e+00 1.503332570633445e+01 +11 1 1 9.859999999999999e+00 8.539010481314564e+00 1.508137430939768e+01 +12 1 1 1.109250000000000e+01 9.250594688090777e+00 1.510475862694483e+01 +13 1 1 1.109250000000000e+01 1.778960516940534e+01 1.494613902888088e+01 +14 1 1 2.958000000000000e+01 1.565485254907670e+01 1.516279958068751e+01 +15 1 1 1.232500000000000e+01 8.539010481314564e+00 1.511276583208523e+01 +16 1 1 1.355750000000000e+01 9.250594688090777e+00 1.495632206546155e+01 +17 1 1 1.479000000000000e+01 8.539010481314564e+00 1.498291715828213e+01 +18 1 1 1.602250000000000e+01 9.250594688090777e+00 1.509801558902469e+01 +19 1 1 2.711499999999999e+01 1.565485254907670e+01 1.500089766276763e+01 +20 1 1 2.588250000000000e+01 1.494326834230049e+01 1.505114888970355e+01 +21 1 1 1.725500000000000e+01 8.539010481314564e+00 1.504495103103041e+01 +22 1 1 1.848750000000000e+01 9.250594688090777e+00 1.513527732850389e+01 +23 1 1 1.972000000000000e+01 8.539010481314564e+00 1.502400693288890e+01 +24 1 1 2.095250000000000e+01 9.250594688090777e+00 1.490419939433632e+01 +25 1 1 2.465000000000000e+01 1.565485254907670e+01 1.492998117758711e+01 +26 1 1 2.834750000000000e+01 1.494326834230049e+01 1.496091474579883e+01 +27 1 1 2.465000000000000e+01 7.115842067762138e+00 1.497394355694102e+01 +28 1 1 2.341750000000000e+01 6.404257860985923e+00 1.500235588455933e+01 +29 1 1 2.218500000000000e+01 7.115842067762138e+00 1.503766448268803e+01 +30 1 1 2.465000000000000e+01 4.269505240657282e+00 1.488340764495658e+01 +31 1 1 2.588250000000000e+01 4.981089447433495e+00 1.490587231994899e+01 +32 1 1 3.697500000000000e+00 6.404257860985923e+00 1.500462204163887e+01 +33 1 1 4.930000000000000e+00 7.115842067762138e+00 1.507823175629797e+01 +34 1 1 2.095250000000000e+01 1.778960516940534e+01 1.485635836857104e+01 +35 1 1 1.972000000000000e+01 1.707802096262913e+01 1.508733405608850e+01 +36 1 1 6.162500000000000e+00 6.404257860985923e+00 1.495657175139946e+01 +37 1 1 7.395000000000000e+00 7.115842067762138e+00 1.505630699893542e+01 +38 1 1 8.627500000000000e+00 6.404257860985923e+00 1.493710859708546e+01 +39 1 1 9.859999999999999e+00 7.115842067762138e+00 1.498031036104573e+01 +40 1 1 1.848750000000000e+01 1.778960516940534e+01 1.492663969598082e+01 +41 1 1 1.725500000000000e+01 1.707802096262913e+01 1.487928391741343e+01 +42 1 1 2.218500000000000e+01 1.280851572197185e+01 1.493339893560164e+01 +43 1 1 1.232500000000000e+01 7.115842067762138e+00 1.507943978677017e+01 +44 1 1 1.355750000000000e+01 6.404257860985923e+00 1.484914917113341e+01 +45 1 1 1.479000000000000e+01 7.115842067762138e+00 1.516663648122805e+01 +46 1 1 1.602250000000000e+01 1.778960516940534e+01 1.494170266401908e+01 +47 1 1 1.479000000000000e+01 1.707802096262913e+01 1.489834582180523e+01 +48 1 1 1.602250000000000e+01 6.404257860985923e+00 1.502658138746657e+01 +49 1 1 1.725500000000000e+01 7.115842067762138e+00 1.498697322036154e+01 +50 1 1 1.848750000000000e+01 6.404257860985923e+00 1.504573856434245e+01 +51 1 1 1.972000000000000e+01 7.115842067762138e+00 1.498510668772038e+01 +52 1 1 1.355750000000000e+01 1.778960516940534e+01 1.503160986637731e+01 +53 1 1 1.232500000000000e+01 1.707802096262913e+01 1.482446479934924e+01 +54 1 1 2.095250000000000e+01 6.404257860985923e+00 1.510811524523195e+01 +55 1 1 2.341750000000000e+01 1.494326834230049e+01 1.505440697642049e+01 +56 1 1 2.218500000000000e+01 1.707802096262913e+01 1.489480063588714e+01 +57 1 1 2.218500000000000e+01 8.539010481314564e+00 1.495045959051609e+01 +58 1 1 2.465000000000000e+01 8.539010481314564e+00 1.512601015985335e+01 +59 1 1 2.588250000000000e+01 1.067376310164321e+01 1.495691790117351e+01 +60 1 1 2.711500000000000e+01 1.138534730841942e+01 1.496195578420333e+01 +61 1 1 9.859999999999999e+00 1.565485254907670e+01 1.488138963237187e+01 +62 1 1 8.627500000000000e+00 1.494326834230049e+01 1.498700505084123e+01 +63 1 1 2.834750000000000e+01 1.067376310164321e+01 1.504459111637339e+01 +64 1 1 2.958000000000000e+01 1.138534730841942e+01 1.495098625433358e+01 +65 1 1 7.395000000000000e+00 1.280851572197185e+01 1.505608046573023e+01 +66 1 1 8.627500000000000e+00 1.352009992874806e+01 1.484199719552881e+01 +67 1 1 3.081250000000000e+01 1.352009992874806e+01 1.483451056838223e+01 +68 1 1 2.958000000000000e+01 1.280851572197185e+01 1.502332948089694e+01 +69 1 1 9.859999999999999e+00 1.280851572197185e+01 1.506286085730730e+01 +70 1 1 2.465000000000000e+01 1.138534730841942e+01 1.506305034228861e+01 +71 1 1 1.109250000000000e+01 1.352009992874806e+01 1.491918072685150e+01 +72 1 1 1.355750000000000e+01 1.352009992874806e+01 1.494644661191470e+01 +73 1 1 2.834750000000000e+01 1.352009992874806e+01 1.496099714517733e+01 +74 1 1 2.711500000000000e+01 1.280851572197185e+01 1.498298656405413e+01 +75 1 1 1.479000000000000e+01 1.280851572197185e+01 1.511808602386498e+01 +76 1 1 1.602250000000000e+01 1.352009992874806e+01 1.509196186449678e+01 +77 1 1 1.725500000000000e+01 1.280851572197185e+01 1.494017769280163e+01 +78 1 1 1.848750000000000e+01 1.352009992874806e+01 1.486540173862453e+01 +79 1 1 2.588250000000000e+01 1.352009992874806e+01 1.502414429870090e+01 +80 1 1 2.465000000000000e+01 1.280851572197185e+01 1.491189258035136e+01 +81 1 1 1.972000000000000e+01 1.280851572197185e+01 1.503451993485524e+01 +82 1 1 2.095250000000000e+01 1.352009992874806e+01 1.503423133885440e+01 +83 1 1 1.232500000000000e+01 1.280851572197185e+01 1.492432047742539e+01 +84 1 1 2.341750000000000e+01 1.067376310164321e+01 1.500488865182437e+01 +85 1 1 1.109250000000000e+01 1.494326834230049e+01 1.509530225402135e+01 +86 1 1 1.232500000000000e+01 1.565485254907670e+01 1.500246060086581e+01 +87 1 1 2.588250000000000e+01 9.250594688090777e+00 1.498734533172262e+01 +88 1 1 2.218500000000000e+01 1.565485254907670e+01 1.504729297899704e+01 +89 1 1 2.095250000000000e+01 1.494326834230049e+01 1.486622917148261e+01 +90 1 1 2.711500000000000e+01 8.539010481314564e+00 1.494373650471835e+01 +91 1 1 2.834750000000000e+01 9.250594688090777e+00 1.488792788684821e+01 +92 1 1 6.162500000000000e+00 1.067376310164321e+01 1.486731884367082e+01 +93 1 1 7.395000000000000e+00 1.138534730841942e+01 1.509646856144050e+01 +94 1 1 1.972000000000000e+01 1.565485254907670e+01 1.488798024124609e+01 +95 1 1 1.848750000000000e+01 1.494326834230049e+01 1.489558509878004e+01 +96 1 1 8.627500000000000e+00 1.067376310164321e+01 1.497336164791434e+01 +97 1 1 9.859999999999999e+00 1.138534730841942e+01 1.496081048392299e+01 +98 1 1 1.109250000000000e+01 1.067376310164321e+01 1.494580009249847e+01 +99 1 1 1.232500000000000e+01 1.138534730841942e+01 1.510396759497348e+01 +100 1 1 1.725500000000000e+01 1.565485254907670e+01 1.499338417222946e+01 +101 1 1 1.602250000000000e+01 1.494326834230049e+01 1.511840116374763e+01 +102 1 1 1.355750000000000e+01 1.067376310164321e+01 1.503281161003896e+01 +103 1 1 1.479000000000000e+01 1.138534730841942e+01 1.499843298302028e+01 +104 1 1 1.602250000000000e+01 1.067376310164321e+01 1.491311607132768e+01 +105 1 1 1.725500000000000e+01 1.138534730841942e+01 1.504030511972019e+01 +106 1 1 1.479000000000000e+01 1.565485254907670e+01 1.486944422096690e+01 +107 1 1 1.355750000000000e+01 1.494326834230049e+01 1.476511580670247e+01 +108 1 1 1.848750000000000e+01 1.067376310164321e+01 1.483733215135541e+01 +109 1 1 1.972000000000000e+01 1.138534730841942e+01 1.483307878319485e+01 +110 1 1 2.095250000000000e+01 1.067376310164321e+01 1.472377202887134e+01 +111 1 1 2.218500000000000e+01 1.138534730841942e+01 1.494032335018560e+01 +112 1 1 2.341750000000000e+01 9.250594688090777e+00 1.511930030385710e+01 +113 1 1 2.341750000000000e+01 1.778960516940534e+01 1.506163255648677e+01 +114 1 1 1.109250000000000e+01 6.404257860985923e+00 1.507183137955260e+01 +115 1 1 2.218500000000000e+01 4.269505240657282e+00 1.492921198534790e+01 +116 1 1 2.341750000000000e+01 7.115842067762137e-01 1.506491820629175e+01 +117 1 1 1.232500000000000e+00 2.134752620328641e+00 1.507012124249483e+01 +118 1 1 2.465000000000000e+00 2.846336827104855e+00 1.503655403336380e+01 +119 1 1 2.218500000000000e+01 1.992435778973398e+01 1.505948767536701e+01 +120 1 1 2.095250000000000e+01 1.921277358295777e+01 1.514330257618634e+01 +121 1 1 3.697500000000000e+00 2.134752620328641e+00 1.502497496406354e+01 +122 1 1 4.930000000000000e+00 2.846336827104855e+00 1.507374298221752e+01 +123 1 1 6.162500000000000e+00 2.134752620328641e+00 1.493733326297393e+01 +124 1 1 7.395000000000000e+00 2.846336827104855e+00 1.487495201368372e+01 +125 1 1 1.972000000000000e+01 1.992435778973398e+01 1.505808760634221e+01 +126 1 1 1.848750000000000e+01 1.921277358295777e+01 1.493872889432326e+01 +127 1 1 2.218500000000000e+01 0.000000000000000e+00 1.501312853963581e+01 +128 1 1 8.627500000000000e+00 2.134752620328641e+00 1.505205628279858e+01 +129 1 1 2.341750000000000e+01 4.981089447433495e+00 1.507571160792217e+01 +130 1 1 1.109250000000000e+01 2.134752620328641e+00 1.489358054803088e+01 +131 1 1 1.232500000000000e+01 2.846336827104855e+00 1.499912561242418e+01 +132 1 1 1.725500000000000e+01 1.992435778973398e+01 1.497577189332382e+01 +133 1 1 1.602250000000000e+01 1.921277358295777e+01 1.499040615876794e+01 +134 1 1 1.355750000000000e+01 2.134752620328641e+00 1.516072772863512e+01 +135 1 1 1.479000000000000e+01 2.846336827104855e+00 1.507211585538748e+01 +136 1 1 1.602250000000000e+01 2.134752620328641e+00 1.504045728176403e+01 +137 1 1 1.725500000000000e+01 2.846336827104855e+00 1.504684394670705e+01 +138 1 1 1.479000000000000e+01 1.992435778973398e+01 1.510384904069957e+01 +139 1 1 1.355750000000000e+01 1.921277358295777e+01 1.511446984282775e+01 +140 1 1 9.859999999999999e+00 2.846336827104855e+00 1.502182693962230e+01 +141 1 1 1.848750000000000e+01 2.134752620328641e+00 1.492115016417242e+01 +142 1 1 2.341750000000000e+01 1.921277358295777e+01 1.511940999724034e+01 +143 1 1 2.095250000000000e+01 7.115842067762137e-01 1.499411067303495e+01 +144 1 1 1.232500000000000e+00 7.115842067762137e-01 1.506494802778743e+01 +145 1 1 3.451000000000000e+01 1.992435778973398e+01 1.504957420337895e+01 +146 1 1 3.327750000000000e+01 1.921277358295777e+01 1.511072511003059e+01 +147 1 1 2.465000000000000e+00 0.000000000000000e+00 1.500837434607164e+01 +148 1 1 3.697500000000000e+00 7.115842067762137e-01 1.499541651074234e+01 +149 1 1 4.930000000000000e+00 0.000000000000000e+00 1.509518604163723e+01 +150 1 1 6.162500000000000e+00 7.115842067762137e-01 1.497074687620619e+01 +151 1 1 3.204500000000000e+01 1.992435778973398e+01 1.500792890976805e+01 +152 1 1 3.081250000000000e+01 1.921277358295777e+01 1.496690270418216e+01 +153 1 1 7.395000000000000e+00 0.000000000000000e+00 1.524069684472765e+01 +154 1 1 8.627500000000000e+00 7.115842067762137e-01 1.491839348334605e+01 +155 1 1 2.465000000000000e+01 1.992435778973398e+01 1.498895095057103e+01 +156 1 1 9.859999999999999e+00 0.000000000000000e+00 1.499465288102860e+01 +157 1 1 2.958000000000000e+01 1.992435778973398e+01 1.495366550654662e+01 +158 1 1 2.834750000000000e+01 1.921277358295777e+01 1.498688543050304e+01 +159 1 1 1.232500000000000e+01 0.000000000000000e+00 1.502461005163719e+01 +160 1 1 1.355750000000000e+01 7.115842067762137e-01 1.488675470180450e+01 +161 1 1 1.479000000000000e+01 0.000000000000000e+00 1.499317346174183e+01 +162 1 1 1.602250000000000e+01 7.115842067762137e-01 1.499167690758548e+01 +163 1 1 2.711499999999999e+01 1.992435778973398e+01 1.501975964337061e+01 +164 1 1 2.588250000000000e+01 1.921277358295777e+01 1.486203378273598e+01 +165 1 1 1.725500000000000e+01 0.000000000000000e+00 1.504809379785000e+01 +166 1 1 1.848750000000000e+01 7.115842067762137e-01 1.491114701451727e+01 +167 1 1 1.972000000000000e+01 0.000000000000000e+00 1.512011452965299e+01 +168 1 1 1.109250000000000e+01 7.115842067762137e-01 1.487408794621075e+01 +169 1 1 1.972000000000000e+01 2.846336827104855e+00 1.507831721537003e+01 +170 1 1 2.341750000000000e+01 1.352009992874806e+01 1.495718486297744e+01 +171 1 1 2.958000000000000e+01 1.707802096262913e+01 1.493147208418856e+01 +172 1 1 1.848750000000000e+01 4.981089447433495e+00 1.494913539471411e+01 +173 1 1 3.697500000000000e+00 4.981089447433495e+00 1.478998858443710e+01 +174 1 1 3.327750000000000e+01 1.778960516940534e+01 1.495502006800012e+01 +175 1 1 3.204500000000000e+01 1.707802096262913e+01 1.495051064694342e+01 +176 1 1 4.930000000000000e+00 4.269505240657282e+00 1.498350377115313e+01 +177 1 1 6.162500000000000e+00 4.981089447433495e+00 1.494667393795457e+01 +178 1 1 7.395000000000000e+00 4.269505240657282e+00 1.507985366541724e+01 +179 1 1 2.588250000000000e+01 1.778960516940534e+01 1.494716376988664e+01 +180 1 1 8.627500000000000e+00 4.981089447433495e+00 1.499320258596098e+01 +181 1 1 1.602250000000000e+01 4.981089447433495e+00 1.500127272897711e+01 +182 1 1 1.479000000000000e+01 4.269505240657282e+00 1.493241109430999e+01 +183 1 1 2.711500000000000e+01 1.707802096262913e+01 1.513215736063149e+01 +184 1 1 2.834750000000000e+01 1.778960516940534e+01 1.491995000096713e+01 +185 1 1 9.859999999999999e+00 4.269505240657282e+00 1.523967414046218e+01 +186 1 1 1.109250000000000e+01 4.981089447433495e+00 1.507658824600498e+01 +187 1 1 1.355750000000000e+01 4.981089447433495e+00 1.498019661433922e+01 +188 1 1 3.081250000000000e+01 1.778960516940534e+01 1.488921763404584e+01 +189 1 1 2.465000000000000e+01 1.707802096262913e+01 1.491522695293121e+01 +190 1 1 1.725500000000000e+01 4.269505240657282e+00 1.484531224085001e+01 +191 1 1 1.972000000000000e+01 4.269505240657282e+00 1.512087841047699e+01 +192 1 1 2.095250000000000e+01 2.134752620328641e+00 1.501366356379743e+01 +193 1 1 2.218500000000000e+01 2.846336827104855e+00 1.512768073569268e+01 +194 1 1 1.232500000000000e+01 1.992435778973398e+01 1.479694154125662e+01 +195 1 1 1.109250000000000e+01 1.921277358295777e+01 1.508375643482666e+01 +196 1 1 2.095250000000000e+01 4.981089447433495e+00 1.502213574954626e+01 +197 1 1 2.465000000000000e+00 4.269505240657282e+00 1.501785776522257e+01 +198 1 1 2.341750000000000e+01 2.134752620328641e+00 1.477223550033331e+01 +199 1 1 1.232500000000000e+01 4.269505240657282e+00 1.509476826791352e+01 +200 1 1 2.465000000000000e+01 2.846336827104855e+00 1.506451005381648e+01 +201 2 1 2.958000000000000e+01 1.423168413552428e+01 1.846233090874204e+01 +202 2 1 1.725500000000000e+01 1.850118937618155e+01 1.830892906667390e+01 +203 2 1 3.204500000000000e+01 1.992435778973398e+01 1.840011296435520e+01 +204 2 1 1.109250000000000e+01 1.636643675585292e+01 1.815423076555236e+01 +205 2 1 9.859999999999999e+00 1.565485254907670e+01 1.857780537003584e+01 +206 2 1 2.341750000000000e+01 1.352009992874806e+01 1.824080722484135e+01 +207 2 1 2.465000000000000e+01 1.423168413552428e+01 1.836017802635158e+01 +208 2 1 2.341750000000000e+01 1.778960516940534e+01 1.828410032494974e+01 +209 2 1 2.711499999999999e+01 1.992435778973398e+01 1.844731239573154e+01 +210 2 1 2.834750000000000e+01 2.063594199651019e+01 1.828146439901283e+01 +211 2 1 2.465000000000000e+01 1.850118937618155e+01 1.836242662973500e+01 +212 2 1 2.711500000000000e+01 1.423168413552428e+01 1.836150573422813e+01 +213 2 1 2.588250000000000e+01 1.352009992874806e+01 1.830533607491024e+01 +214 2 1 3.204499999999999e+01 1.423168413552428e+01 1.852693962525193e+01 +215 2 1 3.327750000000000e+01 2.063594199651019e+01 1.845057006323066e+01 +216 2 1 2.218500000000000e+01 1.850118937618155e+01 1.834530693106420e+01 +217 2 1 2.095250000000000e+01 1.778960516940534e+01 1.817360355124612e+01 +218 2 1 2.711500000000000e+01 1.850118937618155e+01 1.845768039438554e+01 +219 2 1 1.848750000000000e+01 1.778960516940534e+01 1.822837106768257e+01 +220 2 1 1.972000000000000e+01 1.850118937618155e+01 1.834146516606220e+01 +221 2 1 1.602250000000000e+01 1.778960516940534e+01 1.837935563986790e+01 +222 2 1 2.958000000000000e+01 1.992435778973398e+01 1.860134630351601e+01 +223 2 1 3.081250000000000e+01 2.063594199651019e+01 1.829143841375619e+01 +224 2 1 2.588250000000000e+01 1.778960516940534e+01 1.828834782396325e+01 +225 2 1 2.834750000000000e+01 1.352009992874806e+01 1.856412094918868e+01 +226 2 1 3.081250000000000e+01 1.352009992874806e+01 1.853801808786659e+01 +227 2 1 1.355750000000000e+01 2.063594199651019e+01 1.848883167175910e+01 +228 2 1 2.588250000000000e+01 2.063594199651019e+01 1.830177176844362e+01 +229 2 1 1.109250000000000e+01 1.778960516940534e+01 1.835319724200392e+01 +230 2 1 1.848750000000000e+01 2.063594199651019e+01 1.847119667517633e+01 +231 2 1 2.218500000000000e+01 1.565485254907670e+01 1.860318710827055e+01 +232 2 1 2.341750000000000e+01 1.636643675585292e+01 1.837094744555149e+01 +233 2 1 3.327750000000000e+01 1.778960516940534e+01 1.833243244791216e+01 +234 2 1 3.327750000000000e+01 1.636643675585292e+01 1.841374627283294e+01 +235 2 1 3.204499999999999e+01 1.565485254907670e+01 1.831879406900189e+01 +236 2 1 2.095250000000000e+01 1.636643675585292e+01 1.847406800172368e+01 +237 2 1 3.450999999999999e+01 1.850118937618155e+01 1.825509330024598e+01 +238 2 1 2.588250000000000e+01 1.636643675585292e+01 1.858281516013951e+01 +239 2 1 1.602250000000000e+01 2.063594199651019e+01 1.843602760618910e+01 +240 2 1 1.479000000000000e+01 1.992435778973398e+01 1.838252211650205e+01 +241 2 1 2.711499999999999e+01 1.565485254907670e+01 1.853744396051707e+01 +242 2 1 2.834750000000000e+01 1.636643675585292e+01 1.827644925946220e+01 +243 2 1 3.081250000000000e+01 1.636643675585292e+01 1.839489332257254e+01 +244 2 1 2.958000000000000e+01 1.565485254907670e+01 1.835082606731893e+01 +245 2 1 2.465000000000000e+01 1.565485254907670e+01 1.824093445834070e+01 +246 2 1 2.834750000000000e+01 1.778960516940534e+01 1.839125877129669e+01 +247 2 1 1.972000000000000e+01 1.565485254907670e+01 1.850135584349750e+01 +248 2 1 1.972000000000000e+01 1.992435778973398e+01 1.833453778991944e+01 +249 2 1 1.232500000000000e+01 1.565485254907670e+01 1.861569706632533e+01 +250 2 1 1.355750000000000e+01 1.636643675585292e+01 1.838074525366760e+01 +251 2 1 2.465000000000000e+01 1.992435778973398e+01 1.848031566286595e+01 +252 2 1 2.958000000000000e+01 1.850118937618155e+01 1.834558681120988e+01 +253 2 1 1.232500000000000e+01 1.992435778973398e+01 1.837502909143642e+01 +254 2 1 1.479000000000000e+01 1.850118937618155e+01 1.838311174584445e+01 +255 2 1 1.479000000000000e+01 1.565485254907670e+01 1.832442132291042e+01 +256 2 1 1.232500000000000e+01 1.850118937618155e+01 1.828810769113426e+01 +257 2 1 1.602250000000000e+01 1.636643675585292e+01 1.855251516549562e+01 +258 2 1 2.341750000000000e+01 2.063594199651019e+01 1.838894036475336e+01 +259 2 1 2.218500000000000e+01 1.992435778973398e+01 1.846784434616029e+01 +260 2 1 1.725500000000000e+01 1.565485254907670e+01 1.835189752692777e+01 +261 2 1 1.848750000000000e+01 1.636643675585292e+01 1.842967763285558e+01 +262 2 1 3.081250000000000e+01 1.778960516940534e+01 1.844833766662363e+01 +263 2 1 3.204499999999999e+01 1.850118937618155e+01 1.847737939507963e+01 +264 2 1 2.095250000000000e+01 2.063594199651019e+01 1.847095133969059e+01 +265 2 1 1.355750000000000e+01 1.778960516940534e+01 1.828894868367980e+01 +266 2 1 1.725500000000000e+01 1.992435778973398e+01 1.834596243435063e+01 +267 2 1 2.957999999999999e+01 9.962178894866991e+00 1.832354414995078e+01 +268 2 1 2.095250000000000e+01 1.352009992874806e+01 1.831118657380274e+01 +269 2 1 1.972000000000000e+01 2.846336827104855e+00 1.837664127263829e+01 +270 2 1 2.095250000000000e+01 3.557921033881068e+00 1.845927782292901e+01 +271 2 1 2.218500000000000e+01 2.846336827104855e+00 1.847140305919736e+01 +272 2 1 2.341750000000000e+01 3.557921033881068e+00 1.843247974382396e+01 +273 2 1 2.465000000000000e+01 2.846336827104855e+00 1.837823139065125e+01 +274 2 1 2.588250000000000e+01 3.557921033881068e+00 1.832687883090416e+01 +275 2 1 3.697500000000000e+00 4.981089447433495e+00 1.847217701470688e+01 +276 2 1 4.930000000000000e+00 5.692673654209710e+00 1.856242710641034e+01 +277 2 1 6.162500000000000e+00 4.981089447433495e+00 1.843965491743299e+01 +278 2 1 7.395000000000000e+00 5.692673654209710e+00 1.830667264718264e+01 +279 2 1 8.627500000000000e+00 4.981089447433495e+00 1.838064863521239e+01 +280 2 1 9.859999999999999e+00 5.692673654209710e+00 1.861740907316864e+01 +281 2 1 1.109250000000000e+01 4.981089447433495e+00 1.838405249119109e+01 +282 2 1 1.232500000000000e+01 5.692673654209710e+00 1.836039437384349e+01 +283 2 1 1.355750000000000e+01 4.981089447433495e+00 1.831221958504840e+01 +284 2 1 1.479000000000000e+01 5.692673654209710e+00 1.828617147888200e+01 +285 2 1 1.602250000000000e+01 4.981089447433495e+00 1.855140653175703e+01 +286 2 1 1.725500000000000e+01 5.692673654209710e+00 1.841767199745545e+01 +287 2 1 1.848750000000000e+01 4.981089447433495e+00 1.832477807209270e+01 +288 2 1 1.972000000000000e+01 5.692673654209710e+00 1.846923771304869e+01 +289 2 1 2.095250000000000e+01 4.981089447433495e+00 1.836832598911283e+01 +290 2 1 2.218500000000000e+01 5.692673654209710e+00 1.843546423544375e+01 +291 2 1 2.341750000000000e+01 4.981089447433495e+00 1.855277898292336e+01 +292 2 1 2.465000000000000e+01 5.692673654209710e+00 1.847587291495339e+01 +293 2 1 2.588250000000000e+01 4.981089447433495e+00 1.826375194964259e+01 +294 2 1 2.711499999999999e+01 5.692673654209710e+00 1.851411320915631e+01 +295 2 1 4.930000000000000e+00 7.115842067762138e+00 1.840825444435020e+01 +296 2 1 6.162500000000000e+00 7.827426274538350e+00 1.833047038974451e+01 +297 2 1 7.395000000000000e+00 7.115842067762138e+00 1.836426082429110e+01 +298 2 1 1.848750000000000e+01 3.557921033881068e+00 1.837403279549467e+01 +299 2 1 1.725500000000000e+01 2.846336827104855e+00 1.835268380461592e+01 +300 2 1 1.602250000000000e+01 3.557921033881068e+00 1.848952507034905e+01 +301 2 1 1.479000000000000e+01 2.846336827104855e+00 1.851644726747239e+01 +302 2 1 1.232500000000000e+00 7.115842067762137e-01 1.832611230156879e+01 +303 2 1 2.465000000000000e+00 1.423168413552427e+00 1.852709756577955e+01 +304 2 1 3.697500000000000e+00 7.115842067762137e-01 1.827857500530802e+01 +305 2 1 4.929999999999999e+00 1.423168413552427e+00 1.826136806124286e+01 +306 2 1 6.162500000000000e+00 7.115842067762137e-01 1.827242936292011e+01 +307 2 1 7.395000000000000e+00 1.423168413552427e+00 1.844551050904462e+01 +308 2 1 8.627500000000000e+00 7.115842067762137e-01 1.844984225027845e+01 +309 2 1 9.859999999999999e+00 1.423168413552427e+00 1.843114129409313e+01 +310 2 1 1.109250000000000e+01 7.115842067762137e-01 1.824449880776195e+01 +311 2 1 1.232500000000000e+01 1.423168413552427e+00 1.856224612585160e+01 +312 2 1 1.355750000000000e+01 7.115842067762137e-01 1.836481578357231e+01 +313 2 1 1.479000000000000e+01 1.423168413552427e+00 1.843036892933161e+01 +314 2 1 1.602250000000000e+01 7.115842067762137e-01 1.835067728786723e+01 +315 2 1 1.725500000000000e+01 1.423168413552427e+00 1.847697931942738e+01 +316 2 1 8.627499999999998e+00 7.827426274538350e+00 1.840542860269897e+01 +317 2 1 1.848750000000000e+01 7.115842067762137e-01 1.843036272469964e+01 +318 2 1 2.095250000000000e+01 7.115842067762137e-01 1.828037025055374e+01 +319 2 1 2.218500000000000e+01 1.423168413552427e+00 1.847794227938386e+01 +320 2 1 2.341750000000000e+01 7.115842067762137e-01 1.836220929695125e+01 +321 2 1 2.465000000000000e+01 1.423168413552427e+00 1.856129777428492e+01 +322 2 1 2.465000000000000e+00 2.846336827104855e+00 1.828958750195393e+01 +323 2 1 3.697500000000000e+00 3.557921033881068e+00 1.848583325162553e+01 +324 2 1 4.930000000000000e+00 2.846336827104855e+00 1.838401024175294e+01 +325 2 1 6.162499999999999e+00 3.557921033881068e+00 1.837437624437527e+01 +326 2 1 7.395000000000000e+00 2.846336827104855e+00 1.841292915268399e+01 +327 2 1 8.627500000000000e+00 3.557921033881068e+00 1.848557970160289e+01 +328 2 1 9.859999999999999e+00 2.846336827104855e+00 1.842924761810127e+01 +329 2 1 1.109250000000000e+01 3.557921033881068e+00 1.831004365073452e+01 +330 2 1 1.232500000000000e+01 2.846336827104855e+00 1.818033371289823e+01 +331 2 1 1.355750000000000e+01 3.557921033881068e+00 1.844566501118075e+01 +332 2 1 1.972000000000000e+01 1.423168413552427e+00 1.846190975036447e+01 +333 2 1 2.218500000000000e+01 1.423168413552428e+01 1.835322517893207e+01 +334 2 1 9.859999999999999e+00 7.115842067762138e+00 1.839789371642158e+01 +335 2 1 1.232500000000000e+01 7.115842067762138e+00 1.847537444410727e+01 +336 2 1 8.627500000000000e+00 1.209693151519563e+01 1.829199174409380e+01 +337 2 1 9.859999999999999e+00 1.138534730841942e+01 1.829413303647114e+01 +338 2 1 1.109250000000000e+01 1.209693151519563e+01 1.856999584032139e+01 +339 2 1 1.232500000000000e+01 1.138534730841942e+01 1.851349651735582e+01 +340 2 1 1.355750000000000e+01 1.209693151519563e+01 1.831123823696192e+01 +341 2 1 1.479000000000000e+01 1.138534730841942e+01 1.843448433334394e+01 +342 2 1 1.602250000000000e+01 1.209693151519563e+01 1.839428881565063e+01 +343 2 1 1.725500000000000e+01 1.138534730841942e+01 1.849178099784848e+01 +344 2 1 1.848750000000000e+01 1.209693151519563e+01 1.824975358434335e+01 +345 2 1 1.972000000000000e+01 1.138534730841942e+01 1.839694145030204e+01 +346 2 1 2.095250000000000e+01 1.209693151519563e+01 1.829096787226717e+01 +347 2 1 2.218500000000000e+01 1.138534730841942e+01 1.840263887228008e+01 +348 2 1 2.341750000000000e+01 1.209693151519563e+01 1.837666030509410e+01 +349 2 1 2.465000000000000e+01 1.138534730841942e+01 1.835828025909527e+01 +350 2 1 2.588250000000000e+01 1.209693151519563e+01 1.833582168089864e+01 +351 2 1 2.711500000000000e+01 1.138534730841942e+01 1.836353031742933e+01 +352 2 1 2.834750000000000e+01 1.209693151519563e+01 1.845852602484125e+01 +353 2 1 2.958000000000000e+01 1.138534730841942e+01 1.853888136458308e+01 +354 2 1 3.081250000000000e+01 1.209693151519563e+01 1.831036168742244e+01 +355 2 1 8.627500000000000e+00 1.352009992874806e+01 1.835261188649090e+01 +356 2 1 9.859999999999999e+00 1.423168413552428e+01 1.821705864207346e+01 +357 2 1 1.109250000000000e+01 1.352009992874806e+01 1.831524712388831e+01 +358 2 1 1.232500000000000e+01 1.423168413552428e+01 1.852378179475058e+01 +359 2 1 1.355750000000000e+01 1.352009992874806e+01 1.852309441840510e+01 +360 2 1 1.479000000000000e+01 1.423168413552428e+01 1.836621027472939e+01 +361 2 1 1.602250000000000e+01 1.352009992874806e+01 1.849039311610116e+01 +362 2 1 1.725500000000000e+01 1.423168413552428e+01 1.842269825087092e+01 +363 2 1 1.848750000000000e+01 1.352009992874806e+01 1.825468998789840e+01 +364 2 1 1.972000000000000e+01 1.423168413552428e+01 1.849561590548242e+01 +365 2 1 7.395000000000000e+00 1.138534730841942e+01 1.859813014678126e+01 +366 2 1 3.451000000000000e+01 1.992435778973398e+01 1.813501916227946e+01 +367 2 1 2.834750000000000e+01 9.250594688090777e+00 1.847653992697568e+01 +368 2 1 2.711499999999999e+01 9.962178894866991e+00 1.849053529347614e+01 +369 2 1 1.355750000000000e+01 7.827426274538350e+00 1.835096749618396e+01 +370 2 1 1.479000000000000e+01 7.115842067762138e+00 1.844059942495262e+01 +371 2 1 1.602250000000000e+01 7.827426274538350e+00 1.844461353068087e+01 +372 2 1 1.725500000000000e+01 7.115842067762138e+00 1.836290600804645e+01 +373 2 1 1.848750000000000e+01 7.827426274538350e+00 1.825818280452995e+01 +374 2 1 1.972000000000000e+01 7.115842067762138e+00 1.837997086460227e+01 +375 2 1 2.095250000000000e+01 7.827426274538350e+00 1.826491847987811e+01 +376 2 1 2.218500000000000e+01 7.115842067762138e+00 1.841142851923555e+01 +377 2 1 2.341750000000000e+01 7.827426274538350e+00 1.826594520665525e+01 +378 2 1 2.465000000000000e+01 7.115842067762138e+00 1.838708488224049e+01 +379 2 1 2.588250000000000e+01 7.827426274538350e+00 1.830434555380351e+01 +380 2 1 2.711500000000000e+01 7.115842067762138e+00 1.859652575977937e+01 +381 2 1 2.834750000000000e+01 7.827426274538350e+00 1.844094595194482e+01 +382 2 1 6.162499999999999e+00 9.250594688090777e+00 1.856484810097502e+01 +383 2 1 1.109250000000000e+01 7.827426274538350e+00 1.847502232204046e+01 +384 2 1 7.395000000000000e+00 9.962178894866991e+00 1.854741705791729e+01 +385 2 1 9.859999999999999e+00 9.962178894866991e+00 1.837074522628645e+01 +386 2 1 1.109250000000000e+01 9.250594688090777e+00 1.846206781979952e+01 +387 2 1 1.232500000000000e+01 9.962178894866991e+00 1.823251181425658e+01 +388 2 1 1.355750000000000e+01 9.250594688090777e+00 1.834993099844037e+01 +389 2 1 1.479000000000000e+01 9.962178894866991e+00 1.843248036437880e+01 +390 2 1 1.602250000000000e+01 9.250594688090777e+00 1.855142577781635e+01 +391 2 1 1.725500000000000e+01 9.962178894866991e+00 1.847587547064991e+01 +392 2 1 1.848750000000000e+01 9.250594688090777e+00 1.850249139638135e+01 +393 2 1 1.972000000000000e+01 9.962178894866991e+00 1.841266132895000e+01 +394 2 1 2.095250000000000e+01 9.250594688090777e+00 1.837466808881276e+01 +395 2 1 2.218500000000000e+01 9.962178894866991e+00 1.834587370280250e+01 +396 2 1 2.341750000000000e+01 9.250594688090777e+00 1.846590574952954e+01 +397 2 1 2.465000000000000e+01 9.962178894866991e+00 1.835650105398410e+01 +398 2 1 2.588250000000000e+01 9.250594688090777e+00 1.838143174570202e+01 +399 2 1 8.627500000000000e+00 9.250594688090777e+00 1.843904853716322e+01 +400 2 1 3.574249999999999e+01 2.063594199651019e+01 1.839864514570517e+01 diff --git a/examples/USER/misc/drip/data.CH b/examples/USER/misc/drip/data.CH new file mode 100644 index 0000000000..17e9f4e18f --- /dev/null +++ b/examples/USER/misc/drip/data.CH @@ -0,0 +1,562 @@ +LAMMPS data file + +545 atoms +2 atom types + +0.0 2.465000000000000e+01 xlo xhi +0.0 2.134752620328641e+01 ylo yhi +0.0 3.000000000000000e+01 zlo zhi +1.232500000000000e+01 0.000000000000000e+00 0.000000000000000e+00 xy xz yz + +Masses + +1 12.011 +2 1.0 + +Atoms # molecular + +1 1 1 0.000000000000000e+00 0.000000000000000e+00 1.498097531971289e+01 +2 1 1 9.859999999999999e+00 1.707802096262913e+01 1.489139792549795e+01 +3 1 1 2.588250000000000e+01 6.404257860985923e+00 1.495586615731768e+01 +4 1 1 2.711500000000000e+01 7.115842067762138e+00 1.501795235919980e+01 +5 1 1 4.930000000000000e+00 8.539010481314564e+00 1.492827527515956e+01 +6 1 1 6.162499999999999e+00 9.250594688090777e+00 1.500678649580791e+01 +7 1 1 3.204499999999999e+01 1.565485254907670e+01 1.511662064028576e+01 +8 1 1 3.081250000000000e+01 1.494326834230049e+01 1.505500683988625e+01 +9 1 1 7.395000000000000e+00 8.539010481314564e+00 1.504923694256975e+01 +10 1 1 8.627500000000000e+00 9.250594688090777e+00 1.503332570633445e+01 +11 1 1 9.859999999999999e+00 8.539010481314564e+00 1.508137430939768e+01 +12 1 1 1.109250000000000e+01 9.250594688090777e+00 1.510475862694483e+01 +13 1 1 1.109250000000000e+01 1.778960516940534e+01 1.494613902888088e+01 +14 1 1 2.958000000000000e+01 1.565485254907670e+01 1.516279958068751e+01 +15 1 1 1.232500000000000e+01 8.539010481314564e+00 1.511276583208523e+01 +16 1 1 1.355750000000000e+01 9.250594688090777e+00 1.495632206546155e+01 +17 1 1 1.479000000000000e+01 8.539010481314564e+00 1.498291715828213e+01 +18 1 1 1.602250000000000e+01 9.250594688090777e+00 1.509801558902469e+01 +19 1 1 2.711499999999999e+01 1.565485254907670e+01 1.500089766276763e+01 +20 1 1 2.588250000000000e+01 1.494326834230049e+01 1.505114888970355e+01 +21 1 1 1.725500000000000e+01 8.539010481314564e+00 1.504495103103041e+01 +22 1 1 1.848750000000000e+01 9.250594688090777e+00 1.513527732850389e+01 +23 1 1 1.972000000000000e+01 8.539010481314564e+00 1.502400693288890e+01 +24 1 1 2.095250000000000e+01 9.250594688090777e+00 1.490419939433632e+01 +25 1 1 2.465000000000000e+01 1.565485254907670e+01 1.492998117758711e+01 +26 1 1 2.834750000000000e+01 1.494326834230049e+01 1.496091474579883e+01 +27 1 1 2.465000000000000e+01 7.115842067762138e+00 1.497394355694102e+01 +28 1 1 2.341750000000000e+01 6.404257860985923e+00 1.500235588455933e+01 +29 1 1 2.218500000000000e+01 7.115842067762138e+00 1.503766448268803e+01 +30 1 1 2.465000000000000e+01 4.269505240657282e+00 1.488340764495658e+01 +31 1 1 2.588250000000000e+01 4.981089447433495e+00 1.490587231994899e+01 +32 1 1 3.697500000000000e+00 6.404257860985923e+00 1.500462204163887e+01 +33 1 1 4.930000000000000e+00 7.115842067762138e+00 1.507823175629797e+01 +34 1 1 2.095250000000000e+01 1.778960516940534e+01 1.485635836857104e+01 +35 1 1 1.972000000000000e+01 1.707802096262913e+01 1.508733405608850e+01 +36 1 1 6.162500000000000e+00 6.404257860985923e+00 1.495657175139946e+01 +37 1 1 7.395000000000000e+00 7.115842067762138e+00 1.505630699893542e+01 +38 1 1 8.627500000000000e+00 6.404257860985923e+00 1.493710859708546e+01 +39 1 1 9.859999999999999e+00 7.115842067762138e+00 1.498031036104573e+01 +40 1 1 1.848750000000000e+01 1.778960516940534e+01 1.492663969598082e+01 +41 1 1 1.725500000000000e+01 1.707802096262913e+01 1.487928391741343e+01 +42 1 1 2.218500000000000e+01 1.280851572197185e+01 1.493339893560164e+01 +43 1 1 1.232500000000000e+01 7.115842067762138e+00 1.507943978677017e+01 +44 1 1 1.355750000000000e+01 6.404257860985923e+00 1.484914917113341e+01 +45 1 1 1.479000000000000e+01 7.115842067762138e+00 1.516663648122805e+01 +46 1 1 1.602250000000000e+01 1.778960516940534e+01 1.494170266401908e+01 +47 1 1 1.479000000000000e+01 1.707802096262913e+01 1.489834582180523e+01 +48 1 1 1.602250000000000e+01 6.404257860985923e+00 1.502658138746657e+01 +49 1 1 1.725500000000000e+01 7.115842067762138e+00 1.498697322036154e+01 +50 1 1 1.848750000000000e+01 6.404257860985923e+00 1.504573856434245e+01 +51 1 1 1.972000000000000e+01 7.115842067762138e+00 1.498510668772038e+01 +52 1 1 1.355750000000000e+01 1.778960516940534e+01 1.503160986637731e+01 +53 1 1 1.232500000000000e+01 1.707802096262913e+01 1.482446479934924e+01 +54 1 1 2.095250000000000e+01 6.404257860985923e+00 1.510811524523195e+01 +55 1 1 2.341750000000000e+01 1.494326834230049e+01 1.505440697642049e+01 +56 1 1 2.218500000000000e+01 1.707802096262913e+01 1.489480063588714e+01 +57 1 1 2.218500000000000e+01 8.539010481314564e+00 1.495045959051609e+01 +58 1 1 2.465000000000000e+01 8.539010481314564e+00 1.512601015985335e+01 +59 1 1 2.588250000000000e+01 1.067376310164321e+01 1.495691790117351e+01 +60 1 1 2.711500000000000e+01 1.138534730841942e+01 1.496195578420333e+01 +61 1 1 9.859999999999999e+00 1.565485254907670e+01 1.488138963237187e+01 +62 1 1 8.627500000000000e+00 1.494326834230049e+01 1.498700505084123e+01 +63 1 1 2.834750000000000e+01 1.067376310164321e+01 1.504459111637339e+01 +64 1 1 2.958000000000000e+01 1.138534730841942e+01 1.495098625433358e+01 +65 1 1 7.395000000000000e+00 1.280851572197185e+01 1.505608046573023e+01 +66 1 1 8.627500000000000e+00 1.352009992874806e+01 1.484199719552881e+01 +67 1 1 3.081250000000000e+01 1.352009992874806e+01 1.483451056838223e+01 +68 1 1 2.958000000000000e+01 1.280851572197185e+01 1.502332948089694e+01 +69 1 1 9.859999999999999e+00 1.280851572197185e+01 1.506286085730730e+01 +70 1 1 2.465000000000000e+01 1.138534730841942e+01 1.506305034228861e+01 +71 1 1 1.109250000000000e+01 1.352009992874806e+01 1.491918072685150e+01 +72 1 1 1.355750000000000e+01 1.352009992874806e+01 1.494644661191470e+01 +73 1 1 2.834750000000000e+01 1.352009992874806e+01 1.496099714517733e+01 +74 1 1 2.711500000000000e+01 1.280851572197185e+01 1.498298656405413e+01 +75 1 1 1.479000000000000e+01 1.280851572197185e+01 1.511808602386498e+01 +76 1 1 1.602250000000000e+01 1.352009992874806e+01 1.509196186449678e+01 +77 1 1 1.725500000000000e+01 1.280851572197185e+01 1.494017769280163e+01 +78 1 1 1.848750000000000e+01 1.352009992874806e+01 1.486540173862453e+01 +79 1 1 2.588250000000000e+01 1.352009992874806e+01 1.502414429870090e+01 +80 1 1 2.465000000000000e+01 1.280851572197185e+01 1.491189258035136e+01 +81 1 1 1.972000000000000e+01 1.280851572197185e+01 1.503451993485524e+01 +82 1 1 2.095250000000000e+01 1.352009992874806e+01 1.503423133885440e+01 +83 1 1 1.232500000000000e+01 1.280851572197185e+01 1.492432047742539e+01 +84 1 1 2.341750000000000e+01 1.067376310164321e+01 1.500488865182437e+01 +85 1 1 1.109250000000000e+01 1.494326834230049e+01 1.509530225402135e+01 +86 1 1 1.232500000000000e+01 1.565485254907670e+01 1.500246060086581e+01 +87 1 1 2.588250000000000e+01 9.250594688090777e+00 1.498734533172262e+01 +88 1 1 2.218500000000000e+01 1.565485254907670e+01 1.504729297899704e+01 +89 1 1 2.095250000000000e+01 1.494326834230049e+01 1.486622917148261e+01 +90 1 1 2.711500000000000e+01 8.539010481314564e+00 1.494373650471835e+01 +91 1 1 2.834750000000000e+01 9.250594688090777e+00 1.488792788684821e+01 +92 1 1 6.162500000000000e+00 1.067376310164321e+01 1.486731884367082e+01 +93 1 1 7.395000000000000e+00 1.138534730841942e+01 1.509646856144050e+01 +94 1 1 1.972000000000000e+01 1.565485254907670e+01 1.488798024124609e+01 +95 1 1 1.848750000000000e+01 1.494326834230049e+01 1.489558509878004e+01 +96 1 1 8.627500000000000e+00 1.067376310164321e+01 1.497336164791434e+01 +97 1 1 9.859999999999999e+00 1.138534730841942e+01 1.496081048392299e+01 +98 1 1 1.109250000000000e+01 1.067376310164321e+01 1.494580009249847e+01 +99 1 1 1.232500000000000e+01 1.138534730841942e+01 1.510396759497348e+01 +100 1 1 1.725500000000000e+01 1.565485254907670e+01 1.499338417222946e+01 +101 1 1 1.602250000000000e+01 1.494326834230049e+01 1.511840116374763e+01 +102 1 1 1.355750000000000e+01 1.067376310164321e+01 1.503281161003896e+01 +103 1 1 1.479000000000000e+01 1.138534730841942e+01 1.499843298302028e+01 +104 1 1 1.602250000000000e+01 1.067376310164321e+01 1.491311607132768e+01 +105 1 1 1.725500000000000e+01 1.138534730841942e+01 1.504030511972019e+01 +106 1 1 1.479000000000000e+01 1.565485254907670e+01 1.486944422096690e+01 +107 1 1 1.355750000000000e+01 1.494326834230049e+01 1.476511580670247e+01 +108 1 1 1.848750000000000e+01 1.067376310164321e+01 1.483733215135541e+01 +109 1 1 1.972000000000000e+01 1.138534730841942e+01 1.483307878319485e+01 +110 1 1 2.095250000000000e+01 1.067376310164321e+01 1.472377202887134e+01 +111 1 1 2.218500000000000e+01 1.138534730841942e+01 1.494032335018560e+01 +112 1 1 2.341750000000000e+01 9.250594688090777e+00 1.511930030385710e+01 +113 1 1 2.341750000000000e+01 1.778960516940534e+01 1.506163255648677e+01 +114 1 1 1.109250000000000e+01 6.404257860985923e+00 1.507183137955260e+01 +115 1 1 2.218500000000000e+01 4.269505240657282e+00 1.492921198534790e+01 +116 1 1 2.341750000000000e+01 7.115842067762137e-01 1.506491820629175e+01 +117 1 1 1.232500000000000e+00 2.134752620328641e+00 1.507012124249483e+01 +118 1 1 2.465000000000000e+00 2.846336827104855e+00 1.503655403336380e+01 +119 1 1 2.218500000000000e+01 1.992435778973398e+01 1.505948767536701e+01 +120 1 1 2.095250000000000e+01 1.921277358295777e+01 1.514330257618634e+01 +121 1 1 3.697500000000000e+00 2.134752620328641e+00 1.502497496406354e+01 +122 1 1 4.930000000000000e+00 2.846336827104855e+00 1.507374298221752e+01 +123 1 1 6.162500000000000e+00 2.134752620328641e+00 1.493733326297393e+01 +124 1 1 7.395000000000000e+00 2.846336827104855e+00 1.487495201368372e+01 +125 1 1 1.972000000000000e+01 1.992435778973398e+01 1.505808760634221e+01 +126 1 1 1.848750000000000e+01 1.921277358295777e+01 1.493872889432326e+01 +127 1 1 2.218500000000000e+01 0.000000000000000e+00 1.501312853963581e+01 +128 1 1 8.627500000000000e+00 2.134752620328641e+00 1.505205628279858e+01 +129 1 1 2.341750000000000e+01 4.981089447433495e+00 1.507571160792217e+01 +130 1 1 1.109250000000000e+01 2.134752620328641e+00 1.489358054803088e+01 +131 1 1 1.232500000000000e+01 2.846336827104855e+00 1.499912561242418e+01 +132 1 1 1.725500000000000e+01 1.992435778973398e+01 1.497577189332382e+01 +133 1 1 1.602250000000000e+01 1.921277358295777e+01 1.499040615876794e+01 +134 1 1 1.355750000000000e+01 2.134752620328641e+00 1.516072772863512e+01 +135 1 1 1.479000000000000e+01 2.846336827104855e+00 1.507211585538748e+01 +136 1 1 1.602250000000000e+01 2.134752620328641e+00 1.504045728176403e+01 +137 1 1 1.725500000000000e+01 2.846336827104855e+00 1.504684394670705e+01 +138 1 1 1.479000000000000e+01 1.992435778973398e+01 1.510384904069957e+01 +139 1 1 1.355750000000000e+01 1.921277358295777e+01 1.511446984282775e+01 +140 1 1 9.859999999999999e+00 2.846336827104855e+00 1.502182693962230e+01 +141 1 1 1.848750000000000e+01 2.134752620328641e+00 1.492115016417242e+01 +142 1 1 2.341750000000000e+01 1.921277358295777e+01 1.511940999724034e+01 +143 1 1 2.095250000000000e+01 7.115842067762137e-01 1.499411067303495e+01 +144 1 1 1.232500000000000e+00 7.115842067762137e-01 1.506494802778743e+01 +145 1 1 3.451000000000000e+01 1.992435778973398e+01 1.504957420337895e+01 +146 1 1 3.327750000000000e+01 1.921277358295777e+01 1.511072511003059e+01 +147 1 1 2.465000000000000e+00 0.000000000000000e+00 1.500837434607164e+01 +148 1 1 3.697500000000000e+00 7.115842067762137e-01 1.499541651074234e+01 +149 1 1 4.930000000000000e+00 0.000000000000000e+00 1.509518604163723e+01 +150 1 1 6.162500000000000e+00 7.115842067762137e-01 1.497074687620619e+01 +151 1 1 3.204500000000000e+01 1.992435778973398e+01 1.500792890976805e+01 +152 1 1 3.081250000000000e+01 1.921277358295777e+01 1.496690270418216e+01 +153 1 1 7.395000000000000e+00 0.000000000000000e+00 1.524069684472765e+01 +154 1 1 8.627500000000000e+00 7.115842067762137e-01 1.491839348334605e+01 +155 1 1 2.465000000000000e+01 1.992435778973398e+01 1.498895095057103e+01 +156 1 1 9.859999999999999e+00 0.000000000000000e+00 1.499465288102860e+01 +157 1 1 2.958000000000000e+01 1.992435778973398e+01 1.495366550654662e+01 +158 1 1 2.834750000000000e+01 1.921277358295777e+01 1.498688543050304e+01 +159 1 1 1.232500000000000e+01 0.000000000000000e+00 1.502461005163719e+01 +160 1 1 1.355750000000000e+01 7.115842067762137e-01 1.488675470180450e+01 +161 1 1 1.479000000000000e+01 0.000000000000000e+00 1.499317346174183e+01 +162 1 1 1.602250000000000e+01 7.115842067762137e-01 1.499167690758548e+01 +163 1 1 2.711499999999999e+01 1.992435778973398e+01 1.501975964337061e+01 +164 1 1 2.588250000000000e+01 1.921277358295777e+01 1.486203378273598e+01 +165 1 1 1.725500000000000e+01 0.000000000000000e+00 1.504809379785000e+01 +166 1 1 1.848750000000000e+01 7.115842067762137e-01 1.491114701451727e+01 +167 1 1 1.972000000000000e+01 0.000000000000000e+00 1.512011452965299e+01 +168 1 1 1.109250000000000e+01 7.115842067762137e-01 1.487408794621075e+01 +169 1 1 1.972000000000000e+01 2.846336827104855e+00 1.507831721537003e+01 +170 1 1 2.341750000000000e+01 1.352009992874806e+01 1.495718486297744e+01 +171 1 1 2.958000000000000e+01 1.707802096262913e+01 1.493147208418856e+01 +172 1 1 1.848750000000000e+01 4.981089447433495e+00 1.494913539471411e+01 +173 1 1 3.697500000000000e+00 4.981089447433495e+00 1.478998858443710e+01 +174 1 1 3.327750000000000e+01 1.778960516940534e+01 1.495502006800012e+01 +175 1 1 3.204500000000000e+01 1.707802096262913e+01 1.495051064694342e+01 +176 1 1 4.930000000000000e+00 4.269505240657282e+00 1.498350377115313e+01 +177 1 1 6.162500000000000e+00 4.981089447433495e+00 1.494667393795457e+01 +178 1 1 7.395000000000000e+00 4.269505240657282e+00 1.507985366541724e+01 +179 1 1 2.588250000000000e+01 1.778960516940534e+01 1.494716376988664e+01 +180 1 1 8.627500000000000e+00 4.981089447433495e+00 1.499320258596098e+01 +181 1 1 1.602250000000000e+01 4.981089447433495e+00 1.500127272897711e+01 +182 1 1 1.479000000000000e+01 4.269505240657282e+00 1.493241109430999e+01 +183 1 1 2.711500000000000e+01 1.707802096262913e+01 1.513215736063149e+01 +184 1 1 2.834750000000000e+01 1.778960516940534e+01 1.491995000096713e+01 +185 1 1 9.859999999999999e+00 4.269505240657282e+00 1.523967414046218e+01 +186 1 1 1.109250000000000e+01 4.981089447433495e+00 1.507658824600498e+01 +187 1 1 1.355750000000000e+01 4.981089447433495e+00 1.498019661433922e+01 +188 1 1 3.081250000000000e+01 1.778960516940534e+01 1.488921763404584e+01 +189 1 1 2.465000000000000e+01 1.707802096262913e+01 1.491522695293121e+01 +190 1 1 1.725500000000000e+01 4.269505240657282e+00 1.484531224085001e+01 +191 1 1 1.972000000000000e+01 4.269505240657282e+00 1.512087841047699e+01 +192 1 1 2.095250000000000e+01 2.134752620328641e+00 1.501366356379743e+01 +193 1 1 2.218500000000000e+01 2.846336827104855e+00 1.512768073569268e+01 +194 1 1 1.232500000000000e+01 1.992435778973398e+01 1.479694154125662e+01 +195 1 1 1.109250000000000e+01 1.921277358295777e+01 1.508375643482666e+01 +196 1 1 2.095250000000000e+01 4.981089447433495e+00 1.502213574954626e+01 +197 1 1 2.465000000000000e+00 4.269505240657282e+00 1.501785776522257e+01 +198 1 1 2.341750000000000e+01 2.134752620328641e+00 1.477223550033331e+01 +199 1 1 1.232500000000000e+01 4.269505240657282e+00 1.509476826791352e+01 +200 1 1 2.465000000000000e+01 2.846336827104855e+00 1.506451005381648e+01 +201 2 1 2.958000000000000e+01 1.423168413552428e+01 1.846233090874204e+01 +202 2 1 1.725500000000000e+01 1.850118937618155e+01 1.830892906667390e+01 +203 2 1 3.204500000000000e+01 1.992435778973398e+01 1.840011296435520e+01 +204 2 1 1.109250000000000e+01 1.636643675585292e+01 1.815423076555236e+01 +205 2 1 9.859999999999999e+00 1.565485254907670e+01 1.857780537003584e+01 +206 2 1 2.341750000000000e+01 1.352009992874806e+01 1.824080722484135e+01 +207 2 1 2.465000000000000e+01 1.423168413552428e+01 1.836017802635158e+01 +208 2 1 2.341750000000000e+01 1.778960516940534e+01 1.828410032494974e+01 +209 2 1 2.711499999999999e+01 1.992435778973398e+01 1.844731239573154e+01 +210 2 1 2.834750000000000e+01 2.063594199651019e+01 1.828146439901283e+01 +211 2 1 2.465000000000000e+01 1.850118937618155e+01 1.836242662973500e+01 +212 2 1 2.711500000000000e+01 1.423168413552428e+01 1.836150573422813e+01 +213 2 1 2.588250000000000e+01 1.352009992874806e+01 1.830533607491024e+01 +214 2 1 3.204499999999999e+01 1.423168413552428e+01 1.852693962525193e+01 +215 2 1 3.327750000000000e+01 2.063594199651019e+01 1.845057006323066e+01 +216 2 1 2.218500000000000e+01 1.850118937618155e+01 1.834530693106420e+01 +217 2 1 2.095250000000000e+01 1.778960516940534e+01 1.817360355124612e+01 +218 2 1 2.711500000000000e+01 1.850118937618155e+01 1.845768039438554e+01 +219 2 1 1.848750000000000e+01 1.778960516940534e+01 1.822837106768257e+01 +220 2 1 1.972000000000000e+01 1.850118937618155e+01 1.834146516606220e+01 +221 2 1 1.602250000000000e+01 1.778960516940534e+01 1.837935563986790e+01 +222 2 1 2.958000000000000e+01 1.992435778973398e+01 1.860134630351601e+01 +223 2 1 3.081250000000000e+01 2.063594199651019e+01 1.829143841375619e+01 +224 2 1 2.588250000000000e+01 1.778960516940534e+01 1.828834782396325e+01 +225 2 1 2.834750000000000e+01 1.352009992874806e+01 1.856412094918868e+01 +226 2 1 3.081250000000000e+01 1.352009992874806e+01 1.853801808786659e+01 +227 2 1 1.355750000000000e+01 2.063594199651019e+01 1.848883167175910e+01 +228 2 1 2.588250000000000e+01 2.063594199651019e+01 1.830177176844362e+01 +229 2 1 1.109250000000000e+01 1.778960516940534e+01 1.835319724200392e+01 +230 2 1 1.848750000000000e+01 2.063594199651019e+01 1.847119667517633e+01 +231 2 1 2.218500000000000e+01 1.565485254907670e+01 1.860318710827055e+01 +232 2 1 2.341750000000000e+01 1.636643675585292e+01 1.837094744555149e+01 +233 2 1 3.327750000000000e+01 1.778960516940534e+01 1.833243244791216e+01 +234 2 1 3.327750000000000e+01 1.636643675585292e+01 1.841374627283294e+01 +235 2 1 3.204499999999999e+01 1.565485254907670e+01 1.831879406900189e+01 +236 2 1 2.095250000000000e+01 1.636643675585292e+01 1.847406800172368e+01 +237 2 1 3.450999999999999e+01 1.850118937618155e+01 1.825509330024598e+01 +238 2 1 2.588250000000000e+01 1.636643675585292e+01 1.858281516013951e+01 +239 2 1 1.602250000000000e+01 2.063594199651019e+01 1.843602760618910e+01 +240 2 1 1.479000000000000e+01 1.992435778973398e+01 1.838252211650205e+01 +241 2 1 2.711499999999999e+01 1.565485254907670e+01 1.853744396051707e+01 +242 2 1 2.834750000000000e+01 1.636643675585292e+01 1.827644925946220e+01 +243 2 1 3.081250000000000e+01 1.636643675585292e+01 1.839489332257254e+01 +244 2 1 2.958000000000000e+01 1.565485254907670e+01 1.835082606731893e+01 +245 2 1 2.465000000000000e+01 1.565485254907670e+01 1.824093445834070e+01 +246 2 1 2.834750000000000e+01 1.778960516940534e+01 1.839125877129669e+01 +247 2 1 1.972000000000000e+01 1.565485254907670e+01 1.850135584349750e+01 +248 2 1 1.972000000000000e+01 1.992435778973398e+01 1.833453778991944e+01 +249 2 1 1.232500000000000e+01 1.565485254907670e+01 1.861569706632533e+01 +250 2 1 1.355750000000000e+01 1.636643675585292e+01 1.838074525366760e+01 +251 2 1 2.465000000000000e+01 1.992435778973398e+01 1.848031566286595e+01 +252 2 1 2.958000000000000e+01 1.850118937618155e+01 1.834558681120988e+01 +253 2 1 1.232500000000000e+01 1.992435778973398e+01 1.837502909143642e+01 +254 2 1 1.479000000000000e+01 1.850118937618155e+01 1.838311174584445e+01 +255 2 1 1.479000000000000e+01 1.565485254907670e+01 1.832442132291042e+01 +256 2 1 1.232500000000000e+01 1.850118937618155e+01 1.828810769113426e+01 +257 2 1 1.602250000000000e+01 1.636643675585292e+01 1.855251516549562e+01 +258 2 1 2.341750000000000e+01 2.063594199651019e+01 1.838894036475336e+01 +259 2 1 2.218500000000000e+01 1.992435778973398e+01 1.846784434616029e+01 +260 2 1 1.725500000000000e+01 1.565485254907670e+01 1.835189752692777e+01 +261 2 1 1.848750000000000e+01 1.636643675585292e+01 1.842967763285558e+01 +262 2 1 3.081250000000000e+01 1.778960516940534e+01 1.844833766662363e+01 +263 2 1 3.204499999999999e+01 1.850118937618155e+01 1.847737939507963e+01 +264 2 1 2.095250000000000e+01 2.063594199651019e+01 1.847095133969059e+01 +265 2 1 1.355750000000000e+01 1.778960516940534e+01 1.828894868367980e+01 +266 2 1 1.725500000000000e+01 1.992435778973398e+01 1.834596243435063e+01 +267 2 1 2.957999999999999e+01 9.962178894866991e+00 1.832354414995078e+01 +268 2 1 2.095250000000000e+01 1.352009992874806e+01 1.831118657380274e+01 +269 2 1 1.972000000000000e+01 2.846336827104855e+00 1.837664127263829e+01 +270 2 1 2.095250000000000e+01 3.557921033881068e+00 1.845927782292901e+01 +271 2 1 2.218500000000000e+01 2.846336827104855e+00 1.847140305919736e+01 +272 2 1 2.341750000000000e+01 3.557921033881068e+00 1.843247974382396e+01 +273 2 1 2.465000000000000e+01 2.846336827104855e+00 1.837823139065125e+01 +274 2 1 2.588250000000000e+01 3.557921033881068e+00 1.832687883090416e+01 +275 2 1 3.697500000000000e+00 4.981089447433495e+00 1.847217701470688e+01 +276 2 1 4.930000000000000e+00 5.692673654209710e+00 1.856242710641034e+01 +277 2 1 6.162500000000000e+00 4.981089447433495e+00 1.843965491743299e+01 +278 2 1 7.395000000000000e+00 5.692673654209710e+00 1.830667264718264e+01 +279 2 1 8.627500000000000e+00 4.981089447433495e+00 1.838064863521239e+01 +280 2 1 9.859999999999999e+00 5.692673654209710e+00 1.861740907316864e+01 +281 2 1 1.109250000000000e+01 4.981089447433495e+00 1.838405249119109e+01 +282 2 1 1.232500000000000e+01 5.692673654209710e+00 1.836039437384349e+01 +283 2 1 1.355750000000000e+01 4.981089447433495e+00 1.831221958504840e+01 +284 2 1 1.479000000000000e+01 5.692673654209710e+00 1.828617147888200e+01 +285 2 1 1.602250000000000e+01 4.981089447433495e+00 1.855140653175703e+01 +286 2 1 1.725500000000000e+01 5.692673654209710e+00 1.841767199745545e+01 +287 2 1 1.848750000000000e+01 4.981089447433495e+00 1.832477807209270e+01 +288 2 1 1.972000000000000e+01 5.692673654209710e+00 1.846923771304869e+01 +289 2 1 2.095250000000000e+01 4.981089447433495e+00 1.836832598911283e+01 +290 2 1 2.218500000000000e+01 5.692673654209710e+00 1.843546423544375e+01 +291 2 1 2.341750000000000e+01 4.981089447433495e+00 1.855277898292336e+01 +292 2 1 2.465000000000000e+01 5.692673654209710e+00 1.847587291495339e+01 +293 2 1 2.588250000000000e+01 4.981089447433495e+00 1.826375194964259e+01 +294 2 1 2.711499999999999e+01 5.692673654209710e+00 1.851411320915631e+01 +295 2 1 4.930000000000000e+00 7.115842067762138e+00 1.840825444435020e+01 +296 2 1 6.162500000000000e+00 7.827426274538350e+00 1.833047038974451e+01 +297 2 1 7.395000000000000e+00 7.115842067762138e+00 1.836426082429110e+01 +298 2 1 1.848750000000000e+01 3.557921033881068e+00 1.837403279549467e+01 +299 2 1 1.725500000000000e+01 2.846336827104855e+00 1.835268380461592e+01 +300 2 1 1.602250000000000e+01 3.557921033881068e+00 1.848952507034905e+01 +301 2 1 1.479000000000000e+01 2.846336827104855e+00 1.851644726747239e+01 +302 2 1 1.232500000000000e+00 7.115842067762137e-01 1.832611230156879e+01 +303 2 1 2.465000000000000e+00 1.423168413552427e+00 1.852709756577955e+01 +304 2 1 3.697500000000000e+00 7.115842067762137e-01 1.827857500530802e+01 +305 2 1 4.929999999999999e+00 1.423168413552427e+00 1.826136806124286e+01 +306 2 1 6.162500000000000e+00 7.115842067762137e-01 1.827242936292011e+01 +307 2 1 7.395000000000000e+00 1.423168413552427e+00 1.844551050904462e+01 +308 2 1 8.627500000000000e+00 7.115842067762137e-01 1.844984225027845e+01 +309 2 1 9.859999999999999e+00 1.423168413552427e+00 1.843114129409313e+01 +310 2 1 1.109250000000000e+01 7.115842067762137e-01 1.824449880776195e+01 +311 2 1 1.232500000000000e+01 1.423168413552427e+00 1.856224612585160e+01 +312 2 1 1.355750000000000e+01 7.115842067762137e-01 1.836481578357231e+01 +313 2 1 1.479000000000000e+01 1.423168413552427e+00 1.843036892933161e+01 +314 2 1 1.602250000000000e+01 7.115842067762137e-01 1.835067728786723e+01 +315 2 1 1.725500000000000e+01 1.423168413552427e+00 1.847697931942738e+01 +316 2 1 8.627499999999998e+00 7.827426274538350e+00 1.840542860269897e+01 +317 2 1 1.848750000000000e+01 7.115842067762137e-01 1.843036272469964e+01 +318 2 1 2.095250000000000e+01 7.115842067762137e-01 1.828037025055374e+01 +319 2 1 2.218500000000000e+01 1.423168413552427e+00 1.847794227938386e+01 +320 2 1 2.341750000000000e+01 7.115842067762137e-01 1.836220929695125e+01 +321 2 1 2.465000000000000e+01 1.423168413552427e+00 1.856129777428492e+01 +322 2 1 2.465000000000000e+00 2.846336827104855e+00 1.828958750195393e+01 +323 2 1 3.697500000000000e+00 3.557921033881068e+00 1.848583325162553e+01 +324 2 1 4.930000000000000e+00 2.846336827104855e+00 1.838401024175294e+01 +325 2 1 6.162499999999999e+00 3.557921033881068e+00 1.837437624437527e+01 +326 2 1 7.395000000000000e+00 2.846336827104855e+00 1.841292915268399e+01 +327 2 1 8.627500000000000e+00 3.557921033881068e+00 1.848557970160289e+01 +328 2 1 9.859999999999999e+00 2.846336827104855e+00 1.842924761810127e+01 +329 2 1 1.109250000000000e+01 3.557921033881068e+00 1.831004365073452e+01 +330 2 1 1.232500000000000e+01 2.846336827104855e+00 1.818033371289823e+01 +331 2 1 1.355750000000000e+01 3.557921033881068e+00 1.844566501118075e+01 +332 2 1 1.972000000000000e+01 1.423168413552427e+00 1.846190975036447e+01 +333 2 1 2.218500000000000e+01 1.423168413552428e+01 1.835322517893207e+01 +334 2 1 9.859999999999999e+00 7.115842067762138e+00 1.839789371642158e+01 +335 2 1 1.232500000000000e+01 7.115842067762138e+00 1.847537444410727e+01 +336 2 1 8.627500000000000e+00 1.209693151519563e+01 1.829199174409380e+01 +337 2 1 9.859999999999999e+00 1.138534730841942e+01 1.829413303647114e+01 +338 2 1 1.109250000000000e+01 1.209693151519563e+01 1.856999584032139e+01 +339 2 1 1.232500000000000e+01 1.138534730841942e+01 1.851349651735582e+01 +340 2 1 1.355750000000000e+01 1.209693151519563e+01 1.831123823696192e+01 +341 2 1 1.479000000000000e+01 1.138534730841942e+01 1.843448433334394e+01 +342 2 1 1.602250000000000e+01 1.209693151519563e+01 1.839428881565063e+01 +343 2 1 1.725500000000000e+01 1.138534730841942e+01 1.849178099784848e+01 +344 2 1 1.848750000000000e+01 1.209693151519563e+01 1.824975358434335e+01 +345 2 1 1.972000000000000e+01 1.138534730841942e+01 1.839694145030204e+01 +346 2 1 2.095250000000000e+01 1.209693151519563e+01 1.829096787226717e+01 +347 2 1 2.218500000000000e+01 1.138534730841942e+01 1.840263887228008e+01 +348 2 1 2.341750000000000e+01 1.209693151519563e+01 1.837666030509410e+01 +349 2 1 2.465000000000000e+01 1.138534730841942e+01 1.835828025909527e+01 +350 2 1 2.588250000000000e+01 1.209693151519563e+01 1.833582168089864e+01 +351 2 1 2.711500000000000e+01 1.138534730841942e+01 1.836353031742933e+01 +352 2 1 2.834750000000000e+01 1.209693151519563e+01 1.845852602484125e+01 +353 2 1 2.958000000000000e+01 1.138534730841942e+01 1.853888136458308e+01 +354 2 1 3.081250000000000e+01 1.209693151519563e+01 1.831036168742244e+01 +355 2 1 8.627500000000000e+00 1.352009992874806e+01 1.835261188649090e+01 +356 2 1 9.859999999999999e+00 1.423168413552428e+01 1.821705864207346e+01 +357 2 1 1.109250000000000e+01 1.352009992874806e+01 1.831524712388831e+01 +358 2 1 1.232500000000000e+01 1.423168413552428e+01 1.852378179475058e+01 +359 2 1 1.355750000000000e+01 1.352009992874806e+01 1.852309441840510e+01 +360 2 1 1.479000000000000e+01 1.423168413552428e+01 1.836621027472939e+01 +361 2 1 1.602250000000000e+01 1.352009992874806e+01 1.849039311610116e+01 +362 2 1 1.725500000000000e+01 1.423168413552428e+01 1.842269825087092e+01 +363 2 1 1.848750000000000e+01 1.352009992874806e+01 1.825468998789840e+01 +364 2 1 1.972000000000000e+01 1.423168413552428e+01 1.849561590548242e+01 +365 2 1 7.395000000000000e+00 1.138534730841942e+01 1.859813014678126e+01 +366 2 1 3.451000000000000e+01 1.992435778973398e+01 1.813501916227946e+01 +367 2 1 2.834750000000000e+01 9.250594688090777e+00 1.847653992697568e+01 +368 2 1 2.711499999999999e+01 9.962178894866991e+00 1.849053529347614e+01 +369 2 1 1.355750000000000e+01 7.827426274538350e+00 1.835096749618396e+01 +370 2 1 1.479000000000000e+01 7.115842067762138e+00 1.844059942495262e+01 +371 2 1 1.602250000000000e+01 7.827426274538350e+00 1.844461353068087e+01 +372 2 1 1.725500000000000e+01 7.115842067762138e+00 1.836290600804645e+01 +373 2 1 1.848750000000000e+01 7.827426274538350e+00 1.825818280452995e+01 +374 2 1 1.972000000000000e+01 7.115842067762138e+00 1.837997086460227e+01 +375 2 1 2.095250000000000e+01 7.827426274538350e+00 1.826491847987811e+01 +376 2 1 2.218500000000000e+01 7.115842067762138e+00 1.841142851923555e+01 +377 2 1 2.341750000000000e+01 7.827426274538350e+00 1.826594520665525e+01 +378 2 1 2.465000000000000e+01 7.115842067762138e+00 1.838708488224049e+01 +379 2 1 2.588250000000000e+01 7.827426274538350e+00 1.830434555380351e+01 +380 2 1 2.711500000000000e+01 7.115842067762138e+00 1.859652575977937e+01 +381 2 1 2.834750000000000e+01 7.827426274538350e+00 1.844094595194482e+01 +382 2 1 6.162499999999999e+00 9.250594688090777e+00 1.856484810097502e+01 +383 2 1 1.109250000000000e+01 7.827426274538350e+00 1.847502232204046e+01 +384 2 1 7.395000000000000e+00 9.962178894866991e+00 1.854741705791729e+01 +385 2 1 9.859999999999999e+00 9.962178894866991e+00 1.837074522628645e+01 +386 2 1 1.109250000000000e+01 9.250594688090777e+00 1.846206781979952e+01 +387 2 1 1.232500000000000e+01 9.962178894866991e+00 1.823251181425658e+01 +388 2 1 1.355750000000000e+01 9.250594688090777e+00 1.834993099844037e+01 +389 2 1 1.479000000000000e+01 9.962178894866991e+00 1.843248036437880e+01 +390 2 1 1.602250000000000e+01 9.250594688090777e+00 1.855142577781635e+01 +391 2 1 1.725500000000000e+01 9.962178894866991e+00 1.847587547064991e+01 +392 2 1 1.848750000000000e+01 9.250594688090777e+00 1.850249139638135e+01 +393 2 1 1.972000000000000e+01 9.962178894866991e+00 1.841266132895000e+01 +394 2 1 2.095250000000000e+01 9.250594688090777e+00 1.837466808881276e+01 +395 2 1 2.218500000000000e+01 9.962178894866991e+00 1.834587370280250e+01 +396 2 1 2.341750000000000e+01 9.250594688090777e+00 1.846590574952954e+01 +397 2 1 2.465000000000000e+01 9.962178894866991e+00 1.835650105398410e+01 +398 2 1 2.588250000000000e+01 9.250594688090777e+00 1.838143174570202e+01 +399 2 1 8.627500000000000e+00 9.250594688090777e+00 1.843904853716322e+01 +400 2 1 3.574249999999999e+01 2.063594199651019e+01 1.839864514570517e+01 +401 2 2 2.958000000000000e+01 1.423168413552428e+01 2.000000000000000e+01 +402 2 2 1.725500000000000e+01 1.850118937618155e+01 2.000000000000000e+01 +403 2 2 3.204500000000000e+01 1.992435778973398e+01 2.000000000000000e+01 +404 2 2 1.109250000000000e+01 1.636643675585292e+01 2.000000000000000e+01 +405 2 2 9.859999999999999e+00 1.565485254907670e+01 2.000000000000000e+01 +406 2 2 2.341750000000000e+01 1.352009992874806e+01 2.000000000000000e+01 +407 2 2 2.465000000000000e+01 1.423168413552428e+01 2.000000000000000e+01 +408 2 2 2.341750000000000e+01 1.778960516940534e+01 2.000000000000000e+01 +409 2 2 2.711499999999999e+01 1.992435778973398e+01 2.000000000000000e+01 +410 2 2 2.834750000000000e+01 2.063594199651019e+01 2.000000000000000e+01 +411 2 2 2.465000000000000e+01 1.850118937618155e+01 2.000000000000000e+01 +412 2 2 2.711500000000000e+01 1.423168413552428e+01 2.000000000000000e+01 +413 2 2 2.588250000000000e+01 1.352009992874806e+01 2.000000000000000e+01 +414 2 2 3.204499999999999e+01 1.423168413552428e+01 2.000000000000000e+01 +415 2 2 3.327750000000000e+01 2.063594199651019e+01 2.000000000000000e+01 +416 2 2 2.218500000000000e+01 1.850118937618155e+01 2.000000000000000e+01 +417 2 2 2.095250000000000e+01 1.778960516940534e+01 2.000000000000000e+01 +418 2 2 2.711500000000000e+01 1.850118937618155e+01 2.000000000000000e+01 +419 2 2 1.848750000000000e+01 1.778960516940534e+01 2.000000000000000e+01 +420 2 2 1.972000000000000e+01 1.850118937618155e+01 2.000000000000000e+01 +421 2 2 1.602250000000000e+01 1.778960516940534e+01 2.000000000000000e+01 +422 2 2 2.958000000000000e+01 1.992435778973398e+01 2.000000000000000e+01 +423 2 2 3.081250000000000e+01 2.063594199651019e+01 2.000000000000000e+01 +424 2 2 2.588250000000000e+01 1.778960516940534e+01 2.000000000000000e+01 +425 2 2 2.834750000000000e+01 1.352009992874806e+01 2.000000000000000e+01 +426 2 2 3.081250000000000e+01 1.352009992874806e+01 2.000000000000000e+01 +427 2 2 1.355750000000000e+01 2.063594199651019e+01 2.000000000000000e+01 +428 2 2 2.588250000000000e+01 2.063594199651019e+01 2.000000000000000e+01 +429 2 2 1.109250000000000e+01 1.778960516940534e+01 2.000000000000000e+01 +430 2 2 2.341750000000000e+01 1.636643675585292e+01 2.000000000000000e+01 +431 2 2 3.327750000000000e+01 1.778960516940534e+01 2.000000000000000e+01 +432 2 2 3.327750000000000e+01 1.636643675585292e+01 2.000000000000000e+01 +433 2 2 3.204499999999999e+01 1.565485254907670e+01 2.000000000000000e+01 +434 2 2 2.588250000000000e+01 1.636643675585292e+01 2.000000000000000e+01 +435 2 2 1.602250000000000e+01 2.063594199651019e+01 2.000000000000000e+01 +436 2 2 1.479000000000000e+01 1.992435778973398e+01 2.000000000000000e+01 +437 2 2 2.711499999999999e+01 1.565485254907670e+01 2.000000000000000e+01 +438 2 2 2.465000000000000e+01 1.565485254907670e+01 2.000000000000000e+01 +439 2 2 2.834750000000000e+01 1.778960516940534e+01 2.000000000000000e+01 +440 2 2 1.972000000000000e+01 1.565485254907670e+01 2.000000000000000e+01 +441 2 2 1.972000000000000e+01 1.992435778973398e+01 2.000000000000000e+01 +442 2 2 2.958000000000000e+01 1.850118937618155e+01 2.000000000000000e+01 +443 2 2 1.232500000000000e+01 1.992435778973398e+01 2.000000000000000e+01 +444 2 2 1.479000000000000e+01 1.850118937618155e+01 2.000000000000000e+01 +445 2 2 1.479000000000000e+01 1.565485254907670e+01 2.000000000000000e+01 +446 2 2 2.218500000000000e+01 1.992435778973398e+01 2.000000000000000e+01 +447 2 2 1.725500000000000e+01 1.565485254907670e+01 2.000000000000000e+01 +448 2 2 1.848750000000000e+01 1.636643675585292e+01 2.000000000000000e+01 +449 2 2 3.081250000000000e+01 1.778960516940534e+01 2.000000000000000e+01 +450 2 2 3.204499999999999e+01 1.850118937618155e+01 2.000000000000000e+01 +451 2 2 2.957999999999999e+01 9.962178894866991e+00 2.000000000000000e+01 +452 2 2 2.095250000000000e+01 1.352009992874806e+01 2.000000000000000e+01 +453 2 2 1.972000000000000e+01 2.846336827104855e+00 2.000000000000000e+01 +454 2 2 2.095250000000000e+01 3.557921033881068e+00 2.000000000000000e+01 +455 2 2 2.218500000000000e+01 2.846336827104855e+00 2.000000000000000e+01 +456 2 2 3.697500000000000e+00 4.981089447433495e+00 2.000000000000000e+01 +457 2 2 4.930000000000000e+00 5.692673654209710e+00 2.000000000000000e+01 +458 2 2 6.162500000000000e+00 4.981089447433495e+00 2.000000000000000e+01 +459 2 2 7.395000000000000e+00 5.692673654209710e+00 2.000000000000000e+01 +460 2 2 8.627500000000000e+00 4.981089447433495e+00 2.000000000000000e+01 +461 2 2 1.355750000000000e+01 4.981089447433495e+00 2.000000000000000e+01 +462 2 2 1.479000000000000e+01 5.692673654209710e+00 2.000000000000000e+01 +463 2 2 1.602250000000000e+01 4.981089447433495e+00 2.000000000000000e+01 +464 2 2 1.725500000000000e+01 5.692673654209710e+00 2.000000000000000e+01 +465 2 2 1.848750000000000e+01 4.981089447433495e+00 2.000000000000000e+01 +466 2 2 2.341750000000000e+01 4.981089447433495e+00 2.000000000000000e+01 +467 2 2 2.465000000000000e+01 5.692673654209710e+00 2.000000000000000e+01 +468 2 2 6.162500000000000e+00 7.827426274538350e+00 2.000000000000000e+01 +469 2 2 7.395000000000000e+00 7.115842067762138e+00 2.000000000000000e+01 +470 2 2 1.848750000000000e+01 3.557921033881068e+00 2.000000000000000e+01 +471 2 2 1.725500000000000e+01 2.846336827104855e+00 2.000000000000000e+01 +472 2 2 1.602250000000000e+01 3.557921033881068e+00 2.000000000000000e+01 +473 2 2 1.479000000000000e+01 2.846336827104855e+00 2.000000000000000e+01 +474 2 2 1.232500000000000e+00 7.115842067762137e-01 2.000000000000000e+01 +475 2 2 2.465000000000000e+00 1.423168413552427e+00 2.000000000000000e+01 +476 2 2 3.697500000000000e+00 7.115842067762137e-01 2.000000000000000e+01 +477 2 2 4.929999999999999e+00 1.423168413552427e+00 2.000000000000000e+01 +478 2 2 9.859999999999999e+00 1.423168413552427e+00 2.000000000000000e+01 +479 2 2 1.109250000000000e+01 7.115842067762137e-01 2.000000000000000e+01 +480 2 2 1.232500000000000e+01 1.423168413552427e+00 2.000000000000000e+01 +481 2 2 1.355750000000000e+01 7.115842067762137e-01 2.000000000000000e+01 +482 2 2 1.479000000000000e+01 1.423168413552427e+00 2.000000000000000e+01 +483 2 2 1.602250000000000e+01 7.115842067762137e-01 2.000000000000000e+01 +484 2 2 2.095250000000000e+01 7.115842067762137e-01 2.000000000000000e+01 +485 2 2 2.218500000000000e+01 1.423168413552427e+00 2.000000000000000e+01 +486 2 2 2.341750000000000e+01 7.115842067762137e-01 2.000000000000000e+01 +487 2 2 2.465000000000000e+01 1.423168413552427e+00 2.000000000000000e+01 +488 2 2 2.465000000000000e+00 2.846336827104855e+00 2.000000000000000e+01 +489 2 2 3.697500000000000e+00 3.557921033881068e+00 2.000000000000000e+01 +490 2 2 8.627500000000000e+00 3.557921033881068e+00 2.000000000000000e+01 +491 2 2 9.859999999999999e+00 2.846336827104855e+00 2.000000000000000e+01 +492 2 2 1.109250000000000e+01 3.557921033881068e+00 2.000000000000000e+01 +493 2 2 1.232500000000000e+01 2.846336827104855e+00 2.000000000000000e+01 +494 2 2 1.355750000000000e+01 3.557921033881068e+00 2.000000000000000e+01 +495 2 2 1.972000000000000e+01 1.423168413552427e+00 2.000000000000000e+01 +496 2 2 8.627500000000000e+00 1.209693151519563e+01 2.000000000000000e+01 +497 2 2 9.859999999999999e+00 1.138534730841942e+01 2.000000000000000e+01 +498 2 2 1.109250000000000e+01 1.209693151519563e+01 2.000000000000000e+01 +499 2 2 1.232500000000000e+01 1.138534730841942e+01 2.000000000000000e+01 +500 2 2 1.355750000000000e+01 1.209693151519563e+01 2.000000000000000e+01 +501 2 2 1.479000000000000e+01 1.138534730841942e+01 2.000000000000000e+01 +502 2 2 1.602250000000000e+01 1.209693151519563e+01 2.000000000000000e+01 +503 2 2 2.095250000000000e+01 1.209693151519563e+01 2.000000000000000e+01 +504 2 2 2.218500000000000e+01 1.138534730841942e+01 2.000000000000000e+01 +505 2 2 2.341750000000000e+01 1.209693151519563e+01 2.000000000000000e+01 +506 2 2 2.465000000000000e+01 1.138534730841942e+01 2.000000000000000e+01 +507 2 2 2.588250000000000e+01 1.209693151519563e+01 2.000000000000000e+01 +508 2 2 2.711500000000000e+01 1.138534730841942e+01 2.000000000000000e+01 +509 2 2 2.834750000000000e+01 1.209693151519563e+01 2.000000000000000e+01 +510 2 2 2.958000000000000e+01 1.138534730841942e+01 2.000000000000000e+01 +511 2 2 3.081250000000000e+01 1.209693151519563e+01 2.000000000000000e+01 +512 2 2 8.627500000000000e+00 1.352009992874806e+01 2.000000000000000e+01 +513 2 2 9.859999999999999e+00 1.423168413552428e+01 2.000000000000000e+01 +514 2 2 1.109250000000000e+01 1.352009992874806e+01 2.000000000000000e+01 +515 2 2 1.602250000000000e+01 1.352009992874806e+01 2.000000000000000e+01 +516 2 2 1.725500000000000e+01 1.423168413552428e+01 2.000000000000000e+01 +517 2 2 1.848750000000000e+01 1.352009992874806e+01 2.000000000000000e+01 +518 2 2 1.972000000000000e+01 1.423168413552428e+01 2.000000000000000e+01 +519 2 2 7.395000000000000e+00 1.138534730841942e+01 2.000000000000000e+01 +520 2 2 3.451000000000000e+01 1.992435778973398e+01 2.000000000000000e+01 +521 2 2 2.834750000000000e+01 9.250594688090777e+00 2.000000000000000e+01 +522 2 2 2.711499999999999e+01 9.962178894866991e+00 2.000000000000000e+01 +523 2 2 1.355750000000000e+01 7.827426274538350e+00 2.000000000000000e+01 +524 2 2 1.479000000000000e+01 7.115842067762138e+00 2.000000000000000e+01 +525 2 2 1.972000000000000e+01 7.115842067762138e+00 2.000000000000000e+01 +526 2 2 2.095250000000000e+01 7.827426274538350e+00 2.000000000000000e+01 +527 2 2 2.218500000000000e+01 7.115842067762138e+00 2.000000000000000e+01 +528 2 2 2.341750000000000e+01 7.827426274538350e+00 2.000000000000000e+01 +529 2 2 2.465000000000000e+01 7.115842067762138e+00 2.000000000000000e+01 +530 2 2 2.588250000000000e+01 7.827426274538350e+00 2.000000000000000e+01 +531 2 2 2.711500000000000e+01 7.115842067762138e+00 2.000000000000000e+01 +532 2 2 2.834750000000000e+01 7.827426274538350e+00 2.000000000000000e+01 +533 2 2 6.162499999999999e+00 9.250594688090777e+00 2.000000000000000e+01 +534 2 2 1.109250000000000e+01 7.827426274538350e+00 2.000000000000000e+01 +535 2 2 1.232500000000000e+01 9.962178894866991e+00 2.000000000000000e+01 +536 2 2 1.355750000000000e+01 9.250594688090777e+00 2.000000000000000e+01 +537 2 2 1.479000000000000e+01 9.962178894866991e+00 2.000000000000000e+01 +538 2 2 1.602250000000000e+01 9.250594688090777e+00 2.000000000000000e+01 +539 2 2 1.725500000000000e+01 9.962178894866991e+00 2.000000000000000e+01 +540 2 2 1.848750000000000e+01 9.250594688090777e+00 2.000000000000000e+01 +541 2 2 2.341750000000000e+01 9.250594688090777e+00 2.000000000000000e+01 +542 2 2 2.465000000000000e+01 9.962178894866991e+00 2.000000000000000e+01 +543 2 2 2.588250000000000e+01 9.250594688090777e+00 2.000000000000000e+01 +544 2 2 8.627500000000000e+00 9.250594688090777e+00 2.000000000000000e+01 +545 2 2 3.574249999999999e+01 2.063594199651019e+01 2.000000000000000e+01 diff --git a/examples/USER/misc/drip/in.CH_drip b/examples/USER/misc/drip/in.CH_drip new file mode 100644 index 0000000000..e7acd98bab --- /dev/null +++ b/examples/USER/misc/drip/in.CH_drip @@ -0,0 +1,30 @@ +# Define unit set and class of atomic model +units metal +atom_style molecular + +# BC +boundary p p s + +# read config +read_data data.CH + + +# potential +pair_style hybrid/overlay drip rebo +pair_coeff * * drip C.drip C NULL # only applies to species 1, i.e. C +pair_coeff * * rebo CH.airebo C H # species 1 is C and species 2 is H + + +compute peratom all pe/atom + +# set what thermodynamic information to print to log +thermo 10 # print every 1 timestep + +# set what information to write to dump file +dump id all custom 1 lammps.dump id type x y z fx fy fz c_peratom +dump_modify id every 10 format line "%d %d %13.5e %13.5e %13.5e %13.5e %13.5e %13.5e %13.5e" +dump_modify id sort id + +# minimize energy +minimize 1.0e-15 1.0e-15 100 100 + diff --git a/examples/USER/misc/drip/in.C_drip b/examples/USER/misc/drip/in.C_drip new file mode 100644 index 0000000000..5c277300ab --- /dev/null +++ b/examples/USER/misc/drip/in.C_drip @@ -0,0 +1,29 @@ +# Define unit set and class of atomic model +units metal +atom_style molecular + +# BC +boundary p p s + +# read config +read_data data.C + + +# potential +pair_style hybrid/overlay drip rebo +pair_coeff * * drip C.drip C +pair_coeff * * rebo CH.airebo C + +compute peratom all pe/atom + +# set what thermodynamic information to print to log +thermo 10 # print every 1 timestep + +# set what information to write to dump file +dump id all custom 1 lammps.dump id type x y z fx fy fz c_peratom +dump_modify id every 10 format line "%d %d %13.5e %13.5e %13.5e %13.5e %13.5e %13.5e %13.5e" +dump_modify id sort id + +# minimize energy +minimize 1.0e-15 1.0e-15 100 100 + diff --git a/examples/USER/misc/drip/log.19Apr2019.g++.in.CH_drip b/examples/USER/misc/drip/log.19Apr2019.g++.in.CH_drip new file mode 100644 index 0000000000..e1dccf1c2b --- /dev/null +++ b/examples/USER/misc/drip/log.19Apr2019.g++.in.CH_drip @@ -0,0 +1,109 @@ +LAMMPS (29 Mar 2019) +# Define unit set and class of atomic model +units metal +atom_style molecular + +# BC +boundary p p s + +# read config +read_data data.CH + triclinic box = (0 0 0) to (24.65 21.3475 30) with tilt (12.325 0 0) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 545 atoms + 0 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors + special bonds CPU = 0.000135899 secs + read_data CPU = 0.00296116 secs + + +# potential +pair_style hybrid/overlay drip rebo +pair_coeff * * drip C.drip C NULL # only applies to species 1, i.e. C +Reading potential file C.drip with DATE: 2019-04-19 +pair_coeff * * rebo CH.airebo C H # species 1 is C and species 2 is H +Reading potential file CH.airebo with DATE: 2011-10-25 + + +compute peratom all pe/atom + +# set what thermodynamic information to print to log +thermo 10 # print every 1 timestep + +# set what information to write to dump file +dump id all custom 1 lammps.dump id type x y z fx fy fz c_peratom +dump_modify id every 10 format line "%d %d %13.5e %13.5e %13.5e %13.5e %13.5e %13.5e %13.5e" +dump_modify id sort id + +# minimize energy +minimize 1.0e-15 1.0e-15 100 100 +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:168) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 14 + ghost atom cutoff = 14 + binsize = 7, bins = 6 4 1 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair drip, perpetual, skip from (2) + attributes: full, newton on, ghost + pair build: skip/ghost + stencil: none + bin: none + (2) pair rebo, perpetual + attributes: full, newton on, ghost + pair build: full/bin/ghost + stencil: full/ghost/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 11.71 | 11.71 | 11.71 Mbytes +Step Temp E_pair E_mol TotEng Press Volume + 0 0 -2883.1071 0 -2883.1071 366130.38 2779.5956 + 10 0 -3229.1892 0 -3229.1892 -19780.166 2779.5956 + 20 0 -3268.3574 0 -3268.3574 -15169.468 2779.5956 + 30 0 -3270.013 0 -3270.013 -19827.419 2779.5956 + 40 0 -3270.1341 0 -3270.1341 -20652.573 2779.5956 + 50 0 -3270.2612 0 -3270.2612 -22644.203 2779.5956 + 57 0 -3270.2821 0 -3270.2821 -23259.55 2779.5956 +Loop time of 2.88099 on 1 procs for 57 steps with 545 atoms + +99.0% CPU use with 1 MPI tasks x no OpenMP threads + +Minimization stats: + Stopping criterion = max force evaluations + Energy initial, next-to-last, final = + -2883.10712045 -3270.28053776 -3270.28206154 + Force two-norm initial, final = 114.766 0.235923 + Force max component initial, final = 12.0195 0.0426664 + Final line search alpha, max atom move = 1 0.0426664 + Iterations, force evaluations = 57 101 + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.8692 | 2.8692 | 2.8692 | 0.0 | 99.59 +Bond | 3.5524e-05 | 3.5524e-05 | 3.5524e-05 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.0014327 | 0.0014327 | 0.0014327 | 0.0 | 0.05 +Output | 0.0069089 | 0.0069089 | 0.0069089 | 0.0 | 0.24 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 0.003388 | | | 0.12 + +Nlocal: 545 ave 545 max 545 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 2346 ave 2346 max 2346 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 180462 ave 180462 max 180462 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 180462 +Ave neighs/atom = 331.123 +Ave special neighs/atom = 0 +Neighbor list builds = 0 +Dangerous builds = 0 + +Total wall time: 0:00:02 diff --git a/examples/USER/misc/drip/log.19Apr2019.g++.in.C_drip b/examples/USER/misc/drip/log.19Apr2019.g++.in.C_drip new file mode 100644 index 0000000000..ac078d4a8c --- /dev/null +++ b/examples/USER/misc/drip/log.19Apr2019.g++.in.C_drip @@ -0,0 +1,108 @@ +LAMMPS (29 Mar 2019) +# Define unit set and class of atomic model +units metal +atom_style molecular + +# BC +boundary p p s + +# read config +read_data data.C + triclinic box = (0 0 0) to (24.65 21.3475 30) with tilt (12.325 0 0) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 400 atoms + 0 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors + special bonds CPU = 0.000100136 secs + read_data CPU = 0.00110912 secs + + +# potential +pair_style hybrid/overlay drip rebo +pair_coeff * * drip C.drip C +Reading potential file C.drip with DATE: 2019-04-19 +pair_coeff * * rebo CH.airebo C +Reading potential file CH.airebo with DATE: 2011-10-25 + +compute peratom all pe/atom + +# set what thermodynamic information to print to log +thermo 10 # print every 1 timestep + +# set what information to write to dump file +dump id all custom 1 lammps.dump id type x y z fx fy fz c_peratom +dump_modify id every 10 format line "%d %d %13.5e %13.5e %13.5e %13.5e %13.5e %13.5e %13.5e" +dump_modify id sort id + +# minimize energy +minimize 1.0e-15 1.0e-15 100 100 +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:168) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 14 + ghost atom cutoff = 14 + binsize = 7, bins = 6 4 1 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair drip, perpetual + attributes: full, newton on, ghost + pair build: full/bin/ghost + stencil: full/ghost/bin/3d + bin: standard + (2) pair rebo, perpetual, copy from (1) + attributes: full, newton on, ghost + pair build: copy + stencil: none + bin: none +Per MPI rank memory allocation (min/avg/max) = 11.4 | 11.4 | 11.4 Mbytes +Step Temp E_pair E_mol TotEng Press Volume + 0 0 -2941.0549 0 -2941.0549 -52204.715 2052.0534 + 10 0 -2966.9787 0 -2966.9787 -29717.01 2052.0534 + 20 0 -2967.0695 0 -2967.0695 -29614.636 2052.0534 + 30 0 -2967.0859 0 -2967.0859 -29867.385 2052.0534 + 40 0 -2967.0888 0 -2967.0888 -29997.486 2052.0534 + 50 0 -2967.0896 0 -2967.0896 -30072.387 2052.0534 + 51 0 -2967.0896 0 -2967.0896 -30076.548 2052.0534 +Loop time of 2.8619 on 1 procs for 51 steps with 400 atoms + +98.9% CPU use with 1 MPI tasks x no OpenMP threads + +Minimization stats: + Stopping criterion = max force evaluations + Energy initial, next-to-last, final = + -2941.05486168 -2967.08958346 -2967.08962043 + Force two-norm initial, final = 35.5666 0.0471918 + Force max component initial, final = 6.23617 0.0050012 + Final line search alpha, max atom move = 1 0.0050012 + Iterations, force evaluations = 51 101 + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 2.8529 | 2.8529 | 2.8529 | 0.0 | 99.69 +Bond | 3.314e-05 | 3.314e-05 | 3.314e-05 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.0010927 | 0.0010927 | 0.0010927 | 0.0 | 0.04 +Output | 0.0053217 | 0.0053217 | 0.0053217 | 0.0 | 0.19 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 0.002526 | | | 0.09 + +Nlocal: 400 ave 400 max 400 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1716 ave 1716 max 1716 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 180462 ave 180462 max 180462 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 180462 +Ave neighs/atom = 451.155 +Ave special neighs/atom = 0 +Neighbor list builds = 0 +Dangerous builds = 0 + +Total wall time: 0:00:02 diff --git a/potentials/C.drip b/potentials/C.drip new file mode 100644 index 0000000000..43d5ca4208 --- /dev/null +++ b/potentials/C.drip @@ -0,0 +1,15 @@ +# DATE: 2019-04-19 CONTRIBUTOR: Mingjian Wen, wenxx151@umn.edu +# +# Parameters of the Dihedral-angle-corrected registry-dependent interlayer (DRIP) +# potential for multilayer graphene structures. +# +# Cite as M. Wen, S. Carr, S. Fang, E. Kaxiras, and E. B. Tadmor, Phys. Rev. B, 98, 235404 (2018). + + +# C0 C2 C4 C delta lambda A z0 B eta rho_cut r_cut +C C 1.1598e-02 1.2981e-02 3.2515e-02 7.8151e-03 8.3679e-01 2.7158 2.2216e-02 3.34 7.6799e-03 1.1432 1.562 12.0 + + +# C0, C2, C4, C, A, and B in [eV] +# delta, z0, eta, rho_cut, and r_cut in [Angstrom] +# lambda in [1/Angstrom] From c6d0f7ca8779b6430c6a223c058018240c57b3d8 Mon Sep 17 00:00:00 2001 From: Mingjian Wen Date: Fri, 19 Apr 2019 14:27:03 -0500 Subject: [PATCH 090/311] Update equations --- doc/src/Eqs/pair_drip.jpg | Bin 63713 -> 58904 bytes doc/src/Eqs/pair_drip.tex | 3 +-- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/src/Eqs/pair_drip.jpg b/doc/src/Eqs/pair_drip.jpg index 726bb32cb84c3952fb121870464754a317331f37..a94b4141b02c40946b92857b5544d0e632fa8c9f 100644 GIT binary patch literal 58904 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 z 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 diff --git a/doc/src/Eqs/pair_drip.tex b/doc/src/Eqs/pair_drip.tex index 3b7a3ea991..079a2cdf84 100644 --- a/doc/src/Eqs/pair_drip.tex +++ b/doc/src/Eqs/pair_drip.tex @@ -5,8 +5,7 @@ \begin{document} \begin{eqnarray*} -E &=& \frac{1}{2} \sum_{i} \sum_{j\notin\text{layer}\,i} (\phi_{ij} + \phi_{ji}) \\ -\phi_{ij} &=& f_\text{c}(x_r) \left[ e^{-\lambda(r_{ij} - z_0 )} \left[C+f(\rho_{ij})+ g(\rho_{ij}, \{\alpha_{ij}^{(m)}\}) \right]- A\left (\frac{z_0}{r_{ij}} \right)^6 \right] \\ +E &=& \frac{1}{2} \sum_{i} \sum_{j\notin\text{layer}\,i} \phi_{ij} \\\phi_{ij} &=& f_\text{c}(x_r) \left[ e^{-\lambda(r_{ij} - z_0 )} \left[C+f(\rho_{ij})+ g(\rho_{ij}, \{\alpha_{ij}^{(m)}\}) \right]- A\left (\frac{z_0}{r_{ij}} \right)^6 \right] \\ \end{eqnarray*} From a243be2dc9c25e7fc175d899b2f2d796e9cb7bd6 Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Sun, 21 Apr 2019 22:10:03 -0600 Subject: [PATCH 091/311] Added bare-bones yarray algorithm, 2x speedup --- src/SNAP/pair_snap.cpp | 84 ++++++++++++++++------------ src/SNAP/sna.cpp | 124 +++++++++++++++++++++++++++++++++++++++++ src/SNAP/sna.h | 3 + 3 files changed, 174 insertions(+), 37 deletions(-) diff --git a/src/SNAP/pair_snap.cpp b/src/SNAP/pair_snap.cpp index 8b547e6e73..73faaa71f7 100644 --- a/src/SNAP/pair_snap.cpp +++ b/src/SNAP/pair_snap.cpp @@ -158,9 +158,12 @@ PairSNAP::~PairSNAP() void PairSNAP::compute(int eflag, int vflag) { - if (use_optimized) - compute_optimized(eflag, vflag); - else +// if (use_optimized) +// compute_optimized(eflag, vflag); +// else + +// hard-code compute_regular() + compute_regular(eflag, vflag); } @@ -248,51 +251,58 @@ void PairSNAP::compute_regular(int eflag, int vflag) double* coeffi = coeffelem[ielem]; + // omit beta0 from beta vector + + double* beta = coeffi+1; + snaptr->compute_yi(beta); + for (int jj = 0; jj < ninside; jj++) { int j = snaptr->inside[jj]; snaptr->compute_duidrj(snaptr->rij[jj], snaptr->wj[jj],snaptr->rcutij[jj]); - snaptr->compute_dbidrj(); - snaptr->copy_dbi2dbvec(); +// snaptr->compute_dbidrj(); +// snaptr->copy_dbi2dbvec(); - fij[0] = 0.0; - fij[1] = 0.0; - fij[2] = 0.0; +// fij[0] = 0.0; +// fij[1] = 0.0; +// fij[2] = 0.0; - // linear contributions +// // linear contributions - for (int k = 1; k <= ncoeff; k++) { - double bgb = coeffi[k]; - fij[0] += bgb*snaptr->dbvec[k-1][0]; - fij[1] += bgb*snaptr->dbvec[k-1][1]; - fij[2] += bgb*snaptr->dbvec[k-1][2]; - } +// for (int k = 1; k <= ncoeff; k++) { +// double bgb = coeffi[k]; +// fij[0] += bgb*snaptr->dbvec[k-1][0]; +// fij[1] += bgb*snaptr->dbvec[k-1][1]; +// fij[2] += bgb*snaptr->dbvec[k-1][2]; +// } - // quadratic contributions +// // quadratic contributions - if (quadraticflag) { - int k = ncoeff+1; - for (int icoeff = 0; icoeff < ncoeff; icoeff++) { - double bveci = snaptr->bvec[icoeff]; - double fack = coeffi[k]*bveci; - double* dbveci = snaptr->dbvec[icoeff]; - fij[0] += fack*dbveci[0]; - fij[1] += fack*dbveci[1]; - fij[2] += fack*dbveci[2]; - k++; - for (int jcoeff = icoeff+1; jcoeff < ncoeff; jcoeff++) { - double facki = coeffi[k]*bveci; - double fackj = coeffi[k]*snaptr->bvec[jcoeff]; - double* dbvecj = snaptr->dbvec[jcoeff]; +// if (quadraticflag) { +// int k = ncoeff+1; +// for (int icoeff = 0; icoeff < ncoeff; icoeff++) { +// double bveci = snaptr->bvec[icoeff]; +// double fack = coeffi[k]*bveci; +// double* dbveci = snaptr->dbvec[icoeff]; +// fij[0] += fack*dbveci[0]; +// fij[1] += fack*dbveci[1]; +// fij[2] += fack*dbveci[2]; +// k++; +// for (int jcoeff = icoeff+1; jcoeff < ncoeff; jcoeff++) { +// double facki = coeffi[k]*bveci; +// double fackj = coeffi[k]*snaptr->bvec[jcoeff]; +// double* dbvecj = snaptr->dbvec[jcoeff]; - fij[0] += facki*dbvecj[0]+fackj*dbveci[0]; - fij[1] += facki*dbvecj[1]+fackj*dbveci[1]; - fij[2] += facki*dbvecj[2]+fackj*dbveci[2]; - k++; - } - } - } +// fij[0] += facki*dbvecj[0]+fackj*dbveci[0]; +// fij[1] += facki*dbvecj[1]+fackj*dbveci[1]; +// fij[2] += facki*dbvecj[2]+fackj*dbveci[2]; +// k++; +// } +// } +// } + + snaptr->compute_deidrj(fij); f[i][0] += fij[0]; f[i][1] += fij[1]; diff --git a/src/SNAP/sna.cpp b/src/SNAP/sna.cpp index 7ed1bc1e23..d30d94dc9d 100644 --- a/src/SNAP/sna.cpp +++ b/src/SNAP/sna.cpp @@ -522,6 +522,124 @@ void SNA::compute_zi_omp(int sub_threads) } } +/* ---------------------------------------------------------------------- + compute Yi by summing over products of beta and Zi +------------------------------------------------------------------------- */ + +void SNA::compute_yi(double* beta) +{ + int j; + int idxz_count; + double **jjjzarray_r, **jjjzarray_i; + + for(int j = 0; j <= twojmax; j++) { + for(int mb = 0; 2*mb <= j; mb++) + for(int ma = 0; ma <= j; ma++) { + yarray_r[j][ma][mb] = 0.0; + yarray_i[j][ma][mb] = 0.0; + } // end loop over ma, mb + } // end loop over j + + for(int JJ = 0; JJ < idxj_max; JJ++) { + const int j1 = idxj[JJ].j1; + const int j2 = idxj[JJ].j2; + const int j3 = idxj[JJ].j; + + j = j3; + jjjzarray_r = zarray_r[j1][j2][j3]; + jjjzarray_i = zarray_i[j1][j2][j3]; + for(int mb = 0; 2*mb <= j; mb++) + for(int ma = 0; ma <= j; ma++) { + yarray_r[j][ma][mb] += beta[JJ]*jjjzarray_r[ma][mb]; + yarray_i[j][ma][mb] += beta[JJ]*jjjzarray_i[ma][mb]; + } // end loop over ma, mb + + j = j1; + jjjzarray_r = zarray_r[j3][j2][j1]; + jjjzarray_i = zarray_i[j3][j2][j1]; + double j1fac = (j3+1)/(j+1.0); + for(int mb = 0; 2*mb <= j; mb++) + for(int ma = 0; ma <= j; ma++) { + yarray_r[j][ma][mb] += beta[JJ]*jjjzarray_r[ma][mb]*j1fac; + yarray_i[j][ma][mb] += beta[JJ]*jjjzarray_i[ma][mb]*j1fac; + } // end loop over ma, mb + + j = j2; + jjjzarray_r = zarray_r[j3][j1][j2]; + jjjzarray_i = zarray_i[j3][j1][j2]; + double j2fac = (j3+1)/(j+1.0); + for(int mb = 0; 2*mb <= j; mb++) + for(int ma = 0; ma <= j; ma++) { + yarray_r[j][ma][mb] += beta[JJ]*jjjzarray_r[ma][mb]*j2fac; + yarray_i[j][ma][mb] += beta[JJ]*jjjzarray_i[ma][mb]*j2fac; + } // end loop over ma, mb + + } // end loop over jjb + +} + +/* ---------------------------------------------------------------------- + compute dEidRj +------------------------------------------------------------------------- */ + +void SNA::compute_deidrj(double* dedr) +{ + + for(int k = 0; k < 3; k++) + dedr[k] = 0.0; + + for(int j = 0; j <= twojmax; j++) { + + for(int mb = 0; 2*mb < j; mb++) + for(int ma = 0; ma <= j; ma++) { + + double* dudr_r = duarray_r[j][ma][mb]; + double* dudr_i = duarray_i[j][ma][mb]; + double jjjmambyarray_r = yarray_r[j][ma][mb]; + double jjjmambyarray_i = yarray_i[j][ma][mb]; + for(int k = 0; k < 3; k++) + dedr[k] += + dudr_r[k] * jjjmambyarray_r + + dudr_i[k] * jjjmambyarray_i; + + } //end loop over ma mb + + // For j even, handle middle column + + if (j%2 == 0) { + + int mb = j/2; + for(int ma = 0; ma < mb; ma++) { + double* dudr_r = duarray_r[j][ma][mb]; + double* dudr_i = duarray_i[j][ma][mb]; + double jjjmambyarray_r = yarray_r[j][ma][mb]; + double jjjmambyarray_i = yarray_i[j][ma][mb]; + for(int k = 0; k < 3; k++) + dedr[k] += + dudr_r[k] * jjjmambyarray_r + + dudr_i[k] * jjjmambyarray_i; + + } + + int ma = mb; + double* dudr_r = duarray_r[j][ma][mb]; + double* dudr_i = duarray_i[j][ma][mb]; + double jjjmambyarray_r = yarray_r[j][ma][mb]; + double jjjmambyarray_i = yarray_i[j][ma][mb]; + for(int k = 0; k < 3; k++) + dedr[k] += + (dudr_r[k] * jjjmambyarray_r + + dudr_i[k] * jjjmambyarray_i)*0.5; + + } // end if jeven + + } // End loop over j + + for(int k = 0; k < 3; k++) + dedr[k] *= 2.0; + +} + /* ---------------------------------------------------------------------- compute Bi by summing conj(Ui)*Zi ------------------------------------------------------------------------- */ @@ -1535,6 +1653,10 @@ void SNA::create_twojmax_arrays() "sna:uarraytot"); memory->create(zarray_i, jdim, jdim, jdim, jdim, jdim, "sna:zarray"); + memory->create(yarray_r, jdim, jdim, jdim, + "sna:yarray"); + memory->create(yarray_i, jdim, jdim, jdim, + "sna:yarray"); } } @@ -1563,6 +1685,8 @@ void SNA::destroy_twojmax_arrays() memory->destroy(zarray_r); memory->destroy(uarraytot_i); memory->destroy(zarray_i); + memory->destroy(yarray_r); + memory->destroy(yarray_i); } } diff --git a/src/SNAP/sna.h b/src/SNAP/sna.h index d05ad0fb84..2c90da1d30 100644 --- a/src/SNAP/sna.h +++ b/src/SNAP/sna.h @@ -47,6 +47,7 @@ public: void compute_ui_omp(int, int); void compute_zi(); void compute_zi_omp(int); + void compute_yi(double*); void compute_bi(); void copy_bi2bvec(); @@ -54,6 +55,7 @@ public: void compute_duidrj(double*, double, double); void compute_dbidrj(); + void compute_deidrj(double*); void compute_dbidrj_nonsymm(); void copy_dbi2dbvec(); double compute_sfac(double, double); @@ -80,6 +82,7 @@ public: int twojmax, diagonalstyle; double*** uarraytot_r, *** uarraytot_i; double***** zarray_r, ***** zarray_i; + double*** yarray_r, *** yarray_i; double*** uarraytot_r_b, *** uarraytot_i_b; double***** zarray_r_b, ***** zarray_i_b; double*** uarray_r, *** uarray_i; From cb6b4981277f4199e2d63402305329cef0425516 Mon Sep 17 00:00:00 2001 From: julient31 Date: Mon, 22 Apr 2019 14:43:01 -0600 Subject: [PATCH 092/311] Commit JT 042219 - change ntot -> nlocal --- src/KSPACE/pppm_dipole.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/KSPACE/pppm_dipole.cpp b/src/KSPACE/pppm_dipole.cpp index ddc59f57ab..951f83e9a7 100644 --- a/src/KSPACE/pppm_dipole.cpp +++ b/src/KSPACE/pppm_dipole.cpp @@ -551,7 +551,7 @@ void PPPMDipole::compute(int eflag, int vflag) } if (vflag_atom) { - for (i = 0; i < ntotal; i++) + for (i = 0; i < nlocal; i++) for (j = 0; j < 6; j++) vatom[i][j] *= 0.5*qscale; } } From 4c19eab64ca88c9a7edeccd724c7a0cf8f39dc40 Mon Sep 17 00:00:00 2001 From: Mingjian Wen Date: Tue, 23 Apr 2019 14:39:47 -0500 Subject: [PATCH 093/311] Bugfix no 3 nearest neighbors for ghost atoms near boundary --- potentials/C.drip | 10 ++++++--- src/USER-MISC/pair_drip.cpp | 44 +++++++++++++++++++++++++++++-------- src/USER-MISC/pair_drip.h | 4 ++-- 3 files changed, 44 insertions(+), 14 deletions(-) diff --git a/potentials/C.drip b/potentials/C.drip index 43d5ca4208..435efe40a9 100644 --- a/potentials/C.drip +++ b/potentials/C.drip @@ -6,10 +6,14 @@ # Cite as M. Wen, S. Carr, S. Fang, E. Kaxiras, and E. B. Tadmor, Phys. Rev. B, 98, 235404 (2018). -# C0 C2 C4 C delta lambda A z0 B eta rho_cut r_cut -C C 1.1598e-02 1.2981e-02 3.2515e-02 7.8151e-03 8.3679e-01 2.7158 2.2216e-02 3.34 7.6799e-03 1.1432 1.562 12.0 +# C0 C2 C4 C delta lambda A z0 B eta rho_cut r_cut normal_cut +C C 1.1598e-02 1.2981e-02 3.2515e-02 7.8151e-03 8.3679e-01 2.7158 2.2216e-02 3.34 7.6799e-03 1.1432 1.562 12.0 3.7 # C0, C2, C4, C, A, and B in [eV] -# delta, z0, eta, rho_cut, and r_cut in [Angstrom] +# delta, z0, eta, rho_cut, r_cut, and normal_cut in [Angstrom] # lambda in [1/Angstrom] +# +# normal_cut is a parameter not present in the Wen paper, but specific to the +# LAMMPS implementation, which is used to find the 3 nearest neighbors of an +# atom to construct the normal. diff --git a/src/USER-MISC/pair_drip.cpp b/src/USER-MISC/pair_drip.cpp index df7f39e8cc..338891c77a 100644 --- a/src/USER-MISC/pair_drip.cpp +++ b/src/USER-MISC/pair_drip.cpp @@ -197,6 +197,14 @@ double PairDRIP::init_one(int i, int j) { if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + int itype = map[i]; + int jtype = map[j]; + int iparam_ij = elem2param[itype][jtype]; + Param& p = params[iparam_ij]; + + // max cutoff is the main cutoff plus the normal cutoff such that + double cutmax = p.rcut + p.ncut; + return cutmax; } @@ -206,7 +214,7 @@ double PairDRIP::init_one(int i, int j) void PairDRIP::read_file(char *filename) { - int params_per_line = 14; + int params_per_line = 15; char **words = new char*[params_per_line+1]; memory->sfree(params); int nparams = 0; @@ -311,13 +319,12 @@ void PairDRIP::read_file(char *filename) params[nparams].eta = atof(words[11]); params[nparams].rhocut = atof(words[12]); params[nparams].rcut = atof(words[13]); + params[nparams].ncut = atof(words[14]); // convenient precomputations params[nparams].rhocutsq = params[nparams].rhocut * params[nparams].rhocut; params[nparams].rcutsq = params[nparams].rcut * params[nparams].rcut; - - // set max cutoff - if(params[nparams].rcut > cutmax) cutmax = params[nparams].rcut; + params[nparams].ncutsq = params[nparams].ncut * params[nparams].ncut; nparams++; } @@ -371,6 +378,9 @@ void PairDRIP::compute(int eflag, int vflag) for (ii = 0; ii < inum; ii++) { i = ilist[ii]; + if (nearest3neigh[i][0] == -1) { + continue; + } itag = tag[i]; xtmp = x[i][0]; ytmp = x[i][1]; @@ -387,6 +397,9 @@ void PairDRIP::compute(int eflag, int vflag) for (jj = 0; jj < jnum; jj++) { j = jlist[jj]; j &= NEIGHMASK; + if (nearest3neigh[j][0] == -1) { + continue; + } jtype = map[type[j]]; jtag = tag[j]; @@ -604,7 +617,7 @@ double PairDRIP::calc_repulsive(int const i, int const j, Param& p, void PairDRIP::find_nearest3neigh() { - int i, j, ii, jj, n, allnum, jnum, itype, jtype, size; + int i, j, ii, jj, n, allnum, inum, jnum, itype, jtype, size; double xtmp, ytmp, ztmp, delx, dely, delz, rsq; int *ilist, *jlist, *numneigh, **firstneigh; @@ -613,6 +626,7 @@ void PairDRIP::find_nearest3neigh() allnum = list->inum + list->gnum; + inum = list->inum; ilist = list->ilist; numneigh = list->numneigh; firstneigh = list->firstneigh; @@ -647,6 +661,7 @@ void PairDRIP::find_nearest3neigh() double nb3_rsq = 3.0e10; for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; j &= NEIGHMASK; jtype = map[type[j]]; @@ -656,9 +671,9 @@ void PairDRIP::find_nearest3neigh() rsq = delx * delx + dely * dely + delz * delz; int iparam_ij = elem2param[itype][jtype]; - double rcutsq = params[iparam_ij].rcutsq; + double ncutsq = params[iparam_ij].ncutsq; - if (rsq < rcutsq && atom->molecule[i] == atom->molecule[j]) { + if (rsq < ncutsq && atom->molecule[i] == atom->molecule[j]) { // find the 3 nearest neigh if (rsq < nb1_rsq) { nb3 = nb2; @@ -683,8 +698,19 @@ void PairDRIP::find_nearest3neigh() } // loop over jj // store neighbors to be used later to compute normal - if (nb1_rsq >= 1.0e10 || nb2_rsq >= 1.0e10 || nb3_rsq >= 1.0e10) { - error->one(FLERR, "No enough neighbors to construct normal."); + if (nb3_rsq >= 1.0e10) { + if (ione(FLERR, "No enough neighbors to construct normal."); + } else { + // This only happens for ghost atoms that are near the boundary of the + // domain (i.e. r > r_cut + n_cut). These ghost atoms will not be + // the i j atoms in the compute function, but only neighbors of j atoms. + // It is allowed not to have three neighbors for these atoms, since + // their normals are not needed. + nearest3neigh[i][0] = -1; + nearest3neigh[i][1] = -1; + nearest3neigh[i][2] = -1; + } } else{ nearest3neigh[i][0] = nb1; diff --git a/src/USER-MISC/pair_drip.h b/src/USER-MISC/pair_drip.h index b229f1aced..3035d88ad8 100644 --- a/src/USER-MISC/pair_drip.h +++ b/src/USER-MISC/pair_drip.h @@ -55,8 +55,8 @@ protected: struct Param { int ielement, jelement; - double C0, C2, C4, C, delta, lambda, A, z0, B, eta, rhocut, rcut; - double rhocutsq, rcutsq; + double C0, C2, C4, C, delta, lambda, A, z0, B, eta, rhocut, rcut, ncut; + double rhocutsq, rcutsq, ncutsq; }; Param *params; // parameter set for I-J interactions int **nearest3neigh; // nearest 3 neighbors of atoms From f548e2717ef6f752c24f0edaff00d4338e2b539a Mon Sep 17 00:00:00 2001 From: Steven Strong Date: Wed, 24 Apr 2019 17:31:44 -0500 Subject: [PATCH 094/311] add new false positives --- doc/utils/sphinx-config/false_positives.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index a845673715..b81a1b8720 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -405,6 +405,7 @@ configfile configurational conformational Contrib +cooperativity coord Coord CoordN @@ -2002,6 +2003,7 @@ ortho orthonormal orthorhombic ot +Otype Ouldridge outfile outmost @@ -2098,6 +2100,7 @@ picograms picosecond picoseconds pid +Pieniazek Pieter pimd Pisarev @@ -2466,6 +2469,7 @@ Shardlow shawn Shen Shenderova +Shi Shiga Shinoda shockvel @@ -2629,6 +2633,7 @@ Tadmor Tafipolsky tagID tagint +Tainter Tait taitwater Tajkhorshid From 47d4aa68036cb8904a6a63a66dbd215f3ed6ff9e Mon Sep 17 00:00:00 2001 From: Steven Strong Date: Wed, 24 Apr 2019 17:35:17 -0500 Subject: [PATCH 095/311] add new false positives --- doc/utils/sphinx-config/false_positives.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index b81a1b8720..a254738864 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -1131,6 +1131,7 @@ incrementing indenter indenters indianred +indices inertiax inertiay inertiaz From 888243607882c3f3cae08ab5dc461d1c4df582bf Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 25 Apr 2019 17:49:35 -0400 Subject: [PATCH 096/311] add e3b styles to legacy documentation build --- doc/src/lammps.book | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/src/lammps.book b/doc/src/lammps.book index e97ef4b994..cbe0bbb68e 100644 --- a/doc/src/lammps.book +++ b/doc/src/lammps.book @@ -475,6 +475,7 @@ compute_pair.html compute_pair_local.html compute_pe.html compute_pe_atom.html +compute_pe_e3b.html compute_plasticity_atom.html compute_pressure.html compute_pressure_cylinder.html @@ -572,6 +573,7 @@ pair_dipole.html pair_dpd.html pair_dpd_fdt.html pair_dsmc.html +pair_e3b.html pair_eam.html pair_edip.html pair_eff.html From 80af0281d18470913c61564becbd0824c7303c21 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 25 Apr 2019 17:54:27 -0400 Subject: [PATCH 097/311] replace non-ASCII characters --- doc/src/Howto_bioFF.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/Howto_bioFF.txt b/doc/src/Howto_bioFF.txt index b6995920ae..d238e4024f 100644 --- a/doc/src/Howto_bioFF.txt +++ b/doc/src/Howto_bioFF.txt @@ -56,7 +56,7 @@ COMPASS is a general force field for atomistic simulation of common organic molecules, inorganic small molecules, and polymers which was developed using ab initio and empirical parameterization techniques. See the "Tools"_Tools.html doc page for the msi2lmp tool for creating -LAMMPS template input and data files from BIOVIA’s Materials Studio +LAMMPS template input and data files from BIOVIA's Materials Studio files. Please note that the msi2lmp tool is very old and largely unmaintained, so it does not support all features of Materials Studio provided force field files, especially additions during the last decade. @@ -129,7 +129,7 @@ Fischer, Gao, Guo, Ha, et al, J Phys Chem, 102, 3586 (1998). Spellmeyer, Fox, Caldwell, Kollman, JACS 117, 5179-5197 (1995). :link(howto-Sun) -[(Sun)] Sun, J. Phys. Chem. B, 102, 7338–7364 (1998). +[(Sun)] Sun, J. Phys. Chem. B, 102, 7338-7364 (1998). :link(howto-Mayo) [(Mayo)] Mayo, Olfason, Goddard III, J Phys Chem, 94, 8897-8909 From a9388e86e39511fdb3a8b1395677ac28f6f8a560 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 25 Apr 2019 18:00:27 -0400 Subject: [PATCH 098/311] add one more false positive --- doc/utils/sphinx-config/false_positives.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index a254738864..041337786c 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -651,6 +651,7 @@ Eacn eam eangle eatom +Eb Eba ebond ebook From 21d0a16b6f6ffbbdbf561f02224639fc250fa0c7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 25 Apr 2019 18:06:09 -0400 Subject: [PATCH 099/311] minor tweak --- doc/src/Howto_diffusion.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/src/Howto_diffusion.txt b/doc/src/Howto_diffusion.txt index 6c920c9bc3..6b6eaf72ec 100644 --- a/doc/src/Howto_diffusion.txt +++ b/doc/src/Howto_diffusion.txt @@ -29,3 +29,5 @@ diffusion coefficient. The instantaneous VACF values can be accumulated in a vector via the "fix vector"_fix_vector.html command, and time integrated via the "variable trap"_variable.html function, and thus extract D. + +:line From 5df8a42e24d7ba32a26015a3a624f08f6e973a45 Mon Sep 17 00:00:00 2001 From: Steven Strong Date: Thu, 25 Apr 2019 17:49:38 -0500 Subject: [PATCH 100/311] dont set manybody_flag --- src/USER-MISC/pair_e3b.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/USER-MISC/pair_e3b.cpp b/src/USER-MISC/pair_e3b.cpp index 938b19b50f..5e60ac956b 100644 --- a/src/USER-MISC/pair_e3b.cpp +++ b/src/USER-MISC/pair_e3b.cpp @@ -48,7 +48,6 @@ PairE3B::PairE3B(LAMMPS *lmp) : Pair(lmp),pairPerAtom(10) single_enable = 0; restartinfo = 0; one_coeff = 1; - manybody_flag = 1; allocatedE3B = false; pairO = NULL; From 795cdf456fc11f1becadd58f4e0f16dd8b9ed499 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 25 Apr 2019 19:02:35 -0400 Subject: [PATCH 101/311] simplify example and skip the system generation step, so it gives consistent results in serial and parallel --- examples/USER/e3b/README | 8 +- examples/USER/e3b/e3b_box.data | 1973 +++++++++++++++++ .../USER/e3b/{in.lammps => in.e3b-tip4p2005} | 40 +- .../e3b/log.29Mar2019.e3b-tip4p2005.g++.1 | 332 +++ .../e3b/log.29Mar2019.e3b-tip4p2005.g++.4 | 332 +++ examples/USER/e3b/tip4p2005.mol | 61 - 6 files changed, 2649 insertions(+), 97 deletions(-) create mode 100644 examples/USER/e3b/e3b_box.data rename examples/USER/e3b/{in.lammps => in.e3b-tip4p2005} (73%) create mode 100644 examples/USER/e3b/log.29Mar2019.e3b-tip4p2005.g++.1 create mode 100644 examples/USER/e3b/log.29Mar2019.e3b-tip4p2005.g++.4 delete mode 100644 examples/USER/e3b/tip4p2005.mol diff --git a/examples/USER/e3b/README b/examples/USER/e3b/README index 7f13c60386..9dd4c284d6 100644 --- a/examples/USER/e3b/README +++ b/examples/USER/e3b/README @@ -1,10 +1,6 @@ The input script in.lammps simulates bulk water using the 2015 E3B potential. -It can be modified to use the 2011 E3B potential by - 1) using a tip4p molecule file instead of tip4p2005.mol - 2) changing the qdist parameter for lj/cut/tip4p/long in the pair_style - hybrid/overlay command - 3) using the 2011 "preset" command in the e3b pair_coeff command + This script also demonstrates the use of compute pe/e3b to calculate the potential energy contribution of the e3b pair style. These potential energy contributions can be found in the output file e3b.txt. See the LAMMPS -documentation for more details. \ No newline at end of file +documentation for more details. diff --git a/examples/USER/e3b/e3b_box.data b/examples/USER/e3b/e3b_box.data new file mode 100644 index 0000000000..a8e586d101 --- /dev/null +++ b/examples/USER/e3b/e3b_box.data @@ -0,0 +1,1973 @@ +LAMMPS data file via write_data, version 29 Mar 2019, timestep = 39 + +648 atoms +2 atom types +432 bonds +1 bond types +216 angles +1 angle types + +-9.3223199999999995e+00 9.3223199999999995e+00 xlo xhi +-9.3223199999999995e+00 9.3223199999999995e+00 ylo yhi +-9.3223199999999995e+00 9.3223199999999995e+00 zlo zhi + +Masses + +1 15.9994 +2 1.008 + +Atoms # full + +4 2 1 -1.1128000000000000e+00 -6.2644497247646571e+00 -8.9277464158309368e+00 -9.2289638586118450e+00 0 0 0 +7 3 1 -1.1128000000000000e+00 -3.4579165298402557e+00 -9.3034804390504036e+00 9.3191750579333963e+00 0 0 -1 +22 8 1 -1.1128000000000000e+00 -6.5784482972256972e+00 -6.0892991832768422e+00 9.2636286576365379e+00 0 0 -1 +24 8 2 5.5640000000000001e-01 -6.2883569860033823e+00 -6.9950268404476086e+00 -9.2706312989165927e+00 0 0 0 +25 9 1 -1.1128000000000000e+00 -3.3071046162069297e+00 -5.9155959538749325e+00 -9.1188397160115429e+00 0 0 0 +27 9 2 5.5640000000000001e-01 -3.2823042762063119e+00 -6.8458680022542051e+00 -8.8946163939947560e+00 0 0 0 +42 14 2 5.5640000000000001e-01 -6.3256322964305269e+00 -3.1196227750426266e+00 -8.5528488303959271e+00 0 0 0 +110 37 2 5.5640000000000001e-01 -8.9998610428778356e+00 -8.6212661373931603e+00 -6.4645003783963153e+00 0 0 0 +112 38 1 -1.1128000000000000e+00 -6.5966491070165834e+00 9.3025413834938782e+00 -6.2217969584742789e+00 0 -1 0 +113 38 2 5.5640000000000001e-01 -5.9817429896518188e+00 -8.8746554430354880e+00 -6.7873958824780498e+00 0 0 0 +115 39 1 -1.1128000000000000e+00 -3.4933004864070534e+00 -9.2643750182275308e+00 -6.1619122531520487e+00 0 0 0 +128 43 2 5.5640000000000001e-01 -8.5037100225273328e+00 -6.0419047338974883e+00 -6.3265593527963118e+00 0 0 0 +130 44 1 -1.1128000000000000e+00 -6.5938400537352857e+00 -6.3296469738236736e+00 -6.3038747094843490e+00 0 0 0 +131 44 2 5.5640000000000001e-01 -6.1349220971745542e+00 -5.5744656099438208e+00 -6.6715707806794615e+00 0 0 0 +132 44 2 5.5640000000000001e-01 -5.9752727386530129e+00 -6.7043153198407488e+00 -5.6766388979201148e+00 0 0 0 +133 45 1 -1.1128000000000000e+00 -3.5131404208428663e+00 -6.1191443287179963e+00 -6.3008694521708692e+00 0 0 0 +135 45 2 5.5640000000000001e-01 -3.1346852339994076e+00 -6.7762160100519910e+00 -5.7167799434876931e+00 0 0 0 +150 50 2 5.5640000000000001e-01 -6.2431423113920745e+00 -3.6165700027211560e+00 -5.6579187614303921e+00 0 0 0 +151 51 1 -1.1128000000000000e+00 -3.1434110782616576e+00 -3.1256540201103058e+00 -5.9202452679304773e+00 0 0 0 +221 74 2 5.5640000000000001e-01 -6.7444881935803283e+00 -8.9030287031244733e+00 -3.5761535166551890e+00 0 0 0 +235 79 1 -1.1128000000000000e+00 -9.1866518096599830e+00 -6.5759222319011803e+00 -3.1754531292526251e+00 0 0 0 +237 79 2 5.5640000000000001e-01 -9.2379325291654446e+00 -5.7878171834688663e+00 -3.7161287850599662e+00 0 0 0 +238 80 1 -1.1128000000000000e+00 -6.3413599098490261e+00 -6.1316935797332519e+00 -3.4358136117783338e+00 0 0 0 +240 80 2 5.5640000000000001e-01 -5.3906055749810404e+00 -6.1350392952630486e+00 -3.3252638822853786e+00 0 0 0 +241 81 1 -1.1128000000000000e+00 -3.3180948977737104e+00 -6.1988382043626240e+00 -3.3963035643280772e+00 0 0 0 +11 4 2 5.5640000000000001e-01 -1.2599895896217728e-01 -8.7361463159924657e+00 -8.9400975936363309e+00 0 0 0 +28 10 1 -1.1128000000000000e+00 -2.2589008359315407e-01 -6.5032785885453253e+00 -9.2555357922080610e+00 0 0 0 +30 10 2 5.5640000000000001e-01 4.4753718954535809e-01 -6.1160439894689098e+00 -8.6960173658952229e+00 0 0 0 +31 11 1 -1.1128000000000000e+00 2.7839302629692626e+00 -6.1151028871259880e+00 -9.1826874981947704e+00 0 0 0 +48 16 2 5.5640000000000001e-01 4.2833119581027301e-01 -3.5309985930883907e+00 -8.7644335968963230e+00 0 0 0 +116 39 2 5.5640000000000001e-01 -2.8391155510283017e+00 -8.5756672496887951e+00 -6.2795504815136933e+00 0 0 0 +119 40 2 5.5640000000000001e-01 -1.3510220861281247e-01 -8.7545579602836074e+00 -6.7791314763533688e+00 0 0 0 +121 41 1 -1.1128000000000000e+00 2.8042610213116008e+00 -9.1668493710721055e+00 -6.1631254475771993e+00 0 0 0 +134 45 2 5.5640000000000001e-01 -2.7624057668949873e+00 -5.7511298827445305e+00 -6.7668560576918866e+00 0 0 0 +136 46 1 -1.1128000000000000e+00 -2.6787487254774611e-01 -6.1131694615133343e+00 -6.4594071496601506e+00 0 0 0 +137 46 2 5.5640000000000001e-01 3.8565489187709606e-01 -5.5370992748316734e+00 -6.0626755174606810e+00 0 0 0 +138 46 2 5.5640000000000001e-01 -9.9604148660016253e-02 -6.9710570836601580e+00 -6.0697690367179948e+00 0 0 0 +139 47 1 -1.1128000000000000e+00 2.6920611431857195e+00 -6.1551470386106768e+00 -6.2085512872456095e+00 0 0 0 +153 51 2 5.5640000000000001e-01 -2.3720481381606002e+00 -3.1682569703998937e+00 -6.4855244401491881e+00 0 0 0 +155 52 2 5.5640000000000001e-01 -6.6508784578810742e-01 -3.2175830615630203e+00 -5.8675621682471624e+00 0 0 0 +156 52 2 5.5640000000000001e-01 5.9692721711061325e-01 -3.3794446775031712e+00 -6.6879611208795060e+00 0 0 0 +157 53 1 -1.1128000000000000e+00 3.1334753751763458e+00 -3.3246568994202450e+00 -5.8956667791867785e+00 0 0 0 +224 75 2 5.5640000000000001e-01 -2.9118925320162559e+00 -9.0761519958271020e+00 -3.8212732441486117e+00 0 0 0 +226 76 1 -1.1128000000000000e+00 -2.8957641058486683e-01 -9.1056577871127331e+00 -3.2181395408304905e+00 0 0 0 +229 77 1 -1.1128000000000000e+00 2.7250011040203446e+00 -9.3116644791435963e+00 -3.2109721085335226e+00 0 0 0 +243 81 2 5.5640000000000001e-01 -2.8869870916738214e+00 -7.0023181589160508e+00 -3.1055497435703301e+00 0 0 0 +244 82 1 -1.1128000000000000e+00 -3.0574363295045182e-01 -6.0315470939836411e+00 -3.1378467306083393e+00 0 0 0 +246 82 2 5.5640000000000001e-01 -1.7370279418288065e-01 -6.9793696983191742e+00 -3.1617178969527333e+00 0 0 0 +259 87 1 -1.1128000000000000e+00 -2.9193763774348089e+00 -3.3838300219828068e+00 -3.1587210039082176e+00 0 0 0 +266 89 2 5.5640000000000001e-01 3.0049085649261138e+00 -3.2857030115295198e+00 -3.8869390776692225e+00 0 0 0 +2 1 2 5.5640000000000001e-01 8.7972955722848312e+00 -9.2378758468766513e+00 -8.7984086204259526e+00 -1 0 0 +14 5 2 5.5640000000000001e-01 3.7466973359180367e+00 -8.9163106155747531e+00 -9.1657188119044672e+00 0 0 0 +21 7 2 5.5640000000000001e-01 8.9972080899674456e+00 -5.9021371557055993e+00 -8.5562973976928909e+00 -1 0 0 +32 11 2 5.5640000000000001e-01 3.6352891540671730e+00 -5.6966432937663019e+00 -9.0554776962444965e+00 0 0 0 +36 12 2 5.5640000000000001e-01 6.0929123560663010e+00 -6.7022008366332972e+00 -8.6932575552983327e+00 0 0 0 +37 13 1 -1.1128000000000000e+00 9.0692728702002672e+00 -3.3911324688476294e+00 -9.2750015325317232e+00 -1 0 0 +52 18 1 -1.1128000000000000e+00 5.8504669210326927e+00 -3.2236973306705856e+00 -9.2702467553228995e+00 0 0 0 +109 37 1 -1.1128000000000000e+00 8.9780856818445542e+00 -9.2584640381415610e+00 -6.2077556691417906e+00 -1 0 0 +122 41 2 5.5640000000000001e-01 3.6449043046693150e+00 -8.7143395201122491e+00 -6.2296387201756378e+00 0 0 0 +125 42 2 5.5640000000000001e-01 6.0853540714469361e+00 -8.6155769608042512e+00 -6.5447610111439047e+00 0 0 0 +127 43 1 -1.1128000000000000e+00 9.1975589777197406e+00 -5.8798980841692936e+00 -6.3430470761016737e+00 -1 0 0 +129 43 2 5.5640000000000001e-01 8.8101199618689900e+00 -6.6819507077426845e+00 -5.9925089338819921e+00 -1 0 0 +140 47 2 5.5640000000000001e-01 3.3725857326232891e+00 -5.4820831250709237e+00 -6.2012188560052435e+00 0 0 0 +141 47 2 5.5640000000000001e-01 3.1721572318350297e+00 -6.9823620002120554e+00 -6.1706964305112342e+00 0 0 0 +142 48 1 -1.1128000000000000e+00 6.3790194484485978e+00 -6.4859787533602544e+00 -6.3449300617205076e+00 0 0 0 +143 48 2 5.5640000000000001e-01 6.1030090783745434e+00 -6.3556980312817704e+00 -5.4377792122359798e+00 0 0 0 +144 48 2 5.5640000000000001e-01 5.9150594584516005e+00 -5.8084458865186592e+00 -6.8367699143319784e+00 0 0 0 +146 49 2 5.5640000000000001e-01 9.0113938486751710e+00 -3.2359217478311439e+00 -5.4887502555835921e+00 -1 0 0 +147 49 2 5.5640000000000001e-01 9.2258486656951302e+00 -3.3559110445062816e+00 -6.9826139101981619e+00 -1 0 0 +159 53 2 5.5640000000000001e-01 3.5862593106984524e+00 -3.4963791269616911e+00 -6.7212232084812733e+00 0 0 0 +161 54 2 5.5640000000000001e-01 6.9851807324603374e+00 -3.2370188287156982e+00 -6.1511109606105370e+00 0 0 0 +162 54 2 5.5640000000000001e-01 5.4869520042145172e+00 -3.2343056886916797e+00 -5.9335621901732223e+00 0 0 0 +234 78 2 5.5640000000000001e-01 6.9637881372357411e+00 -9.1135383842284909e+00 -3.1857108250172770e+00 0 0 0 +249 83 2 5.5640000000000001e-01 3.5814778868911694e+00 -6.4678510031125649e+00 -3.6965802164158448e+00 0 0 0 +252 84 2 5.5640000000000001e-01 6.7338374429945551e+00 -6.6053932284491852e+00 -3.5456816641894129e+00 0 0 0 +255 85 2 5.5640000000000001e-01 9.0395236107163282e+00 -3.8337940119423757e+00 -3.2551451044214770e+00 -1 0 0 +45 15 2 5.5640000000000001e-01 -3.3569420757895196e+00 -2.9077510612703859e+00 -8.6205670534104044e+00 0 0 0 +57 19 2 5.5640000000000001e-01 -8.6253487638942801e+00 3.5351269171605459e-01 -9.2109208595205541e+00 0 0 0 +58 20 1 -1.1128000000000000e+00 -6.3648065424941098e+00 -3.4358683348170460e-01 9.2809091831449830e+00 0 0 -1 +59 20 2 5.5640000000000001e-01 -5.5552228314836780e+00 -1.1105057229601070e-01 -8.9087800518934088e+00 0 0 0 +61 21 1 -1.1128000000000000e+00 -3.3133746108986992e+00 -2.0127704634237203e-01 -9.0365887770416240e+00 0 0 0 +62 21 2 5.5640000000000001e-01 -3.4450089912687059e+00 7.1153379908411440e-01 -9.2922953789021872e+00 0 0 0 +78 26 2 5.5640000000000001e-01 -5.7561676346575856e+00 2.5189641889665166e+00 -9.0303064208092874e+00 0 0 0 +145 49 1 -1.1128000000000000e+00 -9.2109466086440595e+00 -2.8021112395405465e+00 -6.2299753553044273e+00 0 0 0 +148 50 1 -1.1128000000000000e+00 -6.3710417356639191e+00 -2.8241289425979952e+00 -6.1798812864694534e+00 0 0 0 +149 50 2 5.5640000000000001e-01 -5.6465125370970171e+00 -2.8289289735482903e+00 -6.8049016487809615e+00 0 0 0 +152 51 2 5.5640000000000001e-01 -3.8566839050916011e+00 -2.8730204230764969e+00 -6.5061599395733376e+00 0 0 0 +165 55 2 5.5640000000000001e-01 -8.9576780051639364e+00 -5.7430402009513448e-01 -6.5645255763552370e+00 0 0 0 +166 56 1 -1.1128000000000000e+00 -6.3652092488918148e+00 2.6686360003889303e-01 -6.3847485642399615e+00 0 0 0 +167 56 2 5.5640000000000001e-01 -5.5235470086723417e+00 2.5566517330938648e-01 -5.9289358671826831e+00 0 0 0 +168 56 2 5.5640000000000001e-01 -6.6918288526208345e+00 -6.2964778092389107e-01 -6.3076349108668666e+00 0 0 0 +169 57 1 -1.1128000000000000e+00 -3.4149715150998352e+00 1.1763076799239854e-01 -5.9919911683740859e+00 0 0 0 +170 57 2 5.5640000000000001e-01 -3.1179980842850310e+00 -7.7971023896352365e-01 -6.1433596951201244e+00 0 0 0 +186 62 2 5.5640000000000001e-01 -5.9277964192692743e+00 2.5265793879023675e+00 -5.8378701553588428e+00 0 0 0 +189 63 2 5.5640000000000001e-01 -3.0870404990566960e+00 2.9387994047572246e+00 -6.9649956940052009e+00 0 0 0 +254 85 2 5.5640000000000001e-01 -8.7163818400242974e+00 -2.6171058725169636e+00 -3.1075943205741514e+00 0 0 0 +256 86 1 -1.1128000000000000e+00 -6.6168387045740982e+00 -3.1203718560514995e+00 -3.2471690980534418e+00 0 0 0 +257 86 2 5.5640000000000001e-01 -6.0668492335143975e+00 -2.3520181143289225e+00 -3.0935215766631723e+00 0 0 0 +260 87 2 5.5640000000000001e-01 -3.5746882208399140e+00 -2.8596251917519981e+00 -3.6194923851686154e+00 0 0 0 +273 91 2 5.5640000000000001e-01 -8.9744944888683751e+00 -5.2084089391545818e-01 -3.5201745579314432e+00 0 0 0 +275 92 2 5.5640000000000001e-01 -5.6232610949402515e+00 1.8629681227175848e-01 -3.5740880589124577e+00 0 0 0 +294 98 2 5.5640000000000001e-01 -5.9853568372744883e+00 2.3548903281020523e+00 -3.1603198362636427e+00 0 0 0 +297 99 2 5.5640000000000001e-01 -3.2802988482483344e+00 2.3464299673118436e+00 -3.2134698858953752e+00 0 0 0 +46 16 1 -1.1128000000000000e+00 -4.7265988839707611e-02 -2.8555749657718841e+00 -9.2477799597993755e+00 0 0 0 +64 22 1 -1.1128000000000000e+00 1.6124692624709008e-01 -1.4688967910740261e-01 -9.1363641424725728e+00 0 0 0 +65 22 2 5.5640000000000001e-01 -7.2645684199467830e-01 1.5893806162150464e-01 -8.9507091425773133e+00 0 0 0 +154 52 1 -1.1128000000000000e+00 1.4992642216212479e-01 -2.7718400095279518e+00 -6.0988609355371635e+00 0 0 0 +158 53 2 5.5640000000000001e-01 2.6403618968651119e+00 -2.5197621472876666e+00 -6.0552657772868841e+00 0 0 0 +171 57 2 5.5640000000000001e-01 -2.7851862418472715e+00 6.6177836048442040e-01 -6.4647734981702953e+00 0 0 0 +172 58 1 -1.1128000000000000e+00 -3.3589021966344934e-01 -6.5582150643545532e-04 -6.4192883001551735e+00 0 0 0 +173 58 2 5.5640000000000001e-01 9.8742577598195371e-04 -6.8413951287820696e-01 -5.8398053339133069e+00 0 0 0 +174 58 2 5.5640000000000001e-01 2.3022685171986287e-01 7.5346376055392461e-01 -6.2554459797288384e+00 0 0 0 +175 59 1 -1.1128000000000000e+00 3.0502872233903910e+00 1.6648786043628869e-01 -5.9027609195221880e+00 0 0 0 +176 59 2 5.5640000000000001e-01 2.5650463261459127e+00 -5.8631862857559269e-01 -6.2404261626072444e+00 0 0 0 +188 63 2 5.5640000000000001e-01 -2.8834799576017862e+00 3.0236558660656745e+00 -5.4671506441529312e+00 0 0 0 +190 64 1 -1.1128000000000000e+00 -2.1030418376873922e-01 3.1802709245504719e+00 -6.5113674775389425e+00 0 0 0 +191 64 2 5.5640000000000001e-01 6.7557687708375103e-01 2.8194401222984768e+00 -6.5474736953995158e+00 0 0 0 +193 65 1 -1.1128000000000000e+00 2.8020301511145038e+00 3.0215013657217655e+00 -5.9800247632657930e+00 0 0 0 +262 88 1 -1.1128000000000000e+00 -1.2630657316773311e-01 -2.7774790829989007e+00 -3.2112017719987329e+00 0 0 0 +263 88 2 5.5640000000000001e-01 8.1023743219395838e-01 -2.9735633469408809e+00 -3.1882295946438299e+00 0 0 0 +279 93 2 5.5640000000000001e-01 -2.5355160584006082e+00 -3.9629199793159819e-01 -3.5267477913553256e+00 0 0 0 +280 94 1 -1.1128000000000000e+00 -3.9670014314790109e-01 2.7937057144160047e-03 -3.1248244215168848e+00 0 0 0 +282 94 2 5.5640000000000001e-01 1.6081451824314735e-01 -7.3900994778253137e-01 -3.3599561419247519e+00 0 0 0 +283 95 1 -1.1128000000000000e+00 2.7258965864466673e+00 -7.5911642786142070e-02 -3.0247997199720995e+00 0 0 0 +298 100 1 -1.1128000000000000e+00 3.8613461078394647e-02 2.8619799174560723e+00 -3.3483093552824390e+00 0 0 0 +302 101 2 5.5640000000000001e-01 2.9128716688003906e+00 2.9015080240818460e+00 -3.8518532918109205e+00 0 0 0 +38 13 2 5.5640000000000001e-01 8.9447181620328422e+00 -2.4608335777796837e+00 -9.0879182192763377e+00 -1 0 0 +50 17 2 5.5640000000000001e-01 3.4351717008245291e+00 -2.4584996503388221e+00 -9.0815916780059958e+00 0 0 0 +53 18 2 5.5640000000000001e-01 6.2234320470565718e+00 -2.3422761243179875e+00 -9.2570881299822982e+00 0 0 0 +56 19 2 5.5640000000000001e-01 8.6625480030592517e+00 -2.6187614961755012e-01 -8.9418493568531332e+00 -1 0 0 +68 23 2 5.5640000000000001e-01 3.2731183752813653e+00 -6.4087015095439648e-01 -8.9251347704400086e+00 0 0 0 +71 24 2 5.5640000000000001e-01 5.7091895793278740e+00 -3.5945850326566514e-01 -8.8568065127039350e+00 0 0 0 +74 25 2 5.5640000000000001e-01 9.0264968825716636e+00 2.5183881553811096e+00 -8.9314324886358083e+00 -1 0 0 +160 54 1 -1.1128000000000000e+00 6.1786588867570487e+00 -2.8117687539158864e+00 -6.4426897330793533e+00 0 0 0 +163 55 1 -1.1128000000000000e+00 8.9650632858733772e+00 -1.0857981408308374e-01 -6.1424937200088161e+00 -1 0 0 +164 55 2 5.5640000000000001e-01 9.2857342061100141e+00 7.8733098153459813e-01 -6.0379204294013933e+00 -1 0 0 +177 59 2 5.5640000000000001e-01 3.6416333788644981e+00 4.0992107747639028e-01 -6.6149476245873062e+00 0 0 0 +178 60 1 -1.1128000000000000e+00 5.9192327285165227e+00 1.6911682116795523e-01 -6.0670223120606757e+00 0 0 0 +179 60 2 5.5640000000000001e-01 6.8295443795474897e+00 4.2867465435297869e-01 -5.9243741350412797e+00 0 0 0 +180 60 2 5.5640000000000001e-01 5.9736298058930526e+00 -5.8345785346548296e-01 -6.6558571812301253e+00 0 0 0 +181 61 1 -1.1128000000000000e+00 9.2425610809981649e+00 2.7030778706523777e+00 -6.2675662074084233e+00 -1 0 0 +195 65 2 5.5640000000000001e-01 3.5542424586242110e+00 2.4946046603761185e+00 -6.2502435586776999e+00 0 0 0 +197 66 2 5.5640000000000001e-01 5.5135133318479062e+00 2.7803687990503545e+00 -6.4123786367203044e+00 0 0 0 +269 90 2 5.5640000000000001e-01 6.0826780223374524e+00 -2.4163332754338782e+00 -3.4057992055865318e+00 0 0 0 +271 91 1 -1.1128000000000000e+00 8.9399329602331985e+00 2.4063041843110956e-02 -3.2263615820936877e+00 -1 0 0 +285 95 2 5.5640000000000001e-01 3.5350628175422707e+00 -5.1782310812832177e-01 -3.2828017097039397e+00 0 0 0 +288 96 2 5.5640000000000001e-01 6.6093477017660200e+00 -6.6318916392711291e-01 -3.2098849195291415e+00 0 0 0 +5 2 2 5.5640000000000001e-01 -6.3741306216179376e+00 8.9528235860113554e+00 -8.6630592707689171e+00 0 -1 0 +76 26 1 -1.1128000000000000e+00 -6.5429707307904481e+00 3.0561711304291230e+00 -9.1223582381374602e+00 0 0 0 +79 27 1 -1.1128000000000000e+00 -3.3042585912210423e+00 3.0650455503295753e+00 -9.0150928263593642e+00 0 0 0 +92 31 2 5.5640000000000001e-01 -9.0253481504377326e+00 6.7939968035279916e+00 -8.8771576826377832e+00 0 0 0 +94 32 1 -1.1128000000000000e+00 -6.2317257317653612e+00 5.9822351232633686e+00 -9.1111030363974272e+00 0 0 0 +95 32 2 5.5640000000000001e-01 -6.1496144277077729e+00 6.9323793975666304e+00 -9.0290121242948622e+00 0 0 0 +111 37 2 5.5640000000000001e-01 -9.1754804212994436e+00 8.5846897111167380e+00 -6.0271900475635389e+00 0 -1 0 +114 38 2 5.5640000000000001e-01 -6.0429720797885240e+00 8.8653813812077527e+00 -5.5749448986893739e+00 0 -1 0 +183 61 2 5.5640000000000001e-01 -8.5737577158675613e+00 3.0993697038761918e+00 -6.5383541961701823e+00 0 0 0 +184 62 1 -1.1128000000000000e+00 -6.5833698191526615e+00 3.1853570866277532e+00 -6.0667850091341977e+00 0 0 0 +185 62 2 5.5640000000000001e-01 -6.1880048904206886e+00 3.6774484322784353e+00 -6.7864256607104876e+00 0 0 0 +187 63 1 -1.1128000000000000e+00 -3.3776797968931742e+00 3.4153430775919205e+00 -6.1873004628932922e+00 0 0 0 +199 67 1 -1.1128000000000000e+00 9.2944055489716622e+00 6.0418344301396063e+00 -6.5632089669365969e+00 -1 0 0 +200 67 2 5.5640000000000001e-01 -8.6868297891938955e+00 5.9860487517836107e+00 -5.8752880187896164e+00 0 0 0 +202 68 1 -1.1128000000000000e+00 -6.5549213918529787e+00 6.1157627759459494e+00 -6.1460722495516338e+00 0 0 0 +203 68 2 5.5640000000000001e-01 -6.2203023382559648e+00 7.0100337728454516e+00 -6.0799130514651161e+00 0 0 0 +204 68 2 5.5640000000000001e-01 -5.7717233180133487e+00 5.5720626364681856e+00 -6.2315788377740944e+00 0 0 0 +205 69 1 -1.1128000000000000e+00 -3.4714889830797793e+00 6.2651482417419242e+00 -6.0571186636143066e+00 0 0 0 +219 73 2 5.5640000000000001e-01 -9.0852094291281578e+00 8.6162366297631792e+00 -3.0325855403086459e+00 0 -1 0 +223 75 1 -1.1128000000000000e+00 -3.5013966951883040e+00 9.2077932090399148e+00 -3.1591334798811608e+00 0 -1 0 +295 99 1 -1.1128000000000000e+00 -3.3052190972527260e+00 3.2868480045542001e+00 -3.3889745110253382e+00 0 0 0 +308 103 2 5.5640000000000001e-01 -9.1255628031336755e+00 5.4644539382998394e+00 -3.1909945901254027e+00 0 0 0 +309 103 2 5.5640000000000001e-01 -9.2030772977375452e+00 6.9755193510168239e+00 -3.2400177493458520e+00 0 0 0 +311 104 2 5.5640000000000001e-01 -6.7435085045373162e+00 6.7152745017385600e+00 -3.1934793605849108e+00 0 0 0 +312 104 2 5.5640000000000001e-01 -5.7731047943370069e+00 5.6082250217396803e+00 -3.5465164027885101e+00 0 0 0 +9 3 2 5.5640000000000001e-01 -2.9505777598904195e+00 8.5320105663793839e+00 -9.2590629926175296e+00 0 -1 0 +13 5 1 -1.1128000000000000e+00 3.1400824059914489e+00 8.9887786942697563e+00 -9.1324958886293714e+00 0 -1 0 +84 28 2 5.5640000000000001e-01 -3.4266112970217150e-01 3.5521335928022544e+00 -8.6978673158302264e+00 0 0 0 +87 29 2 5.5640000000000001e-01 2.7604193289917527e+00 3.4913035419404119e+00 -8.7545529669006488e+00 0 0 0 +97 33 1 -1.1128000000000000e+00 -3.1017802523177336e+00 6.5632504834523893e+00 -9.1153493754587984e+00 0 0 0 +100 34 1 -1.1128000000000000e+00 -2.8835448247234441e-01 6.4305198278880971e+00 9.3156127174248500e+00 0 0 -1 +101 34 2 5.5640000000000001e-01 5.0794154603886477e-01 6.5402516447214349e+00 -8.8092735679509353e+00 0 0 0 +103 35 1 -1.1128000000000000e+00 2.7344349104433836e+00 6.1160247045285292e+00 -9.2481954295949471e+00 0 0 0 +117 39 2 5.5640000000000001e-01 -2.9919582258690895e+00 8.5653851688876959e+00 -6.1919482181548915e+00 0 -1 0 +118 40 1 -1.1128000000000000e+00 -5.6063584297702369e-02 9.0049850058737864e+00 -6.4236819261355640e+00 0 -1 0 +120 40 2 5.5640000000000001e-01 7.2513314712968499e-02 9.1342741684889326e+00 -5.4838911666930299e+00 0 -1 0 +123 41 2 5.5640000000000001e-01 3.0322000906235904e+00 8.5480599809155837e+00 -6.1541026390823346e+00 0 -1 0 +192 64 2 5.5640000000000001e-01 -3.9461702331462267e-01 3.2708987075955802e+00 -5.5764334989441720e+00 0 0 0 +194 65 2 5.5640000000000001e-01 2.9389053142293702e+00 3.8694163376141644e+00 -6.4022155546382153e+00 0 0 0 +206 69 2 5.5640000000000001e-01 -2.7994470847610593e+00 6.8806490646299991e+00 -6.3496077763979857e+00 0 0 0 +207 69 2 5.5640000000000001e-01 -3.0827166464996929e+00 5.4013986077756959e+00 -6.1960734954491610e+00 0 0 0 +208 70 1 -1.1128000000000000e+00 -3.7587550607946124e-01 6.2735985397356036e+00 -6.0746804042663438e+00 0 0 0 +209 70 2 5.5640000000000001e-01 1.7209608658505790e-01 6.7780308051925280e+00 -6.6761476164413294e+00 0 0 0 +210 70 2 5.5640000000000001e-01 1.6619827167490905e-01 5.5247491976816976e+00 -5.8268913439273859e+00 0 0 0 +212 71 2 5.5640000000000001e-01 2.8900963771719952e+00 5.4949254567575174e+00 -6.1203739515811977e+00 0 0 0 +228 76 2 5.5640000000000001e-01 -1.0410165503711143e-01 8.6195702745263976e+00 -3.4096237076174574e+00 0 -1 0 +300 100 2 5.5640000000000001e-01 -2.9587008823262845e-01 3.7404728995806780e+00 -3.5284112237354615e+00 0 0 0 +314 105 2 5.5640000000000001e-01 -2.7860946795685799e+00 5.9314553548662508e+00 -3.8478044979948969e+00 0 0 0 +317 106 2 5.5640000000000001e-01 1.7928422209279793e-01 6.4828633324252785e+00 -3.8677988221941453e+00 0 0 0 +320 107 2 5.5640000000000001e-01 3.0035703311006361e+00 6.9606278431471607e+00 -3.1850467700859788e+00 0 0 0 +18 6 2 5.5640000000000001e-01 6.0095320664089611e+00 8.8863297905170704e+00 -8.7408435618175311e+00 0 -1 0 +73 25 1 -1.1128000000000000e+00 9.0498332670217803e+00 3.4012906819147068e+00 -9.3003397446101541e+00 -1 0 0 +89 30 2 5.5640000000000001e-01 6.6922990360051644e+00 3.6873069030148136e+00 -9.1234627308259029e+00 0 0 0 +105 35 2 5.5640000000000001e-01 3.5243353407681730e+00 5.5858814321586250e+00 -9.1423001993609905e+00 0 0 0 +106 36 1 -1.1128000000000000e+00 6.0273393601065477e+00 6.4568263655481646e+00 -9.1162621625916955e+00 0 0 0 +124 42 1 -1.1128000000000000e+00 5.9808174034682535e+00 9.0836770480288500e+00 -6.4377829242821196e+00 0 -1 0 +126 42 2 5.5640000000000001e-01 6.4988739163397877e+00 8.8709961799230150e+00 -5.6615824859571724e+00 0 -1 0 +182 61 2 5.5640000000000001e-01 8.7703678171011088e+00 3.4104315314912488e+00 -5.8284391192661236e+00 -1 0 0 +196 66 1 -1.1128000000000000e+00 6.4170670439678608e+00 3.0702456980267052e+00 -6.5367209308797998e+00 0 0 0 +198 66 2 5.5640000000000001e-01 6.6778660413802502e+00 3.4159934840572990e+00 -5.6829605727415542e+00 0 0 0 +201 67 2 5.5640000000000001e-01 8.6267804912233945e+00 6.6271947812515677e+00 -6.2059487164784688e+00 -1 0 0 +211 71 1 -1.1128000000000000e+00 3.1016000928982419e+00 6.3948419193486323e+00 -5.8726502164105812e+00 0 0 0 +213 71 2 5.5640000000000001e-01 3.2493713705705423e+00 6.8444351843814335e+00 -6.7047426456593282e+00 0 0 0 +214 72 1 -1.1128000000000000e+00 6.0090333607171607e+00 5.8953225052620182e+00 -6.1579767371124330e+00 0 0 0 +215 72 2 5.5640000000000001e-01 6.4135903460629873e+00 6.1571241975851665e+00 -6.9851927455972289e+00 0 0 0 +216 72 2 5.5640000000000001e-01 6.2522104845472466e+00 6.5867576933767609e+00 -5.5424801730471156e+00 0 0 0 +217 73 1 -1.1128000000000000e+00 8.9864576816968444e+00 -9.3076487925106530e+00 -3.2938039338439262e+00 -1 0 0 +231 77 2 5.5640000000000001e-01 3.2950332658506785e+00 8.5671098412313835e+00 -3.1444925100524839e+00 0 -1 0 +233 78 2 5.5640000000000001e-01 5.5011149554545762e+00 9.2437325192786091e+00 -3.4504448005665318e+00 0 -1 0 +290 97 2 5.5640000000000001e-01 -9.3149583791951045e+00 3.8425830033797537e+00 -3.2545245175922828e+00 0 0 0 +305 102 2 5.5640000000000001e-01 5.6370100652552706e+00 3.1239699649099326e+00 -3.6832876779049983e+00 0 0 0 +321 107 2 5.5640000000000001e-01 3.5427050798101103e+00 5.5460368346084827e+00 -3.1834535409192863e+00 0 0 0 +323 108 2 5.5640000000000001e-01 6.3372027382814293e+00 6.9923465901481139e+00 -3.1943441334888192e+00 0 0 0 +218 73 2 5.5640000000000001e-01 -9.2066124008357075e+00 -8.5199497710356429e+00 -2.9902344096724534e+00 0 0 0 +222 74 2 5.5640000000000001e-01 -5.5127557840630450e+00 9.2629424856280593e+00 -2.8372928260632411e+00 0 -1 0 +239 80 2 5.5640000000000001e-01 -6.6842494296831907e+00 -6.3625464224803867e+00 -2.5723182308436594e+00 0 0 0 +242 81 2 5.5640000000000001e-01 -3.2187522673248878e+00 -5.5935335210969566e+00 -2.6613581827842570e+00 0 0 0 +258 86 2 5.5640000000000001e-01 -6.0458252759773243e+00 -3.8655193295595165e+00 -3.0603699579448178e+00 0 0 0 +328 110 1 -1.1128000000000000e+00 -5.8897913177249537e+00 -9.1878258107100415e+00 3.8532845222200497e-02 0 0 0 +330 110 2 5.5640000000000001e-01 -6.6263560356603852e+00 -8.9477826245309142e+00 6.0056268132845392e-01 0 0 0 +332 111 2 5.5640000000000001e-01 -3.4357210658527273e+00 -8.6570095251016017e+00 8.1000246915987090e-02 0 0 0 +344 115 2 5.5640000000000001e-01 -8.5868556011679651e+00 -6.0241544757484382e+00 -2.5095739266469019e-01 0 0 0 +346 116 1 -1.1128000000000000e+00 -6.5968185532329837e+00 -6.3396655985789918e+00 -3.0413754193032664e-02 0 0 0 +347 116 2 5.5640000000000001e-01 -6.2240183449187221e+00 -5.4936541157835492e+00 2.1725822289719227e-01 0 0 0 +348 116 2 5.5640000000000001e-01 -5.8401669500251394e+00 -6.8736403469069431e+00 -2.7296012003469944e-01 0 0 0 +349 117 1 -1.1128000000000000e+00 -3.1797497832647927e+00 -6.2978921336549751e+00 -3.7185923649330865e-01 0 0 0 +350 117 2 5.5640000000000001e-01 -3.7609260340387269e+00 -5.8668348863117119e+00 2.5473961430520486e-01 0 0 0 +361 121 1 -1.1128000000000000e+00 -9.0507180583966047e+00 -3.2381508409594462e+00 1.3975451871100394e-01 0 0 0 +366 122 2 5.5640000000000001e-01 -6.4126929913465709e+00 -3.6851110188853671e+00 4.2983036792325024e-01 0 0 0 +369 123 2 5.5640000000000001e-01 -3.2095096395956384e+00 -3.6667581632755901e+00 5.3055421975466088e-01 0 0 0 +434 145 2 5.5640000000000001e-01 -8.9508118986825203e+00 -8.6209873890027566e+00 2.9356580992081760e+00 0 0 0 +436 146 1 -1.1128000000000000e+00 -6.5862937115224423e+00 -9.2262227139991424e+00 2.9729644810435625e+00 0 0 0 +454 152 1 -1.1128000000000000e+00 -5.9093387933712975e+00 -6.1882713723112293e+00 2.8947530113942541e+00 0 0 0 +455 152 2 5.5640000000000001e-01 -6.6478187441096992e+00 -6.7942852979388890e+00 2.8319978886356005e+00 0 0 0 +457 153 1 -1.1128000000000000e+00 -3.0379751205873533e+00 -6.0371770220683123e+00 2.8028311123105372e+00 0 0 0 +227 76 2 5.5640000000000001e-01 4.2625060612292448e-01 -8.8307309900276536e+00 -2.6451623908856203e+00 0 0 0 +245 82 2 5.5640000000000001e-01 5.7089728024543507e-01 -5.6703610826659867e+00 -3.0068227072243876e+00 0 0 0 +247 83 1 -1.1128000000000000e+00 2.8193459021109275e+00 -6.4686114347258501e+00 -3.1177595257436326e+00 0 0 0 +248 83 2 5.5640000000000001e-01 2.9059931004888764e+00 -5.6643768500766951e+00 -2.6056790999096959e+00 0 0 0 +261 87 2 5.5640000000000001e-01 -2.9100063440206769e+00 -3.0291489268584044e+00 -2.2699241210993524e+00 0 0 0 +264 88 2 5.5640000000000001e-01 -5.4135752422578498e-01 -3.5404861076814127e+00 -2.8087382014505957e+00 0 0 0 +336 112 2 5.5640000000000001e-01 -1.8638442446511749e-01 -9.1855420386546918e+00 7.2640376705445964e-01 0 0 0 +337 113 1 -1.1128000000000000e+00 2.9394447971815039e+00 -9.1803665090598852e+00 1.2102157125675594e-01 0 0 0 +351 117 2 5.5640000000000001e-01 -2.4007560710832974e+00 -6.5211739795647317e+00 1.3765626014103816e-01 0 0 0 +352 118 1 -1.1128000000000000e+00 -4.4309955074685214e-02 -6.4954910015900600e+00 2.0374826711371571e-01 0 0 0 +353 118 2 5.5640000000000001e-01 7.0600896805918034e-01 -6.2420407843835291e+00 -3.3399944934899573e-01 0 0 0 +354 118 2 5.5640000000000001e-01 -6.5941807364537242e-01 -5.7674518281284417e+00 1.1583718630757710e-01 0 0 0 +355 119 1 -1.1128000000000000e+00 2.9994984858993270e+00 -6.1204234795804711e+00 -3.2217683839288314e-01 0 0 0 +356 119 2 5.5640000000000001e-01 2.5390820367062035e+00 -6.7658913945060304e+00 2.1421075511014759e-01 0 0 0 +370 124 1 -1.1128000000000000e+00 -2.5308924703679736e-01 -3.3989554193276454e+00 -8.1422982558632742e-02 0 0 0 +372 124 2 5.5640000000000001e-01 2.4144268390484269e-01 -3.2507429242856349e+00 7.2469099000970894e-01 0 0 0 +373 125 1 -1.1128000000000000e+00 2.9878185585586570e+00 -3.3559888339459576e+00 -2.2151822658748566e-01 0 0 0 +374 125 2 5.5640000000000001e-01 2.6934181505850918e+00 -3.1459334348063490e+00 6.6471389413577375e-01 0 0 0 +446 149 2 5.5640000000000001e-01 2.6681316224298883e+00 -8.9869907499268216e+00 2.5776439931573756e+00 0 0 0 +458 153 2 5.5640000000000001e-01 -2.4577070604062103e+00 -6.7663159881945134e+00 3.0210184455061451e+00 0 0 0 +461 154 2 5.5640000000000001e-01 4.9365737061983461e-01 -6.1857766419377596e+00 2.4803499848679396e+00 0 0 0 +475 159 1 -1.1128000000000000e+00 -3.0363356145210991e+00 -3.2820021134245589e+00 2.8480891930794323e+00 0 0 0 +230 77 2 5.5640000000000001e-01 3.2680787960618982e+00 -8.5816286450251926e+00 -2.9133680020839789e+00 0 0 0 +236 79 2 5.5640000000000001e-01 8.9736432150012035e+00 -6.3535316445929064e+00 -2.3802195098973837e+00 -1 0 0 +250 84 1 -1.1128000000000000e+00 6.4537575547538051e+00 -5.9524817023202816e+00 -2.9042357953268683e+00 0 0 0 +251 84 2 5.5640000000000001e-01 5.5075330739933328e+00 -6.0775688607244049e+00 -2.8317859243341528e+00 0 0 0 +267 89 2 5.5640000000000001e-01 3.2902023755034779e+00 -3.4284348351630269e+00 -2.4069517855160778e+00 0 0 0 +268 90 1 -1.1128000000000000e+00 5.9102028972365179e+00 -3.1667850400459159e+00 -2.8371559231169972e+00 0 0 0 +270 90 2 5.5640000000000001e-01 6.6211404553454045e+00 -3.7793495274870250e+00 -3.0259103152396150e+00 0 0 0 +327 109 2 5.5640000000000001e-01 9.2719330929276360e+00 -8.5961680291764875e+00 -3.7016368868224092e-01 -1 0 0 +338 113 2 5.5640000000000001e-01 3.6697614123032403e+00 -8.6308361430405682e+00 -1.6296385678889827e-01 0 0 0 +341 114 2 5.5640000000000001e-01 6.2917717502832362e+00 -8.5233862861605747e+00 1.8568594383996068e-01 0 0 0 +343 115 1 -1.1128000000000000e+00 9.2115154257968825e+00 -6.4693014538574598e+00 -2.9554011369958477e-01 -1 0 0 +345 115 2 5.5640000000000001e-01 8.7531897294608285e+00 -6.1935637461260962e+00 4.9840264177092186e-01 -1 0 0 +357 119 2 5.5640000000000001e-01 3.7745748701752446e+00 -5.8912507473620765e+00 1.9057351343165546e-01 0 0 0 +358 120 1 -1.1128000000000000e+00 6.4110235985751096e+00 -6.5490315606065703e+00 1.0819442988143076e-01 0 0 0 +359 120 2 5.5640000000000001e-01 5.7109450487126470e+00 -6.1072875049226383e+00 5.8866145503068401e-01 0 0 0 +360 120 2 5.5640000000000001e-01 6.5380950085853105e+00 -6.0148969469193805e+00 -6.7596774428339546e-01 0 0 0 +363 121 2 5.5640000000000001e-01 8.7803385547140973e+00 -3.2516948942421462e+00 6.4357742180065591e-01 -1 0 0 +376 126 1 -1.1128000000000000e+00 6.0644974307845434e+00 -3.2768001026195370e+00 2.7406379650514878e-01 0 0 0 +377 126 2 5.5640000000000001e-01 5.5879956507241335e+00 -3.1239417893835917e+00 -5.4180083720257266e-01 0 0 0 +433 145 1 -1.1128000000000000e+00 8.9981012934753029e+00 -9.2461816183100503e+00 3.1388512412107157e+00 -1 0 0 +448 150 1 -1.1128000000000000e+00 6.2339172806402576e+00 -9.2433387402945222e+00 2.7660919414740217e+00 0 0 0 +451 151 1 -1.1128000000000000e+00 9.2816300607286522e+00 -6.0746587435444637e+00 2.7440048894025759e+00 -1 0 0 +465 155 2 5.5640000000000001e-01 3.5561330567306828e+00 -5.9515107370837264e+00 2.5447815496701871e+00 0 0 0 +466 156 1 -1.1128000000000000e+00 5.8781192733372061e+00 -6.2011235244417060e+00 2.9782077032452174e+00 0 0 0 +467 156 2 5.5640000000000001e-01 6.4404537831235027e+00 -5.4283014636992970e+00 3.0332681678291760e+00 0 0 0 +484 162 1 -1.1128000000000000e+00 6.3232402147170781e+00 -3.4421263567346916e+00 3.0110345883607978e+00 0 0 0 +274 92 1 -1.1128000000000000e+00 -6.1733895570327215e+00 -3.7763934448091002e-01 -3.0304151573924982e+00 0 0 0 +276 92 2 5.5640000000000001e-01 -6.8747491679749233e+00 1.9622847940055083e-01 -2.7222546200477598e+00 0 0 0 +277 93 1 -1.1128000000000000e+00 -3.3087264871333946e+00 -3.0700160686938383e-01 -2.9692854967469700e+00 0 0 0 +278 93 2 5.5640000000000001e-01 -3.4032943523155388e+00 6.3645292737023562e-01 -2.8395020655688961e+00 0 0 0 +291 97 2 5.5640000000000001e-01 -8.8683566319625928e+00 2.3998313759456273e+00 -3.1511654926624342e+00 0 0 0 +292 98 1 -1.1128000000000000e+00 -6.6022187982181588e+00 3.0728361698037072e+00 -3.0185464869482570e+00 0 0 0 +362 121 2 5.5640000000000001e-01 -9.3028678884009413e+00 -2.8859196322411274e+00 -7.1403422531699989e-01 0 0 0 +364 122 1 -1.1128000000000000e+00 -6.3020377840817652e+00 -3.1319937624196301e+00 -3.4356774720936861e-01 0 0 0 +365 122 2 5.5640000000000001e-01 -5.6623648676823928e+00 -2.4718875154174014e+00 -7.7041553391555412e-02 0 0 0 +367 123 1 -1.1128000000000000e+00 -3.4439265087765394e+00 -2.9904512567485204e+00 -1.0504307471427245e-01 0 0 0 +381 127 2 5.5640000000000001e-01 -8.8875492086873393e+00 -6.2678376333117747e-01 2.5383065062736626e-01 0 0 0 +382 128 1 -1.1128000000000000e+00 -6.6153533905535795e+00 1.2518886973488044e-01 -1.0404713213016188e-01 0 0 0 +383 128 2 5.5640000000000001e-01 -5.8257222260272368e+00 5.8516422692401371e-01 -3.8877721461247655e-01 0 0 0 +384 128 2 5.5640000000000001e-01 -6.2902918576926368e+00 -6.6312742307569594e-01 3.3087175461936785e-01 0 0 0 +385 129 1 -1.1128000000000000e+00 -3.3941079889069479e+00 2.6456918974569626e-01 -4.8072026253195982e-03 0 0 0 +387 129 2 5.5640000000000001e-01 -3.4666598627358538e+00 -6.7374600236835835e-01 1.7015232322231783e-01 0 0 0 +398 133 2 5.5640000000000001e-01 -8.8390469229299242e+00 2.6568999829236142e+00 -3.6694002883856403e-01 0 0 0 +401 134 2 5.5640000000000001e-01 -5.4167190681088346e+00 3.1128858939916522e+00 5.4430661773966195e-02 0 0 0 +402 134 2 5.5640000000000001e-01 -6.8444874107357005e+00 3.0117334522008683e+00 -4.3887818983157545e-01 0 0 0 +405 135 2 5.5640000000000001e-01 -3.1278507708685406e+00 2.3455873510870906e+00 -2.6482545400698115e-01 0 0 0 +473 158 2 5.5640000000000001e-01 -6.2021411425618762e+00 -2.3301770414818619e+00 3.0478709649122986e+00 0 0 0 +476 159 2 5.5640000000000001e-01 -3.8924839105009337e+00 -2.9027558659971513e+00 3.0467244892024947e+00 0 0 0 +487 163 1 -1.1128000000000000e+00 -9.0973382730091963e+00 -2.9115439631754153e-01 3.0167891248756988e+00 0 0 0 +490 164 1 -1.1128000000000000e+00 -6.2413192110480846e+00 -2.0921936670936378e-01 2.8099838623579592e+00 0 0 0 +494 165 2 5.5640000000000001e-01 -3.2427852226226439e+00 4.2611953840538430e-01 2.4475281466769401e+00 0 0 0 +508 170 1 -1.1128000000000000e+00 -6.4429344229093166e+00 2.8131483495707541e+00 3.2824242141721625e+00 0 0 0 +265 89 1 -1.1128000000000000e+00 2.9816920555672848e+00 -2.8017364409182530e+00 -3.0613767447809299e+00 0 0 0 +281 94 2 5.5640000000000001e-01 2.1581679685439142e-01 6.8851697742231943e-01 -2.8586269763182126e+00 0 0 0 +284 95 2 5.5640000000000001e-01 2.9767024957766761e+00 8.4169664182699033e-01 -2.9193292755582450e+00 0 0 0 +299 100 2 5.5640000000000001e-01 1.9621242833612812e-01 2.8540914934880321e+00 -2.4040783361605595e+00 0 0 0 +301 101 1 -1.1128000000000000e+00 3.0640555615250658e+00 2.7550713538170841e+00 -2.9179844726393580e+00 0 0 0 +368 123 2 5.5640000000000001e-01 -2.6051655025848039e+00 -2.6278546579094115e+00 -3.8999143684380333e-01 0 0 0 +371 124 2 5.5640000000000001e-01 -2.1092683942534871e-02 -2.6604384783575248e+00 -6.4451057053313332e-01 0 0 0 +386 129 2 5.5640000000000001e-01 -2.4562699035459854e+00 4.1497183488397732e-01 -1.2283117735917110e-01 0 0 0 +388 130 1 -1.1128000000000000e+00 2.1273166126454274e-01 9.2109724187279557e-02 1.0972977679717422e-01 0 0 0 +389 130 2 5.5640000000000001e-01 -6.1453556486217731e-01 2.0759915700912823e-01 5.7668817457055233e-01 0 0 0 +390 130 2 5.5640000000000001e-01 -4.1205699987311079e-02 -2.4985391075047014e-01 -7.4769619193186476e-01 0 0 0 +391 131 1 -1.1128000000000000e+00 2.9678248162187888e+00 -1.5504250625389510e-01 2.1140016051964380e-01 0 0 0 +392 131 2 5.5640000000000001e-01 2.8830183131851768e+00 4.1786436040437541e-01 -5.5098390557036603e-01 0 0 0 +408 136 2 5.5640000000000001e-01 7.0091678758675599e-02 2.2802864442038704e+00 9.5199562325553946e-02 0 0 0 +409 137 1 -1.1128000000000000e+00 2.6998975067731386e+00 3.0774604970355584e+00 -3.1135456908258884e-02 0 0 0 +478 160 1 -1.1128000000000000e+00 1.5815252282182035e-03 -2.9037152002537119e+00 2.7596083844421186e+00 0 0 0 +497 166 2 5.5640000000000001e-01 1.7823804512480820e-01 -6.4958344470555307e-01 2.7362271452538205e+00 0 0 0 +499 167 1 -1.1128000000000000e+00 2.9741651953734243e+00 3.3786977816202735e-01 3.1326437395248368e+00 0 0 0 +516 172 2 5.5640000000000001e-01 1.9246567001951190e-01 2.3476755669635798e+00 2.9671349787477550e+00 0 0 0 +253 85 1 -1.1128000000000000e+00 9.0460627874861572e+00 -2.9377008672109826e+00 -2.9191388923851753e+00 -1 0 0 +272 91 2 5.5640000000000001e-01 9.2864980780489113e+00 5.0491245611350777e-01 -2.4749012575147487e+00 -1 0 0 +286 96 1 -1.1128000000000000e+00 5.8755779838924882e+00 -1.0227245664243280e-01 -2.9582581409548383e+00 0 0 0 +287 96 2 5.5640000000000001e-01 6.2049922218013291e+00 7.8916091096084418e-01 -3.0721106149813457e+00 0 0 0 +289 97 1 -1.1128000000000000e+00 9.0119533611127149e+00 2.9653613224232602e+00 -3.0408538400358807e+00 -1 0 0 +306 102 2 5.5640000000000001e-01 6.6149033459266633e+00 2.7244414292694348e+00 -2.5987807875806319e+00 0 0 0 +375 125 2 5.5640000000000001e-01 3.6416477281767827e+00 -2.6863139922669412e+00 -4.2223991736496186e-01 0 0 0 +378 126 2 5.5640000000000001e-01 6.9460699560758696e+00 -2.9453329442555289e+00 1.0281525411641498e-01 0 0 0 +379 127 1 -1.1128000000000000e+00 8.9909212597512784e+00 -8.1697871217065079e-02 7.3910615334619692e-02 -1 0 0 +380 127 2 5.5640000000000001e-01 -9.2930874551033007e+00 7.2593538225733933e-01 -2.9170531292669727e-01 0 0 0 +393 131 2 5.5640000000000001e-01 3.9057735256390345e+00 -3.3450386498355245e-01 2.7359844728065991e-01 0 0 0 +394 132 1 -1.1128000000000000e+00 6.0441238763902865e+00 -2.7427760746529239e-01 2.3217008517857335e-01 0 0 0 +395 132 2 5.5640000000000001e-01 6.5376512573370267e+00 5.1938530892156487e-01 4.3915393982435952e-01 0 0 0 +396 132 2 5.5640000000000001e-01 5.8960400195176668e+00 -2.2555277022484246e-01 -7.1220299889770822e-01 0 0 0 +411 137 2 5.5640000000000001e-01 3.3443806411335926e+00 2.3877623002381121e+00 1.2735472481371313e-01 0 0 0 +412 138 1 -1.1128000000000000e+00 6.1362901370644432e+00 2.7300732154255218e+00 -5.3097491876601711e-02 0 0 0 +470 157 2 5.5640000000000001e-01 9.3021716029075154e+00 -2.4706279929356940e+00 2.5786754003349666e+00 -1 0 0 +482 161 2 5.5640000000000001e-01 3.8080697109941166e+00 -3.0629230131759071e+00 2.6841851187660937e+00 0 0 0 +486 162 2 5.5640000000000001e-01 6.5422494806048777e+00 -2.5124470900873725e+00 2.9462545043238051e+00 0 0 0 +488 163 2 5.5640000000000001e-01 8.8485933213011361e+00 8.6460987042631526e-02 2.4823478083908022e+00 -1 0 0 +500 167 2 5.5640000000000001e-01 3.7783658202977466e+00 1.2306167344315852e-01 2.6604150167047163e+00 0 0 0 +504 168 2 5.5640000000000001e-01 6.2774725155261857e+00 -4.8898035146154284e-01 2.4966217081825262e+00 0 0 0 +506 169 2 5.5640000000000001e-01 8.8741142348185811e+00 2.6245290951375293e+00 2.6259799674139774e+00 -1 0 0 +220 74 1 -1.1128000000000000e+00 -6.4384283940522575e+00 9.0616414043197615e+00 -2.9761465321335474e+00 0 -1 0 +293 98 2 5.5640000000000001e-01 -6.0630364638006959e+00 3.8630562362741170e+00 -3.0541935559472626e+00 0 0 0 +310 104 1 -1.1128000000000000e+00 -6.0097385148349831e+00 6.2109712805278532e+00 -2.8418052474274620e+00 0 0 0 +315 105 2 5.5640000000000001e-01 -3.6799567014142718e+00 6.6905832790632793e+00 -2.8903613141075999e+00 0 0 0 +326 109 2 5.5640000000000001e-01 -9.0194579866955014e+00 8.8563264244106890e+00 4.9360342675396729e-01 0 -1 0 +329 110 2 5.5640000000000001e-01 -6.2616362895854500e+00 8.8434429940124684e+00 -5.9560081042344748e-01 0 -1 0 +331 111 1 -1.1128000000000000e+00 -3.0310608565041948e+00 9.2606439426552409e+00 -3.9256240518332430e-01 0 -1 0 +400 134 1 -1.1128000000000000e+00 -6.3181472690602050e+00 3.3266919159731017e+00 2.9584039178095495e-01 0 0 0 +403 135 1 -1.1128000000000000e+00 -3.4888437955196805e+00 3.1649072524421116e+00 7.3332835021356360e-02 0 0 0 +415 139 1 -1.1128000000000000e+00 -9.1718748866094355e+00 6.4587827439443046e+00 2.1512205836637383e-01 0 0 0 +417 139 2 5.5640000000000001e-01 -8.7682785820093621e+00 5.6574561453135477e+00 -1.1848017700172224e-01 0 0 0 +418 140 1 -1.1128000000000000e+00 -6.4500871891266298e+00 6.4669388245186479e+00 -1.3259630465349825e-01 0 0 0 +419 140 2 5.5640000000000001e-01 -6.0677016927359579e+00 6.5984407896299029e+00 7.3473232453115045e-01 0 0 0 +420 140 2 5.5640000000000001e-01 -6.1434560232194846e+00 5.6007276569325439e+00 -4.0133977257461761e-01 0 0 0 +421 141 1 -1.1128000000000000e+00 -3.2580821012536494e+00 5.9743407870477556e+00 -1.9502176454351394e-01 0 0 0 +422 141 2 5.5640000000000001e-01 -3.4145011254547426e+00 5.8226201302210878e+00 7.3677700746879649e-01 0 0 0 +438 146 2 5.5640000000000001e-01 -5.9222367593284666e+00 8.8372714035025890e+00 2.6017441965015715e+00 0 -1 0 +528 176 2 5.5640000000000001e-01 -6.6055409088447830e+00 5.6762592370413465e+00 2.6948138479862491e+00 0 0 0 +530 177 2 5.5640000000000001e-01 -3.8491989167642688e+00 6.1763070203791743e+00 2.8583671024983710e+00 0 0 0 +225 75 2 5.5640000000000001e-01 -2.9765296281627678e+00 9.1820832872650353e+00 -2.3588524969799258e+00 0 -1 0 +296 99 2 5.5640000000000001e-01 -2.7427243833204731e+00 3.6715536564794302e+00 -2.7164752860376558e+00 0 0 0 +313 105 1 -1.1128000000000000e+00 -2.9597294976520803e+00 6.0603175260879443e+00 -2.9155510862770111e+00 0 0 0 +316 106 1 -1.1128000000000000e+00 -1.9670470486958458e-01 6.4990264169990937e+00 -2.9877601128839513e+00 0 0 0 +318 106 2 5.5640000000000001e-01 1.7981479805351042e-01 5.7344912916045283e+00 -2.5517861010303244e+00 0 0 0 +319 107 1 -1.1128000000000000e+00 2.7789829092336009e+00 6.0653273902271199e+00 -2.9317839733590323e+00 0 0 0 +333 111 2 5.5640000000000001e-01 -2.6304726843528634e+00 8.7227820479799671e+00 2.9013158945482498e-01 0 -1 0 +334 112 1 -1.1128000000000000e+00 1.5777749732418919e-01 9.0490841998301494e+00 -6.7297412113165353e-02 0 -1 0 +335 112 2 5.5640000000000001e-01 -4.5253850028831066e-01 9.3104004413443739e+00 -7.5659802177023272e-01 0 -1 0 +404 135 2 5.5640000000000001e-01 -2.7334118541232821e+00 3.7487524681552014e+00 1.4457052379790258e-01 0 0 0 +406 136 1 -1.1128000000000000e+00 -3.6715947306886593e-01 3.1169676119887604e+00 -6.2764188194633086e-02 0 0 0 +407 136 2 5.5640000000000001e-01 3.3945071470426091e-01 3.7627388942444915e+00 -5.2330437896262912e-02 0 0 0 +423 141 2 5.5640000000000001e-01 -2.7456088755842067e+00 6.7824669494668290e+00 -2.2401924244914354e-01 0 0 0 +424 142 1 -1.1128000000000000e+00 -3.0269105636636889e-01 6.0784555153726441e+00 -5.3382065457982457e-02 0 0 0 +425 142 2 5.5640000000000001e-01 -1.0476932936310475e-01 7.0147204171153410e+00 -2.6843218429235441e-02 0 0 0 +426 142 2 5.5640000000000001e-01 5.3760727724322777e-01 5.6508013405573418e+00 1.1119728376314261e-01 0 0 0 +428 143 2 5.5640000000000001e-01 2.5123881364195335e+00 6.6317797010353470e+00 1.8646767729017111e-01 0 0 0 +441 147 2 5.5640000000000001e-01 -2.8272410649092117e+00 8.6060199514181850e+00 2.8978019545115781e+00 0 -1 0 +442 148 1 -1.1128000000000000e+00 -3.7117718278471025e-02 -9.3127213701201690e+00 2.7330259604784315e+00 0 0 0 +445 149 1 -1.1128000000000000e+00 3.0305772860298212e+00 8.9687344912999603e+00 3.1348134431069172e+00 0 -1 0 +512 171 2 5.5640000000000001e-01 -2.5174186898493618e+00 3.2772890085323017e+00 2.6816997997774092e+00 0 0 0 +515 172 2 5.5640000000000001e-01 1.9711399715015804e-01 3.8601419045147689e+00 3.0322890070754758e+00 0 0 0 +531 177 2 5.5640000000000001e-01 -2.3581142506350172e+00 6.4175211973130910e+00 2.7562594761890802e+00 0 0 0 +532 178 1 -1.1128000000000000e+00 -2.5387539212618065e-01 6.3822613713823513e+00 2.8715747544268577e+00 0 0 0 +534 178 2 5.5640000000000001e-01 6.2134945188938207e-01 6.0362881579984027e+00 2.6964129174068918e+00 0 0 0 +535 179 1 -1.1128000000000000e+00 2.8472879212626485e+00 6.0311384622118247e+00 2.9003574618568861e+00 0 0 0 +232 78 1 -1.1128000000000000e+00 6.1857703015969125e+00 9.1374187345484490e+00 -2.7903163668054507e+00 0 -1 0 +303 101 2 5.5640000000000001e-01 3.3743194027862344e+00 3.5989815334933337e+00 -2.5898139308416948e+00 0 0 0 +304 102 1 -1.1128000000000000e+00 6.2373333187999798e+00 3.4892465726338426e+00 -3.0335490482200638e+00 0 0 0 +307 103 1 -1.1128000000000000e+00 8.9815448403631866e+00 6.2043586444450725e+00 -2.9086008113268336e+00 -1 0 0 +322 108 1 -1.1128000000000000e+00 5.8185971422045659e+00 6.1934823789744655e+00 -3.0991447937623291e+00 0 0 0 +324 108 2 5.5640000000000001e-01 6.4666334627382387e+00 5.5003327726369804e+00 -2.9722092617143909e+00 0 0 0 +325 109 1 -1.1128000000000000e+00 8.9982666495066166e+00 9.1543423430660127e+00 -1.6557838688214624e-01 -1 -1 0 +339 113 2 5.5640000000000001e-01 3.2829181555483080e+00 8.5714077702339218e+00 8.5409686291730347e-02 0 -1 0 +340 114 1 -1.1128000000000000e+00 5.7957592189248679e+00 -9.2982716112596648e+00 -7.8401550208159212e-02 0 0 0 +342 114 2 5.5640000000000001e-01 6.4516446430058130e+00 8.6520683446270965e+00 -1.4306502259315315e-01 0 -1 0 +397 133 1 -1.1128000000000000e+00 9.1954360515377047e+00 3.3812208860516137e+00 -2.2858673398261256e-01 -1 0 0 +399 133 2 5.5640000000000001e-01 9.0274672617720260e+00 3.3768784615733423e+00 7.1381691373980871e-01 -1 0 0 +410 137 2 5.5640000000000001e-01 3.2113532506299474e+00 3.8866604175431805e+00 -3.9208182584101248e-02 0 0 0 +413 138 2 5.5640000000000001e-01 6.0277979529669850e+00 3.4367211825779438e+00 -6.8962207360868266e-01 0 0 0 +414 138 2 5.5640000000000001e-01 6.4845165551051496e+00 3.1612903984504532e+00 7.2727548168497591e-01 0 0 0 +416 139 2 5.5640000000000001e-01 8.6545057157528067e+00 6.5374513075823044e+00 -2.7512927161060247e-01 -1 0 0 +427 143 1 -1.1128000000000000e+00 3.0687263572255272e+00 5.8621181115758985e+00 6.6268064624228892e-02 0 0 0 +429 143 2 5.5640000000000001e-01 3.7721599175779654e+00 6.1618795341189161e+00 -5.0944271601775748e-01 0 0 0 +430 144 1 -1.1128000000000000e+00 6.0079859032432710e+00 6.5231121777136662e+00 -3.3446718645113102e-02 0 0 0 +431 144 2 5.5640000000000001e-01 6.6866803534132142e+00 6.3378830875403445e+00 -6.8231686632036403e-01 0 0 0 +432 144 2 5.5640000000000001e-01 5.9687437880783545e+00 5.7328136639765672e+00 5.0532014106502732e-01 0 0 0 +505 169 1 -1.1128000000000000e+00 -9.3166238057630455e+00 3.3703844016345457e+00 3.0180377116682378e+00 0 0 0 +518 173 2 5.5640000000000001e-01 3.2750230818291626e+00 3.8858879398837938e+00 3.0063273794658403e+00 0 0 0 +521 174 2 5.5640000000000001e-01 5.8422674678997719e+00 3.0893795376604372e+00 2.4105228489177168e+00 0 0 0 +523 175 1 -1.1128000000000000e+00 9.1338048218535892e+00 6.0355139927592969e+00 2.9252059975234745e+00 -1 0 0 +524 175 2 5.5640000000000001e-01 9.0143661026886797e+00 6.9846869505513745e+00 2.9525936491775515e+00 -1 0 0 +537 179 2 5.5640000000000001e-01 3.6553493455550532e+00 6.5204983314878975e+00 2.7439363463382356e+00 0 0 0 +538 180 1 -1.1128000000000000e+00 5.9357364705256561e+00 6.2077138183039136e+00 2.8667939716058473e+00 0 0 0 +1 1 1 -1.1128000000000000e+00 -9.2201739700521550e+00 -9.1388934072718335e+00 9.1296580899851865e+00 0 0 -1 +6 2 2 5.5640000000000001e-01 -6.0225829621985660e+00 -9.2924182763930716e+00 8.5642015482252827e+00 0 0 -1 +20 7 2 5.5640000000000001e-01 -8.8078754637915839e+00 -5.9994104060407603e+00 8.8322252709085340e+00 0 0 -1 +23 8 2 5.5640000000000001e-01 -5.7730887635782828e+00 -5.5734033107018641e+00 9.2988115877956457e+00 0 0 -1 +39 13 2 5.5640000000000001e-01 -8.6696720127297198e+00 -3.4557816558787868e+00 9.0660688702540266e+00 0 0 -1 +40 14 1 -1.1128000000000000e+00 -6.5607883274051355e+00 -3.2661401564816632e+00 9.1755460668766027e+00 0 0 -1 +44 15 2 5.5640000000000001e-01 -3.2654544652466333e+00 -3.4348976085792788e+00 8.6078952487357121e+00 0 0 -1 +437 146 2 5.5640000000000001e-01 -6.1666732381237219e+00 -8.8436549337905515e+00 3.7434101280680574e+00 0 0 0 +453 151 2 5.5640000000000001e-01 -8.6128519800962113e+00 -6.0210263516031723e+00 3.3359686617949675e+00 0 0 0 +456 152 2 5.5640000000000001e-01 -6.1093578467467307e+00 -5.6442483531289982e+00 3.6563239186331011e+00 0 0 0 +459 153 2 5.5640000000000001e-01 -3.7305945897233554e+00 -6.0758377149702261e+00 3.4626030867327726e+00 0 0 0 +471 157 2 5.5640000000000001e-01 -8.7385174370450276e+00 -3.5528291348876238e+00 3.4481098244298609e+00 0 0 0 +472 158 1 -1.1128000000000000e+00 -6.5916176331178029e+00 -3.1920488114510523e+00 3.1960039519507011e+00 0 0 0 +474 158 2 5.5640000000000001e-01 -5.8813791396833812e+00 -3.8095733093751458e+00 3.0219692149625592e+00 0 0 0 +543 181 2 5.5640000000000001e-01 -9.1637396406679805e+00 -8.5813970708182890e+00 6.4626213597892246e+00 0 0 0 +545 182 2 5.5640000000000001e-01 -5.7312443861732323e+00 -9.2381983368978542e+00 5.6802259595631721e+00 0 0 0 +546 182 2 5.5640000000000001e-01 -6.9596012765028927e+00 -9.2633108878834491e+00 6.5648939991257906e+00 0 0 0 +547 183 1 -1.1128000000000000e+00 -3.3065963688025191e+00 -9.0368830452503790e+00 6.0499011550898034e+00 0 0 0 +561 187 2 5.5640000000000001e-01 -8.6601332483164732e+00 -5.8132749968177020e+00 6.0991181160395191e+00 0 0 0 +562 188 1 -1.1128000000000000e+00 -6.1140020746357582e+00 -6.5473019311858422e+00 6.3045513726477669e+00 0 0 0 +563 188 2 5.5640000000000001e-01 -6.6362261728042284e+00 -6.3809490605395096e+00 5.5200951157656650e+00 0 0 0 +564 188 2 5.5640000000000001e-01 -6.1289844796183841e+00 -5.7182963938064786e+00 6.7832025539577137e+00 0 0 0 +565 189 1 -1.1128000000000000e+00 -3.3357725936422624e+00 -6.0933206729662608e+00 6.4477966473912680e+00 0 0 0 +580 194 1 -1.1128000000000000e+00 -6.5235234584503292e+00 -3.3389983367560134e+00 6.2240231649788376e+00 0 0 0 +582 194 2 5.5640000000000001e-01 -5.6278390572827197e+00 -3.6143212561330977e+00 6.0287602886950502e+00 0 0 0 +585 195 2 5.5640000000000001e-01 -3.5446834103954088e+00 -3.5069738919136118e+00 5.6855338331201999e+00 0 0 0 +8 3 2 5.5640000000000001e-01 -2.7999974153887797e+00 -8.6145845988193184e+00 9.2269262801317939e+00 0 0 -1 +10 4 1 -1.1128000000000000e+00 1.7774913661603833e-01 -9.2567821036999494e+00 8.9607777955373784e+00 0 0 -1 +26 9 2 5.5640000000000001e-01 -2.8264896040176715e+00 -5.8548122627174308e+00 8.7002631089708071e+00 0 0 -1 +29 10 2 5.5640000000000001e-01 -2.6811859745750649e-01 -5.9240161981342778e+00 8.6284169801257615e+00 0 0 -1 +33 11 2 5.5640000000000001e-01 2.9594673742016111e+00 -6.8380811615047703e+00 8.8596090174665711e+00 0 0 -1 +47 16 2 5.5640000000000001e-01 -4.4674128248031114e-01 -3.3220505957705657e+00 8.6627106383141648e+00 0 0 -1 +440 147 2 5.5640000000000001e-01 -3.0257268145213052e+00 -8.6053570752783735e+00 3.3430402337425309e+00 0 0 0 +443 148 2 5.5640000000000001e-01 7.3442853967192401e-01 -9.1786829549838043e+00 3.2836176067617364e+00 0 0 0 +460 154 1 -1.1128000000000000e+00 9.5064189113940767e-02 -6.5049481284402768e+00 3.2900606389444049e+00 0 0 0 +462 154 2 5.5640000000000001e-01 -6.3021566856655731e-01 -5.9024061246126633e+00 3.4542537537302791e+00 0 0 0 +464 155 2 5.5640000000000001e-01 2.5103499407066354e+00 -6.6969771853293771e+00 3.3465817657299377e+00 0 0 0 +479 160 2 5.5640000000000001e-01 7.6135974385672800e-01 -3.1731234249594769e+00 3.2758885041096040e+00 0 0 0 +480 160 2 5.5640000000000001e-01 -7.4955495219285206e-01 -3.2587752849502194e+00 3.2347765237817443e+00 0 0 0 +483 161 2 5.5640000000000001e-01 2.5957775353062993e+00 -3.5668456325681310e+00 3.4380550154160501e+00 0 0 0 +548 183 2 5.5640000000000001e-01 -2.3558544280082074e+00 -9.0874793347927856e+00 5.9536632240434981e+00 0 0 0 +552 184 2 5.5640000000000001e-01 5.9836467908023561e-01 -8.8213688314390062e+00 6.4466978602267444e+00 0 0 0 +566 189 2 5.5640000000000001e-01 -2.8495083818320386e+00 -5.5293199925033694e+00 5.8466904609956085e+00 0 0 0 +567 189 2 5.5640000000000001e-01 -2.9293269646769096e+00 -6.9546523633908492e+00 6.3507523177980660e+00 0 0 0 +568 190 1 -1.1128000000000000e+00 1.7871515069071431e-01 -6.4891480127891663e+00 6.1329537754834256e+00 0 0 0 +569 190 2 5.5640000000000001e-01 2.9968231338510659e-01 -5.5398535061069420e+00 6.1073270402518895e+00 0 0 0 +570 190 2 5.5640000000000001e-01 -6.7865123676529970e-01 -6.6109373433736724e+00 6.5403009278036279e+00 0 0 0 +571 191 1 -1.1128000000000000e+00 2.8515226450671531e+00 -6.3853325882789980e+00 6.1368226625362494e+00 0 0 0 +573 191 2 5.5640000000000001e-01 3.0956254335649449e+00 -5.5678683332132666e+00 5.7031725029919702e+00 0 0 0 +586 196 1 -1.1128000000000000e+00 -3.0390187107557121e-01 -3.3199297446211089e+00 6.2940873232757273e+00 0 0 0 +588 196 2 5.5640000000000001e-01 3.7042253065468328e-01 -3.4560061474428134e+00 5.6288037054503608e+00 0 0 0 +590 197 2 5.5640000000000001e-01 2.9364414435016144e+00 -3.7353188808333946e+00 5.6804092871432372e+00 0 0 0 +17 6 2 5.5640000000000001e-01 6.0670098472092073e+00 -8.7039545136180347e+00 8.8188423073369382e+00 0 0 -1 +19 7 1 -1.1128000000000000e+00 9.0493605995017710e+00 -6.3532650554206764e+00 9.2459532547143013e+00 -1 0 -1 +34 12 1 -1.1128000000000000e+00 5.9300844894316853e+00 -6.3253009206786421e+00 9.0867700484241141e+00 0 0 -1 +35 12 2 5.5640000000000001e-01 6.6465512306892487e+00 -5.7039698303022437e+00 8.9568741894785600e+00 0 0 -1 +51 17 2 5.5640000000000001e-01 3.2480495245630312e+00 -3.8873331872009795e+00 9.0991989756446348e+00 0 0 -1 +54 18 2 5.5640000000000001e-01 6.5609663923275381e+00 -3.7802139730784257e+00 9.0554581526101163e+00 0 0 -1 +449 150 2 5.5640000000000001e-01 6.8112864419089743e+00 -9.0002120680301889e+00 3.4898750716615297e+00 0 0 0 +452 151 2 5.5640000000000001e-01 8.6452504446559502e+00 -6.6158447104281102e+00 3.2113657166316529e+00 -1 0 0 +463 155 1 -1.1128000000000000e+00 3.0359074536246640e+00 -5.8971044998576279e+00 3.3464116385299820e+00 0 0 0 +468 156 2 5.5640000000000001e-01 6.4562844192945699e+00 -6.9341721094222075e+00 3.1892152979431909e+00 0 0 0 +469 157 1 -1.1128000000000000e+00 9.0691208702720036e+00 -3.1603018000211702e+00 3.2002577565506805e+00 -1 0 0 +485 162 2 5.5640000000000001e-01 5.5005466742006712e+00 -3.4614546627201452e+00 3.4995698757621487e+00 0 0 0 +553 185 1 -1.1128000000000000e+00 3.3801689218667139e+00 -9.1991133531027831e+00 6.3139995896302441e+00 0 0 0 +556 186 1 -1.1128000000000000e+00 6.3057239788911650e+00 -9.1849141667448819e+00 5.9000747706270946e+00 0 0 0 +558 186 2 5.5640000000000001e-01 6.6887506597743061e+00 -9.0479434644055541e+00 6.7666252150893813e+00 0 0 0 +559 187 1 -1.1128000000000000e+00 9.2146891599733163e+00 -6.1615646696334494e+00 6.5488357152016112e+00 -1 0 0 +560 187 2 5.5640000000000001e-01 8.7172900509128208e+00 -6.6072024359066548e+00 5.8631387694158947e+00 -1 0 0 +572 191 2 5.5640000000000001e-01 3.4655365526875368e+00 -6.4624704213525019e+00 6.8670491880749305e+00 0 0 0 +574 192 1 -1.1128000000000000e+00 5.9237398640802281e+00 -6.3479292190613537e+00 6.1158861314679678e+00 0 0 0 +575 192 2 5.5640000000000001e-01 6.2097883154845572e+00 -5.5113966602679554e+00 5.7489935933222576e+00 0 0 0 +576 192 2 5.5640000000000001e-01 6.5481388524255859e+00 -6.5278088797468135e+00 6.8188065373689710e+00 0 0 0 +577 193 1 -1.1128000000000000e+00 8.9969092169324316e+00 -3.1275774465048358e+00 6.0601822054435832e+00 -1 0 0 +579 193 2 5.5640000000000001e-01 9.2089235396759523e+00 -3.6582786993874312e+00 6.8280353835437522e+00 -1 0 0 +592 198 1 -1.1128000000000000e+00 5.9584812424096185e+00 -3.3392932906696777e+00 5.9964658336462939e+00 0 0 0 +594 198 2 5.5640000000000001e-01 6.0887079237909996e+00 -3.3919748773355374e+00 6.9431625078358676e+00 0 0 0 +41 14 2 5.5640000000000001e-01 -5.8247850276718083e+00 -2.9087723597661275e+00 8.6787733597460655e+00 0 0 -1 +55 19 1 -1.1128000000000000e+00 9.2946767792165108e+00 -9.9884877075817682e-02 9.0026648344773399e+00 -1 0 -1 +60 20 2 5.5640000000000001e-01 -6.6738682439245727e+00 4.8040892143873126e-01 8.9046912553855506e+00 0 0 -1 +489 163 2 5.5640000000000001e-01 -9.1440670575644152e+00 1.8625722533440281e-01 3.8450398530155909e+00 0 0 0 +491 164 2 5.5640000000000001e-01 -5.4223586618987731e+00 -2.3096503500458940e-01 3.3047101537147530e+00 0 0 0 +492 164 2 5.5640000000000001e-01 -6.8061393080694126e+00 3.8320790002714117e-01 3.3065407113709639e+00 0 0 0 +493 165 1 -1.1128000000000000e+00 -3.2829063639384475e+00 2.0861640938798970e-01 3.3789593807262261e+00 0 0 0 +507 169 2 5.5640000000000001e-01 -8.8090646832584696e+00 2.9920997169443293e+00 3.7360922398772733e+00 0 0 0 +509 170 2 5.5640000000000001e-01 -5.5121765527390556e+00 2.7738131318839394e+00 3.0624446840682391e+00 0 0 0 +513 171 2 5.5640000000000001e-01 -3.4423298484924265e+00 2.5571919951632012e+00 3.6398645413136221e+00 0 0 0 +578 193 2 5.5640000000000001e-01 -8.8603776216804668e+00 -2.6062522806749131e+00 5.9038045686559029e+00 0 0 0 +581 194 2 5.5640000000000001e-01 -6.4550876301920228e+00 -2.3984386677935188e+00 6.3880287473343662e+00 0 0 0 +583 195 1 -1.1128000000000000e+00 -3.3532301581459363e+00 -3.0383929212733212e+00 6.4977777944810953e+00 0 0 0 +596 199 2 5.5640000000000001e-01 -8.9872175249008812e+00 6.9735531836292763e-01 6.3019617002599873e+00 0 0 0 +597 199 2 5.5640000000000001e-01 -9.3025486183757042e+00 -7.7108007489689356e-01 6.1118789277237369e+00 0 0 0 +598 200 1 -1.1128000000000000e+00 -6.2251299076122635e+00 -1.2510503642714726e-01 5.8632501938032338e+00 0 0 0 +599 200 2 5.5640000000000001e-01 -6.6334445683982581e+00 -5.5597195901803020e-01 6.6141293411577751e+00 0 0 0 +600 200 2 5.5640000000000001e-01 -5.7670780630193104e+00 6.2719476448486355e-01 6.2381146258761015e+00 0 0 0 +601 201 1 -1.1128000000000000e+00 -3.1975875915770580e+00 1.4187130144111029e-01 6.5856844726086932e+00 0 0 0 +603 201 2 5.5640000000000001e-01 -3.7127293465407605e+00 -5.6196422327294993e-01 6.1916769045358109e+00 0 0 0 +614 205 2 5.5640000000000001e-01 -9.0081483530534463e+00 2.5237279676590116e+00 6.4607424903083261e+00 0 0 0 +616 206 1 -1.1128000000000000e+00 -6.4345124876384761e+00 3.0706585193241493e+00 6.4459190486837699e+00 0 0 0 +618 206 2 5.5640000000000001e-01 -5.9002368192919024e+00 2.3791154779941994e+00 6.0556266048476388e+00 0 0 0 +43 15 1 -1.1128000000000000e+00 -2.7456160147854964e+00 -3.0198201571662988e+00 9.2962183392264244e+00 0 0 -1 +49 17 1 -1.1128000000000000e+00 2.7622945742363139e+00 -3.0892573037415705e+00 9.3071801308642268e+00 0 0 -1 +63 21 2 5.5640000000000001e-01 -2.6228160018064788e+00 -5.1675973803696673e-01 9.0247698409938426e+00 0 0 -1 +66 22 2 5.5640000000000001e-01 4.2797613313874056e-01 3.4666918479993397e-01 8.7327321063255212e+00 0 0 -1 +67 23 1 -1.1128000000000000e+00 2.7940686713085405e+00 5.6018707132647935e-02 9.2714505101250868e+00 0 0 -1 +80 27 2 5.5640000000000001e-01 -2.8236044958150415e+00 2.3720586617243877e+00 9.1768927444185966e+00 0 0 -1 +83 28 2 5.5640000000000001e-01 5.7034785490389373e-01 2.6406101650653326e+00 9.1545233548752041e+00 0 0 -1 +85 29 1 -1.1128000000000000e+00 2.8439906891875144e+00 2.9474058797817344e+00 9.1069551079935405e+00 0 0 -1 +477 159 2 5.5640000000000001e-01 -2.4386038375518244e+00 -2.8624350633769153e+00 3.4667473664957638e+00 0 0 0 +481 161 1 -1.1128000000000000e+00 3.0128653552652578e+00 -2.7640782550433514e+00 3.1253562156671664e+00 0 0 0 +495 165 2 5.5640000000000001e-01 -2.8227766049566032e+00 -6.2761112627135329e-01 3.4501566870145743e+00 0 0 0 +496 166 1 -1.1128000000000000e+00 6.9774235538015150e-03 -9.6969231419602994e-02 3.4989605527798955e+00 0 0 0 +498 166 2 5.5640000000000001e-01 -3.8356975414008837e-01 6.9808951976643985e-01 3.1366320756245769e+00 0 0 0 +501 167 2 5.5640000000000001e-01 2.7259120054294299e+00 -4.7802601081033735e-01 3.5676316133496218e+00 0 0 0 +517 173 1 -1.1128000000000000e+00 2.6887241721477801e+00 3.1468485270531650e+00 3.1686776722877039e+00 0 0 0 +584 195 2 5.5640000000000001e-01 -2.4333137018413886e+00 -2.7855087807115360e+00 6.4179547741148522e+00 0 0 0 +587 196 2 5.5640000000000001e-01 -5.0270952494838393e-02 -2.5062831453882519e+00 6.7302968586793286e+00 0 0 0 +589 197 1 -1.1128000000000000e+00 2.8317345984565101e+00 -2.9040952946573420e+00 6.1429089834829309e+00 0 0 0 +602 201 2 5.5640000000000001e-01 -2.4846893066746873e+00 2.9397467390468179e-01 5.9651243984878715e+00 0 0 0 +604 202 1 -1.1128000000000000e+00 8.3750029038297161e-02 -2.8230055010995303e-01 6.3788189830286139e+00 0 0 0 +605 202 2 5.5640000000000001e-01 -1.5186508291879441e-01 5.6545977615293497e-01 6.7554617869645126e+00 0 0 0 +606 202 2 5.5640000000000001e-01 -2.1012706060885858e-01 -2.3112986327346613e-01 5.4692950597694674e+00 0 0 0 +607 203 1 -1.1128000000000000e+00 3.0065279482487672e+00 -1.1519985781239873e-01 6.4774336150628029e+00 0 0 0 +608 203 2 5.5640000000000001e-01 2.9114194136355849e+00 7.9340430885160040e-01 6.1919303313426912e+00 0 0 0 +619 207 1 -1.1128000000000000e+00 -3.0392350326998296e+00 2.8288295014277041e+00 6.0076232014592845e+00 0 0 0 +620 207 2 5.5640000000000001e-01 -2.8379640731995277e+00 3.1488429140734366e+00 6.8870711569700145e+00 0 0 0 +622 208 1 -1.1128000000000000e+00 -2.2301697057101952e-01 2.9657949285070826e+00 6.3875307458289274e+00 0 0 0 +624 208 2 5.5640000000000001e-01 2.8142746490671477e-01 2.4511871722657230e+00 5.7575204596206273e+00 0 0 0 +69 23 2 5.5640000000000001e-01 3.4659828299476478e+00 6.9517347971926124e-01 9.0343265513940132e+00 0 0 -1 +70 24 1 -1.1128000000000000e+00 6.0008724277815775e+00 2.3919585004834948e-01 9.1002805064572545e+00 0 0 -1 +72 24 2 5.5640000000000001e-01 6.9556511153821186e+00 1.7212310292351982e-01 9.1127849197036817e+00 0 0 -1 +86 29 2 5.5640000000000001e-01 3.7863781092725000e+00 2.9041846918717802e+00 8.9442070419347797e+00 0 0 -1 +90 30 2 5.5640000000000001e-01 6.0312573048249680e+00 2.3521039572432194e+00 9.2520591827329248e+00 0 0 -1 +502 168 1 -1.1128000000000000e+00 6.5402124993310657e+00 2.1515847948114908e-01 3.0895108606885318e+00 0 0 0 +503 168 2 5.5640000000000001e-01 5.8097380666006080e+00 2.9784697875079791e-01 3.7025214357264518e+00 0 0 0 +519 173 2 5.5640000000000001e-01 3.2606952064018020e+00 2.3793415121999177e+00 3.1556942121372460e+00 0 0 0 +522 174 2 5.5640000000000001e-01 6.2525898043966350e+00 2.8073559265089494e+00 3.8402060846564678e+00 0 0 0 +591 197 2 5.5640000000000001e-01 3.5668112959932214e+00 -2.8760282280490737e+00 6.7555982694965504e+00 0 0 0 +593 198 2 5.5640000000000001e-01 6.5502322639491730e+00 -2.6428541596644006e+00 5.7111668486131268e+00 0 0 0 +595 199 1 -1.1128000000000000e+00 8.9325555501791509e+00 9.3693013534047492e-02 6.1398825529567800e+00 -1 0 0 +609 203 2 5.5640000000000001e-01 3.6856632746123261e+00 -4.7606634895020217e-01 5.9075195636167335e+00 0 0 0 +610 204 1 -1.1128000000000000e+00 5.9290027826486789e+00 -2.4660631688915655e-01 6.0702970813206747e+00 0 0 0 +611 204 2 5.5640000000000001e-01 6.0567966975515857e+00 6.6978099918662226e-01 5.8250939920921940e+00 0 0 0 +612 204 2 5.5640000000000001e-01 6.6200676575811634e+00 -4.2277765983210414e-01 6.7087974623581692e+00 0 0 0 +626 209 2 5.5640000000000001e-01 3.1585406683176482e+00 2.9073672072446954e+00 6.9445803644344011e+00 0 0 0 +628 210 1 -1.1128000000000000e+00 6.0370996573456814e+00 2.9202966605952634e+00 6.1260295866312777e+00 0 0 0 +630 210 2 5.5640000000000001e-01 6.8947350227919033e+00 2.5002910946615864e+00 6.0645158900136176e+00 0 0 0 +3 1 2 5.5640000000000001e-01 -8.8914574929093817e+00 8.6205262092365587e+00 8.9744342607923997e+00 0 -1 -1 +75 25 2 5.5640000000000001e-01 -8.7793651905425687e+00 3.4309822750796970e+00 8.8439064889534489e+00 0 0 -1 +77 26 2 5.5640000000000001e-01 -6.3433460922081384e+00 3.6527059638730308e+00 8.8007778937358960e+00 0 0 -1 +81 27 2 5.5640000000000001e-01 -3.1455384355466802e+00 3.8495773537875038e+00 9.1046424465482207e+00 0 0 -1 +93 31 2 5.5640000000000001e-01 9.2968484095117585e+00 5.4920554966740740e+00 9.0653991496375905e+00 -1 0 -1 +96 32 2 5.5640000000000001e-01 -6.2407282906755865e+00 5.8227588102800460e+00 8.5897615154632412e+00 0 0 -1 +98 33 2 5.5640000000000001e-01 -3.8755541797114645e+00 6.0939240833269199e+00 9.2174522107785073e+00 0 0 -1 +435 145 2 5.5640000000000001e-01 -9.1875445185708440e+00 8.5768843245935873e+00 3.3133389397804835e+00 0 -1 0 +439 147 1 -1.1128000000000000e+00 -3.5047408947072691e+00 9.2659861604447542e+00 3.0452693073840784e+00 0 -1 0 +510 170 2 5.5640000000000001e-01 -6.6974502239953715e+00 3.7153500545944600e+00 3.0891369674352425e+00 0 0 0 +511 171 1 -1.1128000000000000e+00 -3.4069152046351774e+00 3.2980740364869754e+00 3.0350356700776824e+00 0 0 0 +525 175 2 5.5640000000000001e-01 -8.8804785663499537e+00 5.8526006752191133e+00 3.6219359509306748e+00 0 0 0 +526 176 1 -1.1128000000000000e+00 -6.4670602482223858e+00 6.3103999088132223e+00 3.3984519996907800e+00 0 0 0 +527 176 2 5.5640000000000001e-01 -5.5831534177635485e+00 6.6456641891520052e+00 3.2488880648477814e+00 0 0 0 +541 181 1 -1.1128000000000000e+00 -8.9797617994868588e+00 9.1530399559546165e+00 6.2299533684893174e+00 0 -1 0 +544 182 1 -1.1128000000000000e+00 -6.0615835462347718e+00 9.0548803158653488e+00 6.5069714968012917e+00 0 -1 0 +549 183 2 5.5640000000000001e-01 -3.5322897088244920e+00 8.8583587714801872e+00 6.6014159434489068e+00 0 -1 0 +613 205 1 -1.1128000000000000e+00 -9.2391631575381084e+00 3.2568733399300358e+00 5.8902602572860534e+00 0 0 0 +617 206 2 5.5640000000000001e-01 -5.9875982067516054e+00 3.8828797467821161e+00 6.2074305967909318e+00 0 0 0 +621 207 2 5.5640000000000001e-01 -3.6416385003936673e+00 3.4794516547087051e+00 5.6474171365032291e+00 0 0 0 +631 211 1 -1.1128000000000000e+00 -9.0996630567682768e+00 6.1531816146731337e+00 6.5085547198638034e+00 0 0 0 +632 211 2 5.5640000000000001e-01 -9.2733556345906578e+00 5.4546828985172375e+00 5.8775585534558328e+00 0 0 0 +634 212 1 -1.1128000000000000e+00 -6.0478404344616887e+00 6.0493443305283527e+00 6.5537142523197032e+00 0 0 0 +635 212 2 5.5640000000000001e-01 -5.8282189186092781e+00 6.8813228693982911e+00 6.1342601445323819e+00 0 0 0 +636 212 2 5.5640000000000001e-01 -6.7369100112250697e+00 5.6774482967529361e+00 6.0032088412867033e+00 0 0 0 +639 213 2 5.5640000000000001e-01 -3.2366931901117066e+00 5.5783613903750675e+00 5.9382462607550224e+00 0 0 0 +12 4 2 5.5640000000000001e-01 -3.4629667695132670e-02 8.4849870875870295e+00 9.1971470405343378e+00 0 -1 -1 +15 5 2 5.5640000000000001e-01 2.4395187537562735e+00 9.2253232177462046e+00 8.9041669864027959e+00 0 -1 -1 +82 28 1 -1.1128000000000000e+00 -2.3691324102177558e-01 3.1504099729884594e+00 9.0844569100935146e+00 0 0 -1 +99 33 2 5.5640000000000001e-01 -2.3622743358717280e+00 6.0483757455608558e+00 9.2062499945032652e+00 0 0 -1 +102 34 2 5.5640000000000001e-01 -1.2665170481056229e-01 5.6459661119505240e+00 8.7915857478588855e+00 0 0 -1 +104 35 2 5.5640000000000001e-01 3.0590707871402922e+00 6.9881070068539310e+00 9.1716639428005653e+00 0 0 -1 +444 148 2 5.5640000000000001e-01 -7.5188724913553628e-01 9.1868899485289433e+00 3.3527413473847307e+00 0 -1 0 +514 172 1 -1.1128000000000000e+00 -3.2068727565882854e-01 3.0934415880478094e+00 3.2780355423892580e+00 0 0 0 +529 177 1 -1.1128000000000000e+00 -3.0375070023116111e+00 6.1221254980137996e+00 3.3625237375216681e+00 0 0 0 +533 178 2 5.5640000000000001e-01 -4.0708287857178099e-01 6.1904038122418887e+00 3.7967337242582988e+00 0 0 0 +536 179 2 5.5640000000000001e-01 2.7717243351193597e+00 5.9910599905998083e+00 3.8533700463735303e+00 0 0 0 +550 184 1 -1.1128000000000000e+00 2.2407037687211875e-01 9.0785683219946680e+00 5.9757609834770742e+00 0 -1 0 +551 184 2 5.5640000000000001e-01 -7.0903082272059836e-01 9.1054577441520088e+00 6.1870499843103444e+00 0 -1 0 +555 185 2 5.5640000000000001e-01 2.8268434997647378e+00 8.9805158712185893e+00 6.9412535063493346e+00 0 -1 0 +623 208 2 5.5640000000000001e-01 1.5135573040011233e-01 3.8450522041786450e+00 6.3337582400836991e+00 0 0 0 +627 209 2 5.5640000000000001e-01 2.4332500201897829e+00 3.2801000527294457e+00 5.6690474960751764e+00 0 0 0 +637 213 1 -1.1128000000000000e+00 -3.2393324637425200e+00 6.5272348490791039e+00 6.0650485492622250e+00 0 0 0 +638 213 2 5.5640000000000001e-01 -2.9470924639271785e+00 6.6496274919931917e+00 6.9680380899330556e+00 0 0 0 +640 214 1 -1.1128000000000000e+00 -3.4146678893271215e-01 6.2167721759248709e+00 6.2014042511778511e+00 0 0 0 +641 214 2 5.5640000000000001e-01 3.0013504109779254e-01 6.6668373326949713e+00 5.6517156787357399e+00 0 0 0 +642 214 2 5.5640000000000001e-01 1.8515644392646896e-01 5.7235401113049873e+00 6.8302097991489674e+00 0 0 0 +645 215 2 5.5640000000000001e-01 3.0746132041177052e+00 6.1941371971974739e+00 5.4509077256452985e+00 0 0 0 +16 6 1 -1.1128000000000000e+00 6.5620377818282085e+00 9.2120116405968417e+00 9.1930701719735488e+00 0 -1 -1 +88 30 1 -1.1128000000000000e+00 5.8834823965721643e+00 3.2958859916585879e+00 9.1909201322898042e+00 0 0 -1 +91 31 1 -1.1128000000000000e+00 8.9433361515655196e+00 6.3635376984692096e+00 9.2439934237335315e+00 -1 0 -1 +107 36 2 5.5640000000000001e-01 6.9503902214288464e+00 6.4602294692215665e+00 9.2738813675572533e+00 0 0 -1 +108 36 2 5.5640000000000001e-01 5.6899063398938976e+00 5.6251638637240040e+00 9.1961510390105179e+00 0 0 -1 +447 149 2 5.5640000000000001e-01 3.6904857823893638e+00 -9.2318178001587032e+00 3.6670910618241219e+00 0 0 0 +450 150 2 5.5640000000000001e-01 5.5157911624780187e+00 8.9242586855129939e+00 3.1817439241689045e+00 0 -1 0 +520 174 1 -1.1128000000000000e+00 6.4130199650651294e+00 3.4059461410314027e+00 3.1105915596891931e+00 0 0 0 +539 180 2 5.5640000000000001e-01 6.4011100744126175e+00 6.9388369038191495e+00 3.2729211660912294e+00 0 0 0 +540 180 2 5.5640000000000001e-01 6.2657478623504366e+00 5.4316324922483146e+00 3.3197457532669481e+00 0 0 0 +542 181 2 5.5640000000000001e-01 8.8392000091640668e+00 8.8244995370333825e+00 5.8746285796721089e+00 -1 -1 0 +554 185 2 5.5640000000000001e-01 3.0476403470435534e+00 9.1791579733113693e+00 5.4567684891796837e+00 0 -1 0 +557 186 2 5.5640000000000001e-01 5.7775407822659757e+00 8.6671359867628830e+00 5.9935440714454193e+00 0 -1 0 +615 205 2 5.5640000000000001e-01 8.6096364911445953e+00 3.6209692398544071e+00 6.2776837676181563e+00 -1 0 0 +625 209 1 -1.1128000000000000e+00 3.2937291567039724e+00 3.0296252256637581e+00 6.0047637382045940e+00 0 0 0 +629 210 2 5.5640000000000001e-01 6.2264728206548128e+00 3.8105521358719541e+00 6.4230676910456515e+00 0 0 0 +633 211 2 5.5640000000000001e-01 9.0903383933366815e+00 6.9166371977638557e+00 6.1526705338028842e+00 -1 0 0 +643 215 1 -1.1128000000000000e+00 3.1306480491963824e+00 5.8920202521800897e+00 6.3574198006284881e+00 0 0 0 +644 215 2 5.5640000000000001e-01 3.1070282713202997e+00 6.6938818026210569e+00 6.8795272523231317e+00 0 0 0 +646 216 1 -1.1128000000000000e+00 6.3347451712378744e+00 5.9928359083662688e+00 5.9288671240493374e+00 0 0 0 +647 216 2 5.5640000000000001e-01 6.5670616226768939e+00 6.9033298928257194e+00 6.1109819521068589e+00 0 0 0 +648 216 2 5.5640000000000001e-01 5.7406263646806570e+00 5.7500817348051392e+00 6.6391001439915067e+00 0 0 0 + +Velocities + +4 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +7 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +22 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +24 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +25 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +27 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +42 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +110 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +112 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +113 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +115 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +128 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +130 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +131 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +132 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +133 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +135 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +150 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +151 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +221 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +235 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +237 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +238 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +240 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +241 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +11 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +28 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +30 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +31 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +48 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +116 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +119 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +121 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +134 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +136 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +137 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +138 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +139 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +153 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +155 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +156 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +157 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +224 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +226 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +229 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +243 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +244 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +246 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +259 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +266 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +14 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +21 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +32 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +36 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +37 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +52 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +109 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +122 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +125 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +127 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +129 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +140 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +141 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +142 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +143 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +144 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +146 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +147 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +159 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +161 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +162 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +234 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +249 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +252 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +255 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +45 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +57 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +58 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +59 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +61 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +62 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +78 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +145 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +148 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +149 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +152 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +165 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +166 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +167 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +168 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +169 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +170 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +186 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +189 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +254 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +256 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +257 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +260 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +273 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +275 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +294 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +297 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +46 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +64 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +65 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +154 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +158 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +171 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +172 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +173 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +174 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +175 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +176 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +188 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +190 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +191 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +193 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +262 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +263 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +279 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +280 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +282 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +283 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +298 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +302 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +38 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +50 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +53 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +56 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +68 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +71 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +74 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +160 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +163 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +164 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +177 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +178 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +179 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +180 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +181 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +195 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +197 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +269 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +271 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +285 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +288 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +5 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +76 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +79 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +92 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +94 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +95 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +111 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +114 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +183 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +184 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +185 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +187 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +199 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +200 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +202 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +203 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +204 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +205 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +219 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +223 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +295 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +308 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +309 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +311 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +312 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +9 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +13 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +84 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +87 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +97 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +100 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +101 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +103 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +117 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +118 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +120 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +123 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +192 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +194 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +206 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +207 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +208 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +209 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +210 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +212 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +228 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +300 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +314 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +317 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +320 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +18 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +73 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +89 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +105 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +106 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +124 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +126 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +182 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +196 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +198 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +201 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +211 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +213 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +214 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +215 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +216 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +217 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +231 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +233 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +290 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +305 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +321 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +323 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +218 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +222 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +239 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +242 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +258 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +328 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +330 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +332 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +344 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +346 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +347 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +348 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +349 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +350 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +361 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +366 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +369 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +434 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +436 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +454 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +455 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +457 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +227 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +245 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +247 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +248 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +261 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +264 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +336 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +337 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +351 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +352 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +353 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +354 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +355 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +356 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +370 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +372 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +373 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +374 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +446 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +458 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +461 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +475 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +230 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +236 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +250 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +251 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +267 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +268 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +270 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +327 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +338 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +341 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +343 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +345 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +357 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +358 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +359 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +360 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +363 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +376 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +377 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +433 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +448 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +451 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +465 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +466 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +467 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +484 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +274 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +276 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +277 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +278 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +291 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +292 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +362 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +364 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +365 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +367 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +381 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +382 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +383 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +384 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +385 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +387 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +398 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +401 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +402 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +405 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +473 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +476 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +487 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +490 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +494 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +508 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +265 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +281 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +284 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +299 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +301 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +368 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +371 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +386 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +388 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +389 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +390 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +391 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +392 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +408 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +409 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +478 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +497 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +499 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +516 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +253 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +272 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +286 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +287 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +289 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +306 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +375 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +378 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +379 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +380 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +393 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +394 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +395 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +396 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +411 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +412 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +470 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +482 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +486 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +488 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +500 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +504 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +506 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +220 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +293 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +310 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +315 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +326 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +329 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +331 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +400 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +403 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +415 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +417 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +418 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +419 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +420 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +421 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +422 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +438 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +528 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +530 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +225 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +296 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +313 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +316 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +318 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +319 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +333 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +334 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +335 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +404 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +406 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +407 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +423 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +424 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +425 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +426 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +428 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +441 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +442 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +445 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +512 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +515 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +531 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +532 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +534 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +535 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +232 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +303 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +304 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +307 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +322 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +324 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +325 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +339 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +340 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +342 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +397 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +399 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +410 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +413 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +414 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +416 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +427 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +429 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +430 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +431 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +432 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +505 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +518 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +521 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +523 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +524 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +537 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +538 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +1 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +6 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +20 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +23 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +39 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +40 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +44 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +437 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +453 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +456 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +459 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +471 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +472 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +474 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +543 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +545 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +546 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +547 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +561 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +562 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +563 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +564 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +565 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +580 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +582 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +585 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +8 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +10 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +26 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +29 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +33 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +47 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +440 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +443 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +460 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +462 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +464 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +479 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +480 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +483 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +548 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +552 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +566 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +567 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +568 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +569 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +570 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +571 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +573 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +586 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +588 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +590 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +17 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +19 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +34 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +35 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +51 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +54 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +449 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +452 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +463 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +468 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +469 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +485 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +553 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +556 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +558 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +559 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +560 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +572 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +574 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +575 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +576 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +577 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +579 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +592 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +594 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +41 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +55 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +60 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +489 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +491 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +492 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +493 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +507 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +509 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +513 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +578 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +581 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +583 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +596 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +597 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +598 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +599 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +600 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +601 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +603 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +614 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +616 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +618 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +43 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +49 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +63 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +66 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +67 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +80 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +83 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +85 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +477 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +481 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +495 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +496 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +498 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +501 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +517 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +584 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +587 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +589 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +602 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +604 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +605 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +606 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +607 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +608 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +619 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +620 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +622 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +624 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +69 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +70 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +72 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +86 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +90 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +502 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +503 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +519 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +522 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +591 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +593 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +595 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +609 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +610 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +611 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +612 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +626 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +628 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +630 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +3 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +75 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +77 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +81 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +93 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +96 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +98 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +435 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +439 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +510 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +511 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +525 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +526 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +527 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +541 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +544 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +549 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +613 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +617 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +621 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +631 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +632 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +634 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +635 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +636 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +639 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +12 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +15 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +82 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +99 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +102 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +104 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +444 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +514 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +529 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +533 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +536 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +550 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +551 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +555 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +623 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +627 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +637 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +638 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +640 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +641 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +642 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +645 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +16 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +88 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +91 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +107 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +108 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +447 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +450 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +520 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +539 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +540 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +542 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +554 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +557 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +615 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +625 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +629 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +633 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +643 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +644 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +646 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +647 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +648 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 + +Bonds + +1 1 4 5 +2 1 4 6 +3 1 7 8 +4 1 7 9 +5 1 22 23 +6 1 22 24 +7 1 25 26 +8 1 25 27 +9 1 112 113 +10 1 112 114 +11 1 115 116 +12 1 115 117 +13 1 130 131 +14 1 130 132 +15 1 133 134 +16 1 133 135 +17 1 151 152 +18 1 151 153 +19 1 235 236 +20 1 235 237 +21 1 238 239 +22 1 238 240 +23 1 241 242 +24 1 241 243 +25 1 28 29 +26 1 28 30 +27 1 31 32 +28 1 31 33 +29 1 121 122 +30 1 121 123 +31 1 136 137 +32 1 136 138 +33 1 139 140 +34 1 139 141 +35 1 157 158 +36 1 157 159 +37 1 226 227 +38 1 226 228 +39 1 229 230 +40 1 229 231 +41 1 244 245 +42 1 244 246 +43 1 259 260 +44 1 259 261 +45 1 37 38 +46 1 37 39 +47 1 52 53 +48 1 52 54 +49 1 109 110 +50 1 109 111 +51 1 127 128 +52 1 127 129 +53 1 142 143 +54 1 142 144 +55 1 58 59 +56 1 58 60 +57 1 61 62 +58 1 61 63 +59 1 145 146 +60 1 145 147 +61 1 148 149 +62 1 148 150 +63 1 166 167 +64 1 166 168 +65 1 169 170 +66 1 169 171 +67 1 256 257 +68 1 256 258 +69 1 46 47 +70 1 46 48 +71 1 64 65 +72 1 64 66 +73 1 154 155 +74 1 154 156 +75 1 172 173 +76 1 172 174 +77 1 175 176 +78 1 175 177 +79 1 190 191 +80 1 190 192 +81 1 193 194 +82 1 193 195 +83 1 262 263 +84 1 262 264 +85 1 280 281 +86 1 280 282 +87 1 283 284 +88 1 283 285 +89 1 298 299 +90 1 298 300 +91 1 160 161 +92 1 160 162 +93 1 163 164 +94 1 163 165 +95 1 178 179 +96 1 178 180 +97 1 181 182 +98 1 181 183 +99 1 271 272 +100 1 271 273 +101 1 76 77 +102 1 76 78 +103 1 79 80 +104 1 79 81 +105 1 94 95 +106 1 94 96 +107 1 184 185 +108 1 184 186 +109 1 187 188 +110 1 187 189 +111 1 199 200 +112 1 199 201 +113 1 202 203 +114 1 202 204 +115 1 205 206 +116 1 205 207 +117 1 223 224 +118 1 223 225 +119 1 295 296 +120 1 295 297 +121 1 13 14 +122 1 13 15 +123 1 97 98 +124 1 97 99 +125 1 100 101 +126 1 100 102 +127 1 103 104 +128 1 103 105 +129 1 118 119 +130 1 118 120 +131 1 208 209 +132 1 208 210 +133 1 73 74 +134 1 73 75 +135 1 106 107 +136 1 106 108 +137 1 124 125 +138 1 124 126 +139 1 196 197 +140 1 196 198 +141 1 211 212 +142 1 211 213 +143 1 214 215 +144 1 214 216 +145 1 217 218 +146 1 217 219 +147 1 328 329 +148 1 328 330 +149 1 346 347 +150 1 346 348 +151 1 349 350 +152 1 349 351 +153 1 361 362 +154 1 361 363 +155 1 436 437 +156 1 436 438 +157 1 454 455 +158 1 454 456 +159 1 457 458 +160 1 457 459 +161 1 247 248 +162 1 247 249 +163 1 337 338 +164 1 337 339 +165 1 352 353 +166 1 352 354 +167 1 355 356 +168 1 355 357 +169 1 370 371 +170 1 370 372 +171 1 373 374 +172 1 373 375 +173 1 475 476 +174 1 475 477 +175 1 250 251 +176 1 250 252 +177 1 268 269 +178 1 268 270 +179 1 343 344 +180 1 343 345 +181 1 358 359 +182 1 358 360 +183 1 376 377 +184 1 376 378 +185 1 433 434 +186 1 433 435 +187 1 448 449 +188 1 448 450 +189 1 451 452 +190 1 451 453 +191 1 466 467 +192 1 466 468 +193 1 484 485 +194 1 484 486 +195 1 274 275 +196 1 274 276 +197 1 277 278 +198 1 277 279 +199 1 292 293 +200 1 292 294 +201 1 364 365 +202 1 364 366 +203 1 367 368 +204 1 367 369 +205 1 382 383 +206 1 382 384 +207 1 385 386 +208 1 385 387 +209 1 487 488 +210 1 487 489 +211 1 490 491 +212 1 490 492 +213 1 508 509 +214 1 508 510 +215 1 265 266 +216 1 265 267 +217 1 301 302 +218 1 301 303 +219 1 388 389 +220 1 388 390 +221 1 391 392 +222 1 391 393 +223 1 409 410 +224 1 409 411 +225 1 478 479 +226 1 478 480 +227 1 499 500 +228 1 499 501 +229 1 253 254 +230 1 253 255 +231 1 286 287 +232 1 286 288 +233 1 289 290 +234 1 289 291 +235 1 379 380 +236 1 379 381 +237 1 394 395 +238 1 394 396 +239 1 412 413 +240 1 412 414 +241 1 220 221 +242 1 220 222 +243 1 310 311 +244 1 310 312 +245 1 331 332 +246 1 331 333 +247 1 400 401 +248 1 400 402 +249 1 403 404 +250 1 403 405 +251 1 415 416 +252 1 415 417 +253 1 418 419 +254 1 418 420 +255 1 421 422 +256 1 421 423 +257 1 313 314 +258 1 313 315 +259 1 316 317 +260 1 316 318 +261 1 319 320 +262 1 319 321 +263 1 334 335 +264 1 334 336 +265 1 406 407 +266 1 406 408 +267 1 424 425 +268 1 424 426 +269 1 442 443 +270 1 442 444 +271 1 445 446 +272 1 445 447 +273 1 532 533 +274 1 532 534 +275 1 535 536 +276 1 535 537 +277 1 232 233 +278 1 232 234 +279 1 304 305 +280 1 304 306 +281 1 307 308 +282 1 307 309 +283 1 322 323 +284 1 322 324 +285 1 325 326 +286 1 325 327 +287 1 340 341 +288 1 340 342 +289 1 397 398 +290 1 397 399 +291 1 427 428 +292 1 427 429 +293 1 430 431 +294 1 430 432 +295 1 505 506 +296 1 505 507 +297 1 523 524 +298 1 523 525 +299 1 538 539 +300 1 538 540 +301 1 1 2 +302 1 1 3 +303 1 40 41 +304 1 40 42 +305 1 472 473 +306 1 472 474 +307 1 547 548 +308 1 547 549 +309 1 562 563 +310 1 562 564 +311 1 565 566 +312 1 565 567 +313 1 580 581 +314 1 580 582 +315 1 10 11 +316 1 10 12 +317 1 460 461 +318 1 460 462 +319 1 568 569 +320 1 568 570 +321 1 571 572 +322 1 571 573 +323 1 586 587 +324 1 586 588 +325 1 19 20 +326 1 19 21 +327 1 34 35 +328 1 34 36 +329 1 463 464 +330 1 463 465 +331 1 469 470 +332 1 469 471 +333 1 553 554 +334 1 553 555 +335 1 556 557 +336 1 556 558 +337 1 559 560 +338 1 559 561 +339 1 574 575 +340 1 574 576 +341 1 577 578 +342 1 577 579 +343 1 592 593 +344 1 592 594 +345 1 55 56 +346 1 55 57 +347 1 493 494 +348 1 493 495 +349 1 583 584 +350 1 583 585 +351 1 598 599 +352 1 598 600 +353 1 601 602 +354 1 601 603 +355 1 616 617 +356 1 616 618 +357 1 43 44 +358 1 43 45 +359 1 49 50 +360 1 49 51 +361 1 67 68 +362 1 67 69 +363 1 85 86 +364 1 85 87 +365 1 481 482 +366 1 481 483 +367 1 496 497 +368 1 496 498 +369 1 517 518 +370 1 517 519 +371 1 589 590 +372 1 589 591 +373 1 604 605 +374 1 604 606 +375 1 607 608 +376 1 607 609 +377 1 619 620 +378 1 619 621 +379 1 622 623 +380 1 622 624 +381 1 70 71 +382 1 70 72 +383 1 502 503 +384 1 502 504 +385 1 595 596 +386 1 595 597 +387 1 610 611 +388 1 610 612 +389 1 628 629 +390 1 628 630 +391 1 439 440 +392 1 439 441 +393 1 511 512 +394 1 511 513 +395 1 526 527 +396 1 526 528 +397 1 541 542 +398 1 541 543 +399 1 544 545 +400 1 544 546 +401 1 613 614 +402 1 613 615 +403 1 631 632 +404 1 631 633 +405 1 634 635 +406 1 634 636 +407 1 82 83 +408 1 82 84 +409 1 514 515 +410 1 514 516 +411 1 529 530 +412 1 529 531 +413 1 550 551 +414 1 550 552 +415 1 637 638 +416 1 637 639 +417 1 640 641 +418 1 640 642 +419 1 16 17 +420 1 16 18 +421 1 88 89 +422 1 88 90 +423 1 91 92 +424 1 91 93 +425 1 520 521 +426 1 520 522 +427 1 625 626 +428 1 625 627 +429 1 643 644 +430 1 643 645 +431 1 646 647 +432 1 646 648 + +Angles + +1 1 5 4 6 +2 1 8 7 9 +3 1 23 22 24 +4 1 26 25 27 +5 1 113 112 114 +6 1 116 115 117 +7 1 131 130 132 +8 1 134 133 135 +9 1 152 151 153 +10 1 236 235 237 +11 1 239 238 240 +12 1 242 241 243 +13 1 29 28 30 +14 1 32 31 33 +15 1 122 121 123 +16 1 137 136 138 +17 1 140 139 141 +18 1 158 157 159 +19 1 227 226 228 +20 1 230 229 231 +21 1 245 244 246 +22 1 260 259 261 +23 1 38 37 39 +24 1 53 52 54 +25 1 110 109 111 +26 1 128 127 129 +27 1 143 142 144 +28 1 59 58 60 +29 1 62 61 63 +30 1 146 145 147 +31 1 149 148 150 +32 1 167 166 168 +33 1 170 169 171 +34 1 257 256 258 +35 1 47 46 48 +36 1 65 64 66 +37 1 155 154 156 +38 1 173 172 174 +39 1 176 175 177 +40 1 191 190 192 +41 1 194 193 195 +42 1 263 262 264 +43 1 281 280 282 +44 1 284 283 285 +45 1 299 298 300 +46 1 161 160 162 +47 1 164 163 165 +48 1 179 178 180 +49 1 182 181 183 +50 1 272 271 273 +51 1 77 76 78 +52 1 80 79 81 +53 1 95 94 96 +54 1 185 184 186 +55 1 188 187 189 +56 1 200 199 201 +57 1 203 202 204 +58 1 206 205 207 +59 1 224 223 225 +60 1 296 295 297 +61 1 14 13 15 +62 1 98 97 99 +63 1 101 100 102 +64 1 104 103 105 +65 1 119 118 120 +66 1 209 208 210 +67 1 74 73 75 +68 1 107 106 108 +69 1 125 124 126 +70 1 197 196 198 +71 1 212 211 213 +72 1 215 214 216 +73 1 218 217 219 +74 1 329 328 330 +75 1 347 346 348 +76 1 350 349 351 +77 1 362 361 363 +78 1 437 436 438 +79 1 455 454 456 +80 1 458 457 459 +81 1 248 247 249 +82 1 338 337 339 +83 1 353 352 354 +84 1 356 355 357 +85 1 371 370 372 +86 1 374 373 375 +87 1 476 475 477 +88 1 251 250 252 +89 1 269 268 270 +90 1 344 343 345 +91 1 359 358 360 +92 1 377 376 378 +93 1 434 433 435 +94 1 449 448 450 +95 1 452 451 453 +96 1 467 466 468 +97 1 485 484 486 +98 1 275 274 276 +99 1 278 277 279 +100 1 293 292 294 +101 1 365 364 366 +102 1 368 367 369 +103 1 383 382 384 +104 1 386 385 387 +105 1 488 487 489 +106 1 491 490 492 +107 1 509 508 510 +108 1 266 265 267 +109 1 302 301 303 +110 1 389 388 390 +111 1 392 391 393 +112 1 410 409 411 +113 1 479 478 480 +114 1 500 499 501 +115 1 254 253 255 +116 1 287 286 288 +117 1 290 289 291 +118 1 380 379 381 +119 1 395 394 396 +120 1 413 412 414 +121 1 221 220 222 +122 1 311 310 312 +123 1 332 331 333 +124 1 401 400 402 +125 1 404 403 405 +126 1 416 415 417 +127 1 419 418 420 +128 1 422 421 423 +129 1 314 313 315 +130 1 317 316 318 +131 1 320 319 321 +132 1 335 334 336 +133 1 407 406 408 +134 1 425 424 426 +135 1 443 442 444 +136 1 446 445 447 +137 1 533 532 534 +138 1 536 535 537 +139 1 233 232 234 +140 1 305 304 306 +141 1 308 307 309 +142 1 323 322 324 +143 1 326 325 327 +144 1 341 340 342 +145 1 398 397 399 +146 1 428 427 429 +147 1 431 430 432 +148 1 506 505 507 +149 1 524 523 525 +150 1 539 538 540 +151 1 2 1 3 +152 1 41 40 42 +153 1 473 472 474 +154 1 548 547 549 +155 1 563 562 564 +156 1 566 565 567 +157 1 581 580 582 +158 1 11 10 12 +159 1 461 460 462 +160 1 569 568 570 +161 1 572 571 573 +162 1 587 586 588 +163 1 20 19 21 +164 1 35 34 36 +165 1 464 463 465 +166 1 470 469 471 +167 1 554 553 555 +168 1 557 556 558 +169 1 560 559 561 +170 1 575 574 576 +171 1 578 577 579 +172 1 593 592 594 +173 1 56 55 57 +174 1 494 493 495 +175 1 584 583 585 +176 1 599 598 600 +177 1 602 601 603 +178 1 617 616 618 +179 1 44 43 45 +180 1 50 49 51 +181 1 68 67 69 +182 1 86 85 87 +183 1 482 481 483 +184 1 497 496 498 +185 1 518 517 519 +186 1 590 589 591 +187 1 605 604 606 +188 1 608 607 609 +189 1 620 619 621 +190 1 623 622 624 +191 1 71 70 72 +192 1 503 502 504 +193 1 596 595 597 +194 1 611 610 612 +195 1 629 628 630 +196 1 440 439 441 +197 1 512 511 513 +198 1 527 526 528 +199 1 542 541 543 +200 1 545 544 546 +201 1 614 613 615 +202 1 632 631 633 +203 1 635 634 636 +204 1 83 82 84 +205 1 515 514 516 +206 1 530 529 531 +207 1 551 550 552 +208 1 638 637 639 +209 1 641 640 642 +210 1 17 16 18 +211 1 89 88 90 +212 1 92 91 93 +213 1 521 520 522 +214 1 626 625 627 +215 1 644 643 645 +216 1 647 646 648 diff --git a/examples/USER/e3b/in.lammps b/examples/USER/e3b/in.e3b-tip4p2005 similarity index 73% rename from examples/USER/e3b/in.lammps rename to examples/USER/e3b/in.e3b-tip4p2005 index 3960c9ad5e..64b82046a6 100644 --- a/examples/USER/e3b/in.lammps +++ b/examples/USER/e3b/in.e3b-tip4p2005 @@ -2,7 +2,6 @@ #to simulate bulk E3B3 water model ##################################################################### -clear variable samp_rate equal 10 variable thermo_rate equal 10 @@ -27,20 +26,11 @@ boundary p p p ############################################################################# #setup box - -lattice sc ${Wlat} -region simbox block -$L $L -$L $L -$L $L units lattice +read_data e3b_box.data ############################################################################# #set up potential -create_box 2 simbox bond/types 1 angle/types 1 extra/bond/per/atom 2 & - extra/special/per/atom 2 extra/angle/per/atom 1 - -molecule h2o tip4p2005.mol -mass 1 15.9994 #oxygen -mass 2 1.008 #hydrogen - pair_style hybrid/overlay e3b 1 lj/cut/tip4p/long 1 2 1 1 0.1546 8.5 pair_modify table 0 table/disp 0 shift yes @@ -53,9 +43,9 @@ pair_coeff * * lj/cut/tip4p/long 0.0 0.0 pair_coeff 1 1 lj/cut/tip4p/long 0.1852 3.1589 pair_coeff * * e3b preset 2015 -#intramolecular bond/angle coeffs very stiff for minimization -bond_coeff 1 100000 0.9572 -angle_coeff 1 100000 104.52 +#potential coeffs aren't too important since will be rigid anyways +bond_coeff 1 554.13 0.9572 +angle_coeff 1 45.769 104.52 ############################################################################# #setup for run @@ -69,25 +59,15 @@ neighbor 2.0 bin neigh_modify every 1 delay 3 check yes ############################################################################# -#make atoms and rough minimze -create_atoms 0 box mol h2o 15856 #dump positions only in first batch run -dump 7 all custom ${samp_rate} dump.lammpstrj id x y z -dump_modify 7 sort id - -min_style cg -minimize 1.0e-4 1.0e-4 10000 100000 - -#potential coeffs aren't too important since will be rigid anyways -bond_coeff 1 554.13 0.9572 -angle_coeff 1 45.769 104.52 - +#dump 7 all custom ${samp_rate} dump.lammpstrj id x y z +#dump_modify 7 sort id ############################################################################# #initialize velocity and rigid constraint -fix rigid all shake 1.0e-8 100 0 b 1 a 1 t 1 2 mol h2o +fix rigid all shake 1.0e-8 100 0 b 1 a 1 t 1 2 velocity all create ${myT} 15856 dist gaussian rot yes mom yes #scale velocity @@ -107,9 +87,9 @@ run ${equil} ############################################################################# #run at NVT -dump 1 all custom ${samp_rate} dump.lammpstrj id x y z type -dump_modify 1 sort id +#dump 1 all custom ${samp_rate} dump.lammpstrj id x y z type +#dump_modify 1 sort id run ${run} -write_restart lammps.restart +# write_restart lammps.restart diff --git a/examples/USER/e3b/log.29Mar2019.e3b-tip4p2005.g++.1 b/examples/USER/e3b/log.29Mar2019.e3b-tip4p2005.g++.1 new file mode 100644 index 0000000000..71803f3581 --- /dev/null +++ b/examples/USER/e3b/log.29Mar2019.e3b-tip4p2005.g++.1 @@ -0,0 +1,332 @@ +LAMMPS (29 Mar 2019) +#LAMMPS input file +#to simulate bulk E3B3 water model + +##################################################################### + +variable samp_rate equal 10 +variable thermo_rate equal 10 +variable Wlat equal 3.10744 #for water density 0.997g/mL +variable L equal 3 #(L*2)^3 = Nmolec, L=3 -> N=216 + +variable equil equal 100 +variable run equal 100 + +variable ts equal 2.0 +variable Tdamp equal 100*${ts} +variable Tdamp equal 100*2 +variable Pdamp equal 1000*${ts} +variable Pdamp equal 1000*2 +variable myT equal 298.0 +variable myP equal 1.0 + +units real +atom_style full + +dimension 3 + +boundary p p p + +############################################################################# +#setup box +read_data e3b_box.data + orthogonal box = (-9.32232 -9.32232 -9.32232) to (9.32232 9.32232 9.32232) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 648 atoms + reading velocities ... + 648 velocities + scanning bonds ... + 2 = max bonds/atom + scanning angles ... + 1 = max angles/atom + reading bonds ... + 432 bonds + reading angles ... + 216 angles + 2 = max # of 1-2 neighbors + 1 = max # of 1-3 neighbors + 1 = max # of 1-4 neighbors + 2 = max # of special neighbors + special bonds CPU = 0.000257254 secs + read_data CPU = 0.00286555 secs + +############################################################################# +#set up potential + +pair_style hybrid/overlay e3b 1 lj/cut/tip4p/long 1 2 1 1 0.1546 8.5 +pair_modify table 0 table/disp 0 shift yes + +bond_style harmonic +angle_style harmonic + +kspace_style pppm/tip4p 1.0e-6 + +pair_coeff * * lj/cut/tip4p/long 0.0 0.0 +pair_coeff 1 1 lj/cut/tip4p/long 0.1852 3.1589 +pair_coeff * * e3b preset 2015 + +#potential coeffs aren't too important since will be rigid anyways +bond_coeff 1 554.13 0.9572 +angle_coeff 1 45.769 104.52 + +############################################################################# +#setup for run +thermo ${thermo_rate} +thermo 10 +thermo_style custom step vol temp epair pe etotal press density + +timestep ${ts} +timestep 2 +run_style verlet + +neighbor 2.0 bin +neigh_modify every 1 delay 3 check yes + +############################################################################# + +#dump positions only in first batch run +#dump 7 all custom ${samp_rate} dump.lammpstrj id x y z +#dump_modify 7 sort id + +############################################################################# +#initialize velocity and rigid constraint + +fix rigid all shake 1.0e-8 100 0 b 1 a 1 t 1 2 + 0 = # of size 2 clusters + 0 = # of size 3 clusters + 0 = # of size 4 clusters + 216 = # of frozen angles + find clusters CPU = 0.000185728 secs +velocity all create ${myT} 15856 dist gaussian rot yes mom yes +velocity all create 298 15856 dist gaussian rot yes mom yes + +#scale velocity +run 0 +PPPM initialization ... + extracting TIP4P info from pair style + using polynomial approximation for long-range coulomb (../kspace.cpp:319) + G vector (1/distance) = 0.409658 + grid = 36 36 36 + stencil order = 5 + estimated absolute RMS force accuracy = 0.000341883 + estimated relative force accuracy = 1.02957e-06 + using double precision FFTs + 3d grid and FFT values/proc = 91125 46656 +Neighbor list info ... + update every 1 steps, delay 3 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10.8092 + ghost atom cutoff = 10.8092 + binsize = 5.4046, bins = 4 4 4 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair e3b, perpetual, skip from (2) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + (2) pair lj/cut/tip4p/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 16.4 | 16.4 | 16.4 Mbytes +Step Volume Temp E_pair PotEng TotEng Press Density + 0 6481.2982 298 -512.62432 -512.62432 -129.77504 14088.322 0.99697602 +Loop time of 1.19209e-06 on 1 procs for 0 steps with 648 atoms + +251.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 | 0 | 0 | 0 | 0.0 | 0.00 +Bond | 0 | 0 | 0 | 0.0 | 0.00 +Kspace | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 1.192e-06 | | |100.00 + +Nlocal: 648 ave 648 max 648 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 5943 ave 5943 max 5943 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 18984 ave 18984 max 18984 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 18984 +Ave neighs/atom = 29.2963 +Ave special neighs/atom = 2 +Neighbor list builds = 0 +Dangerous builds = 0 +velocity all scale ${myT} +velocity all scale 298 + +compute e3b all pe/e3b +fix e3b all ave/time 1 1 ${thermo_rate} c_e3b c_e3b[*] file e3b.txt title2 "step pe_e3b pe_ea pe_eb pe_ec pe_e2" +fix e3b all ave/time 1 1 10 c_e3b c_e3b[*] file e3b.txt title2 "step pe_e3b pe_ea pe_eb pe_ec pe_e2" + +############################################################################# +#equilibrate bulk water at NVT + +fix 1 all nvt temp ${myT} ${myT} ${Tdamp} +fix 1 all nvt temp 298 ${myT} ${Tdamp} +fix 1 all nvt temp 298 298 ${Tdamp} +fix 1 all nvt temp 298 298 200 +run ${equil} +run 100 +PPPM initialization ... + extracting TIP4P info from pair style + using polynomial approximation for long-range coulomb (../kspace.cpp:319) + G vector (1/distance) = 0.409658 + grid = 36 36 36 + stencil order = 5 + estimated absolute RMS force accuracy = 0.000341883 + estimated relative force accuracy = 1.02957e-06 + using double precision FFTs + 3d grid and FFT values/proc = 91125 46656 +Neighbor list info ... + update every 1 steps, delay 3 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10.8092 + ghost atom cutoff = 10.8092 + binsize = 5.4046, bins = 4 4 4 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair e3b, perpetual, skip from (2) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + (2) pair lj/cut/tip4p/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 16.88 | 16.88 | 16.88 Mbytes +Step Volume Temp E_pair PotEng TotEng Press Density + 0 6481.2982 298 -512.33264 -512.33264 -129.48336 14091.383 0.99697602 + 10 6481.2982 905.58028 -1442.0378 -1442.0378 -278.61245 -798.38952 0.99697602 + 20 6481.2982 816.39844 -1363.5999 -1363.5999 -314.74903 3023.9064 0.99697602 + 30 6481.2982 783.3897 -1370.6594 -1370.6594 -364.21587 7095.4765 0.99697602 + 40 6481.2982 793.12519 -1425.8404 -1425.8404 -406.88933 7030.242 0.99697602 + 50 6481.2982 810.90264 -1495.4822 -1495.4822 -453.69195 6944.2325 0.99697602 + 60 6481.2982 766.64937 -1491.2317 -1491.2317 -506.29493 9062.0151 0.99697602 + 70 6481.2982 761.77292 -1538.7368 -1538.7368 -560.06492 7693.2197 0.99697602 + 80 6481.2982 730.44938 -1554.1818 -1554.1818 -615.75215 7345.9601 0.99697602 + 90 6481.2982 695.46244 -1563.9869 -1563.9869 -670.50605 7809.0685 0.99697602 + 100 6481.2982 691.5674 -1613.2754 -1613.2754 -724.79866 7143.062 0.99697602 +Loop time of 1.94577 on 1 procs for 100 steps with 648 atoms + +Performance: 8.881 ns/day, 2.702 hours/ns, 51.393 timesteps/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 | 0.91572 | 0.91572 | 0.91572 | 0.0 | 47.06 +Bond | 6.7234e-05 | 6.7234e-05 | 6.7234e-05 | 0.0 | 0.00 +Kspace | 0.92654 | 0.92654 | 0.92654 | 0.0 | 47.62 +Neigh | 0.087331 | 0.087331 | 0.087331 | 0.0 | 4.49 +Comm | 0.0054724 | 0.0054724 | 0.0054724 | 0.0 | 0.28 +Output | 0.0003047 | 0.0003047 | 0.0003047 | 0.0 | 0.02 +Modify | 0.0093319 | 0.0093319 | 0.0093319 | 0.0 | 0.48 +Other | | 0.001007 | | | 0.05 + +Nlocal: 648 ave 648 max 648 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 5911 ave 5911 max 5911 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 19136 ave 19136 max 19136 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 19136 +Ave neighs/atom = 29.5309 +Ave special neighs/atom = 2 +Neighbor list builds = 15 +Dangerous builds = 0 + +############################################################################# +#run at NVT + +#dump 1 all custom ${samp_rate} dump.lammpstrj id x y z type +#dump_modify 1 sort id + +run ${run} +run 100 +PPPM initialization ... + extracting TIP4P info from pair style + using polynomial approximation for long-range coulomb (../kspace.cpp:319) + G vector (1/distance) = 0.409658 + grid = 36 36 36 + stencil order = 5 + estimated absolute RMS force accuracy = 0.000341883 + estimated relative force accuracy = 1.02957e-06 + using double precision FFTs + 3d grid and FFT values/proc = 91125 46656 +Neighbor list info ... + update every 1 steps, delay 3 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10.8092 + ghost atom cutoff = 10.8092 + binsize = 5.4046, bins = 4 4 4 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair e3b, perpetual, skip from (2) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + (2) pair lj/cut/tip4p/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 16.88 | 16.88 | 16.88 Mbytes +Step Volume Temp E_pair PotEng TotEng Press Density + 100 6481.2982 691.5674 -1613.2754 -1613.2754 -724.79866 7131.3961 0.99697602 + 110 6481.2982 668.27004 -1635.5867 -1635.5867 -777.04068 6965.8705 0.99697602 + 120 6481.2982 646.18686 -1659.5025 -1659.5025 -829.32738 6196.7432 0.99697602 + 130 6481.2982 650.7802 -1716.9557 -1716.9557 -880.87943 5626.5466 0.99697602 + 140 6481.2982 586.262 -1681.8052 -1681.8052 -928.61728 6103.747 0.99697602 + 150 6481.2982 615.88299 -1767.8614 -1767.8614 -976.61859 3897.648 0.99697602 + 160 6481.2982 585.23516 -1773.2038 -1773.2038 -1021.3352 4821.7742 0.99697602 + 170 6481.2982 558.77885 -1782.2817 -1782.2817 -1064.4022 5092.7248 0.99697602 + 180 6481.2982 564.01576 -1830.0301 -1830.0301 -1105.4226 4316.1636 0.99697602 + 190 6481.2982 526.53776 -1821.3122 -1821.3122 -1144.8538 4529.5062 0.99697602 + 200 6481.2982 537.81273 -1873.6662 -1873.6662 -1182.7226 4244.313 0.99697602 +Loop time of 1.9157 on 1 procs for 100 steps with 648 atoms + +Performance: 9.020 ns/day, 2.661 hours/ns, 52.200 timesteps/s +99.6% 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.90464 | 0.90464 | 0.90464 | 0.0 | 47.22 +Bond | 6.9141e-05 | 6.9141e-05 | 6.9141e-05 | 0.0 | 0.00 +Kspace | 0.92769 | 0.92769 | 0.92769 | 0.0 | 48.43 +Neigh | 0.067551 | 0.067551 | 0.067551 | 0.0 | 3.53 +Comm | 0.0051386 | 0.0051386 | 0.0051386 | 0.0 | 0.27 +Output | 0.00029993 | 0.00029993 | 0.00029993 | 0.0 | 0.02 +Modify | 0.0092504 | 0.0092504 | 0.0092504 | 0.0 | 0.48 +Other | | 0.001062 | | | 0.06 + +Nlocal: 648 ave 648 max 648 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 5901 ave 5901 max 5901 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 18971 ave 18971 max 18971 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 18971 +Ave neighs/atom = 29.2762 +Ave special neighs/atom = 2 +Neighbor list builds = 12 +Dangerous builds = 0 + +# write_restart lammps.restart + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:03 diff --git a/examples/USER/e3b/log.29Mar2019.e3b-tip4p2005.g++.4 b/examples/USER/e3b/log.29Mar2019.e3b-tip4p2005.g++.4 new file mode 100644 index 0000000000..b61ffa5a8f --- /dev/null +++ b/examples/USER/e3b/log.29Mar2019.e3b-tip4p2005.g++.4 @@ -0,0 +1,332 @@ +LAMMPS (29 Mar 2019) +#LAMMPS input file +#to simulate bulk E3B3 water model + +##################################################################### + +variable samp_rate equal 10 +variable thermo_rate equal 10 +variable Wlat equal 3.10744 #for water density 0.997g/mL +variable L equal 3 #(L*2)^3 = Nmolec, L=3 -> N=216 + +variable equil equal 100 +variable run equal 100 + +variable ts equal 2.0 +variable Tdamp equal 100*${ts} +variable Tdamp equal 100*2 +variable Pdamp equal 1000*${ts} +variable Pdamp equal 1000*2 +variable myT equal 298.0 +variable myP equal 1.0 + +units real +atom_style full + +dimension 3 + +boundary p p p + +############################################################################# +#setup box +read_data e3b_box.data + orthogonal box = (-9.32232 -9.32232 -9.32232) to (9.32232 9.32232 9.32232) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 648 atoms + reading velocities ... + 648 velocities + scanning bonds ... + 2 = max bonds/atom + scanning angles ... + 1 = max angles/atom + reading bonds ... + 432 bonds + reading angles ... + 216 angles + 2 = max # of 1-2 neighbors + 1 = max # of 1-3 neighbors + 1 = max # of 1-4 neighbors + 2 = max # of special neighbors + special bonds CPU = 0.00029397 secs + read_data CPU = 0.00397325 secs + +############################################################################# +#set up potential + +pair_style hybrid/overlay e3b 1 lj/cut/tip4p/long 1 2 1 1 0.1546 8.5 +pair_modify table 0 table/disp 0 shift yes + +bond_style harmonic +angle_style harmonic + +kspace_style pppm/tip4p 1.0e-6 + +pair_coeff * * lj/cut/tip4p/long 0.0 0.0 +pair_coeff 1 1 lj/cut/tip4p/long 0.1852 3.1589 +pair_coeff * * e3b preset 2015 + +#potential coeffs aren't too important since will be rigid anyways +bond_coeff 1 554.13 0.9572 +angle_coeff 1 45.769 104.52 + +############################################################################# +#setup for run +thermo ${thermo_rate} +thermo 10 +thermo_style custom step vol temp epair pe etotal press density + +timestep ${ts} +timestep 2 +run_style verlet + +neighbor 2.0 bin +neigh_modify every 1 delay 3 check yes + +############################################################################# + +#dump positions only in first batch run +#dump 7 all custom ${samp_rate} dump.lammpstrj id x y z +#dump_modify 7 sort id + +############################################################################# +#initialize velocity and rigid constraint + +fix rigid all shake 1.0e-8 100 0 b 1 a 1 t 1 2 + 0 = # of size 2 clusters + 0 = # of size 3 clusters + 0 = # of size 4 clusters + 216 = # of frozen angles + find clusters CPU = 0.000289917 secs +velocity all create ${myT} 15856 dist gaussian rot yes mom yes +velocity all create 298 15856 dist gaussian rot yes mom yes + +#scale velocity +run 0 +PPPM initialization ... + extracting TIP4P info from pair style + using polynomial approximation for long-range coulomb (../kspace.cpp:319) + G vector (1/distance) = 0.409658 + grid = 36 36 36 + stencil order = 5 + estimated absolute RMS force accuracy = 0.000341883 + estimated relative force accuracy = 1.02957e-06 + using double precision FFTs + 3d grid and FFT values/proc = 32805 11664 +Neighbor list info ... + update every 1 steps, delay 3 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10.8092 + ghost atom cutoff = 10.8092 + binsize = 5.4046, bins = 4 4 4 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair e3b, perpetual, skip from (2) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + (2) pair lj/cut/tip4p/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 10.69 | 10.69 | 10.69 Mbytes +Step Volume Temp E_pair PotEng TotEng Press Density + 0 6481.2982 298 -512.62432 -512.62432 -129.77504 14088.322 0.99697602 +Loop time of 3.30806e-05 on 4 procs for 0 steps with 648 atoms + +77.1% 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 | 0 | 0 | 0.0 | 0.00 +Bond | 0 | 0 | 0 | 0.0 | 0.00 +Kspace | 0 | 0 | 0 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0 | 0 | 0 | 0.0 | 0.00 +Output | 0 | 0 | 0 | 0.0 | 0.00 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 3.308e-05 | | |100.00 + +Nlocal: 162 ave 168 max 157 min +Histogram: 2 0 0 0 0 0 0 1 0 1 +Nghost: 3738 ave 3743 max 3732 min +Histogram: 1 0 1 0 0 0 0 0 0 2 +Neighs: 4746 ave 5380 max 4318 min +Histogram: 1 1 0 0 1 0 0 0 0 1 + +Total # of neighbors = 18984 +Ave neighs/atom = 29.2963 +Ave special neighs/atom = 2 +Neighbor list builds = 0 +Dangerous builds = 0 +velocity all scale ${myT} +velocity all scale 298 + +compute e3b all pe/e3b +fix e3b all ave/time 1 1 ${thermo_rate} c_e3b c_e3b[*] file e3b.txt title2 "step pe_e3b pe_ea pe_eb pe_ec pe_e2" +fix e3b all ave/time 1 1 10 c_e3b c_e3b[*] file e3b.txt title2 "step pe_e3b pe_ea pe_eb pe_ec pe_e2" + +############################################################################# +#equilibrate bulk water at NVT + +fix 1 all nvt temp ${myT} ${myT} ${Tdamp} +fix 1 all nvt temp 298 ${myT} ${Tdamp} +fix 1 all nvt temp 298 298 ${Tdamp} +fix 1 all nvt temp 298 298 200 +run ${equil} +run 100 +PPPM initialization ... + extracting TIP4P info from pair style + using polynomial approximation for long-range coulomb (../kspace.cpp:319) + G vector (1/distance) = 0.409658 + grid = 36 36 36 + stencil order = 5 + estimated absolute RMS force accuracy = 0.000341883 + estimated relative force accuracy = 1.02957e-06 + using double precision FFTs + 3d grid and FFT values/proc = 32805 11664 +Neighbor list info ... + update every 1 steps, delay 3 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10.8092 + ghost atom cutoff = 10.8092 + binsize = 5.4046, bins = 4 4 4 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair e3b, perpetual, skip from (2) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + (2) pair lj/cut/tip4p/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 11.18 | 11.18 | 11.18 Mbytes +Step Volume Temp E_pair PotEng TotEng Press Density + 0 6481.2982 298 -512.33264 -512.33264 -129.48336 14091.383 0.99697602 + 10 6481.2982 905.58028 -1442.0378 -1442.0378 -278.61245 -798.38952 0.99697602 + 20 6481.2982 816.39844 -1363.5999 -1363.5999 -314.74903 3023.9064 0.99697602 + 30 6481.2982 783.3897 -1370.6594 -1370.6594 -364.21587 7095.4765 0.99697602 + 40 6481.2982 793.12519 -1425.8404 -1425.8404 -406.88933 7030.242 0.99697602 + 50 6481.2982 810.90264 -1495.4822 -1495.4822 -453.69195 6944.2325 0.99697602 + 60 6481.2982 766.64937 -1491.2317 -1491.2317 -506.29493 9062.0151 0.99697602 + 70 6481.2982 761.77292 -1538.7368 -1538.7368 -560.06492 7693.2197 0.99697602 + 80 6481.2982 730.44938 -1554.1818 -1554.1818 -615.75215 7345.9601 0.99697602 + 90 6481.2982 695.46244 -1563.9869 -1563.9869 -670.50605 7809.0685 0.99697602 + 100 6481.2982 691.5674 -1613.2754 -1613.2754 -724.79866 7143.062 0.99697602 +Loop time of 1.20724 on 4 procs for 100 steps with 648 atoms + +Performance: 14.314 ns/day, 1.677 hours/ns, 82.834 timesteps/s +97.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.37421 | 0.39416 | 0.42739 | 3.2 | 32.65 +Bond | 5.8651e-05 | 7.1406e-05 | 8.2016e-05 | 0.0 | 0.01 +Kspace | 0.67929 | 0.71762 | 0.74038 | 2.8 | 59.44 +Neigh | 0.042206 | 0.042236 | 0.042263 | 0.0 | 3.50 +Comm | 0.0248 | 0.031467 | 0.035969 | 2.7 | 2.61 +Output | 0.00064564 | 0.0008018 | 0.0012648 | 0.0 | 0.07 +Modify | 0.018263 | 0.01869 | 0.019076 | 0.2 | 1.55 +Other | | 0.002194 | | | 0.18 + +Nlocal: 162 ave 170 max 151 min +Histogram: 1 0 0 0 0 1 0 1 0 1 +Nghost: 3726.75 ave 3737 max 3720 min +Histogram: 1 0 1 1 0 0 0 0 0 1 +Neighs: 4784 ave 5474 max 4389 min +Histogram: 1 1 1 0 0 0 0 0 0 1 + +Total # of neighbors = 19136 +Ave neighs/atom = 29.5309 +Ave special neighs/atom = 2 +Neighbor list builds = 15 +Dangerous builds = 0 + +############################################################################# +#run at NVT + +#dump 1 all custom ${samp_rate} dump.lammpstrj id x y z type +#dump_modify 1 sort id + +run ${run} +run 100 +PPPM initialization ... + extracting TIP4P info from pair style + using polynomial approximation for long-range coulomb (../kspace.cpp:319) + G vector (1/distance) = 0.409658 + grid = 36 36 36 + stencil order = 5 + estimated absolute RMS force accuracy = 0.000341883 + estimated relative force accuracy = 1.02957e-06 + using double precision FFTs + 3d grid and FFT values/proc = 32805 11664 +Neighbor list info ... + update every 1 steps, delay 3 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 10.8092 + ghost atom cutoff = 10.8092 + binsize = 5.4046, bins = 4 4 4 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair e3b, perpetual, skip from (2) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + (2) pair lj/cut/tip4p/long, perpetual + attributes: half, newton on + pair build: half/bin/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 11.18 | 11.18 | 11.18 Mbytes +Step Volume Temp E_pair PotEng TotEng Press Density + 100 6481.2982 691.5674 -1613.2754 -1613.2754 -724.79866 7131.3961 0.99697602 + 110 6481.2982 668.27004 -1635.5867 -1635.5867 -777.04068 6965.8705 0.99697602 + 120 6481.2982 646.18686 -1659.5025 -1659.5025 -829.32738 6196.7432 0.99697602 + 130 6481.2982 650.7802 -1716.9557 -1716.9557 -880.87943 5626.5466 0.99697602 + 140 6481.2982 586.262 -1681.8052 -1681.8052 -928.61728 6103.747 0.99697602 + 150 6481.2982 615.88299 -1767.8614 -1767.8614 -976.61859 3897.648 0.99697602 + 160 6481.2982 585.23516 -1773.2038 -1773.2038 -1021.3352 4821.7742 0.99697602 + 170 6481.2982 558.77885 -1782.2817 -1782.2817 -1064.4022 5092.7248 0.99697602 + 180 6481.2982 564.01576 -1830.0301 -1830.0301 -1105.4226 4316.1636 0.99697602 + 190 6481.2982 526.53776 -1821.3122 -1821.3122 -1144.8538 4529.5062 0.99697602 + 200 6481.2982 537.81273 -1873.6662 -1873.6662 -1182.7226 4244.313 0.99697602 +Loop time of 1.21286 on 4 procs for 100 steps with 648 atoms + +Performance: 14.247 ns/day, 1.685 hours/ns, 82.450 timesteps/s +97.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.37664 | 0.39663 | 0.4367 | 3.8 | 32.70 +Bond | 6.175e-05 | 6.7353e-05 | 7.4148e-05 | 0.0 | 0.01 +Kspace | 0.6969 | 0.73237 | 0.75103 | 2.5 | 60.38 +Neigh | 0.033138 | 0.03317 | 0.033202 | 0.0 | 2.73 +Comm | 0.022651 | 0.02763 | 0.034947 | 3.0 | 2.28 +Output | 0.00065303 | 0.00096697 | 0.0018971 | 0.0 | 0.08 +Modify | 0.017379 | 0.018252 | 0.018955 | 0.4 | 1.50 +Other | | 0.003775 | | | 0.31 + +Nlocal: 162 ave 175 max 156 min +Histogram: 1 2 0 0 0 0 0 0 0 1 +Nghost: 3689.5 ave 3721 max 3651 min +Histogram: 1 0 0 0 0 1 1 0 0 1 +Neighs: 4742.75 ave 5159 max 4485 min +Histogram: 2 0 0 0 1 0 0 0 0 1 + +Total # of neighbors = 18971 +Ave neighs/atom = 29.2762 +Ave special neighs/atom = 2 +Neighbor list builds = 12 +Dangerous builds = 0 + +# write_restart lammps.restart + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:02 diff --git a/examples/USER/e3b/tip4p2005.mol b/examples/USER/e3b/tip4p2005.mol deleted file mode 100644 index 8dff52bebe..0000000000 --- a/examples/USER/e3b/tip4p2005.mol +++ /dev/null @@ -1,61 +0,0 @@ -#TIP4P/2005 H20 water molecule, parameters from section 6.9 of LAMMPS manual -3 atoms -2 bonds -1 angles - -Coords - -1 0.0 0.0 0.0 -2 0.58588228 0.75695033 0.0 -3 0.58588228 -0.75695033 0.0 - -Types - -1 1 -2 2 -3 2 - -Charges - -1 -1.1128 -2 0.5564 -3 0.5564 - -Bonds - -1 1 1 2 -2 1 1 3 - -Angles - -1 1 2 1 3 - -Special Bond Counts - -1 2 0 0 -2 1 1 0 -3 1 1 0 - -Special Bonds - -1 2 3 -2 1 3 -3 1 2 - -Shake Flags - -1 1 -2 1 -3 1 - -Shake Atoms - -1 1 2 3 -2 1 2 3 -3 1 2 3 - -Shake Bond Types - -1 1 1 1 -2 1 1 1 -3 1 1 1 From d3327ffd16eaeeca6e97782419ab387e8b1ac5b7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 25 Apr 2019 19:03:00 -0400 Subject: [PATCH 102/311] add new optional styles to .gitignore --- src/.gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/.gitignore b/src/.gitignore index 27f4f8a64c..3a6acbd871 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -309,6 +309,8 @@ /compute_meso_t_atom.h /compute_msd_nongauss.cpp /compute_msd_nongauss.h +/compute_pe_e3b.cpp +/compute_pe_e3b.h /compute_pe_tally.cpp /compute_pe_tally.h /compute_plasticity_atom.cpp @@ -782,6 +784,8 @@ /pair_dpd_mt.h /pair_dsmc.cpp /pair_dsmc.h +/pair_e3b.cpp +/pair_e3b.h /pair_eam.cpp /pair_eam.h /pair_eam_alloy.cpp From 7e00acce53a5bd131d5a4f5cf1814889e8fb1cdb Mon Sep 17 00:00:00 2001 From: Giacomo Fiorin Date: Tue, 30 Apr 2019 09:50:12 -0400 Subject: [PATCH 103/311] Update Colvars library to version 2019-04-26 The following is list of relevant issues fixed and improvements: Fix forces and missing output of runtime histogram for histogramRestraint https://github.com/Colvars/colvars/pull/246 Use fix_modify to add configuration to Colvars: https://github.com/Colvars/colvars/pull/216 Fix componentCoeff and name not working with orientationAngle components: https://github.com/Colvars/colvars/issues/213 Fix 1-timestep offset with extendedLagrangian: https://github.com/Colvars/colvars/pull/210 Changes to improve compiler support: https://github.com/Colvars/colvars/pull/203 Fix ignored anisotropic cutoff3 for groupCoordNum: https://github.com/Colvars/colvars/pull/202 New dipoleMagnitude variable: https://github.com/Colvars/colvars/pull/198 Parser improvements: https://github.com/Colvars/colvars/pull/196 --- doc/src/PDF/colvars-refman-lammps.pdf | Bin 621677 -> 628031 bytes doc/src/fix_colvars.txt | 10 + lib/colvars/colvar.cpp | 433 +++++++++++------ lib/colvars/colvar.h | 35 +- lib/colvars/colvar_UIestimator.h | 93 ++-- lib/colvars/colvaratoms.cpp | 143 ++++-- lib/colvars/colvaratoms.h | 52 +- lib/colvars/colvarbias.cpp | 89 +++- lib/colvars/colvarbias.h | 7 +- lib/colvars/colvarbias_abf.cpp | 14 +- lib/colvars/colvarbias_abf.h | 34 +- lib/colvars/colvarbias_histogram.h | 2 +- lib/colvars/colvarbias_meta.cpp | 32 +- lib/colvars/colvarbias_meta.h | 32 +- lib/colvars/colvarbias_restraint.cpp | 126 +++-- lib/colvars/colvarbias_restraint.h | 5 +- lib/colvars/colvarcomp.cpp | 171 ++++++- lib/colvars/colvarcomp.h | 78 ++- lib/colvars/colvarcomp_angles.cpp | 61 ++- lib/colvars/colvarcomp_coordnums.cpp | 18 +- lib/colvars/colvarcomp_distances.cpp | 94 +++- lib/colvars/colvarcomp_protein.cpp | 99 +++- lib/colvars/colvarcomp_rotations.cpp | 109 +++-- lib/colvars/colvardeps.cpp | 346 ++------------ lib/colvars/colvardeps.h | 64 ++- lib/colvars/colvargrid.cpp | 2 +- lib/colvars/colvargrid.h | 74 +-- lib/colvars/colvarmodule.cpp | 229 ++++++++- lib/colvars/colvarmodule.h | 285 ++++++++--- lib/colvars/colvarparse.cpp | 443 ++++++++++-------- lib/colvars/colvarparse.h | 171 +++++-- lib/colvars/colvarproxy.cpp | 15 +- lib/colvars/colvarproxy.h | 23 +- lib/colvars/colvars_version.h | 2 +- lib/colvars/colvarscript.cpp | 53 +++ lib/colvars/colvarscript.h | 5 +- lib/colvars/colvartypes.cpp | 84 ++-- lib/colvars/colvartypes.h | 73 +-- lib/colvars/colvarvalue.cpp | 8 +- lib/colvars/colvarvalue.h | 18 +- src/USER-COLVARS/colvarproxy_lammps.cpp | 41 +- src/USER-COLVARS/colvarproxy_lammps.h | 5 + src/USER-COLVARS/colvarproxy_lammps_version.h | 2 +- src/USER-COLVARS/fix_colvars.cpp | 25 + src/USER-COLVARS/fix_colvars.h | 1 + 45 files changed, 2378 insertions(+), 1328 deletions(-) diff --git a/doc/src/PDF/colvars-refman-lammps.pdf b/doc/src/PDF/colvars-refman-lammps.pdf index 07d82544759e2c3fd3a98b45cff0afc3066f15b1..6194424212c1386e5f57a0a5e917fcbd74536a18 100644 GIT binary patch delta 244649 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 z%0A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 option allows to add settings +from an additional config file to the colvars module. This option can +only be used, after the system has been initialized with a "run"_run.html +command. + +The {fix_modify config } option allows to add settings +from inline strings. Those have to fit on a single line when enclosed +in a pair of double quotes ("), or can span multiple lines when bracketed +by a pair of triple double quotes (""", like python embedded documentation). + This fix computes a global scalar which can be accessed by various "output commands"_Howto_output.html. The scalar is the cumulative energy change due to this fix. The scalar value calculated by this diff --git a/lib/colvars/colvar.cpp b/lib/colvars/colvar.cpp index 8b28eaa0df..723a54ad39 100644 --- a/lib/colvars/colvar.cpp +++ b/lib/colvars/colvar.cpp @@ -24,12 +24,13 @@ colvar::colvar() { runave_os = NULL; - prev_timestep = -1; + prev_timestep = -1L; after_restart = false; kinetic_energy = 0.0; potential_energy = 0.0; - init_cv_requires(); + description = "uninitialized colvar"; + init_dependencies(); } @@ -193,7 +194,7 @@ int colvar::init(std::string const &conf) { bool homogeneous = is_enabled(f_cv_linear); for (i = 0; i < cvcs.size(); i++) { - if ((std::fabs(cvcs[i]->sup_coeff) - 1.0) > 1.0e-10) { + if ((cvm::fabs(cvcs[i]->sup_coeff) - 1.0) > 1.0e-10) { homogeneous = false; } } @@ -224,7 +225,7 @@ int colvar::init(std::string const &conf) // Allow scripted/custom functions to be defined as periodic if ( (is_enabled(f_cv_scripted) || is_enabled(f_cv_custom_function)) && is_enabled(f_cv_scalar) ) { if (get_keyval(conf, "period", period, 0.)) { - set_enabled(f_cv_periodic, true); + enable(f_cv_periodic); get_keyval(conf, "wrapAround", wrap_center, 0.); } } @@ -471,7 +472,7 @@ int colvar::init_grid_parameters(std::string const &conf) if (get_keyval(conf, "lowerWallConstant", lower_wall_k, 0.0, parse_silent)) { cvm::log("Reading legacy options lowerWall and lowerWallConstant: " - "consider using a harmonicWalls restraint.\n"); + "consider using a harmonicWalls restraint\n(caution: force constant would then be scaled by width^2).\n"); lower_wall.type(value()); if (!get_keyval(conf, "lowerWall", lower_wall, lower_boundary)) { cvm::log("Warning: lowerWall will need to be " @@ -485,7 +486,7 @@ int colvar::init_grid_parameters(std::string const &conf) if (get_keyval(conf, "upperWallConstant", upper_wall_k, 0.0, parse_silent)) { cvm::log("Reading legacy options upperWall and upperWallConstant: " - "consider using a harmonicWalls restraint.\n"); + "consider using a harmonicWalls restraint\n(caution: force constant would then be scaled by width^2).\n"); upper_wall.type(value()); if (!get_keyval(conf, "upperWall", upper_wall, upper_boundary)) { cvm::log("Warning: upperWall will need to be " @@ -562,13 +563,13 @@ int colvar::init_extended_Lagrangian(std::string const &conf) get_keyval_feature(this, conf, "extendedLagrangian", f_cv_extended_Lagrangian, false); if (is_enabled(f_cv_extended_Lagrangian)) { - cvm::real temp, tolerance, period; + cvm::real temp, tolerance, extended_period; cvm::log("Enabling the extended Lagrangian term for colvar \""+ this->name+"\".\n"); - xr.type(value()); - vr.type(value()); + x_ext.type(value()); + v_ext.type(value()); fr.type(value()); const bool found = get_keyval(conf, "extendedTemp", temp, cvm::temperature()); @@ -590,11 +591,11 @@ int colvar::init_extended_Lagrangian(std::string const &conf) ext_force_k = cvm::boltzmann() * temp / (tolerance * tolerance); cvm::log("Computed extended system force constant: " + cvm::to_str(ext_force_k) + " [E]/U^2"); - get_keyval(conf, "extendedTimeConstant", period, 200.0); - if (period <= 0.0) { + get_keyval(conf, "extendedTimeConstant", extended_period, 200.0); + if (extended_period <= 0.0) { cvm::error("Error: \"extendedTimeConstant\" must be positive.\n", INPUT_ERROR); } - ext_mass = (cvm::boltzmann() * temp * period * period) + ext_mass = (cvm::boltzmann() * temp * extended_period * extended_period) / (4.0 * PI * PI * tolerance * tolerance); cvm::log("Computed fictitious mass: " + cvm::to_str(ext_mass) + " [E]/(U/fs)^2 (U: colvar unit)"); @@ -615,7 +616,7 @@ int colvar::init_extended_Lagrangian(std::string const &conf) enable(f_cv_Langevin); ext_gamma *= 1.0e-3; // correct as long as input is required in ps-1 and cvm::dt() is in fs // Adjust Langevin sigma for slow time step if time_step_factor != 1 - ext_sigma = std::sqrt(2.0 * cvm::boltzmann() * temp * ext_gamma * ext_mass / (cvm::dt() * cvm::real(time_step_factor))); + ext_sigma = cvm::sqrt(2.0 * cvm::boltzmann() * temp * ext_gamma * ext_mass / (cvm::dt() * cvm::real(time_step_factor))); } } @@ -761,6 +762,8 @@ int colvar::init_components(std::string const &conf) "weighted by inverse power", "distanceInv"); error_code |= init_components_type(conf, "N1xN2-long vector " "of pairwise distances", "distancePairs"); + error_code |= init_components_type(conf, "dipole magnitude", + "dipoleMagnitude"); error_code |= init_components_type(conf, "coordination " "number", "coordNum"); error_code |= init_components_type(conf, "self-coordination " @@ -831,22 +834,25 @@ void colvar::build_atom_list(void) for (size_t i = 0; i < cvcs.size(); i++) { for (size_t j = 0; j < cvcs[i]->atom_groups.size(); j++) { - cvm::atom_group &ag = *(cvcs[i]->atom_groups[j]); + cvm::atom_group const &ag = *(cvcs[i]->atom_groups[j]); for (size_t k = 0; k < ag.size(); k++) { temp_id_list.push_back(ag[k].id); } + if (ag.is_enabled(f_ag_fitting_group) && ag.is_enabled(f_ag_fit_gradients)) { + cvm::atom_group const &fg = *(ag.fitting_group); + for (size_t k = 0; k < fg.size(); k++) { + temp_id_list.push_back(fg[k].id); + } + } } } temp_id_list.sort(); temp_id_list.unique(); - // atom_ids = std::vector (temp_id_list.begin(), temp_id_list.end()); - unsigned int id_i = 0; std::list::iterator li; for (li = temp_id_list.begin(); li != temp_id_list.end(); ++li) { - atom_ids[id_i] = *li; - id_i++; + atom_ids.push_back(*li); } temp_id_list.clear(); @@ -934,16 +940,153 @@ int colvar::parse_analysis(std::string const &conf) } -void colvar::setup() { - // loop over all components to reset masses of all groups - for (size_t i = 0; i < cvcs.size(); i++) { - for (size_t ig = 0; ig < cvcs[i]->atom_groups.size(); ig++) { - cvm::atom_group &atoms = *(cvcs[i]->atom_groups[ig]); - atoms.setup(); - atoms.reset_mass(name,i,ig); - atoms.read_positions(); +int colvar::init_dependencies() { + size_t i; + if (features().size() == 0) { + for (i = 0; i < f_cv_ntot; i++) { + modify_features().push_back(new feature); + } + + init_feature(f_cv_active, "active", f_type_dynamic); + // Do not require f_cvc_active in children, as some components may be disabled + // Colvars must be either a linear combination, or scalar (and polynomial) or scripted/custom + require_feature_alt(f_cv_active, f_cv_scalar, f_cv_linear, f_cv_scripted, f_cv_custom_function); + + init_feature(f_cv_awake, "awake", f_type_static); + require_feature_self(f_cv_awake, f_cv_active); + + init_feature(f_cv_gradient, "gradient", f_type_dynamic); + require_feature_children(f_cv_gradient, f_cvc_gradient); + + init_feature(f_cv_collect_gradient, "collect gradient", f_type_dynamic); + require_feature_self(f_cv_collect_gradient, f_cv_gradient); + require_feature_self(f_cv_collect_gradient, f_cv_scalar); + // The following exlusion could be lifted by implementing the feature + exclude_feature_self(f_cv_collect_gradient, f_cv_scripted); + require_feature_children(f_cv_collect_gradient, f_cvc_explicit_gradient); + + init_feature(f_cv_fdiff_velocity, "velocity from finite differences", f_type_dynamic); + + // System force: either trivial (spring force); through extended Lagrangian, or calculated explicitly + init_feature(f_cv_total_force, "total force", f_type_dynamic); + require_feature_alt(f_cv_total_force, f_cv_extended_Lagrangian, f_cv_total_force_calc); + + // Deps for explicit total force calculation + init_feature(f_cv_total_force_calc, "total force calculation", f_type_dynamic); + require_feature_self(f_cv_total_force_calc, f_cv_scalar); + require_feature_self(f_cv_total_force_calc, f_cv_linear); + require_feature_children(f_cv_total_force_calc, f_cvc_inv_gradient); + require_feature_self(f_cv_total_force_calc, f_cv_Jacobian); + + init_feature(f_cv_Jacobian, "Jacobian derivative", f_type_dynamic); + require_feature_self(f_cv_Jacobian, f_cv_scalar); + require_feature_self(f_cv_Jacobian, f_cv_linear); + require_feature_children(f_cv_Jacobian, f_cvc_Jacobian); + + init_feature(f_cv_hide_Jacobian, "hide Jacobian force", f_type_user); + require_feature_self(f_cv_hide_Jacobian, f_cv_Jacobian); // can only hide if calculated + + init_feature(f_cv_extended_Lagrangian, "extended Lagrangian", f_type_user); + require_feature_self(f_cv_extended_Lagrangian, f_cv_scalar); + require_feature_self(f_cv_extended_Lagrangian, f_cv_gradient); + + init_feature(f_cv_Langevin, "Langevin dynamics", f_type_user); + require_feature_self(f_cv_Langevin, f_cv_extended_Lagrangian); + + init_feature(f_cv_linear, "linear", f_type_static); + + init_feature(f_cv_scalar, "scalar", f_type_static); + + init_feature(f_cv_output_energy, "output energy", f_type_user); + + init_feature(f_cv_output_value, "output value", f_type_user); + + init_feature(f_cv_output_velocity, "output velocity", f_type_user); + require_feature_self(f_cv_output_velocity, f_cv_fdiff_velocity); + + init_feature(f_cv_output_applied_force, "output applied force", f_type_user); + + init_feature(f_cv_output_total_force, "output total force", f_type_user); + require_feature_self(f_cv_output_total_force, f_cv_total_force); + + init_feature(f_cv_subtract_applied_force, "subtract applied force from total force", f_type_user); + require_feature_self(f_cv_subtract_applied_force, f_cv_total_force); + + init_feature(f_cv_lower_boundary, "lower boundary", f_type_user); + require_feature_self(f_cv_lower_boundary, f_cv_scalar); + + init_feature(f_cv_upper_boundary, "upper boundary", f_type_user); + require_feature_self(f_cv_upper_boundary, f_cv_scalar); + + init_feature(f_cv_grid, "grid", f_type_dynamic); + require_feature_self(f_cv_grid, f_cv_lower_boundary); + require_feature_self(f_cv_grid, f_cv_upper_boundary); + + init_feature(f_cv_runave, "running average", f_type_user); + + init_feature(f_cv_corrfunc, "correlation function", f_type_user); + + init_feature(f_cv_scripted, "scripted", f_type_user); + + init_feature(f_cv_custom_function, "custom function", f_type_user); + exclude_feature_self(f_cv_custom_function, f_cv_scripted); + + init_feature(f_cv_periodic, "periodic", f_type_static); + require_feature_self(f_cv_periodic, f_cv_scalar); + init_feature(f_cv_scalar, "scalar", f_type_static); + init_feature(f_cv_linear, "linear", f_type_static); + init_feature(f_cv_homogeneous, "homogeneous", f_type_static); + + // because total forces are obtained from the previous time step, + // we cannot (currently) have colvar values and total forces for the same timestep + init_feature(f_cv_multiple_ts, "multiple timestep colvar", f_type_static); + exclude_feature_self(f_cv_multiple_ts, f_cv_total_force_calc); + + // check that everything is initialized + for (i = 0; i < colvardeps::f_cv_ntot; i++) { + if (is_not_set(i)) { + cvm::error("Uninitialized feature " + cvm::to_str(i) + " in " + description); + } } } + + // Initialize feature_states for each instance + feature_states.reserve(f_cv_ntot); + for (i = 0; i < f_cv_ntot; i++) { + feature_states.push_back(feature_state(true, false)); + // Most features are available, so we set them so + // and list exceptions below + } + + feature_states[f_cv_fdiff_velocity].available = + cvm::main()->proxy->simulation_running(); + + return COLVARS_OK; +} + + +void colvar::setup() +{ + // loop over all components to update masses and charges of all groups + for (size_t i = 0; i < cvcs.size(); i++) { + for (size_t ig = 0; ig < cvcs[i]->atom_groups.size(); ig++) { + cvm::atom_group *atoms = cvcs[i]->atom_groups[ig]; + atoms->setup(); + atoms->print_properties(name, i, ig); + atoms->read_positions(); + } + } +} + + +std::vector > colvar::get_atom_lists() +{ + std::vector > lists; + for (size_t i = 0; i < cvcs.size(); i++) { + std::vector > li = cvcs[i]->get_atom_lists(); + lists.insert(lists.end(), li.begin(), li.end()); + } + return lists; } @@ -953,8 +1096,8 @@ colvar::~colvar() // because the children are cvcs and will be deleted // just below -// Clear references to this colvar's cvcs as children -// for dependency purposes + // Clear references to this colvar's cvcs as children + // for dependency purposes remove_all_children(); for (std::vector::reverse_iterator ci = cvcs.rbegin(); @@ -1231,7 +1374,6 @@ int colvar::calc_cvc_gradients(int first_cvc, size_t num_cvcs) int colvar::collect_cvc_gradients() { size_t i; - if (is_enabled(f_cv_collect_gradient)) { // Collect the atomic gradients inside colvar object for (unsigned int a = 0; a < atomic_gradients.size(); a++) { @@ -1239,34 +1381,7 @@ int colvar::collect_cvc_gradients() } for (i = 0; i < cvcs.size(); i++) { if (!cvcs[i]->is_enabled()) continue; - // Coefficient: d(a * x^n) = a * n * x^(n-1) * dx - cvm::real coeff = (cvcs[i])->sup_coeff * cvm::real((cvcs[i])->sup_np) * - cvm::integer_power((cvcs[i])->value().real_value, (cvcs[i])->sup_np-1); - - for (size_t j = 0; j < cvcs[i]->atom_groups.size(); j++) { - - cvm::atom_group &ag = *(cvcs[i]->atom_groups[j]); - - // If necessary, apply inverse rotation to get atomic - // gradient in the laboratory frame - if (ag.b_rotate) { - cvm::rotation const rot_inv = ag.rot.inverse(); - - for (size_t k = 0; k < ag.size(); k++) { - size_t a = std::lower_bound(atom_ids.begin(), atom_ids.end(), - ag[k].id) - atom_ids.begin(); - atomic_gradients[a] += coeff * rot_inv.rotate(ag[k].grad); - } - - } else { - - for (size_t k = 0; k < ag.size(); k++) { - size_t a = std::lower_bound(atom_ids.begin(), atom_ids.end(), - ag[k].id) - atom_ids.begin(); - atomic_gradients[a] += coeff * ag[k].grad; - } - } - } + cvcs[i]->collect_gradients(atom_ids, atomic_gradients); } } return COLVARS_OK; @@ -1391,20 +1506,20 @@ int colvar::calc_colvar_properties() // initialize the restraint center in the first step to the value // just calculated from the cvcs if (cvm::step_relative() == 0 && !after_restart) { - xr = x; - vr.reset(); // (already 0; added for clarity) + x_ext = x; + v_ext.reset(); // (already 0; added for clarity) } // Special case of a repeated timestep (eg. multiple NAMD "run" statements) // revert values of the extended coordinate and velocity prior to latest integration - if (cvm::step_relative() == prev_timestep) { - xr = prev_xr; - vr = prev_vr; + if (cvm::proxy->simulation_running() && cvm::step_relative() == prev_timestep) { + x_ext = prev_x_ext; + v_ext = prev_v_ext; } // report the restraint center as "value" - x_reported = xr; - v_reported = vr; + x_reported = x_ext; + v_reported = v_ext; // the "total force" with the extended Lagrangian is // calculated in update_forces_energy() below @@ -1458,77 +1573,86 @@ cvm::real colvar::update_forces_energy() // extended variable if there is one if (is_enabled(f_cv_extended_Lagrangian)) { - if (cvm::debug()) { - cvm::log("Updating extended-Lagrangian degree of freedom.\n"); - } - - if (prev_timestep > -1) { - // Keep track of slow timestep to integrate MTS colvars - // the colvar checks the interval after waking up twice - int n_timesteps = cvm::step_relative() - prev_timestep; - if (n_timesteps != 0 && n_timesteps != time_step_factor) { - cvm::error("Error: extended-Lagrangian " + description + " has timeStepFactor " + - cvm::to_str(time_step_factor) + ", but was activated after " + cvm::to_str(n_timesteps) + - " steps at timestep " + cvm::to_str(cvm::step_absolute()) + " (relative step: " + - cvm::to_str(cvm::step_relative()) + ").\n" + - "Make sure that this colvar is requested by biases at multiples of timeStepFactor.\n"); - return 0.; + if (cvm::proxy->simulation_running()) { + // Only integrate the extended equations of motion in running MD simulations + if (cvm::debug()) { + cvm::log("Updating extended-Lagrangian degree of freedom.\n"); } - } - // Integrate with slow timestep (if time_step_factor != 1) - cvm::real dt = cvm::dt() * cvm::real(time_step_factor); + if (prev_timestep > -1) { + // Keep track of slow timestep to integrate MTS colvars + // the colvar checks the interval after waking up twice + int n_timesteps = cvm::step_relative() - prev_timestep; + if (n_timesteps != 0 && n_timesteps != time_step_factor) { + cvm::error("Error: extended-Lagrangian " + description + " has timeStepFactor " + + cvm::to_str(time_step_factor) + ", but was activated after " + cvm::to_str(n_timesteps) + + " steps at timestep " + cvm::to_str(cvm::step_absolute()) + " (relative step: " + + cvm::to_str(cvm::step_relative()) + ").\n" + + "Make sure that this colvar is requested by biases at multiples of timeStepFactor.\n"); + return 0.; + } + } - colvarvalue f_ext(fr.type()); // force acting on the extended variable - f_ext.reset(); + // Integrate with slow timestep (if time_step_factor != 1) + cvm::real dt = cvm::dt() * cvm::real(time_step_factor); - // the total force is applied to the fictitious mass, while the - // atoms only feel the harmonic force + wall force - // fr: bias force on extended variable (without harmonic spring), for output in trajectory - // f_ext: total force on extended variable (including harmonic spring) - // f: - initially, external biasing force - // - after this code block, colvar force to be applied to atomic coordinates - // ie. spring force (fb_actual will be added just below) - fr = f; - // External force has been scaled for a 1-timestep impulse, scale it back because we will - // integrate it with the colvar's own timestep factor - f_ext = f / cvm::real(time_step_factor); - f_ext += (-0.5 * ext_force_k) * this->dist2_lgrad(xr, x); - f = (-0.5 * ext_force_k) * this->dist2_rgrad(xr, x); - // Coupling force is a slow force, to be applied to atomic coords impulse-style - f *= cvm::real(time_step_factor); + colvarvalue f_ext(fr.type()); // force acting on the extended variable + f_ext.reset(); - if (is_enabled(f_cv_subtract_applied_force)) { - // Report a "system" force without the biases on this colvar - // that is, just the spring force - ft_reported = (-0.5 * ext_force_k) * this->dist2_lgrad(xr, x); + // the total force is applied to the fictitious mass, while the + // atoms only feel the harmonic force + wall force + // fr: bias force on extended variable (without harmonic spring), for output in trajectory + // f_ext: total force on extended variable (including harmonic spring) + // f: - initially, external biasing force + // - after this code block, colvar force to be applied to atomic coordinates + // ie. spring force (fb_actual will be added just below) + fr = f; + // External force has been scaled for a 1-timestep impulse, scale it back because we will + // integrate it with the colvar's own timestep factor + f_ext = f / cvm::real(time_step_factor); + f_ext += (-0.5 * ext_force_k) * this->dist2_lgrad(x_ext, x); + f = (-0.5 * ext_force_k) * this->dist2_rgrad(x_ext, x); + // Coupling force is a slow force, to be applied to atomic coords impulse-style + f *= cvm::real(time_step_factor); + + if (is_enabled(f_cv_subtract_applied_force)) { + // Report a "system" force without the biases on this colvar + // that is, just the spring force + ft_reported = (-0.5 * ext_force_k) * this->dist2_lgrad(x_ext, x); + } else { + // The total force acting on the extended variable is f_ext + // This will be used in the next timestep + ft_reported = f_ext; + } + + // backup in case we need to revert this integration timestep + // if the same MD timestep is re-run + prev_x_ext = x_ext; + prev_v_ext = v_ext; + + // leapfrog: starting from x_i, f_i, v_(i-1/2) + v_ext += (0.5 * dt) * f_ext / ext_mass; + // Because of leapfrog, kinetic energy at time i is approximate + kinetic_energy = 0.5 * ext_mass * v_ext * v_ext; + potential_energy = 0.5 * ext_force_k * this->dist2(x_ext, x); + // leap to v_(i+1/2) + if (is_enabled(f_cv_Langevin)) { + v_ext -= dt * ext_gamma * v_ext; + colvarvalue rnd(x); + rnd.set_random(); + v_ext += dt * ext_sigma * rnd / ext_mass; + } + v_ext += (0.5 * dt) * f_ext / ext_mass; + x_ext += dt * v_ext; + x_ext.apply_constraints(); + this->wrap(x_ext); } else { - // The total force acting on the extended variable is f_ext - // This will be used in the next timestep - ft_reported = f_ext; + // If this is a postprocessing run (eg. in VMD), the extended DOF + // is equal to the actual coordinate + x_ext = x; } - - // backup in case we need to revert this integration timestep - // if the same MD timestep is re-run - prev_xr = xr; - prev_vr = vr; - - // leapfrog: starting from x_i, f_i, v_(i-1/2) - vr += (0.5 * dt) * f_ext / ext_mass; - // Because of leapfrog, kinetic energy at time i is approximate - kinetic_energy = 0.5 * ext_mass * vr * vr; - potential_energy = 0.5 * ext_force_k * this->dist2(xr, x); - // leap to v_(i+1/2) - if (is_enabled(f_cv_Langevin)) { - vr -= dt * ext_gamma * vr; - colvarvalue rnd(x); - rnd.set_random(); - vr += dt * ext_sigma * rnd / ext_mass; - } - vr += (0.5 * dt) * f_ext / ext_mass; - xr += dt * vr; - xr.apply_constraints(); - this->wrap(xr); + // Report extended value + x_reported = x_ext; } // Now adding the force on the actual colvar (for those biases that @@ -1730,7 +1854,7 @@ int colvar::update_cvc_config(std::vector const &confs) // ******************** METRIC FUNCTIONS ******************** -// Use the metrics defined by \link cvc \endlink objects +// Use the metrics defined by \link colvar::cvc \endlink objects bool colvar::periodic_boundaries(colvarvalue const &lb, colvarvalue const &ub) const @@ -1742,7 +1866,7 @@ bool colvar::periodic_boundaries(colvarvalue const &lb, colvarvalue const &ub) c } if (period > 0.0) { - if ( ((std::sqrt(this->dist2(lb, ub))) / this->width) + if ( ((cvm::sqrt(this->dist2(lb, ub))) / this->width) < 1.0E-10 ) { return true; } @@ -1792,21 +1916,21 @@ colvarvalue colvar::dist2_rgrad(colvarvalue const &x1, } } -void colvar::wrap(colvarvalue &x) const + +void colvar::wrap(colvarvalue &x_unwrapped) const { - if ( !is_enabled(f_cv_periodic) ) { + if (!is_enabled(f_cv_periodic)) { return; } if ( is_enabled(f_cv_scripted) || is_enabled(f_cv_custom_function) ) { // Scripted functions do their own wrapping, as cvcs might not be periodic - cvm::real shift = std::floor((x.real_value - wrap_center) / period + 0.5); - x.real_value -= shift * period; + cvm::real shift = cvm::floor((x_unwrapped.real_value - wrap_center) / + period + 0.5); + x_unwrapped.real_value -= shift * period; } else { - cvcs[0]->wrap(x); + cvcs[0]->wrap(x_unwrapped); } - - return; } @@ -1852,15 +1976,15 @@ std::istream & colvar::read_restart(std::istream &is) if (is_enabled(f_cv_extended_Lagrangian)) { - if ( !(get_keyval(conf, "extended_x", xr, + if ( !(get_keyval(conf, "extended_x", x_ext, colvarvalue(x.type()), colvarparse::parse_silent)) && - !(get_keyval(conf, "extended_v", vr, + !(get_keyval(conf, "extended_v", v_ext, colvarvalue(x.type()), colvarparse::parse_silent)) ) { cvm::log("Error: restart file does not contain " "\"extended_x\" or \"extended_v\" for the colvar \""+ name+"\", but you requested \"extendedLagrangian\".\n"); } - x_reported = xr; + x_reported = x_ext; } else { x_reported = x; } @@ -1875,7 +1999,7 @@ std::istream & colvar::read_restart(std::istream &is) } if (is_enabled(f_cv_extended_Lagrangian)) { - v_reported = vr; + v_reported = v_ext; } else { v_reported = v_fdiff; } @@ -1901,8 +2025,8 @@ std::istream & colvar::read_traj(std::istream &is) } if (is_enabled(f_cv_extended_Lagrangian)) { - is >> xr; - x_reported = xr; + is >> x_ext; + x_reported = x_ext; } else { x_reported = x; } @@ -1913,8 +2037,8 @@ std::istream & colvar::read_traj(std::istream &is) is >> v_fdiff; if (is_enabled(f_cv_extended_Lagrangian)) { - is >> vr; - v_reported = vr; + is >> v_ext; + v_reported = v_ext; } else { v_reported = v_fdiff; } @@ -1955,11 +2079,11 @@ std::ostream & colvar::write_restart(std::ostream &os) { os << " extended_x " << std::setprecision(cvm::cv_prec) << std::setw(cvm::cv_width) - << xr << "\n" + << x_ext << "\n" << " extended_v " << std::setprecision(cvm::cv_prec) << std::setw(cvm::cv_width) - << vr << "\n"; + << v_ext << "\n"; } os << "}\n\n"; @@ -2190,6 +2314,7 @@ int colvar::calc_acf() acf_x_history_p = acf_x_history.begin(); break; + case acf_notset: default: break; } @@ -2222,6 +2347,7 @@ int colvar::calc_acf() history_incr(acf_x_history, acf_x_history_p); break; + case acf_notset: default: break; } @@ -2257,7 +2383,7 @@ void colvar::calc_vel_acf(std::list &v_list, void colvar::calc_coor_acf(std::list &x_list, - colvarvalue const &x) + colvarvalue const &x_now) { // same as above but for coordinates if (x_list.size() >= acf_length+acf_offset) { @@ -2269,7 +2395,7 @@ void colvar::calc_coor_acf(std::list &x_list, *(acf_i++) += x.norm2(); - colvarvalue::inner_opt(x, xs_i, x_list.end(), acf_i); + colvarvalue::inner_opt(x_now, xs_i, x_list.end(), acf_i); acf_nframes++; } @@ -2277,7 +2403,7 @@ void colvar::calc_coor_acf(std::list &x_list, void colvar::calc_p2coor_acf(std::list &x_list, - colvarvalue const &x) + colvarvalue const &x_now) { // same as above but with second order Legendre polynomial instead // of just the scalar product @@ -2291,7 +2417,7 @@ void colvar::calc_p2coor_acf(std::list &x_list, // value of P2(0) = 1 *(acf_i++) += 1.0; - colvarvalue::p2leg_opt(x, xs_i, x_list.end(), acf_i); + colvarvalue::p2leg_opt(x_now, xs_i, x_list.end(), acf_i); acf_nframes++; } @@ -2316,6 +2442,9 @@ int colvar::write_acf(std::ostream &os) case acf_p2coor: os << "Coordinate (2nd Legendre poly)"; break; + case acf_notset: + default: + break; } if (acf_colvar_name == name) { @@ -2420,7 +2549,7 @@ int colvar::calc_runave() << std::setprecision(cvm::cv_prec) << std::setw(cvm::cv_width) << runave << " " << std::setprecision(cvm::cv_prec) << std::setw(cvm::cv_width) - << std::sqrt(runave_variance) << "\n"; + << cvm::sqrt(runave_variance) << "\n"; } history_add_value(runave_length, *x_history_p, x); diff --git a/lib/colvars/colvar.h b/lib/colvars/colvar.h index a67749d577..74f7fdee51 100644 --- a/lib/colvars/colvar.h +++ b/lib/colvars/colvar.h @@ -92,7 +92,7 @@ public: static std::vector cv_features; /// \brief Implementation of the feature list accessor for colvar - virtual const std::vector &features() + virtual const std::vector &features() const { return cv_features; } @@ -133,7 +133,7 @@ protected: Here: S(x(t)) = x - s(t) = xr + s(t) = x_ext DS = Ds = delta */ @@ -170,13 +170,13 @@ protected: // Options for extended_lagrangian /// Restraint center - colvarvalue xr; + colvarvalue x_ext; /// Previous value of the restraint center; - colvarvalue prev_xr; + colvarvalue prev_x_ext; /// Velocity of the restraint center - colvarvalue vr; + colvarvalue v_ext; /// Previous velocity of the restraint center - colvarvalue prev_vr; + colvarvalue prev_v_ext; /// Mass of the restraint center cvm::real ext_mass; /// Restraint force constant @@ -273,6 +273,9 @@ public: /// Init output flags int init_output_flags(std::string const &conf); + /// \brief Initialize dependency tree + virtual int init_dependencies(); + private: /// Parse the CVC configuration for all components of a certain type template int init_components_type(std::string const &conf, @@ -373,7 +376,7 @@ protected: void update_active_cvc_square_norm(); /// \brief Absolute timestep number when this colvar was last updated - int prev_timestep; + cvm::step_number prev_timestep; public: @@ -383,32 +386,32 @@ public: /// \brief Return the number of CVC objects with an active flag (as set by update_cvc_flags) inline size_t num_active_cvcs() const { return n_active_cvcs; } - /// \brief Use the internal metrics (as from \link cvc + /// \brief Use the internal metrics (as from \link colvar::cvc /// \endlink objects) to calculate square distances and gradients /// /// Handles correctly symmetries and periodic boundary conditions cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const; - /// \brief Use the internal metrics (as from \link cvc + /// \brief Use the internal metrics (as from \link colvar::cvc /// \endlink objects) to calculate square distances and gradients /// /// Handles correctly symmetries and periodic boundary conditions colvarvalue dist2_lgrad(colvarvalue const &x1, colvarvalue const &x2) const; - /// \brief Use the internal metrics (as from \link cvc + /// \brief Use the internal metrics (as from \link colvar::cvc /// \endlink objects) to calculate square distances and gradients /// /// Handles correctly symmetries and periodic boundary conditions colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const; - /// \brief Use the internal metrics (as from \link cvc + /// \brief Use the internal metrics (as from \link colvar::cvc /// \endlink objects) to wrap a value into a standard interval /// /// Handles correctly symmetries and periodic boundary conditions - void wrap(colvarvalue &x) const; + void wrap(colvarvalue &x_unwrapped) const; /// Read the analysis tasks @@ -546,6 +549,7 @@ public: class polar_phi; class distance_inv; class distance_pairs; + class dipole_magnitude; class angle; class dipole_angle; class dihedral; @@ -574,7 +578,7 @@ public: protected: - /// \brief Array of \link cvc \endlink objects + /// \brief Array of \link colvar::cvc \endlink objects std::vector cvcs; /// \brief Flags to enable or disable cvcs at next colvar evaluation @@ -619,6 +623,9 @@ public: inline size_t n_components() const { return cvcs.size(); } + + /// \brief Get vector of vectors of atom IDs for all atom groups + virtual std::vector > get_atom_lists(); }; inline cvm::real const & colvar::force_constant() const @@ -655,6 +662,8 @@ inline colvarvalue const & colvar::total_force() const inline void colvar::add_bias_force(colvarvalue const &force) { + check_enabled(f_cv_gradient, + std::string("applying a force to the variable \""+name+"\"")); if (cvm::debug()) { cvm::log("Adding biasing force "+cvm::to_str(force)+" to colvar \""+name+"\".\n"); } diff --git a/lib/colvars/colvar_UIestimator.h b/lib/colvars/colvar_UIestimator.h index 759b8d54a0..365f46148a 100644 --- a/lib/colvars/colvar_UIestimator.h +++ b/lib/colvars/colvar_UIestimator.h @@ -33,24 +33,24 @@ namespace UIestimator { public: n_matrix() {} - n_matrix(const std::vector & lowerboundary, // lowerboundary of x - const std::vector & upperboundary, // upperboundary of - const std::vector & width, // width of x - const int y_size) { // size of y, for example, ysize=7, then when x=1, the distribution of y in [-2,4] is considered + n_matrix(const std::vector & lowerboundary_input, // lowerboundary of x + const std::vector & upperboundary_input, // upperboundary of + const std::vector & width_input, // width of x + const int y_size_input) { // size of y, for example, ysize=7, then when x=1, the distribution of y in [-2,4] is considered int i; - this->lowerboundary = lowerboundary; - this->upperboundary = upperboundary; - this->width = width; - this->dimension = lowerboundary.size(); - this->y_size = y_size; // keep in mind the internal (spare) matrix is stored in diagonal form - this->y_total_size = int(std::pow(double(y_size), double(dimension)) + EPSILON); + this->lowerboundary = lowerboundary_input; + this->upperboundary = upperboundary_input; + this->width = width_input; + this->dimension = lowerboundary_input.size(); + this->y_size = y_size_input; // keep in mind the internal (spare) matrix is stored in diagonal form + this->y_total_size = int(cvm::pow(double(y_size_input), double(dimension)) + EPSILON); // the range of the matrix is [lowerboundary, upperboundary] x_total_size = 1; for (i = 0; i < dimension; i++) { - x_size.push_back(int((upperboundary[i] - lowerboundary[i]) / width[i] + EPSILON)); + x_size.push_back(int((upperboundary_input[i] - lowerboundary_input[i]) / width_input[i] + EPSILON)); x_total_size *= x_size[i]; } @@ -89,9 +89,10 @@ namespace UIestimator { std::vector temp; // this vector is used in convert_x and convert_y to save computational resource - int i, j; - int convert_x(const std::vector & x) { // convert real x value to its interal index + + int i, j; + for (i = 0; i < dimension; i++) { temp[i] = int((x[i] - lowerboundary[i]) / width[i] + EPSILON); } @@ -121,7 +122,7 @@ namespace UIestimator { int index = 0; for (i = 0; i < dimension; i++) { if (i + 1 < dimension) - index += temp[i] * int(std::pow(double(y_size), double(dimension - i - 1)) + EPSILON); + index += temp[i] * int(cvm::pow(double(y_size), double(dimension - i - 1)) + EPSILON); else index += temp[i]; } @@ -139,19 +140,19 @@ namespace UIestimator { public: n_vector() {} - n_vector(const std::vector & lowerboundary, // lowerboundary of x - const std::vector & upperboundary, // upperboundary of - const std::vector & width, // width of x - const int y_size, // size of y, for example, ysize=7, then when x=1, the distribution of y in [-2,4] is considered + n_vector(const std::vector & lowerboundary_input, // lowerboundary of x + const std::vector & upperboundary_input, // upperboundary of + const std::vector & width_input, // width of x + const int y_size_input, // size of y, for example, ysize=7, then when x=1, the distribution of y in [-2,4] is considered const T & default_value) { // the default value of T - this->width = width; - this->dimension = lowerboundary.size(); + this->width = width_input; + this->dimension = lowerboundary_input.size(); x_total_size = 1; for (int i = 0; i < dimension; i++) { - this->lowerboundary.push_back(lowerboundary[i] - (y_size - 1) / 2 * width[i] - EPSILON); - this->upperboundary.push_back(upperboundary[i] + (y_size - 1) / 2 * width[i] + EPSILON); + this->lowerboundary.push_back(lowerboundary_input[i] - (y_size_input - 1) / 2 * width_input[i] - EPSILON); + this->upperboundary.push_back(upperboundary_input[i] + (y_size_input - 1) / 2 * width_input[i] + EPSILON); x_size.push_back(int((this->upperboundary[i] - this->lowerboundary[i]) / this->width[i] + EPSILON)); x_total_size *= x_size[i]; @@ -215,26 +216,26 @@ namespace UIestimator { UIestimator() {} //called when (re)start an eabf simulation - UIestimator(const std::vector & lowerboundary, - const std::vector & upperboundary, - const std::vector & width, - const std::vector & krestr, // force constant in eABF - const std::string & output_filename, // the prefix of output files - const int output_freq, - const bool restart, // whether restart from a .count and a .grad file - const std::vector & input_filename, // the prefixes of input files - const double temperature) { + UIestimator(const std::vector & lowerboundary_input, + const std::vector & upperboundary_input, + const std::vector & width_input, + const std::vector & krestr_input, // force constant in eABF + const std::string & output_filename_input, // the prefix of output files + const int output_freq_input, + const bool restart_input, // whether restart from a .count and a .grad file + const std::vector & input_filename_input, // the prefixes of input files + const double temperature_input) { // initialize variables - this->lowerboundary = lowerboundary; - this->upperboundary = upperboundary; - this->width = width; - this->krestr = krestr; - this->output_filename = output_filename; - this->output_freq = output_freq; - this->restart = restart; - this->input_filename = input_filename; - this->temperature = temperature; + this->lowerboundary = lowerboundary_input; + this->upperboundary = upperboundary_input; + this->width = width_input; + this->krestr = krestr_input; + this->output_filename = output_filename_input; + this->output_freq = output_freq_input; + this->restart = restart_input; + this->input_filename = input_filename_input; + this->temperature = temperature_input; int i, j; @@ -300,7 +301,7 @@ namespace UIestimator { ~UIestimator() {} // called from MD engine every step - bool update(const int step, std::vector x, std::vector y) { + bool update(cvm::step_number step, std::vector x, std::vector y) { int i; @@ -431,7 +432,7 @@ namespace UIestimator { loop_flag_y[k] = loop_flag_x[k] - HALF_Y_SIZE * width[k]; } - int j = 0; + j = 0; while (j >= 0) { norm += distribution_x_y.get_value(loop_flag_x, loop_flag_y); for (k = 0; k < dimension; k++) { @@ -672,7 +673,7 @@ namespace UIestimator { } // read input files - void read_inputfiles(const std::vector input_filename) + void read_inputfiles(const std::vector filename) { char sharp; double nothing; @@ -683,11 +684,11 @@ namespace UIestimator { std::vector position_temp(dimension, 0); std::vector grad_temp(dimension, 0); int count_temp = 0; - for (i = 0; i < int(input_filename.size()); i++) { + for (i = 0; i < int(filename.size()); i++) { int size = 1 , size_temp = 0; - std::string count_filename = input_filename[i] + ".UI.count"; - std::string grad_filename = input_filename[i] + ".UI.grad"; + std::string count_filename = filename[i] + ".UI.count"; + std::string grad_filename = filename[i] + ".UI.grad"; std::ifstream count_file(count_filename.c_str(), std::ios::in); std::ifstream grad_file(grad_filename.c_str(), std::ios::in); diff --git a/lib/colvars/colvaratoms.cpp b/lib/colvars/colvaratoms.cpp index 3315007b54..eeb7985fec 100644 --- a/lib/colvars/colvaratoms.cpp +++ b/lib/colvars/colvaratoms.cpp @@ -22,7 +22,7 @@ cvm::atom::atom() index = -1; id = -1; mass = 1.0; - charge = 1.0; + charge = 0.0; reset_data(); } @@ -107,6 +107,8 @@ cvm::atom_group::~atom_group() delete fitting_group; fitting_group = NULL; } + + cvm::main()->unregister_named_atom_group(this); } @@ -183,10 +185,7 @@ int cvm::atom_group::init() // These may be overwritten by parse(), if a name is provided atoms.clear(); - - // TODO: check with proxy whether atom forces etc are available - init_ag_requires(); - + init_dependencies(); index = -1; b_dummy = false; @@ -207,8 +206,67 @@ int cvm::atom_group::init() } +int cvm::atom_group::init_dependencies() { + size_t i; + // Initialize static array once and for all + if (features().size() == 0) { + for (i = 0; i < f_ag_ntot; i++) { + modify_features().push_back(new feature); + } + + init_feature(f_ag_active, "active", f_type_dynamic); + init_feature(f_ag_center, "translational fit", f_type_static); + init_feature(f_ag_rotate, "rotational fit", f_type_static); + init_feature(f_ag_fitting_group, "fitting group", f_type_static); + init_feature(f_ag_explicit_gradient, "explicit atom gradient", f_type_dynamic); + init_feature(f_ag_fit_gradients, "fit gradients", f_type_user); + require_feature_self(f_ag_fit_gradients, f_ag_explicit_gradient); + + init_feature(f_ag_atom_forces, "atomic forces", f_type_dynamic); + + // parallel calculation implies that we have at least a scalable center of mass, + // but f_ag_scalable is kept as a separate feature to deal with future dependencies + init_feature(f_ag_scalable, "scalable group calculation", f_type_static); + init_feature(f_ag_scalable_com, "scalable group center of mass calculation", f_type_static); + require_feature_self(f_ag_scalable, f_ag_scalable_com); + + // check that everything is initialized + for (i = 0; i < colvardeps::f_ag_ntot; i++) { + if (is_not_set(i)) { + cvm::error("Uninitialized feature " + cvm::to_str(i) + " in " + description); + } + } + } + + // Initialize feature_states for each instance + // default as unavailable, not enabled + feature_states.reserve(f_ag_ntot); + for (i = 0; i < colvardeps::f_ag_ntot; i++) { + feature_states.push_back(feature_state(false, false)); + } + + // Features that are implemented (or not) by all atom groups + feature_states[f_ag_active].available = true; + // f_ag_scalable_com is provided by the CVC iff it is COM-based + feature_states[f_ag_scalable_com].available = false; + // TODO make f_ag_scalable depend on f_ag_scalable_com (or something else) + feature_states[f_ag_scalable].available = true; + feature_states[f_ag_fit_gradients].available = true; + feature_states[f_ag_fitting_group].available = true; + feature_states[f_ag_explicit_gradient].available = true; + + return COLVARS_OK; +} + + int cvm::atom_group::setup() { + if (atoms_ids.size() == 0) { + atoms_ids.reserve(atoms.size()); + for (cvm::atom_iter ai = atoms.begin(); ai != atoms.end(); ai++) { + atoms_ids.push_back(ai->id); + } + } for (cvm::atom_iter ai = atoms.begin(); ai != atoms.end(); ai++) { ai->update_mass(); ai->update_charge(); @@ -237,15 +295,6 @@ void cvm::atom_group::update_total_mass() } -void cvm::atom_group::reset_mass(std::string &name, int i, int j) -{ - update_total_mass(); - cvm::log("Re-initialized atom group "+name+":"+cvm::to_str(i)+"/"+ - cvm::to_str(j)+". "+ cvm::to_str(atoms_ids.size())+ - " atoms: total mass = "+cvm::to_str(total_mass)+".\n"); -} - - void cvm::atom_group::update_total_charge() { if (b_dummy) { @@ -264,6 +313,19 @@ void cvm::atom_group::update_total_charge() } +void cvm::atom_group::print_properties(std::string const &colvar_name, + int i, int j) +{ + if (cvm::proxy->updated_masses() && cvm::proxy->updated_charges()) { + cvm::log("Re-initialized atom group for variable \""+colvar_name+"\":"+ + cvm::to_str(i)+"/"+ + cvm::to_str(j)+". "+ cvm::to_str(atoms_ids.size())+ + " atoms: total mass = "+cvm::to_str(total_mass)+ + ", total charge = "+cvm::to_str(total_charge)+".\n"); + } +} + + int cvm::atom_group::parse(std::string const &group_conf) { cvm::log("Initializing atom group \""+key+"\".\n"); @@ -450,10 +512,21 @@ int cvm::atom_group::parse(std::string const &group_conf) if (cvm::debug()) cvm::log("Done initializing atom group \""+key+"\".\n"); - cvm::log("Atom group \""+key+"\" defined, "+ - cvm::to_str(atoms_ids.size())+" atoms initialized: total mass = "+ - cvm::to_str(total_mass)+", total charge = "+ - cvm::to_str(total_charge)+".\n"); + { + std::string init_msg; + init_msg.append("Atom group \""+key+"\" defined with "+ + cvm::to_str(atoms_ids.size())+" atoms requested"); + if ((cvm::proxy)->updated_masses()) { + init_msg.append(": total mass = "+ + cvm::to_str(total_mass)); + if ((cvm::proxy)->updated_charges()) { + init_msg.append(", total charge = "+ + cvm::to_str(total_charge)); + } + } + init_msg.append(".\n"); + cvm::log(init_msg); + } if (b_print_atom_ids) { cvm::log("Internal definition of the atom group:\n"); @@ -464,7 +537,7 @@ int cvm::atom_group::parse(std::string const &group_conf) } -int cvm::atom_group::add_atoms_of_group(atom_group const * ag) +int cvm::atom_group::add_atoms_of_group(atom_group const *ag) { std::vector const &source_ids = ag->atoms_ids; @@ -696,6 +769,7 @@ int cvm::atom_group::parse_fitting_options(std::string const &group_conf) return INPUT_ERROR; } } + enable(f_ag_fitting_group); } atom_group *group_for_fit = fitting_group ? fitting_group : this; @@ -800,24 +874,24 @@ int cvm::atom_group::create_sorted_ids() // Sort the internal IDs std::list sorted_atoms_ids_list; - for (size_t i = 0; i < this->size(); i++) { + for (size_t i = 0; i < atoms_ids.size(); i++) { sorted_atoms_ids_list.push_back(atoms_ids[i]); } sorted_atoms_ids_list.sort(); sorted_atoms_ids_list.unique(); - if (sorted_atoms_ids_list.size() != this->size()) { + if (sorted_atoms_ids_list.size() != atoms_ids.size()) { return cvm::error("Error: duplicate atom IDs in atom group? (found " + cvm::to_str(sorted_atoms_ids_list.size()) + " unique atom IDs instead of " + - cvm::to_str(this->size()) + ").\n", BUG_ERROR); + cvm::to_str(atoms_ids.size()) + ").\n", BUG_ERROR); } // Compute map between sorted and unsorted elements - sorted_atoms_ids.resize(this->size()); - sorted_atoms_ids_map.resize(this->size()); + sorted_atoms_ids.resize(atoms_ids.size()); + sorted_atoms_ids_map.resize(atoms_ids.size()); std::list::iterator lsii = sorted_atoms_ids_list.begin(); size_t ii = 0; - for ( ; ii < this->size(); lsii++, ii++) { + for ( ; ii < atoms_ids.size(); lsii++, ii++) { sorted_atoms_ids[ii] = *lsii; size_t const pos = std::find(atoms_ids.begin(), atoms_ids.end(), *lsii) - atoms_ids.begin(); @@ -1038,15 +1112,15 @@ int cvm::atom_group::calc_center_of_mass() } -int cvm::atom_group::calc_dipole(cvm::atom_pos const &com) +int cvm::atom_group::calc_dipole(cvm::atom_pos const &dipole_center) { if (b_dummy) { - cvm::error("Error: trying to compute the dipole of an empty group.\n", INPUT_ERROR); - return COLVARS_ERROR; + return cvm::error("Error: trying to compute the dipole " + "of a dummy group.\n", INPUT_ERROR); } dip.reset(); for (cvm::atom_const_iter ai = this->begin(); ai != this->end(); ai++) { - dip += ai->charge * (ai->pos - com); + dip += ai->charge * (ai->pos - dipole_center); } return COLVARS_OK; } @@ -1056,13 +1130,12 @@ void cvm::atom_group::set_weighted_gradient(cvm::rvector const &grad) { if (b_dummy) return; - if (is_enabled(f_ag_scalable)) { - scalar_com_gradient = grad; - return; - } + scalar_com_gradient = grad; - for (cvm::atom_iter ai = this->begin(); ai != this->end(); ai++) { - ai->grad = (ai->mass/total_mass) * grad; + if (!is_enabled(f_ag_scalable)) { + for (cvm::atom_iter ai = this->begin(); ai != this->end(); ai++) { + ai->grad = (ai->mass/total_mass) * grad; + } } } diff --git a/lib/colvars/colvaratoms.h b/lib/colvars/colvaratoms.h index 0b0dd62c70..9756e0e364 100644 --- a/lib/colvars/colvaratoms.h +++ b/lib/colvars/colvaratoms.h @@ -17,7 +17,7 @@ /// \brief Stores numeric id, mass and all mutable data for an atom, -/// mostly used by a \link cvc \endlink +/// mostly used by a \link colvar::cvc \endlink /// /// This class may be used to keep atomic data such as id, mass, /// position and collective variable derivatives) altogether. @@ -63,7 +63,7 @@ public: /// from the \link colvarvalue \endlink class), which is also the /// most frequent case. For more complex types of \link /// colvarvalue \endlink objects, atomic gradients should be - /// defined within the specific \link cvc \endlink + /// defined within the specific \link colvar::cvc \endlink /// implementation cvm::rvector grad; @@ -100,13 +100,19 @@ public: /// Get the latest value of the mass inline void update_mass() { - mass = (cvm::proxy)->get_atom_mass(index); + colvarproxy *p = cvm::proxy; + if (p->updated_masses()) { + mass = p->get_atom_mass(index); + } } /// Get the latest value of the charge inline void update_charge() { - charge = (cvm::proxy)->get_atom_charge(index); + colvarproxy *p = cvm::proxy; + if (p->updated_charges()) { + charge = p->get_atom_charge(index); + } } /// Get the current position @@ -145,7 +151,7 @@ public: /// \brief Group of \link atom \endlink objects, mostly used by a -/// \link cvc \endlink object to gather all atomic data +/// \link colvar::cvc \endlink object to gather all atomic data class colvarmodule::atom_group : public colvarparse, public colvardeps { @@ -174,6 +180,9 @@ public: /// \brief Set default values for common flags int init(); + /// \brief Initialize dependency tree + virtual int init_dependencies(); + /// \brief Update data required to calculate cvc's int setup(); @@ -198,16 +207,16 @@ public: /// \brief Remove an atom object from this group int remove_atom(cvm::atom_iter ai); - /// \brief Re-initialize the total mass of a group. + /// \brief Print the updated the total mass and charge of a group. /// This is needed in case the hosting MD code has an option to /// change atom masses after their initialization. - void reset_mass(std::string &name, int i, int j); + void print_properties(std::string const &colvar_name, int i, int j); /// \brief Implementation of the feature list for atom group static std::vector ag_features; /// \brief Implementation of the feature list accessor for atom group - virtual const std::vector &features() + virtual const std::vector &features() const { return ag_features; } @@ -347,15 +356,19 @@ public: /// Total mass of the atom group cvm::real total_mass; + + /// Update the total mass of the atom group void update_total_mass(); /// Total charge of the atom group cvm::real total_charge; + + /// Update the total mass of the group void update_total_charge(); /// \brief Don't apply any force on this group (use its coordinates /// only to calculate a colvar) - bool noforce; + bool noforce; /// \brief Get the current positions void read_positions(); @@ -423,20 +436,32 @@ public: /// \brief Calculate the center of mass of the atomic positions, assuming that /// they are already pbc-wrapped int calc_center_of_mass(); + private: + /// \brief Center of mass cvm::atom_pos com; + /// \brief The derivative of a scalar variable with respect to the COM // TODO for scalable calculations of more complex variables (e.g. rotation), // use a colvarvalue of vectors to hold the entire derivative cvm::rvector scalar_com_gradient; + public: - /// \brief Return the center of mass of the atomic positions + + /// \brief Return the center of mass (COM) of the atomic positions inline cvm::atom_pos center_of_mass() const { return com; } + /// \brief Return previously gradient of scalar variable with respect to the + /// COM + inline cvm::rvector center_of_mass_scalar_gradient() const + { + return scalar_com_gradient; + } + /// \brief Return a copy of the current atom positions, shifted by a constant vector std::vector positions_shifted(cvm::rvector const &shift) const; @@ -444,10 +469,15 @@ public: std::vector velocities() const; ///\brief Calculate the dipole of the atom group around the specified center - int calc_dipole(cvm::atom_pos const &com); + int calc_dipole(cvm::atom_pos const &dipole_center); + private: + + /// Dipole moment of the atom group cvm::rvector dip; + public: + ///\brief Return the (previously calculated) dipole of the atom group inline cvm::rvector dipole() const { diff --git a/lib/colvars/colvarbias.cpp b/lib/colvars/colvarbias.cpp index 9363fcdcb6..724326d3b4 100644 --- a/lib/colvars/colvarbias.cpp +++ b/lib/colvars/colvarbias.cpp @@ -17,15 +17,14 @@ colvarbias::colvarbias(char const *key) : bias_type(to_lower_cppstr(key)) { - init_cvb_requires(); - + description = "uninitialized " + cvm::to_str(key) + " bias"; + init_dependencies(); rank = 1; has_data = false; b_output_energy = false; reset(); - state_file_step = 0; - description = "uninitialized " + cvm::to_str(key) + " bias"; + state_file_step = 0L; } @@ -76,6 +75,7 @@ int colvarbias::init(std::string const &conf) cvm::error("Error: no collective variables specified.\n", INPUT_ERROR); return INPUT_ERROR; } + } else { cvm::log("Reinitializing bias \""+name+"\".\n"); } @@ -98,6 +98,70 @@ int colvarbias::init(std::string const &conf) } +int colvarbias::init_dependencies() { + int i; + if (features().size() == 0) { + for (i = 0; i < f_cvb_ntot; i++) { + modify_features().push_back(new feature); + } + + init_feature(f_cvb_active, "active", f_type_dynamic); + require_feature_children(f_cvb_active, f_cv_active); + + init_feature(f_cvb_awake, "awake", f_type_static); + require_feature_self(f_cvb_awake, f_cvb_active); + + init_feature(f_cvb_apply_force, "apply force", f_type_user); + require_feature_children(f_cvb_apply_force, f_cv_gradient); + + init_feature(f_cvb_get_total_force, "obtain total force", f_type_dynamic); + require_feature_children(f_cvb_get_total_force, f_cv_total_force); + + init_feature(f_cvb_output_acc_work, "output accumulated work", f_type_user); + require_feature_self(f_cvb_output_acc_work, f_cvb_apply_force); + + init_feature(f_cvb_history_dependent, "history-dependent", f_type_static); + + init_feature(f_cvb_time_dependent, "time-dependent", f_type_static); + + init_feature(f_cvb_scalar_variables, "require scalar variables", f_type_static); + require_feature_children(f_cvb_scalar_variables, f_cv_scalar); + + init_feature(f_cvb_calc_pmf, "calculate a PMF", f_type_static); + + init_feature(f_cvb_calc_ti_samples, "calculate TI samples", f_type_dynamic); + require_feature_self(f_cvb_calc_ti_samples, f_cvb_get_total_force); + require_feature_children(f_cvb_calc_ti_samples, f_cv_grid); + + init_feature(f_cvb_write_ti_samples, "write TI samples ", f_type_user); + require_feature_self(f_cvb_write_ti_samples, f_cvb_calc_ti_samples); + + init_feature(f_cvb_write_ti_pmf, "write TI PMF", f_type_user); + require_feature_self(f_cvb_write_ti_pmf, f_cvb_calc_ti_samples); + + // check that everything is initialized + for (i = 0; i < colvardeps::f_cvb_ntot; i++) { + if (is_not_set(i)) { + cvm::error("Uninitialized feature " + cvm::to_str(i) + " in " + description); + } + } + } + + // Initialize feature_states for each instance + feature_states.reserve(f_cvb_ntot); + for (i = 0; i < f_cvb_ntot; i++) { + feature_states.push_back(feature_state(true, false)); + // Most features are available, so we set them so + // and list exceptions below + } + + // only compute TI samples when deriving from colvarbias_ti + feature_states[f_cvb_calc_ti_samples].available = false; + + return COLVARS_OK; +} + + int colvarbias::reset() { bias_energy = 0.0; @@ -217,6 +281,9 @@ int colvarbias::update() void colvarbias::communicate_forces() { + if (! is_enabled(f_cvb_apply_force)) { + return; + } size_t i = 0; for (i = 0; i < num_variables(); i++) { if (cvm::debug()) { @@ -345,7 +412,8 @@ std::istream & colvarbias::read_state(std::istream &is) (set_state_params(conf) != COLVARS_OK) ) { cvm::error("Error: in reading state configuration for \""+bias_type+"\" bias \""+ this->name+"\" at position "+ - cvm::to_str(is.tellg())+" in stream.\n", INPUT_ERROR); + cvm::to_str(static_cast(is.tellg()))+ + " in stream.\n", INPUT_ERROR); is.clear(); is.seekg(start_pos, std::ios::beg); is.setstate(std::ios::failbit); @@ -355,7 +423,8 @@ std::istream & colvarbias::read_state(std::istream &is) if (!read_state_data(is)) { cvm::error("Error: in reading state data for \""+bias_type+"\" bias \""+ this->name+"\" at position "+ - cvm::to_str(is.tellg())+" in stream.\n", INPUT_ERROR); + cvm::to_str(static_cast(is.tellg()))+ + " in stream.\n", INPUT_ERROR); is.clear(); is.seekg(start_pos, std::ios::beg); is.setstate(std::ios::failbit); @@ -365,7 +434,8 @@ std::istream & colvarbias::read_state(std::istream &is) if (brace != "}") { cvm::error("Error: corrupt restart information for \""+bias_type+"\" bias \""+ this->name+"\": no matching brace at position "+ - cvm::to_str(is.tellg())+" in stream.\n"); + cvm::to_str(static_cast(is.tellg()))+ + " in stream.\n"); is.setstate(std::ios::failbit); } @@ -381,7 +451,8 @@ std::istream & colvarbias::read_state_data_key(std::istream &is, char const *key !(key_in == to_lower_cppstr(std::string(key))) ) { cvm::error("Error: in reading restart configuration for "+ bias_type+" bias \""+this->name+"\" at position "+ - cvm::to_str(is.tellg())+" in stream.\n", INPUT_ERROR); + cvm::to_str(static_cast(is.tellg()))+ + " in stream.\n", INPUT_ERROR); is.clear(); is.seekg(start_pos, std::ios::beg); is.setstate(std::ios::failbit); @@ -640,7 +711,7 @@ int colvarbias_ti::write_output_files() cvm::proxy->close_output_stream(ti_count_file_name); } - std::string const ti_grad_file_name(ti_output_prefix+".ti.grad"); + std::string const ti_grad_file_name(ti_output_prefix+".ti.force"); os = cvm::proxy->output_stream(ti_grad_file_name); if (os) { ti_avg_forces->write_multicol(*os); diff --git a/lib/colvars/colvarbias.h b/lib/colvars/colvarbias.h index 391826e79e..eac88a7f18 100644 --- a/lib/colvars/colvarbias.h +++ b/lib/colvars/colvarbias.h @@ -96,6 +96,9 @@ public: /// \brief Parse config string and (re)initialize virtual int init(std::string const &conf); + /// \brief Initialize dependency tree + virtual int init_dependencies(); + /// \brief Set to zero all mutable data virtual int reset(); @@ -181,7 +184,7 @@ public: static std::vector cvb_features; /// \brief Implementation of the feature list accessor for colvarbias - virtual const std::vector &features() + virtual const std::vector &features() const { return cvb_features; } @@ -220,7 +223,7 @@ protected: bool has_data; /// \brief Step number read from the last state file - size_t state_file_step; + cvm::step_number state_file_step; }; diff --git a/lib/colvars/colvarbias_abf.cpp b/lib/colvars/colvarbias_abf.cpp index e5edd92ae6..bac021be99 100644 --- a/lib/colvars/colvarbias_abf.cpp +++ b/lib/colvars/colvarbias_abf.cpp @@ -191,10 +191,10 @@ int colvarbias_abf::init(std::string const &conf) // Projected ABF get_keyval(conf, "pABFintegrateFreq", pabf_freq, 0); // Parameters for integrating initial (and final) gradient data - get_keyval(conf, "integrateInitSteps", integrate_initial_steps, 1e4); + get_keyval(conf, "integrateInitMaxIterations", integrate_initial_iterations, 1e4); get_keyval(conf, "integrateInitTol", integrate_initial_tol, 1e-6); // for updating the integrated PMF on the fly - get_keyval(conf, "integrateSteps", integrate_steps, 100); + get_keyval(conf, "integrateMaxIterations", integrate_iterations, 100); get_keyval(conf, "integrateTol", integrate_tol, 1e-4); } } else { @@ -366,10 +366,10 @@ int colvarbias_abf::update() if ( b_integrate ) { if ( pabf_freq && cvm::step_relative() % pabf_freq == 0 ) { cvm::real err; - int iter = pmf->integrate(integrate_steps, integrate_tol, err); - if ( iter == integrate_steps ) { + int iter = pmf->integrate(integrate_iterations, integrate_tol, err); + if ( iter == integrate_iterations ) { cvm::log("Warning: PMF integration did not converge to " + cvm::to_str(integrate_tol) - + " in " + cvm::to_str(integrate_steps) + + " in " + cvm::to_str(integrate_iterations) + " steps. Residual error: " + cvm::to_str(err)); } pmf->set_zero_minimum(); // TODO: do this only when necessary @@ -597,7 +597,7 @@ void colvarbias_abf::write_gradients_samples(const std::string &prefix, bool app if (b_integrate) { // Do numerical integration (to high precision) and output a PMF cvm::real err; - pmf->integrate(integrate_initial_steps, integrate_initial_tol, err); + pmf->integrate(integrate_initial_iterations, integrate_initial_tol, err); pmf->set_zero_minimum(); std::string pmf_out_name = prefix + ".pmf"; @@ -661,7 +661,7 @@ void colvarbias_abf::write_gradients_samples(const std::string &prefix, bool app // Do numerical integration (to high precision) and output a PMF cvm::real err; czar_pmf->set_div(); - czar_pmf->integrate(integrate_initial_steps, integrate_initial_tol, err); + czar_pmf->integrate(integrate_initial_iterations, integrate_initial_tol, err); czar_pmf->set_zero_minimum(); std::string czar_pmf_out_name = prefix + ".czar.pmf"; diff --git a/lib/colvars/colvarbias_abf.h b/lib/colvars/colvarbias_abf.h index 52bf2df210..4bcc149da5 100644 --- a/lib/colvars/colvarbias_abf.h +++ b/lib/colvars/colvarbias_abf.h @@ -27,9 +27,13 @@ class colvarbias_abf : public colvarbias { public: + /// Constructor for ABF bias colvarbias_abf(char const *key); + /// Initializer for ABF bias virtual int init(std::string const &conf); + /// Default destructor for ABF bias virtual ~colvarbias_abf(); + /// Per-timestep update of ABF bias virtual int update(); private: @@ -40,11 +44,17 @@ private: /// Base filename(s) for reading previous gradient data (replaces data from restart file) std::vector input_prefix; + /// Adapt the bias at each time step (as opposed to keeping it constant)? bool update_bias; + /// Use normalized definition of PMF for distance functions? (flat at long distances) + /// by including the Jacobian term separately of the recorded PMF bool hide_Jacobian; + /// Integrate gradients into a PMF on output bool b_integrate; + /// Number of samples per bin before applying the full biasing force size_t full_samples; + /// Number of samples per bin before applying a scaled-down biasing force size_t min_samples; /// frequency for updating output files int output_freq; @@ -52,6 +62,7 @@ private: bool b_history_files; /// Write CZAR output file for stratified eABF (.zgrad) bool b_czar_window_file; + /// Number of timesteps between recording data in history files (if non-zero) size_t history_freq; /// Umbrella Integration estimator of free energy from eABF UIestimator::UIestimator eabf_UI; @@ -63,25 +74,30 @@ private: /// Frequency for updating pABF PMF (if zero, pABF is not used) int pabf_freq; /// Max number of CG iterations for integrating PMF at startup and for file output - int integrate_initial_steps; + int integrate_initial_iterations; /// Tolerance for integrating PMF at startup and for file output cvm::real integrate_initial_tol; /// Max number of CG iterations for integrating PMF at on-the-fly pABF updates - int integrate_steps; + int integrate_iterations; /// Tolerance for integrating PMF at on-the-fly pABF updates cvm::real integrate_tol; - /// Cap the biasing force to be applied? + /// Cap the biasing force to be applied? (option maxForce) bool cap_force; + /// Maximum force to be applied std::vector max_force; - // Frequency for updating 2D gradients - int integrate_freq; - // Internal data and methods - std::vector bin, force_bin, z_bin; - gradient_t system_force, applied_force; + /// Current bin in sample grid + std::vector bin; + /// Current bin in force grid + std::vector force_bin; + /// Cuurent bin in "actual" coordinate, when running extended Lagrangian dynamics + std::vector z_bin; + + /// Measured instantaneous system force + gradient_t system_force; /// n-dim grid of free energy gradients colvar_grid_gradient *gradients; @@ -118,7 +134,7 @@ private: // shared ABF bool shared_on; size_t shared_freq; - int shared_last_step; + cvm::step_number shared_last_step; // Share between replicas -- may be called independently of update virtual int replica_share(); diff --git a/lib/colvars/colvarbias_histogram.h b/lib/colvars/colvarbias_histogram.h index b9c1b49950..23565caa5c 100644 --- a/lib/colvars/colvarbias_histogram.h +++ b/lib/colvars/colvarbias_histogram.h @@ -37,7 +37,7 @@ protected: std::string out_name, out_name_dx; size_t output_freq; - /// If one or more of the variables are \link type_vector \endlink, treat them as arrays of this length + /// If one or more of the variables are \link colvarvalue::type_vector \endlink, treat them as arrays of this length size_t colvar_array_size; /// If colvar_array_size is larger than 1, weigh each one by this number before accumulating the histogram std::vector weights; diff --git a/lib/colvars/colvarbias_meta.cpp b/lib/colvars/colvarbias_meta.cpp index f3ae3631a0..27781ec733 100644 --- a/lib/colvars/colvarbias_meta.cpp +++ b/lib/colvars/colvarbias_meta.cpp @@ -11,7 +11,6 @@ #include #include #include -#include #include // used to set the absolute path of a replica file @@ -39,6 +38,8 @@ colvarbias_meta::colvarbias_meta(char const *key) new_hills_begin = hills.end(); hills_traj_os = NULL; replica_hills_os = NULL; + + ebmeta_equil_steps = 0L; } @@ -61,7 +62,7 @@ int colvarbias_meta::init(std::string const &conf) enable(f_cvb_history_dependent); } - get_keyval(conf, "hillWidth", hill_width, std::sqrt(2.0 * PI) / 2.0); + get_keyval(conf, "hillWidth", hill_width, cvm::sqrt(2.0 * PI) / 2.0); cvm::log("Half-widths of the Gaussian hills (sigma's):\n"); for (size_t i = 0; i < num_variables(); i++) { cvm::log(variables(i)->name+std::string(": ")+ @@ -201,6 +202,7 @@ int colvarbias_meta::init_ebmeta_params(std::string const &conf) } target_dist = new colvar_grid_scalar(); target_dist->init_from_colvars(colvars); + std::string target_dist_file; get_keyval(conf, "targetdistfile", target_dist_file); std::ifstream targetdiststream(target_dist_file.c_str()); target_dist->read_multicol(targetdiststream); @@ -221,9 +223,9 @@ int colvarbias_meta::init_ebmeta_params(std::string const &conf) } // normalize target distribution and multiply by effective volume = exp(differential entropy) target_dist->multiply_constant(1.0/target_dist->integral()); - cvm::real volume = std::exp(target_dist->entropy()); + cvm::real volume = cvm::exp(target_dist->entropy()); target_dist->multiply_constant(volume); - get_keyval(conf, "ebMetaEquilSteps", ebmeta_equil_steps, 0); + get_keyval(conf, "ebMetaEquilSteps", ebmeta_equil_steps, ebmeta_equil_steps); } return COLVARS_OK; @@ -291,7 +293,7 @@ colvarbias_meta::create_hill(colvarbias_meta::hill const &h) // need to be computed analytically when the colvar returns // off-grid cvm::real const min_dist = hills_energy->bin_distance_from_boundaries(h.centers, true); - if (min_dist < (3.0 * std::floor(hill_width)) + 1.0) { + if (min_dist < (3.0 * cvm::floor(hill_width)) + 1.0) { hills_off_grid.push_back(h); } } @@ -387,7 +389,7 @@ int colvarbias_meta::update_grid_params() // first of all, expand the grids, if specified bool changed_grids = false; int const min_buffer = - (3 * (size_t) std::floor(hill_width)) + 1; + (3 * (size_t) cvm::floor(hill_width)) + 1; std::vector new_sizes(hills_energy->sizes()); std::vector new_lower_boundaries(hills_energy->lower_boundaries); @@ -492,9 +494,9 @@ int colvarbias_meta::update_bias() if (ebmeta) { hills_scale *= 1.0/target_dist->value(target_dist->get_colvars_index()); - if(cvm::step_absolute() <= long(ebmeta_equil_steps)) { + if(cvm::step_absolute() <= ebmeta_equil_steps) { cvm::real const hills_lambda = - (cvm::real(long(ebmeta_equil_steps) - cvm::step_absolute())) / + (cvm::real(ebmeta_equil_steps - cvm::step_absolute())) / (cvm::real(ebmeta_equil_steps)); hills_scale = hills_lambda + (1-hills_lambda)*hills_scale; } @@ -508,7 +510,7 @@ int colvarbias_meta::update_bias() } else { calc_hills(new_hills_begin, hills.end(), hills_energy_sum_here); } - hills_scale *= std::exp(-1.0*hills_energy_sum_here/(bias_temperature*cvm::boltzmann())); + hills_scale *= cvm::exp(-1.0*hills_energy_sum_here/(bias_temperature*cvm::boltzmann())); } switch (comm) { @@ -710,7 +712,7 @@ void colvarbias_meta::calc_hills(colvarbias_meta::hill_iter h_first, // set it to zero if the exponent is more negative than log(1.0E-05) h->value(0.0); } else { - h->value(std::exp(-0.5*cv_sqdev)); + h->value(cvm::exp(-0.5*cv_sqdev)); } energy += h->energy(); } @@ -904,7 +906,7 @@ void colvarbias_meta::recount_hills_off_grid(colvarbias_meta::hill_iter h_first for (hill_iter h = h_first; h != h_last; h++) { cvm::real const min_dist = hills_energy->bin_distance_from_boundaries(h->centers, true); - if (min_dist < (3.0 * std::floor(hill_width)) + 1.0) { + if (min_dist < (3.0 * cvm::floor(hill_width)) + 1.0) { hills_off_grid.push_back(*h); } } @@ -1427,8 +1429,8 @@ std::istream & colvarbias_meta::read_hill(std::istream &is) return is; } - size_t h_it; - get_keyval(data, "step", h_it, 0, parse_silent); + cvm::step_number h_it; + get_keyval(data, "step", h_it, 0L, parse_silent); if (h_it <= state_file_step) { if (cvm::debug()) cvm::log("Skipping a hill older than the state file for metadynamics bias \""+ @@ -1457,7 +1459,7 @@ std::istream & colvarbias_meta::read_hill(std::istream &is) std::vector h_widths(num_variables()); get_keyval(data, "widths", h_widths, - std::vector(num_variables(), (std::sqrt(2.0 * PI) / 2.0)), + std::vector(num_variables(), (cvm::sqrt(2.0 * PI) / 2.0)), parse_silent); std::string h_replica = ""; @@ -1482,7 +1484,7 @@ std::istream & colvarbias_meta::read_hill(std::istream &is) // be computed analytically cvm::real const min_dist = hills_energy->bin_distance_from_boundaries((hills.back()).centers, true); - if (min_dist < (3.0 * std::floor(hill_width)) + 1.0) { + if (min_dist < (3.0 * cvm::floor(hill_width)) + 1.0) { hills_off_grid.push_back(hills.back()); } } diff --git a/lib/colvars/colvarbias_meta.h b/lib/colvars/colvarbias_meta.h index 78b2d35d41..0ba2bef1c3 100644 --- a/lib/colvars/colvarbias_meta.h +++ b/lib/colvars/colvarbias_meta.h @@ -19,8 +19,8 @@ #include "colvargrid.h" /// Metadynamics bias (implementation of \link colvarbias \endlink) -class colvarbias_meta - : public virtual colvarbias, +class colvarbias_meta + : public virtual colvarbias, public virtual colvarbias_ti { @@ -174,12 +174,14 @@ protected: /// \brief Biasing temperature in well-tempered metadynamics cvm::real bias_temperature; - // EBmeta parameters + /// Ensemble-biased metadynamics (EBmeta) flag bool ebmeta; + + /// Target distribution for EBmeta colvar_grid_scalar* target_dist; - std::string target_dist_file; - cvm::real target_dist_volume; - size_t ebmeta_equil_steps; + + /// Number of equilibration steps for EBmeta + cvm::step_number ebmeta_equil_steps; /// \brief Try to read the restart information by allocating new @@ -285,7 +287,7 @@ public: friend class colvarbias_meta; /// Time step at which this hill was added - size_t it; + cvm::step_number it; /// Identity of the replica who added this hill (only in multiple replica simulations) std::string replica; @@ -296,9 +298,9 @@ public: /// replica (optional) Identity of the replica which creates the /// hill inline hill(cvm::real const &W_in, - std::vector &cv, - cvm::real const &hill_width, - std::string const &replica_in = "") + std::vector &cv, + cvm::real const &hill_width, + std::string const &replica_in = "") : sW(1.0), W(W_in), centers(cv.size()), @@ -325,11 +327,11 @@ public: /// weight Weight of the hill \param centers Center of the hill /// \param widths Width of the hill around centers \param replica /// (optional) Identity of the replica which creates the hill - inline hill(size_t const &it_in, - cvm::real const &W_in, - std::vector const ¢ers_in, - std::vector const &widths_in, - std::string const &replica_in = "") + inline hill(cvm::step_number const &it_in, + cvm::real const &W_in, + std::vector const ¢ers_in, + std::vector const &widths_in, + std::string const &replica_in = "") : sW(1.0), W(W_in), centers(centers_in), diff --git a/lib/colvars/colvarbias_restraint.cpp b/lib/colvars/colvarbias_restraint.cpp index 2daf7a0876..90588f5a1f 100644 --- a/lib/colvars/colvarbias_restraint.cpp +++ b/lib/colvars/colvarbias_restraint.cpp @@ -7,8 +7,6 @@ // If you wish to distribute your changes, please submit them to the // Colvars repository at GitHub. -#include - #include "colvarmodule.h" #include "colvarproxy.h" #include "colvarvalue.h" @@ -179,7 +177,7 @@ int colvarbias_restraint_k::change_configuration(std::string const &conf) colvarbias_restraint_moving::colvarbias_restraint_moving(char const *key) { target_nstages = 0; - target_nsteps = 0; + target_nsteps = 0L; stage = 0; acc_work = 0.0; b_chg_centers = false; @@ -241,8 +239,8 @@ int colvarbias_restraint_moving::set_state_params(std::string const &conf) { if (b_chg_centers || b_chg_force_k) { if (target_nstages) { - if (!get_keyval(conf, "stage", stage)) - cvm::error("Error: current stage is missing from the restart.\n"); + get_keyval(conf, "stage", stage, stage, + colvarparse::parse_restart | colvarparse::parse_required); } } return COLVARS_OK; @@ -436,13 +434,13 @@ int colvarbias_restraint_centers_moving::set_state_params(std::string const &con colvarbias_restraint::set_state_params(conf); if (b_chg_centers) { - // cvm::log ("Reading the updated restraint centers from the restart.\n"); - if (!get_keyval(conf, "centers", colvar_centers)) - cvm::error("Error: restraint centers are missing from the restart.\n"); - if (is_enabled(f_cvb_output_acc_work)) { - if (!get_keyval(conf, "accumulatedWork", acc_work)) - cvm::error("Error: accumulatedWork is missing from the restart.\n"); - } + get_keyval(conf, "centers", colvar_centers, colvar_centers, + colvarparse::parse_restart | colvarparse::parse_required); + } + + if (is_enabled(f_cvb_output_acc_work)) { + get_keyval(conf, "accumulatedWork", acc_work, acc_work, + colvarparse::parse_restart | colvarparse::parse_required); } return COLVARS_OK; @@ -563,7 +561,7 @@ int colvarbias_restraint_k_moving::update() lambda = 0.0; } force_k = starting_force_k + (target_force_k - starting_force_k) - * std::pow(lambda, force_k_exp); + * cvm::pow(lambda, force_k_exp); cvm::log("Restraint " + this->name + ", stage " + cvm::to_str(stage) + " : lambda = " + cvm::to_str(lambda) + ", k = " + cvm::to_str(force_k)); @@ -585,7 +583,7 @@ int colvarbias_restraint_k_moving::update() for (size_t i = 0; i < num_variables(); i++) { dU_dk += d_restraint_potential_dk(i); } - restraint_FE += force_k_exp * std::pow(lambda, force_k_exp - 1.0) + restraint_FE += force_k_exp * cvm::pow(lambda, force_k_exp - 1.0) * (target_force_k - starting_force_k) * dU_dk; } @@ -608,7 +606,7 @@ int colvarbias_restraint_k_moving::update() lambda = cvm::real(stage) / cvm::real(target_nstages); } force_k = starting_force_k + (target_force_k - starting_force_k) - * std::pow(lambda, force_k_exp); + * cvm::pow(lambda, force_k_exp); cvm::log("Restraint " + this->name + ", stage " + cvm::to_str(stage) + " : lambda = " + cvm::to_str(lambda) + ", k = " + cvm::to_str(force_k)); @@ -622,7 +620,7 @@ int colvarbias_restraint_k_moving::update() lambda = cvm::real(cvm::step_absolute()) / cvm::real(target_nsteps); cvm::real const force_k_old = force_k; force_k = starting_force_k + (target_force_k - starting_force_k) - * std::pow(lambda, force_k_exp); + * cvm::pow(lambda, force_k_exp); force_k_incr = force_k - force_k_old; } } @@ -672,13 +670,13 @@ int colvarbias_restraint_k_moving::set_state_params(std::string const &conf) colvarbias_restraint::set_state_params(conf); if (b_chg_force_k) { - // cvm::log ("Reading the updated force constant from the restart.\n"); - if (!get_keyval(conf, "forceConstant", force_k, force_k)) - cvm::error("Error: force constant is missing from the restart.\n"); - if (is_enabled(f_cvb_output_acc_work)) { - if (!get_keyval(conf, "accumulatedWork", acc_work)) - cvm::error("Error: accumulatedWork is missing from the restart.\n"); - } + get_keyval(conf, "forceConstant", force_k, force_k, + colvarparse::parse_restart | colvarparse::parse_required); + } + + if (is_enabled(f_cvb_output_acc_work)) { + get_keyval(conf, "accumulatedWork", acc_work, acc_work, + colvarparse::parse_restart | colvarparse::parse_required); } return COLVARS_OK; @@ -719,7 +717,8 @@ std::istream & colvarbias_restraint::read_state(std::istream &is) (set_state_params(conf) != COLVARS_OK) ) { cvm::error("Error: in reading state configuration for \""+bias_type+"\" bias \""+ this->name+"\" at position "+ - cvm::to_str(is.tellg())+" in stream.\n", INPUT_ERROR); + cvm::to_str(static_cast(is.tellg()))+ + " in stream.\n", INPUT_ERROR); is.clear(); is.seekg(start_pos, std::ios::beg); is.setstate(std::ios::failbit); @@ -729,7 +728,8 @@ std::istream & colvarbias_restraint::read_state(std::istream &is) if (!read_state_data(is)) { cvm::error("Error: in reading state data for \""+bias_type+"\" bias \""+ this->name+"\" at position "+ - cvm::to_str(is.tellg())+" in stream.\n", INPUT_ERROR); + cvm::to_str(static_cast(is.tellg()))+ + " in stream.\n", INPUT_ERROR); is.clear(); is.seekg(start_pos, std::ios::beg); is.setstate(std::ios::failbit); @@ -740,7 +740,7 @@ std::istream & colvarbias_restraint::read_state(std::istream &is) cvm::log("brace = "+brace+"\n"); cvm::error("Error: corrupt restart information for \""+bias_type+"\" bias \""+ this->name+"\": no matching brace at position "+ - cvm::to_str(is.tellg())+" in stream.\n"); + cvm::to_str(static_cast(is.tellg()))+" in stream.\n"); is.setstate(std::ios::failbit); } @@ -787,11 +787,11 @@ int colvarbias_restraint_harmonic::init(std::string const &conf) colvarbias_restraint_k_moving::init(conf); for (size_t i = 0; i < num_variables(); i++) { - if (variables(i)->width != 1.0) - cvm::log("The force constant for colvar \""+variables(i)->name+ - "\" will be rescaled to "+ - cvm::to_str(force_k / (variables(i)->width * variables(i)->width))+ - " according to the specified width.\n"); + cvm::real const w = variables(i)->width; + cvm::log("The force constant for colvar \""+variables(i)->name+ + "\" will be rescaled to "+ + cvm::to_str(force_k/(w*w))+ + " according to the specified width ("+cvm::to_str(w)+").\n"); } return COLVARS_OK; @@ -1014,7 +1014,7 @@ int colvarbias_restraint_harmonic_walls::init(std::string const &conf) INPUT_ERROR); return INPUT_ERROR; } - force_k = std::sqrt(lower_wall_k * upper_wall_k); + force_k = cvm::sqrt(lower_wall_k * upper_wall_k); // transform the two constants to relative values using gemetric mean as ref // to preserve force_k if provided as single parameter // (allow changing both via force_k) @@ -1037,25 +1037,21 @@ int colvarbias_restraint_harmonic_walls::init(std::string const &conf) if (lower_walls.size() > 0) { for (i = 0; i < num_variables(); i++) { - if (variables(i)->width != 1.0) - cvm::log("The lower wall force constant for colvar \""+ - variables(i)->name+ - "\" will be rescaled to "+ - cvm::to_str(lower_wall_k * force_k / - (variables(i)->width * variables(i)->width))+ - " according to the specified width.\n"); + cvm::real const w = variables(i)->width; + cvm::log("The lower wall force constant for colvar \""+ + variables(i)->name+"\" will be rescaled to "+ + cvm::to_str(lower_wall_k * force_k / (w*w))+ + " according to the specified width ("+cvm::to_str(w)+").\n"); } } if (upper_walls.size() > 0) { for (i = 0; i < num_variables(); i++) { - if (variables(i)->width != 1.0) - cvm::log("The upper wall force constant for colvar \""+ - variables(i)->name+ - "\" will be rescaled to "+ - cvm::to_str(upper_wall_k * force_k / - (variables(i)->width * variables(i)->width))+ - " according to the specified width.\n"); + cvm::real const w = variables(i)->width; + cvm::log("The upper wall force constant for colvar \""+ + variables(i)->name+"\" will be rescaled to "+ + cvm::to_str(upper_wall_k * force_k / (w*w))+ + " according to the specified width ("+cvm::to_str(w)+").\n"); } } @@ -1225,11 +1221,11 @@ int colvarbias_restraint_linear::init(std::string const &conf) INPUT_ERROR); return INPUT_ERROR; } - if (variables(i)->width != 1.0) - cvm::log("The force constant for colvar \""+variables(i)->name+ - "\" will be rescaled to "+ - cvm::to_str(force_k / variables(i)->width)+ - " according to the specified width.\n"); + cvm::real const w = variables(i)->width; + cvm::log("The force constant for colvar \""+variables(i)->name+ + "\" will be rescaled to "+ + cvm::to_str(force_k / w)+ + " according to the specified width ("+cvm::to_str(w)+").\n"); } return COLVARS_OK; @@ -1367,6 +1363,7 @@ colvarbias_restraint_histogram::colvarbias_restraint_histogram(char const *key) int colvarbias_restraint_histogram::init(std::string const &conf) { colvarbias::init(conf); + enable(f_cvb_apply_force); get_keyval(conf, "lowerBoundary", lower_boundary, lower_boundary); get_keyval(conf, "upperBoundary", upper_boundary, upper_boundary); @@ -1390,7 +1387,7 @@ int colvarbias_restraint_histogram::init(std::string const &conf) cvm::real const nbins = (upper_boundary - lower_boundary) / width; int const nbins_round = (int)(nbins); - if (std::fabs(nbins - cvm::real(nbins_round)) > 1.0E-10) { + if (cvm::fabs(nbins - cvm::real(nbins_round)) > 1.0E-10) { cvm::log("Warning: grid interval ("+ cvm::to_str(lower_boundary, cvm::cv_width, cvm::cv_prec)+" - "+ cvm::to_str(upper_boundary, cvm::cv_width, cvm::cv_prec)+ @@ -1440,7 +1437,7 @@ int colvarbias_restraint_histogram::init(std::string const &conf) } } cvm::real const ref_integral = ref_p.sum() * width; - if (std::fabs(ref_integral - 1.0) > 1.0e-03) { + if (cvm::fabs(ref_integral - 1.0) > 1.0e-03) { cvm::log("Reference distribution not normalized, normalizing to unity.\n"); ref_p /= ref_integral; } @@ -1471,7 +1468,7 @@ int colvarbias_restraint_histogram::update() vector_size += variables(icv)->value().size(); } - cvm::real const norm = 1.0/(std::sqrt(2.0*PI)*gaussian_width*vector_size); + cvm::real const norm = 1.0/(cvm::sqrt(2.0*PI)*gaussian_width*vector_size); // calculate the histogram p.reset(); @@ -1482,7 +1479,7 @@ int colvarbias_restraint_histogram::update() size_t igrid; for (igrid = 0; igrid < p.size(); igrid++) { cvm::real const x_grid = (lower_boundary + (igrid+0.5)*width); - p[igrid] += norm * std::exp(-1.0 * (x_grid - cv_value) * (x_grid - cv_value) / + p[igrid] += norm * cvm::exp(-1.0 * (x_grid - cv_value) * (x_grid - cv_value) / (2.0 * gaussian_width * gaussian_width)); } } else if (cv.type() == colvarvalue::type_vector) { @@ -1492,7 +1489,7 @@ int colvarbias_restraint_histogram::update() size_t igrid; for (igrid = 0; igrid < p.size(); igrid++) { cvm::real const x_grid = (lower_boundary + (igrid+0.5)*width); - p[igrid] += norm * std::exp(-1.0 * (x_grid - cv_value) * (x_grid - cv_value) / + p[igrid] += norm * cvm::exp(-1.0 * (x_grid - cv_value) * (x_grid - cv_value) / (2.0 * gaussian_width * gaussian_width)); } } @@ -1523,7 +1520,7 @@ int colvarbias_restraint_histogram::update() for (igrid = 0; igrid < p.size(); igrid++) { cvm::real const x_grid = (lower_boundary + (igrid+0.5)*width); force += force_k_cv * p_diff[igrid] * - norm * std::exp(-1.0 * (x_grid - cv_value) * (x_grid - cv_value) / + norm * cvm::exp(-1.0 * (x_grid - cv_value) * (x_grid - cv_value) / (2.0 * gaussian_width * gaussian_width)) * (-1.0 * (x_grid - cv_value) / (gaussian_width * gaussian_width)); } @@ -1536,7 +1533,7 @@ int colvarbias_restraint_histogram::update() for (igrid = 0; igrid < p.size(); igrid++) { cvm::real const x_grid = (lower_boundary + (igrid+0.5)*width); force += force_k_cv * p_diff[igrid] * - norm * std::exp(-1.0 * (x_grid - cv_value) * (x_grid - cv_value) / + norm * cvm::exp(-1.0 * (x_grid - cv_value) * (x_grid - cv_value) / (2.0 * gaussian_width * gaussian_width)) * (-1.0 * (x_grid - cv_value) / (gaussian_width * gaussian_width)); } @@ -1550,7 +1547,7 @@ int colvarbias_restraint_histogram::update() } -std::ostream & colvarbias_restraint_histogram::write_restart(std::ostream &os) +int colvarbias_restraint_histogram::write_output_files() { if (b_write_histogram) { std::string file_name(cvm::output_prefix()+"."+this->name+".hist.dat"); @@ -1558,6 +1555,9 @@ std::ostream & colvarbias_restraint_histogram::write_restart(std::ostream &os) *os << "# " << cvm::wrap_string(variables(0)->name, cvm::cv_width) << " " << "p(" << cvm::wrap_string(variables(0)->name, cvm::cv_width-3) << ")\n"; + + os->setf(std::ios::fixed, std::ios::floatfield); + size_t igrid; for (igrid = 0; igrid < p.size(); igrid++) { cvm::real const x_grid = (lower_boundary + (igrid+1)*width); @@ -1572,13 +1572,7 @@ std::ostream & colvarbias_restraint_histogram::write_restart(std::ostream &os) } cvm::proxy->close_output_stream(file_name); } - return os; -} - - -std::istream & colvarbias_restraint_histogram::read_restart(std::istream &is) -{ - return is; + return COLVARS_OK; } diff --git a/lib/colvars/colvarbias_restraint.h b/lib/colvars/colvarbias_restraint.h index 3ee999c262..6493f7f16b 100644 --- a/lib/colvars/colvarbias_restraint.h +++ b/lib/colvars/colvarbias_restraint.h @@ -132,7 +132,7 @@ protected: /// \brief Number of steps required to reach the target force constant /// or restraint centers - long target_nsteps; + cvm::step_number target_nsteps; /// \brief Accumulated work (computed when outputAccumulatedWork == true) cvm::real acc_work; @@ -328,8 +328,7 @@ public: virtual int update(); - virtual std::istream & read_restart(std::istream &is); - virtual std::ostream & write_restart(std::ostream &os); + virtual int write_output_files(); virtual std::ostream & write_traj_label(std::ostream &os); virtual std::ostream & write_traj(std::ostream &os); diff --git a/lib/colvars/colvarcomp.cpp b/lib/colvars/colvarcomp.cpp index cb272eed05..3075ed82ca 100644 --- a/lib/colvars/colvarcomp.cpp +++ b/lib/colvars/colvarcomp.cpp @@ -20,7 +20,8 @@ colvar::cvc::cvc() b_periodic(false), b_try_scalable(true) { - init_cvc_requires(); + description = "uninitialized colvar component"; + init_dependencies(); sup_coeff = 1.0; period = 0.0; wrap_center = 0.0; @@ -33,7 +34,8 @@ colvar::cvc::cvc(std::string const &conf) b_periodic(false), b_try_scalable(true) { - init_cvc_requires(); + description = "uninitialized colvar component"; + init_dependencies(); sup_coeff = 1.0; period = 0.0; wrap_center = 0.0; @@ -176,6 +178,100 @@ cvm::atom_group *colvar::cvc::parse_group(std::string const &conf, } +int colvar::cvc::init_dependencies() { + size_t i; + // Initialize static array once and for all + if (features().size() == 0) { + for (i = 0; i < colvardeps::f_cvc_ntot; i++) { + modify_features().push_back(new feature); + } + + init_feature(f_cvc_active, "active", f_type_dynamic); +// The dependency below may become useful if we use dynamic atom groups +// require_feature_children(f_cvc_active, f_ag_active); + + init_feature(f_cvc_scalar, "scalar", f_type_static); + + init_feature(f_cvc_gradient, "gradient", f_type_dynamic); + + init_feature(f_cvc_explicit_gradient, "explicit gradient", f_type_static); + require_feature_children(f_cvc_explicit_gradient, f_ag_explicit_gradient); + + init_feature(f_cvc_inv_gradient, "inverse gradient", f_type_dynamic); + require_feature_self(f_cvc_inv_gradient, f_cvc_gradient); + + init_feature(f_cvc_debug_gradient, "debug gradient", f_type_user); + require_feature_self(f_cvc_debug_gradient, f_cvc_gradient); + require_feature_self(f_cvc_debug_gradient, f_cvc_explicit_gradient); + + init_feature(f_cvc_Jacobian, "Jacobian derivative", f_type_dynamic); + require_feature_self(f_cvc_Jacobian, f_cvc_inv_gradient); + + init_feature(f_cvc_com_based, "depends on group centers of mass", f_type_static); + + init_feature(f_cvc_pbc_minimum_image, "use minimum-image distances with PBCs", f_type_user); + + // Compute total force on first site only to avoid unwanted + // coupling to other colvars (see e.g. Ciccotti et al., 2005) + init_feature(f_cvc_one_site_total_force, "compute total force from one group", f_type_user); + require_feature_self(f_cvc_one_site_total_force, f_cvc_com_based); + + init_feature(f_cvc_scalable, "scalable calculation", f_type_static); + require_feature_self(f_cvc_scalable, f_cvc_scalable_com); + + init_feature(f_cvc_scalable_com, "scalable calculation of centers of mass", f_type_static); + require_feature_self(f_cvc_scalable_com, f_cvc_com_based); + + + // TODO only enable this when f_ag_scalable can be turned on for a pre-initialized group + // require_feature_children(f_cvc_scalable, f_ag_scalable); + // require_feature_children(f_cvc_scalable_com, f_ag_scalable_com); + + // check that everything is initialized + for (i = 0; i < colvardeps::f_cvc_ntot; i++) { + if (is_not_set(i)) { + cvm::error("Uninitialized feature " + cvm::to_str(i) + " in " + description); + } + } + } + + // Initialize feature_states for each instance + // default as available, not enabled + // except dynamic features which default as unavailable + feature_states.reserve(f_cvc_ntot); + for (i = 0; i < colvardeps::f_cvc_ntot; i++) { + bool avail = is_dynamic(i) ? false : true; + feature_states.push_back(feature_state(avail, false)); + } + + // Features that are implemented by all cvcs by default + // Each cvc specifies what other features are available + feature_states[f_cvc_active].available = true; + feature_states[f_cvc_gradient].available = true; + + // CVCs are enabled from the start - get disabled based on flags + enable(f_cvc_active); + // feature_states[f_cvc_active].enabled = true; + + // Explicit gradients are implemented in mosts CVCs. Exceptions must be specified explicitly. + // feature_states[f_cvc_explicit_gradient].enabled = true; + enable(f_cvc_explicit_gradient); + + // Use minimum-image distances by default + // feature_states[f_cvc_pbc_minimum_image].enabled = true; + enable(f_cvc_pbc_minimum_image); + + // Features that are implemented by default if their requirements are + feature_states[f_cvc_one_site_total_force].available = true; + + // Features That are implemented only for certain simulation engine configurations + feature_states[f_cvc_scalable_com].available = (cvm::proxy->scalable_group_coms() == COLVARS_OK); + feature_states[f_cvc_scalable].available = feature_states[f_cvc_scalable_com].available; + + return COLVARS_OK; +} + + int colvar::cvc::setup() { description = "cvc " + name; @@ -192,6 +288,7 @@ colvar::cvc::~cvc() } } + void colvar::cvc::read_data() { size_t ig; @@ -214,6 +311,66 @@ void colvar::cvc::read_data() } +std::vector > colvar::cvc::get_atom_lists() +{ + std::vector > lists; + + std::vector::iterator agi = atom_groups.begin(); + for ( ; agi != atom_groups.end(); ++agi) { + (*agi)->create_sorted_ids(); + lists.push_back((*agi)->sorted_ids()); + if ((*agi)->is_enabled(f_ag_fitting_group) && (*agi)->is_enabled(f_ag_fit_gradients)) { + cvm::atom_group &fg = *((*agi)->fitting_group); + fg.create_sorted_ids(); + lists.push_back(fg.sorted_ids()); + } + } + return lists; +} + + +void colvar::cvc::collect_gradients(std::vector const &atom_ids, std::vector &atomic_gradients) +{ + // Coefficient: d(a * x^n) = a * n * x^(n-1) * dx + cvm::real coeff = sup_coeff * cvm::real(sup_np) * + cvm::integer_power(value().real_value, sup_np-1); + + for (size_t j = 0; j < atom_groups.size(); j++) { + + cvm::atom_group &ag = *(atom_groups[j]); + + // If necessary, apply inverse rotation to get atomic + // gradient in the laboratory frame + if (ag.b_rotate) { + cvm::rotation const rot_inv = ag.rot.inverse(); + + for (size_t k = 0; k < ag.size(); k++) { + size_t a = std::lower_bound(atom_ids.begin(), atom_ids.end(), + ag[k].id) - atom_ids.begin(); + atomic_gradients[a] += coeff * rot_inv.rotate(ag[k].grad); + } + + } else { + + for (size_t k = 0; k < ag.size(); k++) { + size_t a = std::lower_bound(atom_ids.begin(), atom_ids.end(), + ag[k].id) - atom_ids.begin(); + atomic_gradients[a] += coeff * ag[k].grad; + } + } + if (ag.is_enabled(f_ag_fitting_group) && ag.is_enabled(f_ag_fit_gradients)) { + cvm::atom_group const &fg = *(ag.fitting_group); + for (size_t k = 0; k < fg.size(); k++) { + size_t a = std::lower_bound(atom_ids.begin(), atom_ids.end(), + fg[k].id) - atom_ids.begin(); + // fit gradients are in the unrotated (simulation) frame + atomic_gradients[a] += coeff * fg.fit_gradients[k]; + } + } + } +} + + void colvar::cvc::calc_force_invgrads() { cvm::error("Error: calculation of inverse gradients is not implemented " @@ -306,8 +463,8 @@ void colvar::cvc::debug_gradients() cvm::log("dx(interp) = "+cvm::to_str(dx_pred, 21, 14)+"\n"); cvm::log("|dx(actual) - dx(interp)|/|dx(actual)| = "+ - cvm::to_str(std::fabs(x_1 - x_0 - dx_pred) / - std::fabs(x_1 - x_0), 12, 5)+"\n"); + cvm::to_str(cvm::fabs(x_1 - x_0 - dx_pred) / + cvm::fabs(x_1 - x_0), 12, 5)+"\n"); } } @@ -341,8 +498,8 @@ void colvar::cvc::debug_gradients() cvm::log("dx(interp) = "+cvm::to_str (dx_pred, 21, 14)+"\n"); cvm::log ("|dx(actual) - dx(interp)|/|dx(actual)| = "+ - cvm::to_str(std::fabs (x_1 - x_0 - dx_pred) / - std::fabs (x_1 - x_0), + cvm::to_str(cvm::fabs (x_1 - x_0 - dx_pred) / + cvm::fabs (x_1 - x_0), 12, 5)+ ".\n"); } @@ -378,7 +535,7 @@ colvarvalue colvar::cvc::dist2_rgrad(colvarvalue const &x1, } -void colvar::cvc::wrap(colvarvalue &x) const +void colvar::cvc::wrap(colvarvalue &x_unwrapped) const { return; } diff --git a/lib/colvars/colvarcomp.h b/lib/colvars/colvarcomp.h index 1a6df3771e..f615680ba6 100644 --- a/lib/colvars/colvarcomp.h +++ b/lib/colvars/colvarcomp.h @@ -27,12 +27,12 @@ /// \brief Colvar component (base class for collective variables) /// -/// A \link cvc \endlink object (or an object of a +/// A \link colvar::cvc \endlink object (or an object of a /// cvc-derived class) implements the calculation of a collective /// variable, its gradients and any other related physical quantities /// that depend on microscopic degrees of freedom. /// -/// No restriction is set to what kind of calculation a \link cvc \endlink +/// No restriction is set to what kind of calculation a \link colvar::cvc \endlink /// object performs (usually an analytical function of atomic coordinates). /// The only constraints are that: \par /// @@ -42,9 +42,9 @@ /// alike, and allows an automatic selection of the applicable algorithms. /// /// - The object provides an implementation \link apply_force() \endlink to -/// apply forces to atoms. Typically, one or more \link cvm::atom_group +/// apply forces to atoms. Typically, one or more \link colvarmodule::atom_group /// \endlink objects are used, but this is not a requirement for as long as -/// the \link cvc \endlink object communicates with the simulation program. +/// the \link colvar::cvc \endlink object communicates with the simulation program. /// /// If you wish to implement a new collective variable component, you /// should write your own class by inheriting directly from \link @@ -75,9 +75,9 @@ public: /// \brief Description of the type of collective variable /// /// Normally this string is set by the parent \link colvar \endlink - /// object within its constructor, when all \link cvc \endlink + /// object within its constructor, when all \link colvar::cvc \endlink /// objects are initialized; therefore the main "config string" - /// constructor does not need to define it. If a \link cvc + /// constructor does not need to define it. If a \link colvar::cvc /// \endlink is initialized and/or a different constructor is used, /// this variable definition should be set within the constructor. std::string function_type; @@ -109,6 +109,9 @@ public: /// cvc \endlink virtual int init(std::string const &conf); + /// \brief Initialize dependency tree + virtual int init_dependencies(); + /// \brief Within the constructor, make a group parse its own /// options from the provided configuration string /// Returns reference to new group @@ -122,7 +125,7 @@ public: /// \brief After construction, set data related to dependency handling int setup(); - /// \brief Default constructor (used when \link cvc \endlink + /// \brief Default constructor (used when \link colvar::cvc \endlink /// objects are declared within other ones) cvc(); @@ -133,7 +136,7 @@ public: static std::vector cvc_features; /// \brief Implementation of the feature list accessor for colvar - virtual const std::vector &features() + virtual const std::vector &features() const { return cvc_features; } @@ -148,6 +151,9 @@ public: cvc_features.clear(); } + /// \brief Get vector of vectors of atom IDs for all atom groups + virtual std::vector > get_atom_lists(); + /// \brief Obtain data needed for the calculation for the backend virtual void read_data(); @@ -164,6 +170,10 @@ public: /// \brief Calculate finite-difference gradients alongside the analytical ones, for each Cartesian component virtual void debug_gradients(); + /// \brief Calculate atomic gradients and add them to the corresponding item in gradient vector + /// May be overridden by CVCs that do not store their gradients in the classic way, see dihedPC + virtual void collect_gradients(std::vector const &atom_ids, std::vector &atomic_gradients); + /// \brief Calculate the total force from the system using the /// inverse atomic gradients virtual void calc_force_invgrads(); @@ -237,7 +247,7 @@ public: colvarvalue const &x2) const; /// \brief Wrap value (for periodic/symmetric cvcs) - virtual void wrap(colvarvalue &x) const; + virtual void wrap(colvarvalue &x_unwrapped) const; /// \brief Pointers to all atom groups, to let colvars collect info /// e.g. atomic gradients @@ -246,7 +256,7 @@ public: /// \brief Store a pointer to new atom group, and list as child for dependencies inline void register_atom_group(cvm::atom_group *ag) { atom_groups.push_back(ag); - add_child((colvardeps *) ag); + add_child(ag); } /// \brief Whether or not this CVC will be computed in parallel whenever possible @@ -415,7 +425,7 @@ public: virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const; /// \brief Redefined to make use of the user-provided period - virtual void wrap(colvarvalue &x) const; + virtual void wrap(colvarvalue &x_unwrapped) const; }; @@ -474,7 +484,7 @@ public: virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const; /// Redefined to handle the 2*PI periodicity - virtual void wrap(colvarvalue &x) const; + virtual void wrap(colvarvalue &x_unwrapped) const; }; @@ -559,6 +569,35 @@ public: +/// \brief Colvar component: dipole magnitude of a molecule +class colvar::dipole_magnitude + : public colvar::cvc +{ +protected: + /// Dipole atom group + cvm::atom_group *atoms; + cvm::atom_pos dipoleV; +public: + /// Initialize by parsing the configuration + dipole_magnitude (std::string const &conf); + dipole_magnitude (cvm::atom const &a1); + dipole_magnitude(); + virtual inline ~dipole_magnitude() {} + virtual void calc_value(); + virtual void calc_gradients(); + //virtual void calc_force_invgrads(); + //virtual void calc_Jacobian_derivative(); + virtual void apply_force (colvarvalue const &force); + virtual cvm::real dist2 (colvarvalue const &x1, + colvarvalue const &x2) const; + virtual colvarvalue dist2_lgrad (colvarvalue const &x1, + colvarvalue const &x2) const; + virtual colvarvalue dist2_rgrad (colvarvalue const &x1, + colvarvalue const &x2) const; +}; + + + /// \brief Colvar component: Radius of gyration of an atom group /// (colvarvalue::type_scalar type, range [0:*)) class colvar::gyration @@ -818,7 +857,7 @@ public: virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const; /// Redefined to handle the 2*PI periodicity - virtual void wrap(colvarvalue &x) const; + virtual void wrap(colvarvalue &x_unwrapped) const; }; @@ -1002,7 +1041,7 @@ public: cvm::atom const &donor, cvm::real r0, int en, int ed); h_bond(); - virtual ~h_bond(); + virtual ~h_bond() {} virtual void calc_value(); virtual void calc_gradients(); virtual void apply_force(colvarvalue const &force); @@ -1090,6 +1129,8 @@ public: virtual ~alpha_angles(); void calc_value(); void calc_gradients(); + /// Re-implementation of cvc::collect_gradients() to carry over atomic gradients of sub-cvcs + void collect_gradients(std::vector const &atom_ids, std::vector &atomic_gradients); void apply_force(colvarvalue const &force); virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const; @@ -1120,6 +1161,8 @@ public: virtual ~dihedPC(); void calc_value(); void calc_gradients(); + /// Re-implementation of cvc::collect_gradients() to carry over atomic gradients of sub-cvcs + void collect_gradients(std::vector const &atom_ids, std::vector &atomic_gradients); void apply_force(colvarvalue const &force); virtual cvm::real dist2(colvarvalue const &x1, colvarvalue const &x2) const; @@ -1159,6 +1202,7 @@ public: orientation(std::string const &conf); orientation(); + virtual int init(std::string const &conf); virtual ~orientation() {} virtual void calc_value(); virtual void calc_gradients(); @@ -1183,6 +1227,7 @@ public: orientation_angle(std::string const &conf); orientation_angle(); + virtual int init(std::string const &conf); virtual ~orientation_angle() {} virtual void calc_value(); virtual void calc_gradients(); @@ -1207,6 +1252,7 @@ public: orientation_proj(std::string const &conf); orientation_proj(); + virtual int init(std::string const &conf); virtual ~orientation_proj() {} virtual void calc_value(); virtual void calc_gradients(); @@ -1234,6 +1280,7 @@ public: tilt(std::string const &conf); tilt(); + virtual int init(std::string const &conf); virtual ~tilt() {} virtual void calc_value(); virtual void calc_gradients(); @@ -1261,6 +1308,7 @@ public: spin_angle(std::string const &conf); spin_angle(); + virtual int init(std::string const &conf); virtual ~spin_angle() {} virtual void calc_value(); virtual void calc_gradients(); @@ -1275,7 +1323,7 @@ public: virtual colvarvalue dist2_rgrad(colvarvalue const &x1, colvarvalue const &x2) const; /// Redefined to handle the 2*PI periodicity - virtual void wrap(colvarvalue &x) const; + virtual void wrap(colvarvalue &x_unwrapped) const; }; diff --git a/lib/colvars/colvarcomp_angles.cpp b/lib/colvars/colvarcomp_angles.cpp index 9f879a4c41..97fb23b181 100644 --- a/lib/colvars/colvarcomp_angles.cpp +++ b/lib/colvars/colvarcomp_angles.cpp @@ -11,9 +11,6 @@ #include "colvar.h" #include "colvarcomp.h" -#include - - colvar::angle::angle(std::string const &conf) : cvc(conf) @@ -77,14 +74,14 @@ void colvar::angle::calc_value() cvm::real const cos_theta = (r21*r23)/(r21l*r23l); - x.real_value = (180.0/PI) * std::acos(cos_theta); + x.real_value = (180.0/PI) * cvm::acos(cos_theta); } void colvar::angle::calc_gradients() { cvm::real const cos_theta = (r21*r23)/(r21l*r23l); - cvm::real const dxdcos = -1.0 / std::sqrt(1.0 - cos_theta*cos_theta); + cvm::real const dxdcos = -1.0 / cvm::sqrt(1.0 - cos_theta*cos_theta); dxdr1 = (180.0/PI) * dxdcos * (1.0/r21l) * ( r23/r23l + (-1.0) * cos_theta * r21/r21l ); @@ -126,7 +123,7 @@ void colvar::angle::calc_Jacobian_derivative() // det(J) = (2 pi) r^2 * sin(theta) // hence Jd = cot(theta) const cvm::real theta = x.real_value * PI / 180.0; - jd = PI / 180.0 * (theta != 0.0 ? std::cos(theta) / std::sin(theta) : 0.0); + jd = PI / 180.0 * (theta != 0.0 ? cvm::cos(theta) / cvm::sin(theta) : 0.0); } @@ -202,7 +199,7 @@ void colvar::dipole_angle::calc_value() cvm::real const cos_theta = (r21*r23)/(r21l*r23l); - x.real_value = (180.0/PI) * std::acos(cos_theta); + x.real_value = (180.0/PI) * cvm::acos(cos_theta); } //to be implemented @@ -212,7 +209,7 @@ void colvar::dipole_angle::calc_value() void colvar::dipole_angle::calc_gradients() { cvm::real const cos_theta = (r21*r23)/(r21l*r23l); - cvm::real const dxdcos = -1.0 / std::sqrt(1.0 - cos_theta*cos_theta); + cvm::real const dxdcos = -1.0 / cvm::sqrt(1.0 - cos_theta*cos_theta); dxdr1 = (180.0/PI) * dxdcos * (1.0/r21l)* (r23/r23l + (-1.0) * cos_theta * r21/r21l ); @@ -346,7 +343,7 @@ void colvar::dihedral::calc_value() cvm::real const cos_phi = n1 * n2; cvm::real const sin_phi = n1 * r34 * r23.norm(); - x.real_value = (180.0/PI) * std::atan2(sin_phi, cos_phi); + x.real_value = (180.0/PI) * cvm::atan2(sin_phi, cos_phi); this->wrap(x); } @@ -368,7 +365,7 @@ void colvar::dihedral::calc_gradients() rB = 1.0/rB; B *= rB; - if (std::fabs(sin_phi) > 0.1) { + if (cvm::fabs(sin_phi) > 0.1) { rA = 1.0/rA; A *= rA; cvm::rvector const dcosdA = rA*(cos_phi*A-B); @@ -440,8 +437,8 @@ void colvar::dihedral::calc_force_invgrads() cvm::real const dot1 = u23 * u12; cvm::real const dot4 = u23 * u34; - cvm::real const fact1 = d12 * std::sqrt(1.0 - dot1 * dot1); - cvm::real const fact4 = d34 * std::sqrt(1.0 - dot4 * dot4); + cvm::real const fact1 = d12 * cvm::sqrt(1.0 - dot1 * dot1); + cvm::real const fact4 = d34 * cvm::sqrt(1.0 - dot4 * dot4); group1->read_total_forces(); if (is_enabled(f_cvc_one_site_total_force)) { @@ -508,19 +505,17 @@ colvarvalue colvar::dihedral::dist2_rgrad(colvarvalue const &x1, } -void colvar::dihedral::wrap(colvarvalue &x) const +void colvar::dihedral::wrap(colvarvalue &x_unwrapped) const { - if ((x.real_value - wrap_center) >= 180.0) { - x.real_value -= 360.0; + if ((x_unwrapped.real_value - wrap_center) >= 180.0) { + x_unwrapped.real_value -= 360.0; return; } - if ((x.real_value - wrap_center) < -180.0) { - x.real_value += 360.0; + if ((x_unwrapped.real_value - wrap_center) < -180.0) { + x_unwrapped.real_value += 360.0; return; } - - return; } @@ -548,8 +543,8 @@ void colvar::polar_theta::calc_value() cvm::rvector pos = atoms->center_of_mass(); r = atoms->center_of_mass().norm(); // Internal values of theta and phi are radians - theta = (r > 0.) ? std::acos(pos.z / r) : 0.; - phi = std::atan2(pos.y, pos.x); + theta = (r > 0.) ? cvm::acos(pos.z / r) : 0.; + phi = cvm::atan2(pos.y, pos.x); x.real_value = (180.0/PI) * theta; } @@ -560,9 +555,9 @@ void colvar::polar_theta::calc_gradients() atoms->set_weighted_gradient(cvm::rvector(0., 0., 0.)); else atoms->set_weighted_gradient(cvm::rvector( - (180.0/PI) * std::cos(theta) * std::cos(phi) / r, - (180.0/PI) * std::cos(theta) * std::sin(phi) / r, - (180.0/PI) * -std::sin(theta) / r)); + (180.0/PI) * cvm::cos(theta) * cvm::cos(phi) / r, + (180.0/PI) * cvm::cos(theta) * cvm::sin(phi) / r, + (180.0/PI) * -cvm::sin(theta) / r)); } @@ -602,8 +597,8 @@ void colvar::polar_phi::calc_value() cvm::rvector pos = atoms->center_of_mass(); r = atoms->center_of_mass().norm(); // Internal values of theta and phi are radians - theta = (r > 0.) ? std::acos(pos.z / r) : 0.; - phi = std::atan2(pos.y, pos.x); + theta = (r > 0.) ? cvm::acos(pos.z / r) : 0.; + phi = cvm::atan2(pos.y, pos.x); x.real_value = (180.0/PI) * phi; } @@ -611,8 +606,8 @@ void colvar::polar_phi::calc_value() void colvar::polar_phi::calc_gradients() { atoms->set_weighted_gradient(cvm::rvector( - (180.0/PI) * -std::sin(phi) / (r*std::sin(theta)), - (180.0/PI) * std::cos(phi) / (r*std::sin(theta)), + (180.0/PI) * -cvm::sin(phi) / (r*cvm::sin(theta)), + (180.0/PI) * cvm::cos(phi) / (r*cvm::sin(theta)), 0.)); } @@ -653,15 +648,15 @@ colvarvalue colvar::polar_phi::dist2_rgrad(colvarvalue const &x1, } -void colvar::polar_phi::wrap(colvarvalue &x) const +void colvar::polar_phi::wrap(colvarvalue &x_unwrapped) const { - if ((x.real_value - wrap_center) >= 180.0) { - x.real_value -= 360.0; + if ((x_unwrapped.real_value - wrap_center) >= 180.0) { + x_unwrapped.real_value -= 360.0; return; } - if ((x.real_value - wrap_center) < -180.0) { - x.real_value += 360.0; + if ((x_unwrapped.real_value - wrap_center) < -180.0) { + x_unwrapped.real_value += 360.0; return; } diff --git a/lib/colvars/colvarcomp_coordnums.cpp b/lib/colvars/colvarcomp_coordnums.cpp index ec53391ef5..059b0c825b 100644 --- a/lib/colvars/colvarcomp_coordnums.cpp +++ b/lib/colvars/colvarcomp_coordnums.cpp @@ -7,8 +7,6 @@ // If you wish to distribute your changes, please submit them to the // Colvars repository at GitHub. -#include - #include "colvarmodule.h" #include "colvarparse.h" #include "colvaratoms.h" @@ -102,6 +100,12 @@ colvar::coordnum::coordnum(std::string const &conf) group1 = parse_group(conf, "group1"); group2 = parse_group(conf, "group2"); + if (group1 == NULL || group2 == NULL) { + cvm::error("Error: failed to initialize atom groups.\n", + INPUT_ERROR); + return; + } + if (int atom_number = cvm::atom_group::overlap(*group1, *group2)) { cvm::error("Error: group1 and group2 share a common atom (number: " + cvm::to_str(atom_number) + ")\n", INPUT_ERROR); @@ -408,12 +412,6 @@ colvar::h_bond::h_bond() } -colvar::h_bond::~h_bond() -{ - delete atom_groups[0]; -} - - void colvar::h_bond::calc_value() { int const flags = coordnum::ef_null; @@ -655,8 +653,6 @@ colvar::groupcoordnum::groupcoordnum() void colvar::groupcoordnum::calc_value() { - cvm::rvector const r0_vec(0.0); // TODO enable the flag? - // create fake atoms to hold the com coordinates cvm::atom group1_com_atom; cvm::atom group2_com_atom; @@ -680,8 +676,6 @@ void colvar::groupcoordnum::calc_value() void colvar::groupcoordnum::calc_gradients() { - cvm::rvector const r0_vec(0.0); // TODO enable the flag? - cvm::atom group1_com_atom; cvm::atom group2_com_atom; group1_com_atom.pos = group1->center_of_mass(); diff --git a/lib/colvars/colvarcomp_distances.cpp b/lib/colvars/colvarcomp_distances.cpp index a2b1a5cd23..d9cd9d55e4 100644 --- a/lib/colvars/colvarcomp_distances.cpp +++ b/lib/colvars/colvarcomp_distances.cpp @@ -7,8 +7,6 @@ // If you wish to distribute your changes, please submit them to the // Colvars repository at GitHub. -#include - #include "colvarmodule.h" #include "colvarvalue.h" #include "colvarparse.h" @@ -102,7 +100,7 @@ colvar::distance_vec::distance_vec(std::string const &conf) { function_type = "distance_vec"; enable(f_cvc_com_based); - enable(f_cvc_implicit_gradient); + disable(f_cvc_explicit_gradient); x.type(colvarvalue::type_3vector); } @@ -112,7 +110,7 @@ colvar::distance_vec::distance_vec() { function_type = "distance_vec"; enable(f_cvc_com_based); - enable(f_cvc_implicit_gradient); + disable(f_cvc_explicit_gradient); x.type(colvarvalue::type_3vector); } @@ -320,7 +318,7 @@ cvm::real colvar::distance_z::dist2(colvarvalue const &x1, { cvm::real diff = x1.real_value - x2.real_value; if (b_periodic) { - cvm::real shift = std::floor(diff/period + 0.5); + cvm::real shift = cvm::floor(diff/period + 0.5); diff -= shift * period; } return diff * diff; @@ -332,7 +330,7 @@ colvarvalue colvar::distance_z::dist2_lgrad(colvarvalue const &x1, { cvm::real diff = x1.real_value - x2.real_value; if (b_periodic) { - cvm::real shift = std::floor(diff/period + 0.5); + cvm::real shift = cvm::floor(diff/period + 0.5); diff -= shift * period; } return 2.0 * diff; @@ -344,22 +342,23 @@ colvarvalue colvar::distance_z::dist2_rgrad(colvarvalue const &x1, { cvm::real diff = x1.real_value - x2.real_value; if (b_periodic) { - cvm::real shift = std::floor(diff/period + 0.5); + cvm::real shift = cvm::floor(diff/period + 0.5); diff -= shift * period; } return (-2.0) * diff; } -void colvar::distance_z::wrap(colvarvalue &x) const +void colvar::distance_z::wrap(colvarvalue &x_unwrapped) const { if (!b_periodic) { // don't wrap if the period has not been set return; } - cvm::real shift = std::floor((x.real_value - wrap_center) / period + 0.5); - x.real_value -= shift * period; + cvm::real shift = + cvm::floor((x_unwrapped.real_value - wrap_center) / period + 0.5); + x_unwrapped.real_value -= shift * period; return; } @@ -481,7 +480,7 @@ colvar::distance_dir::distance_dir(std::string const &conf) { function_type = "distance_dir"; enable(f_cvc_com_based); - enable(f_cvc_implicit_gradient); + disable(f_cvc_explicit_gradient); x.type(colvarvalue::type_unit3vector); } @@ -491,7 +490,7 @@ colvar::distance_dir::distance_dir() { function_type = "distance_dir"; enable(f_cvc_com_based); - enable(f_cvc_implicit_gradient); + disable(f_cvc_explicit_gradient); x.type(colvarvalue::type_unit3vector); } @@ -629,7 +628,7 @@ void colvar::distance_inv::calc_value() } x.real_value *= 1.0 / cvm::real(group1->size() * group2->size()); - x.real_value = std::pow(x.real_value, -1.0/cvm::real(exponent)); + x.real_value = cvm::pow(x.real_value, -1.0/cvm::real(exponent)); cvm::real const dxdsum = (-1.0/(cvm::real(exponent))) * cvm::integer_power(x.real_value, exponent+1) / @@ -671,7 +670,7 @@ colvar::distance_pairs::distance_pairs(std::string const &conf) group2 = parse_group(conf, "group2"); x.type(colvarvalue::type_vector); - enable(f_cvc_implicit_gradient); + disable(f_cvc_explicit_gradient); x.vector1d_value.resize(group1->size() * group2->size()); } @@ -679,7 +678,7 @@ colvar::distance_pairs::distance_pairs(std::string const &conf) colvar::distance_pairs::distance_pairs() { function_type = "distance_pairs"; - enable(f_cvc_implicit_gradient); + disable(f_cvc_explicit_gradient); x.type(colvarvalue::type_vector); } @@ -747,6 +746,63 @@ void colvar::distance_pairs::apply_force(colvarvalue const &force) +colvar::dipole_magnitude::dipole_magnitude(std::string const &conf) + : cvc(conf) +{ + function_type = "dipole_magnitude"; + atoms = parse_group(conf, "atoms"); + init_total_force_params(conf); + x.type(colvarvalue::type_scalar); +} + + +colvar::dipole_magnitude::dipole_magnitude(cvm::atom const &a1) +{ + atoms = new cvm::atom_group(std::vector(1, a1)); + register_atom_group(atoms); + x.type(colvarvalue::type_scalar); +} + + +colvar::dipole_magnitude::dipole_magnitude() +{ + function_type = "dipole_magnitude"; + x.type(colvarvalue::type_scalar); +} + + +void colvar::dipole_magnitude::calc_value() +{ + cvm::atom_pos const atomsCom = atoms->center_of_mass(); + atoms->calc_dipole(atomsCom); + dipoleV = atoms->dipole(); + x.real_value = dipoleV.norm(); +} + + +void colvar::dipole_magnitude::calc_gradients() +{ + cvm::real const aux1 = atoms->total_charge/atoms->total_mass; + cvm::atom_pos const dipVunit = dipoleV.unit(); + + for (cvm::atom_iter ai = atoms->begin(); ai != atoms->end(); ai++) { + ai->grad = (ai->charge - aux1*ai->mass) * dipVunit; + } +} + + +void colvar::dipole_magnitude::apply_force(colvarvalue const &force) +{ + if (!atoms->noforce) { + atoms->apply_colvar_force(force.real_value); + } +} + + +simple_scalar_dist_functions(dipole_magnitude) + + + colvar::gyration::gyration(std::string const &conf) : cvc(conf) { @@ -782,7 +838,7 @@ void colvar::gyration::calc_value() for (cvm::atom_iter ai = atoms->begin(); ai != atoms->end(); ai++) { x.real_value += (ai->pos).norm2(); } - x.real_value = std::sqrt(x.real_value / cvm::real(atoms->size())); + x.real_value = cvm::sqrt(x.real_value / cvm::real(atoms->size())); } @@ -1029,7 +1085,7 @@ void colvar::rmsd::calc_value() x.real_value += ((*atoms)[ia].pos - ref_pos[ia]).norm2(); } x.real_value /= cvm::real(atoms->size()); // MSD - x.real_value = std::sqrt(x.real_value); + x.real_value = cvm::sqrt(x.real_value); } @@ -1405,7 +1461,7 @@ void colvar::eigenvector::calc_Jacobian_derivative() } } - jd.real_value = sum * std::sqrt(eigenvec_invnorm2); + jd.real_value = sum * cvm::sqrt(eigenvec_invnorm2); } @@ -1436,7 +1492,7 @@ colvar::cartesian::cartesian(std::string const &conf) } x.type(colvarvalue::type_vector); - enable(f_cvc_implicit_gradient); + disable(f_cvc_explicit_gradient); x.vector1d_value.resize(atoms->size() * axes.size()); } diff --git a/lib/colvars/colvarcomp_protein.cpp b/lib/colvars/colvarcomp_protein.cpp index 91e47f13d9..b9f9c60cdb 100644 --- a/lib/colvars/colvarcomp_protein.cpp +++ b/lib/colvars/colvarcomp_protein.cpp @@ -7,8 +7,6 @@ // If you wish to distribute your changes, please submit them to the // Colvars repository at GitHub. -#include - #include "colvarmodule.h" #include "colvarvalue.h" #include "colvarparse.h" @@ -27,7 +25,7 @@ colvar::alpha_angles::alpha_angles(std::string const &conf) cvm::log("Initializing alpha_angles object.\n"); function_type = "alpha_angles"; - enable(f_cvc_implicit_gradient); + enable(f_cvc_explicit_gradient); x.type(colvarvalue::type_scalar); std::string segment_id; @@ -118,7 +116,7 @@ colvar::alpha_angles::alpha_angles() : cvc() { function_type = "alpha_angles"; - enable(f_cvc_implicit_gradient); + enable(f_cvc_explicit_gradient); x.type(colvarvalue::type_scalar); } @@ -133,6 +131,8 @@ colvar::alpha_angles::~alpha_angles() delete hb.back(); hb.pop_back(); } + // Our references to atom groups have become invalid now that children cvcs are deleted + atom_groups.clear(); } @@ -191,6 +191,58 @@ void colvar::alpha_angles::calc_gradients() } +void colvar::alpha_angles::collect_gradients(std::vector const &atom_ids, std::vector &atomic_gradients) +{ + cvm::real cvc_coeff = sup_coeff * cvm::real(sup_np) * cvm::integer_power(value().real_value, sup_np-1); + + if (theta.size()) { + cvm::real const theta_norm = (1.0-hb_coeff) / cvm::real(theta.size()); + + for (size_t i = 0; i < theta.size(); i++) { + cvm::real const t = ((theta[i])->value().real_value-theta_ref)/theta_tol; + cvm::real const f = ( (1.0 - (t*t)) / + (1.0 - (t*t*t*t)) ); + cvm::real const dfdt = + 1.0/(1.0 - (t*t*t*t)) * + ( (-2.0 * t) + (-1.0*f)*(-4.0 * (t*t*t)) ); + + // Coeficient of this CVC's gradient in the colvar gradient, times coefficient of this + // angle's gradient in the CVC's gradient + cvm::real const coeff = cvc_coeff * theta_norm * dfdt * (1.0/theta_tol); + + for (size_t j = 0; j < theta[i]->atom_groups.size(); j++) { + cvm::atom_group &ag = *(theta[i]->atom_groups[j]); + for (size_t k = 0; k < ag.size(); k++) { + size_t a = std::lower_bound(atom_ids.begin(), atom_ids.end(), + ag[k].id) - atom_ids.begin(); + atomic_gradients[a] += coeff * ag[k].grad; + } + } + } + } + + if (hb.size()) { + + cvm::real const hb_norm = hb_coeff / cvm::real(hb.size()); + + for (size_t i = 0; i < hb.size(); i++) { + // Coeficient of this CVC's gradient in the colvar gradient, times coefficient of this + // hbond's gradient in the CVC's gradient + cvm::real const coeff = cvc_coeff * 0.5 * hb_norm; + + for (size_t j = 0; j < hb[i]->atom_groups.size(); j++) { + cvm::atom_group &ag = *(hb[i]->atom_groups[j]); + for (size_t k = 0; k < ag.size(); k++) { + size_t a = std::lower_bound(atom_ids.begin(), atom_ids.end(), + ag[k].id) - atom_ids.begin(); + atomic_gradients[a] += coeff * ag[k].grad; + } + } + } + } +} + + void colvar::alpha_angles::apply_force(colvarvalue const &force) { @@ -242,7 +294,8 @@ colvar::dihedPC::dihedPC(std::string const &conf) cvm::log("Initializing dihedral PC object.\n"); function_type = "dihedPC"; - enable(f_cvc_implicit_gradient); + // Supported through references to atom groups of children cvcs + enable(f_cvc_explicit_gradient); x.type(colvarvalue::type_scalar); std::string segment_id; @@ -372,7 +425,8 @@ colvar::dihedPC::dihedPC() : cvc() { function_type = "dihedPC"; - enable(f_cvc_implicit_gradient); + // Supported through references to atom groups of children cvcs + enable(f_cvc_explicit_gradient); x.type(colvarvalue::type_scalar); } @@ -383,6 +437,8 @@ colvar::dihedPC::~dihedPC() delete theta.back(); theta.pop_back(); } + // Our references to atom groups have become invalid now that children cvcs are deleted + atom_groups.clear(); } @@ -392,8 +448,8 @@ void colvar::dihedPC::calc_value() for (size_t i = 0; i < theta.size(); i++) { theta[i]->calc_value(); cvm::real const t = (PI / 180.) * theta[i]->value().real_value; - x.real_value += coeffs[2*i ] * std::cos(t) - + coeffs[2*i+1] * std::sin(t); + x.real_value += coeffs[2*i ] * cvm::cos(t) + + coeffs[2*i+1] * cvm::sin(t); } } @@ -406,12 +462,35 @@ void colvar::dihedPC::calc_gradients() } +void colvar::dihedPC::collect_gradients(std::vector const &atom_ids, std::vector &atomic_gradients) +{ + cvm::real cvc_coeff = sup_coeff * cvm::real(sup_np) * cvm::integer_power(value().real_value, sup_np-1); + for (size_t i = 0; i < theta.size(); i++) { + cvm::real const t = (PI / 180.) * theta[i]->value().real_value; + cvm::real const dcosdt = - (PI / 180.) * cvm::sin(t); + cvm::real const dsindt = (PI / 180.) * cvm::cos(t); + // Coeficient of this dihedPC's gradient in the colvar gradient, times coefficient of this + // dihedral's gradient in the dihedPC's gradient + cvm::real const coeff = cvc_coeff * (coeffs[2*i] * dcosdt + coeffs[2*i+1] * dsindt); + + for (size_t j = 0; j < theta[i]->atom_groups.size(); j++) { + cvm::atom_group &ag = *(theta[i]->atom_groups[j]); + for (size_t k = 0; k < ag.size(); k++) { + size_t a = std::lower_bound(atom_ids.begin(), atom_ids.end(), + ag[k].id) - atom_ids.begin(); + atomic_gradients[a] += coeff * ag[k].grad; + } + } + } +} + + void colvar::dihedPC::apply_force(colvarvalue const &force) { for (size_t i = 0; i < theta.size(); i++) { cvm::real const t = (PI / 180.) * theta[i]->value().real_value; - cvm::real const dcosdt = - (PI / 180.) * std::sin(t); - cvm::real const dsindt = (PI / 180.) * std::cos(t); + cvm::real const dcosdt = - (PI / 180.) * cvm::sin(t); + cvm::real const dsindt = (PI / 180.) * cvm::cos(t); theta[i]->apply_force((coeffs[2*i ] * dcosdt + coeffs[2*i+1] * dsindt) * force); diff --git a/lib/colvars/colvarcomp_rotations.cpp b/lib/colvars/colvarcomp_rotations.cpp index 498ef7c2f5..3c8d0b4af6 100644 --- a/lib/colvars/colvarcomp_rotations.cpp +++ b/lib/colvars/colvarcomp_rotations.cpp @@ -7,8 +7,6 @@ // If you wish to distribute your changes, please submit them to the // Colvars repository at GitHub. -#include - #include "colvarmodule.h" #include "colvarvalue.h" #include "colvarparse.h" @@ -18,21 +16,27 @@ colvar::orientation::orientation(std::string const &conf) - : cvc(conf) + : cvc() { function_type = "orientation"; - atoms = parse_group(conf, "atoms"); - enable(f_cvc_implicit_gradient); + disable(f_cvc_explicit_gradient); x.type(colvarvalue::type_quaternion); + init(conf); +} + +int colvar::orientation::init(std::string const &conf) +{ + int error_code = cvc::init(conf); + + atoms = parse_group(conf, "atoms"); ref_pos.reserve(atoms->size()); if (get_keyval(conf, "refPositions", ref_pos, ref_pos)) { cvm::log("Using reference positions from input file.\n"); if (ref_pos.size() != atoms->size()) { - cvm::error("Error: reference positions do not " - "match the number of requested atoms.\n"); - return; + return cvm::error("Error: reference positions do not " + "match the number of requested atoms.\n", INPUT_ERROR); } } @@ -46,9 +50,8 @@ colvar::orientation::orientation(std::string const &conf) // use PDB flags if column is provided bool found = get_keyval(conf, "refPositionsColValue", file_col_value, 0.0); if (found && file_col_value==0.0) { - cvm::error("Error: refPositionsColValue, " - "if provided, must be non-zero.\n"); - return; + return cvm::error("Error: refPositionsColValue, " + "if provided, must be non-zero.\n", INPUT_ERROR); } } @@ -59,9 +62,8 @@ colvar::orientation::orientation(std::string const &conf) } if (!ref_pos.size()) { - cvm::error("Error: must define a set of " - "reference coordinates.\n"); - return; + return cvm::error("Error: must define a set of " + "reference coordinates.\n", INPUT_ERROR); } @@ -85,6 +87,7 @@ colvar::orientation::orientation(std::string const &conf) rot.request_group2_gradients(atoms->size()); } + return error_code; } @@ -92,7 +95,7 @@ colvar::orientation::orientation() : cvc() { function_type = "orientation"; - enable(f_cvc_implicit_gradient); + disable(f_cvc_explicit_gradient); x.type(colvarvalue::type_quaternion); } @@ -158,10 +161,18 @@ colvarvalue colvar::orientation::dist2_rgrad(colvarvalue const &x1, colvar::orientation_angle::orientation_angle(std::string const &conf) - : orientation(conf) + : orientation() { function_type = "orientation_angle"; + enable(f_cvc_explicit_gradient); x.type(colvarvalue::type_scalar); + init(conf); +} + + +int colvar::orientation_angle::init(std::string const &conf) +{ + return orientation::init(conf); } @@ -169,6 +180,7 @@ colvar::orientation_angle::orientation_angle() : orientation() { function_type = "orientation_angle"; + enable(f_cvc_explicit_gradient); x.type(colvarvalue::type_scalar); } @@ -180,9 +192,9 @@ void colvar::orientation_angle::calc_value() rot.calc_optimal_rotation(ref_pos, atoms->positions_shifted(-1.0 * atoms_cog)); if ((rot.q).q0 >= 0.0) { - x.real_value = (180.0/PI) * 2.0 * std::acos((rot.q).q0); + x.real_value = (180.0/PI) * 2.0 * cvm::acos((rot.q).q0); } else { - x.real_value = (180.0/PI) * 2.0 * std::acos(-1.0 * (rot.q).q0); + x.real_value = (180.0/PI) * 2.0 * cvm::acos(-1.0 * (rot.q).q0); } } @@ -191,7 +203,7 @@ void colvar::orientation_angle::calc_gradients() { cvm::real const dxdq0 = ( ((rot.q).q0 * (rot.q).q0 < 1.0) ? - ((180.0 / PI) * (-2.0) / std::sqrt(1.0 - ((rot.q).q0 * (rot.q).q0))) : + ((180.0 / PI) * (-2.0) / cvm::sqrt(1.0 - ((rot.q).q0 * (rot.q).q0))) : 0.0 ); for (size_t ia = 0; ia < atoms->size(); ia++) { @@ -214,10 +226,18 @@ simple_scalar_dist_functions(orientation_angle) colvar::orientation_proj::orientation_proj(std::string const &conf) - : orientation(conf) + : orientation() { function_type = "orientation_proj"; + enable(f_cvc_explicit_gradient); x.type(colvarvalue::type_scalar); + init(conf); +} + + +int colvar::orientation_proj::init(std::string const &conf) +{ + return orientation::init(conf); } @@ -225,6 +245,7 @@ colvar::orientation_proj::orientation_proj() : orientation() { function_type = "orientation_proj"; + enable(f_cvc_explicit_gradient); x.type(colvarvalue::type_scalar); } @@ -261,18 +282,28 @@ simple_scalar_dist_functions(orientation_proj) colvar::tilt::tilt(std::string const &conf) - : orientation(conf) + : orientation() { function_type = "tilt"; + enable(f_cvc_explicit_gradient); + x.type(colvarvalue::type_scalar); + init(conf); +} + + +int colvar::tilt::init(std::string const &conf) +{ + int error_code = COLVARS_OK; + + error_code |= orientation::init(conf); get_keyval(conf, "axis", axis, cvm::rvector(0.0, 0.0, 1.0)); - if (axis.norm2() != 1.0) { axis /= axis.norm(); cvm::log("Normalizing rotation axis to "+cvm::to_str(axis)+".\n"); } - x.type(colvarvalue::type_scalar); + return error_code; } @@ -280,6 +311,7 @@ colvar::tilt::tilt() : orientation() { function_type = "tilt"; + enable(f_cvc_explicit_gradient); x.type(colvarvalue::type_scalar); } @@ -322,20 +354,30 @@ simple_scalar_dist_functions(tilt) colvar::spin_angle::spin_angle(std::string const &conf) - : orientation(conf) + : orientation() { function_type = "spin_angle"; + period = 360.0; + b_periodic = true; + enable(f_cvc_explicit_gradient); + x.type(colvarvalue::type_scalar); + init(conf); +} + + +int colvar::spin_angle::init(std::string const &conf) +{ + int error_code = COLVARS_OK; + + error_code |= orientation::init(conf); get_keyval(conf, "axis", axis, cvm::rvector(0.0, 0.0, 1.0)); - if (axis.norm2() != 1.0) { axis /= axis.norm(); cvm::log("Normalizing rotation axis to "+cvm::to_str(axis)+".\n"); } - period = 360.0; - b_periodic = true; - x.type(colvarvalue::type_scalar); + return error_code; } @@ -345,6 +387,7 @@ colvar::spin_angle::spin_angle() function_type = "spin_angle"; period = 360.0; b_periodic = true; + enable(f_cvc_explicit_gradient); x.type(colvarvalue::type_scalar); } @@ -410,15 +453,15 @@ colvarvalue colvar::spin_angle::dist2_rgrad(colvarvalue const &x1, } -void colvar::spin_angle::wrap(colvarvalue &x) const +void colvar::spin_angle::wrap(colvarvalue &x_unwrapped) const { - if ((x.real_value - wrap_center) >= 180.0) { - x.real_value -= 360.0; + if ((x_unwrapped.real_value - wrap_center) >= 180.0) { + x_unwrapped.real_value -= 360.0; return; } - if ((x.real_value - wrap_center) < -180.0) { - x.real_value += 360.0; + if ((x_unwrapped.real_value - wrap_center) < -180.0) { + x_unwrapped.real_value += 360.0; return; } diff --git a/lib/colvars/colvardeps.cpp b/lib/colvars/colvardeps.cpp index d20ee6e55c..276f2b39e7 100644 --- a/lib/colvars/colvardeps.cpp +++ b/lib/colvars/colvardeps.cpp @@ -122,12 +122,7 @@ bool colvardeps::get_keyval_feature(colvarparse *cvp, int colvardeps::enable(int feature_id, bool dry_run /* default: false */, - // dry_run: fail silently, do not enable if available - // flag is passed recursively to deps of this feature bool toplevel /* default: true */) -// toplevel: false if this is called as part of a chain of dependency resolution -// this is used to diagnose failed dependencies by displaying the full stack -// only the toplevel dependency will throw a fatal error { int res; size_t i, j; @@ -143,8 +138,7 @@ int colvardeps::enable(int feature_id, if (fs->enabled) { if (!(dry_run || toplevel)) { - // This is a dependency - // Prevent disabling this feature as long + // This is a dependency: prevent disabling this feature as long // as requirement is enabled fs->ref_count++; if (cvm::debug()) @@ -173,7 +167,10 @@ int colvardeps::enable(int feature_id, if (!toplevel && !is_dynamic(feature_id)) { if (!dry_run) { cvm::log(feature_type_descr + " feature \"" + f->description - + "\" may not be enabled as a dependency in " + description + ".\n"); + + "\" cannot be enabled automatically in " + description + "."); + if (is_user(feature_id)) { + cvm::log("Try setting it manually.\n"); + } } return COLVARS_ERROR; } @@ -354,6 +351,7 @@ int colvardeps::disable(int feature_id) { return COLVARS_OK; } + int colvardeps::decr_ref_count(int feature_id) { int &rc = feature_states[feature_id].ref_count; feature *f = features()[feature_id]; @@ -379,324 +377,52 @@ int colvardeps::decr_ref_count(int feature_id) { return COLVARS_OK; } -void colvardeps::init_feature(int feature_id, const char *description, feature_type type) { - modify_features()[feature_id]->description = description; + +void colvardeps::init_feature(int feature_id, const char *description_in, feature_type type) { + modify_features()[feature_id]->description = description_in; modify_features()[feature_id]->type = type; } -// Shorthand macros for describing dependencies -#define f_req_self(f, g) features()[f]->requires_self.push_back(g) -// This macro ensures that exclusions are symmetric -#define f_req_exclude(f, g) features()[f]->requires_exclude.push_back(g); \ - features()[g]->requires_exclude.push_back(f) -#define f_req_children(f, g) features()[f]->requires_children.push_back(g) -#define f_req_alt2(f, g, h) features()[f]->requires_alt.push_back(std::vector(2));\ - features()[f]->requires_alt.back()[0] = g; \ - features()[f]->requires_alt.back()[1] = h -#define f_req_alt3(f, g, h, i) features()[f]->requires_alt.push_back(std::vector(3));\ - features()[f]->requires_alt.back()[0] = g; \ - features()[f]->requires_alt.back()[1] = h; \ - features()[f]->requires_alt.back()[2] = i -#define f_req_alt4(f, g, h, i, j) features()[f]->requires_alt.push_back(std::vector(4));\ - features()[f]->requires_alt.back()[0] = g; \ - features()[f]->requires_alt.back()[1] = h; \ - features()[f]->requires_alt.back()[2] = i; \ - features()[f]->requires_alt.back()[3] = j -void colvardeps::init_cvb_requires() { - int i; - if (features().size() == 0) { - for (i = 0; i < f_cvb_ntot; i++) { - modify_features().push_back(new feature); - } - - init_feature(f_cvb_active, "active", f_type_dynamic); - f_req_children(f_cvb_active, f_cv_active); - - init_feature(f_cvb_awake, "awake", f_type_static); - f_req_self(f_cvb_awake, f_cvb_active); - - init_feature(f_cvb_apply_force, "apply force", f_type_user); - f_req_children(f_cvb_apply_force, f_cv_gradient); - - init_feature(f_cvb_get_total_force, "obtain total force", f_type_dynamic); - f_req_children(f_cvb_get_total_force, f_cv_total_force); - - init_feature(f_cvb_output_acc_work, "output accumulated work", f_type_user); - f_req_self(f_cvb_output_acc_work, f_cvb_apply_force); - - init_feature(f_cvb_history_dependent, "history-dependent", f_type_static); - - init_feature(f_cvb_time_dependent, "time-dependent", f_type_static); - - init_feature(f_cvb_scalar_variables, "require scalar variables", f_type_static); - f_req_children(f_cvb_scalar_variables, f_cv_scalar); - - init_feature(f_cvb_calc_pmf, "calculate a PMF", f_type_static); - - init_feature(f_cvb_calc_ti_samples, "calculate TI samples", f_type_dynamic); - f_req_self(f_cvb_calc_ti_samples, f_cvb_get_total_force); - f_req_children(f_cvb_calc_ti_samples, f_cv_grid); - - init_feature(f_cvb_write_ti_samples, "write TI samples ", f_type_user); - f_req_self(f_cvb_write_ti_samples, f_cvb_calc_ti_samples); - - init_feature(f_cvb_write_ti_pmf, "write TI PMF", f_type_user); - f_req_self(f_cvb_write_ti_pmf, f_cvb_calc_ti_samples); - } - - // Initialize feature_states for each instance - feature_states.reserve(f_cvb_ntot); - for (i = 0; i < f_cvb_ntot; i++) { - feature_states.push_back(feature_state(true, false)); - // Most features are available, so we set them so - // and list exceptions below - } - - // only compute TI samples when deriving from colvarbias_ti - feature_states[f_cvb_calc_ti_samples].available = false; +// Shorthand functions for describing dependencies +void colvardeps::require_feature_self(int f, int g) { + features()[f]->requires_self.push_back(g); } -void colvardeps::init_cv_requires() { - size_t i; - if (features().size() == 0) { - for (i = 0; i < f_cv_ntot; i++) { - modify_features().push_back(new feature); - } - - init_feature(f_cv_active, "active", f_type_dynamic); - // Do not require f_cvc_active in children, as some components may be disabled - // Colvars must be either a linear combination, or scalar (and polynomial) or scripted/custom - f_req_alt4(f_cv_active, f_cv_scalar, f_cv_linear, f_cv_scripted, f_cv_custom_function); - - init_feature(f_cv_awake, "awake", f_type_static); - f_req_self(f_cv_awake, f_cv_active); - - init_feature(f_cv_gradient, "gradient", f_type_dynamic); - f_req_children(f_cv_gradient, f_cvc_gradient); - - init_feature(f_cv_collect_gradient, "collect gradient", f_type_dynamic); - f_req_self(f_cv_collect_gradient, f_cv_gradient); - f_req_self(f_cv_collect_gradient, f_cv_scalar); - // The following exlusion could be lifted by implementing the feature - f_req_exclude(f_cv_collect_gradient, f_cv_scripted); - - init_feature(f_cv_fdiff_velocity, "velocity from finite differences", f_type_dynamic); - - // System force: either trivial (spring force); through extended Lagrangian, or calculated explicitly - init_feature(f_cv_total_force, "total force", f_type_dynamic); - f_req_alt2(f_cv_total_force, f_cv_extended_Lagrangian, f_cv_total_force_calc); - - // Deps for explicit total force calculation - init_feature(f_cv_total_force_calc, "total force calculation", f_type_dynamic); - f_req_self(f_cv_total_force_calc, f_cv_scalar); - f_req_self(f_cv_total_force_calc, f_cv_linear); - f_req_children(f_cv_total_force_calc, f_cvc_inv_gradient); - f_req_self(f_cv_total_force_calc, f_cv_Jacobian); - - init_feature(f_cv_Jacobian, "Jacobian derivative", f_type_dynamic); - f_req_self(f_cv_Jacobian, f_cv_scalar); - f_req_self(f_cv_Jacobian, f_cv_linear); - f_req_children(f_cv_Jacobian, f_cvc_Jacobian); - - init_feature(f_cv_hide_Jacobian, "hide Jacobian force", f_type_user); - f_req_self(f_cv_hide_Jacobian, f_cv_Jacobian); // can only hide if calculated - - init_feature(f_cv_extended_Lagrangian, "extended Lagrangian", f_type_user); - f_req_self(f_cv_extended_Lagrangian, f_cv_scalar); - f_req_self(f_cv_extended_Lagrangian, f_cv_gradient); - - init_feature(f_cv_Langevin, "Langevin dynamics", f_type_user); - f_req_self(f_cv_Langevin, f_cv_extended_Lagrangian); - - init_feature(f_cv_linear, "linear", f_type_static); - - init_feature(f_cv_scalar, "scalar", f_type_static); - - init_feature(f_cv_output_energy, "output energy", f_type_user); - - init_feature(f_cv_output_value, "output value", f_type_user); - - init_feature(f_cv_output_velocity, "output velocity", f_type_user); - f_req_self(f_cv_output_velocity, f_cv_fdiff_velocity); - - init_feature(f_cv_output_applied_force, "output applied force", f_type_user); - - init_feature(f_cv_output_total_force, "output total force", f_type_user); - f_req_self(f_cv_output_total_force, f_cv_total_force); - - init_feature(f_cv_subtract_applied_force, "subtract applied force from total force", f_type_user); - f_req_self(f_cv_subtract_applied_force, f_cv_total_force); - - init_feature(f_cv_lower_boundary, "lower boundary", f_type_user); - f_req_self(f_cv_lower_boundary, f_cv_scalar); - - init_feature(f_cv_upper_boundary, "upper boundary", f_type_user); - f_req_self(f_cv_upper_boundary, f_cv_scalar); - - init_feature(f_cv_grid, "grid", f_type_dynamic); - f_req_self(f_cv_grid, f_cv_lower_boundary); - f_req_self(f_cv_grid, f_cv_upper_boundary); - - init_feature(f_cv_runave, "running average", f_type_user); - - init_feature(f_cv_corrfunc, "correlation function", f_type_user); - - init_feature(f_cv_scripted, "scripted", f_type_user); - - init_feature(f_cv_custom_function, "custom function", f_type_user); - f_req_exclude(f_cv_custom_function, f_cv_scripted); - - init_feature(f_cv_periodic, "periodic", f_type_static); - f_req_self(f_cv_periodic, f_cv_scalar); - init_feature(f_cv_scalar, "scalar", f_type_static); - init_feature(f_cv_linear, "linear", f_type_static); - init_feature(f_cv_homogeneous, "homogeneous", f_type_static); - - // because total forces are obtained from the previous time step, - // we cannot (currently) have colvar values and total forces for the same timestep - init_feature(f_cv_multiple_ts, "multiple timestep colvar"); - f_req_exclude(f_cv_multiple_ts, f_cv_total_force_calc); - } - - // Initialize feature_states for each instance - feature_states.reserve(f_cv_ntot); - for (i = 0; i < f_cv_ntot; i++) { - feature_states.push_back(feature_state(true, false)); - // Most features are available, so we set them so - // and list exceptions below - } - - feature_states[f_cv_fdiff_velocity].available = - cvm::main()->proxy->simulation_running(); +// Ensure that exclusions are symmetric +void colvardeps::exclude_feature_self(int f, int g) { + features()[f]->requires_exclude.push_back(g); + features()[g]->requires_exclude.push_back(f); } -void colvardeps::init_cvc_requires() { - size_t i; - // Initialize static array once and for all - if (features().size() == 0) { - for (i = 0; i < colvardeps::f_cvc_ntot; i++) { - modify_features().push_back(new feature); - } - - init_feature(f_cvc_active, "active", f_type_dynamic); -// The dependency below may become useful if we use dynamic atom groups -// f_req_children(f_cvc_active, f_ag_active); - - init_feature(f_cvc_scalar, "scalar", f_type_static); - - init_feature(f_cvc_gradient, "gradient", f_type_dynamic); - - init_feature(f_cvc_implicit_gradient, "implicit gradient", f_type_static); - f_req_children(f_cvc_implicit_gradient, f_ag_implicit_gradient); - - init_feature(f_cvc_inv_gradient, "inverse gradient", f_type_dynamic); - f_req_self(f_cvc_inv_gradient, f_cvc_gradient); - - init_feature(f_cvc_debug_gradient, "debug gradient", f_type_user); - f_req_self(f_cvc_debug_gradient, f_cvc_gradient); - f_req_exclude(f_cvc_debug_gradient, f_cvc_implicit_gradient); - - init_feature(f_cvc_Jacobian, "Jacobian derivative", f_type_dynamic); - f_req_self(f_cvc_Jacobian, f_cvc_inv_gradient); - - init_feature(f_cvc_com_based, "depends on group centers of mass", f_type_static); - - // init_feature(f_cvc_pbc_minimum_image, "use minimum-image distances with PBCs", f_type_user); - - // Compute total force on first site only to avoid unwanted - // coupling to other colvars (see e.g. Ciccotti et al., 2005) - init_feature(f_cvc_one_site_total_force, "compute total force from one group", f_type_user); - f_req_self(f_cvc_one_site_total_force, f_cvc_com_based); - - init_feature(f_cvc_scalable, "scalable calculation", f_type_static); - f_req_self(f_cvc_scalable, f_cvc_scalable_com); - - init_feature(f_cvc_scalable_com, "scalable calculation of centers of mass", f_type_static); - f_req_self(f_cvc_scalable_com, f_cvc_com_based); - - - // TODO only enable this when f_ag_scalable can be turned on for a pre-initialized group - // f_req_children(f_cvc_scalable, f_ag_scalable); - // f_req_children(f_cvc_scalable_com, f_ag_scalable_com); - } - - // Initialize feature_states for each instance - // default as available, not enabled - // except dynamic features which default as unavailable - feature_states.reserve(f_cvc_ntot); - for (i = 0; i < colvardeps::f_cvc_ntot; i++) { - bool avail = is_dynamic(i) ? false : true; - feature_states.push_back(feature_state(avail, false)); - } - - // CVCs are enabled from the start - get disabled based on flags - feature_states[f_cvc_active].enabled = true; - - // Features that are implemented by all cvcs by default - // Each cvc specifies what other features are available - feature_states[f_cvc_active].available = true; - feature_states[f_cvc_gradient].available = true; - - // Use minimum-image distances by default - feature_states[f_cvc_pbc_minimum_image].enabled = true; - - // Features that are implemented by default if their requirements are - feature_states[f_cvc_one_site_total_force].available = true; - - // Features That are implemented only for certain simulation engine configurations - feature_states[f_cvc_scalable_com].available = (cvm::proxy->scalable_group_coms() == COLVARS_OK); - feature_states[f_cvc_scalable].available = feature_states[f_cvc_scalable_com].available; +void colvardeps::require_feature_children(int f, int g) { + features()[f]->requires_children.push_back(g); } -void colvardeps::init_ag_requires() { - size_t i; - // Initialize static array once and for all - if (features().size() == 0) { - for (i = 0; i < f_ag_ntot; i++) { - modify_features().push_back(new feature); - } +void colvardeps::require_feature_alt(int f, int g, int h) { + features()[f]->requires_alt.push_back(std::vector(2)); + features()[f]->requires_alt.back()[0] = g; + features()[f]->requires_alt.back()[1] = h; +} - init_feature(f_ag_active, "active", f_type_dynamic); - init_feature(f_ag_center, "translational fit", f_type_static); - init_feature(f_ag_rotate, "rotational fit", f_type_static); - init_feature(f_ag_fitting_group, "reference positions group", f_type_static); - init_feature(f_ag_implicit_gradient, "implicit atom gradient", f_type_dynamic); - init_feature(f_ag_fit_gradients, "fit gradients", f_type_user); - f_req_exclude(f_ag_fit_gradients, f_ag_implicit_gradient); - init_feature(f_ag_atom_forces, "atomic forces", f_type_dynamic); +void colvardeps::require_feature_alt(int f, int g, int h, int i) { + features()[f]->requires_alt.push_back(std::vector(3)); + features()[f]->requires_alt.back()[0] = g; + features()[f]->requires_alt.back()[1] = h; + features()[f]->requires_alt.back()[2] = i; +} - // parallel calculation implies that we have at least a scalable center of mass, - // but f_ag_scalable is kept as a separate feature to deal with future dependencies - init_feature(f_ag_scalable, "scalable group calculation", f_type_static); - init_feature(f_ag_scalable_com, "scalable group center of mass calculation", f_type_static); - f_req_self(f_ag_scalable, f_ag_scalable_com); -// init_feature(f_ag_min_msd_fit, "minimum MSD fit") -// f_req_self(f_ag_min_msd_fit, f_ag_center) -// f_req_self(f_ag_min_msd_fit, f_ag_rotate) -// f_req_exclude(f_ag_min_msd_fit, f_ag_fitting_group) - } - - // Initialize feature_states for each instance - // default as unavailable, not enabled - feature_states.reserve(f_ag_ntot); - for (i = 0; i < colvardeps::f_ag_ntot; i++) { - feature_states.push_back(feature_state(false, false)); - } - - // Features that are implemented (or not) by all atom groups - feature_states[f_ag_active].available = true; - // f_ag_scalable_com is provided by the CVC iff it is COM-based - feature_states[f_ag_scalable_com].available = false; - // TODO make f_ag_scalable depend on f_ag_scalable_com (or something else) - feature_states[f_ag_scalable].available = true; - feature_states[f_ag_fit_gradients].available = true; - feature_states[f_ag_implicit_gradient].available = true; +void colvardeps::require_feature_alt(int f, int g, int h, int i, int j) { + features()[f]->requires_alt.push_back(std::vector(4)); + features()[f]->requires_alt.back()[0] = g; + features()[f]->requires_alt.back()[1] = h; + features()[f]->requires_alt.back()[2] = i; + features()[f]->requires_alt.back()[3] = j; } @@ -720,7 +446,7 @@ void colvardeps::print_state() { void colvardeps::add_child(colvardeps *child) { children.push_back(child); - child->parents.push_back((colvardeps *)this); + child->parents.push_back(this); // Solve dependencies of already enabled parent features // in the new child diff --git a/lib/colvars/colvardeps.h b/lib/colvars/colvardeps.h index 940eefb01b..198a24f330 100644 --- a/lib/colvars/colvardeps.h +++ b/lib/colvars/colvardeps.h @@ -23,7 +23,11 @@ /// 3. Static features are static properties of the object, determined /// programatically at initialization time. /// -/// In all classes, feature 0 is active. When an object is inactivated +/// The following diagram summarizes the dependency tree at the bias, colvar, and colvarcomp levels. +/// Isolated and atom group features are not shown to save space. +/// @image html deps_2019.svg +/// +/// In all classes, feature 0 is `active`. When an object is inactivated /// all its children dependencies are dereferenced (free_children_deps) /// While the object is inactive, no dependency solving is done on children /// it is done when the object is activated back (restore_children_deps) @@ -72,7 +76,6 @@ protected: /// Unused by lower-level objects (cvcs and atom groups) int time_step_factor; -private: /// List of the states of all features std::vector feature_states; @@ -89,14 +92,14 @@ public: inline int get_time_step_factor() const {return time_step_factor;} /// Pair a numerical feature ID with a description and type - void init_feature(int feature_id, const char *description, feature_type type = f_type_not_set); + void init_feature(int feature_id, const char *description, feature_type type); /// Describes a feature and its dependencies /// used in a static array within each subclass class feature { public: - feature() {} + feature() : type(f_type_not_set) {} ~feature() {} std::string description; // Set by derived object initializer @@ -126,6 +129,7 @@ public: feature_type type; }; + inline bool is_not_set(int id) { return features()[id]->type == f_type_not_set; } inline bool is_dynamic(int id) { return features()[id]->type == f_type_dynamic; } inline bool is_static(int id) { return features()[id]->type == f_type_static; } inline bool is_user(int id) { return features()[id]->type == f_type_user; } @@ -135,7 +139,7 @@ public: // with a non-static array // Intermediate classes (colvarbias and colvarcomp, which are also base classes) // implement this as virtual to allow overriding - virtual const std::vector&features() = 0; + virtual const std::vector &features() const = 0; virtual std::vector&modify_features() = 0; void add_child(colvardeps *child); @@ -188,10 +192,12 @@ protected: public: - /// enable a feature and recursively solve its dependencies - /// for proper reference counting, one should not add - /// spurious calls to enable() - /// dry_run is set to true to recursively test if a feature is available, without enabling it + /// Enable a feature and recursively solve its dependencies. + /// For accurate reference counting, do not add spurious calls to enable() + /// \param dry_run Recursively test if a feature is available, without enabling it + /// \param toplevel False if this is called as part of a chain of dependency resolution. + /// This is used to diagnose failed dependencies by displaying the full stack: + /// only the toplevel dependency will throw a fatal error. int enable(int f, bool dry_run = false, bool toplevel = true); /// Disable a feature, decrease the reference count of its dependencies @@ -318,8 +324,8 @@ public: f_cvc_active, f_cvc_scalar, f_cvc_gradient, - /// \brief CVC doesn't calculate and store explicit atom gradients - f_cvc_implicit_gradient, + /// \brief CVC calculates and stores explicit atom gradients + f_cvc_explicit_gradient, f_cvc_inv_gradient, /// \brief If enabled, calc_gradients() will call debug_gradients() for every group needed f_cvc_debug_gradient, @@ -341,7 +347,7 @@ public: /// ie. not using refpositionsgroup // f_ag_min_msd_fit, /// \brief Does not have explicit atom gradients from parent CVC - f_ag_implicit_gradient, + f_ag_explicit_gradient, f_ag_fit_gradients, f_ag_atom_forces, f_ag_scalable, @@ -349,13 +355,39 @@ public: f_ag_ntot }; - void init_cvb_requires(); - void init_cv_requires(); - void init_cvc_requires(); - void init_ag_requires(); + /// Initialize dependency tree for object of a derived class + virtual int init_dependencies() = 0; + + /// Make feature f require feature g within the same object + void require_feature_self(int f, int g); + + /// Make features f and g mutually exclusive within the same object + void exclude_feature_self(int f, int g); + + /// Make feature f require feature g within children + void require_feature_children(int f, int g); + + /// Make feature f require either g or h within the same object + void require_feature_alt(int f, int g, int h); + + /// Make feature f require any of g, h, or i within the same object + void require_feature_alt(int f, int g, int h, int i); + + /// Make feature f require any of g, h, i, or j within the same object + void require_feature_alt(int f, int g, int h, int i, int j); /// \brief print all enabled features and those of children, for debugging void print_state(); + + /// \brief Check that a feature is enabled, raising BUG_ERROR if not + inline void check_enabled(int f, std::string const &reason) const + { + if (! is_enabled(f)) { + cvm::error("Error: "+reason+" requires that the feature \""+ + features()[f]->description+"\" is active.\n", BUG_ERROR); + } + } + }; #endif diff --git a/lib/colvars/colvargrid.cpp b/lib/colvars/colvargrid.cpp index 407b336afd..dc1a709edb 100644 --- a/lib/colvars/colvargrid.cpp +++ b/lib/colvars/colvargrid.cpp @@ -109,7 +109,7 @@ cvm::real colvar_grid_scalar::entropy() const { cvm::real sum = 0.0; for (size_t i = 0; i < nt; i++) { - sum += -1.0 * data[i] * std::log(data[i]); + sum += -1.0 * data[i] * cvm::logn(data[i]); } cvm::real bin_volume = 1.0; for (size_t id = 0; id < widths.size(); id++) { diff --git a/lib/colvars/colvargrid.h b/lib/colvars/colvargrid.h index 9a0fe4c8ec..2ba0566e49 100644 --- a/lib/colvars/colvargrid.h +++ b/lib/colvars/colvargrid.h @@ -12,7 +12,6 @@ #include #include -#include #include "colvar.h" #include "colvarmodule.h" @@ -53,7 +52,7 @@ protected: std::vector cv; /// Do we request actual value (for extended-system colvars)? - std::vector actual_value; + std::vector use_actual_value; /// Get the low-level index corresponding to an index inline size_t address(std::vector const &ix) const @@ -136,8 +135,8 @@ public: inline void request_actual_value(bool b = true) { size_t i; - for (i = 0; i < actual_value.size(); i++) { - actual_value[i] = b; + for (i = 0; i < use_actual_value.size(); i++) { + use_actual_value[i] = b; } } @@ -215,7 +214,7 @@ public: mult(g.mult), data(), cv(g.cv), - actual_value(g.actual_value), + use_actual_value(g.use_actual_value), lower_boundaries(g.lower_boundaries), upper_boundaries(g.upper_boundaries), periodic(g.periodic), @@ -290,13 +289,13 @@ public: periodic.push_back(cv[i]->periodic_boundaries()); // By default, get reported colvar value (for extended Lagrangian colvars) - actual_value.push_back(false); + use_actual_value.push_back(false); // except if a colvar is specified twice in a row // then the first instance is the actual value // For histograms of extended-system coordinates if (i > 0 && cv[i-1] == cv[i]) { - actual_value[i-1] = true; + use_actual_value[i-1] = true; } if (margin) { @@ -319,8 +318,7 @@ public: return this->setup(); } - int init_from_boundaries(T const &t = T(), - size_t const &mult_i = 1) + int init_from_boundaries() { if (cvm::debug()) { cvm::log("Configuring grid dimensions from colvars boundaries.\n"); @@ -337,7 +335,7 @@ public: lower_boundaries[i].real_value ) / widths[i]; int nbins_round = (int)(nbins+0.5); - if (std::fabs(nbins - cvm::real(nbins_round)) > 1.0E-10) { + if (cvm::fabs(nbins - cvm::real(nbins_round)) > 1.0E-10) { cvm::log("Warning: grid interval("+ cvm::to_str(lower_boundaries[i], cvm::cv_width, cvm::cv_prec)+" - "+ cvm::to_str(upper_boundaries[i], cvm::cv_width, cvm::cv_prec)+ @@ -392,20 +390,20 @@ public: /// \brief Report the bin corresponding to the current value of variable i inline int current_bin_scalar(int const i) const { - return value_to_bin_scalar(actual_value[i] ? cv[i]->actual_value() : cv[i]->value(), i); + return value_to_bin_scalar(use_actual_value[i] ? cv[i]->actual_value() : cv[i]->value(), i); } /// \brief Report the bin corresponding to the current value of variable i /// and assign first or last bin if out of boundaries inline int current_bin_scalar_bound(int const i) const { - return value_to_bin_scalar_bound(actual_value[i] ? cv[i]->actual_value() : cv[i]->value(), i); + return value_to_bin_scalar_bound(use_actual_value[i] ? cv[i]->actual_value() : cv[i]->value(), i); } /// \brief Report the bin corresponding to the current value of item iv in variable i inline int current_bin_scalar(int const i, int const iv) const { - return value_to_bin_scalar(actual_value[i] ? + return value_to_bin_scalar(use_actual_value[i] ? cv[i]->actual_value().vector1d_value[iv] : cv[i]->value().vector1d_value[iv], i); } @@ -414,14 +412,14 @@ public: /// the provided value is in inline int value_to_bin_scalar(colvarvalue const &value, const int i) const { - return (int) std::floor( (value.real_value - lower_boundaries[i].real_value) / widths[i] ); + return (int) cvm::floor( (value.real_value - lower_boundaries[i].real_value) / widths[i] ); } /// \brief Use the lower boundary and the width to report which bin /// the provided value is in and assign first or last bin if out of boundaries inline int value_to_bin_scalar_bound(colvarvalue const &value, const int i) const { - int bin_index = std::floor( (value.real_value - lower_boundaries[i].real_value) / widths[i] ); + int bin_index = cvm::floor( (value.real_value - lower_boundaries[i].real_value) / widths[i] ); if (bin_index < 0) bin_index=0; if (bin_index >=int(nx[i])) bin_index=int(nx[i])-1; return (int) bin_index; @@ -432,7 +430,7 @@ public: colvarvalue const &new_offset, cvm::real const &new_width) const { - return (int) std::floor( (value.real_value - new_offset.real_value) / new_width ); + return (int) cvm::floor( (value.real_value - new_offset.real_value) / new_width ); } /// \brief Use the two boundaries and the width to report the @@ -611,8 +609,8 @@ public: if (periodic[i]) continue; - cvm::real dl = std::sqrt(cv[i]->dist2(values[i], lower_boundaries[i])) / widths[i]; - cvm::real du = std::sqrt(cv[i]->dist2(values[i], upper_boundaries[i])) / widths[i]; + cvm::real dl = cvm::sqrt(cv[i]->dist2(values[i], lower_boundaries[i])) / widths[i]; + cvm::real du = cvm::sqrt(cv[i]->dist2(values[i], upper_boundaries[i])) / widths[i]; if (values[i].real_value < lower_boundaries[i]) dl *= -1.0; @@ -841,7 +839,7 @@ public: if (nd < lower_boundaries.size()) nd = lower_boundaries.size(); - if (! actual_value.size()) actual_value.assign(nd, false); + if (! use_actual_value.size()) use_actual_value.assign(nd, false); if (! periodic.size()) periodic.assign(nd, false); if (! widths.size()) widths.assign(nd, 1.0); @@ -849,7 +847,7 @@ public: if (old_nx.size()) { for (size_t i = 0; i < nd; i++) { if ( (old_nx[i] != nx[i]) || - (std::sqrt(cv[i]->dist2(old_lb[i], + (cvm::sqrt(cv[i]->dist2(old_lb[i], lower_boundaries[i])) > 1.0E-10) ) { new_params = true; } @@ -874,11 +872,11 @@ public: void check_consistency() { for (size_t i = 0; i < nd; i++) { - if ( (std::sqrt(cv[i]->dist2(cv[i]->lower_boundary, + if ( (cvm::sqrt(cv[i]->dist2(cv[i]->lower_boundary, lower_boundaries[i])) > 1.0E-10) || - (std::sqrt(cv[i]->dist2(cv[i]->upper_boundary, + (cvm::sqrt(cv[i]->dist2(cv[i]->upper_boundary, upper_boundaries[i])) > 1.0E-10) || - (std::sqrt(cv[i]->dist2(cv[i]->width, + (cvm::sqrt(cv[i]->dist2(cv[i]->width, widths[i])) > 1.0E-10) ) { cvm::error("Error: restart information for a grid is " "inconsistent with that of its colvars.\n"); @@ -896,11 +894,11 @@ public: // we skip dist2(), because periodicities and the like should // matter: boundaries should be EXACTLY the same (otherwise, // map_grid() should be used) - if ( (std::fabs(other_grid.lower_boundaries[i] - + if ( (cvm::fabs(other_grid.lower_boundaries[i] - lower_boundaries[i]) > 1.0E-10) || - (std::fabs(other_grid.upper_boundaries[i] - + (cvm::fabs(other_grid.upper_boundaries[i] - upper_boundaries[i]) > 1.0E-10) || - (std::fabs(other_grid.widths[i] - + (cvm::fabs(other_grid.widths[i] - widths[i]) > 1.0E-10) || (data.size() != other_grid.data.size()) ) { cvm::error("Error: inconsistency between " @@ -1036,11 +1034,11 @@ public: std::istream & read_multicol(std::istream &is, bool add = false) { // Data in the header: nColvars, then for each - // xiMin, dXi, nPoints, periodic + // xiMin, dXi, nPoints, periodic flag std::string hash; cvm::real lower, width, x; - size_t n, periodic; + size_t n, periodic_flag; bool remap; std::vector new_value; std::vector nx_read; @@ -1053,7 +1051,8 @@ public: if ( !(is >> hash) || (hash != "#") ) { cvm::error("Error reading grid at position "+ - cvm::to_str(is.tellg())+" in stream(read \"" + hash + "\")\n"); + cvm::to_str(static_cast(is.tellg()))+ + " in stream(read \"" + hash + "\")\n"); return is; } @@ -1075,15 +1074,16 @@ public: for (size_t i = 0; i < nd; i++ ) { if ( !(is >> hash) || (hash != "#") ) { cvm::error("Error reading grid at position "+ - cvm::to_str(is.tellg())+" in stream(read \"" + hash + "\")\n"); + cvm::to_str(static_cast(is.tellg()))+ + " in stream(read \"" + hash + "\")\n"); return is; } - is >> lower >> width >> nx_read[i] >> periodic; + is >> lower >> width >> nx_read[i] >> periodic_flag; - if ( (std::fabs(lower - lower_boundaries[i].real_value) > 1.0e-10) || - (std::fabs(width - widths[i] ) > 1.0e-10) || + if ( (cvm::fabs(lower - lower_boundaries[i].real_value) > 1.0e-10) || + (cvm::fabs(width - widths[i] ) > 1.0e-10) || (nx_read[i] != nx[i]) ) { cvm::log("Warning: reading from different grid definition (colvar " + cvm::to_str(i+1) + "); remapping data on new grid.\n"); @@ -1246,7 +1246,7 @@ public: if (A0 * A1 == 0) { return 0.; // can't handle empty bins } else { - return (std::log((cvm::real)A1) - std::log((cvm::real)A0)) + return (cvm::logn((cvm::real)A1) - cvm::logn((cvm::real)A0)) / (widths[n] * 2.); } } else if (ix[n] > 0 && ix[n] < nx[n]-1) { // not an edge @@ -1258,7 +1258,7 @@ public: if (A0 * A1 == 0) { return 0.; // can't handle empty bins } else { - return (std::log((cvm::real)A1) - std::log((cvm::real)A0)) + return (cvm::logn((cvm::real)A1) - cvm::logn((cvm::real)A0)) / (widths[n] * 2.); } } else { @@ -1271,8 +1271,8 @@ public: if (A0 * A1 * A2 == 0) { return 0.; // can't handle empty bins } else { - return (-1.5 * std::log((cvm::real)A0) + 2. * std::log((cvm::real)A1) - - 0.5 * std::log((cvm::real)A2)) * increment / widths[n]; + return (-1.5 * cvm::logn((cvm::real)A0) + 2. * cvm::logn((cvm::real)A1) + - 0.5 * cvm::logn((cvm::real)A2)) * increment / widths[n]; } } } diff --git a/lib/colvars/colvarmodule.cpp b/lib/colvars/colvarmodule.cpp index d88a97a441..baffc25c28 100644 --- a/lib/colvars/colvarmodule.cpp +++ b/lib/colvars/colvarmodule.cpp @@ -28,6 +28,8 @@ colvarmodule::colvarmodule(colvarproxy *proxy_in) { depth_s = 0; + log_level_ = 10; + cv_traj_os = NULL; if (proxy == NULL) { @@ -152,12 +154,12 @@ int colvarmodule::read_config_string(std::string const &config_str) { cvm::log(cvm::line_marker); cvm::log("Reading new configuration:\n"); - std::istringstream config_s(config_str); + std::istringstream new_config_s(config_str); // strip the comments away std::string conf = ""; std::string line; - while (parse->read_config_line(config_s, line)) { + while (parse->read_config_line(new_config_s, line)) { // Delete lines that contain only white space after removing comments if (line.find_first_not_of(colvarparse::white_space) != std::string::npos) conf.append(line+"\n"); @@ -255,13 +257,16 @@ int colvarmodule::append_new_config(std::string const &new_conf) int colvarmodule::parse_global_params(std::string const &conf) { - colvarmodule *cvm = cvm::main(); + // TODO document and then echo this keyword + parse->get_keyval(conf, "logLevel", log_level_, log_level_, + colvarparse::parse_silent); { std::string index_file_name; size_t pos = 0; while (parse->key_lookup(conf, "indexFile", &index_file_name, &pos)) { - cvm->read_index_file(index_file_name.c_str()); + cvm::log("# indexFile = \""+index_file_name+"\"\n"); + read_index_file(index_file_name.c_str()); index_file_name.clear(); } } @@ -580,6 +585,24 @@ cvm::atom_group *colvarmodule::atom_group_by_name(std::string const &name) } +void colvarmodule::register_named_atom_group(atom_group *ag) { + named_atom_groups.push_back(ag); +} + + +void colvarmodule::unregister_named_atom_group(cvm::atom_group *ag) +{ + for (std::vector::iterator agi = named_atom_groups.begin(); + agi != named_atom_groups.end(); + agi++) { + if (*agi == ag) { + named_atom_groups.erase(agi); + break; + } + } +} + + int colvarmodule::change_configuration(std::string const &bias_name, std::string const &conf) { @@ -1034,9 +1057,6 @@ int colvarmodule::analyze() cvm::log("colvarmodule::analyze(), step = "+cvm::to_str(it)+".\n"); } - if (cvm::step_relative() == 0) - cvm::log("Performing analysis.\n"); - // perform colvar-specific analysis for (std::vector::iterator cvi = variables_active()->begin(); cvi != variables_active()->end(); @@ -1089,7 +1109,6 @@ int colvarmodule::end_of_step() int colvarmodule::setup() { if (this->size() == 0) return cvm::get_error(); - // loop over all components of all colvars to reset masses of all groups for (std::vector::iterator cvi = variables()->begin(); cvi != variables()->end(); cvi++) { (*cvi)->setup(); @@ -1248,13 +1267,13 @@ std::istream & colvarmodule::read_restart(std::istream &is) std::string restart_conf; if (is >> colvarparse::read_block("configuration", restart_conf)) { parse->get_keyval(restart_conf, "step", - it_restart, (size_t) 0, - colvarparse::parse_silent); + it_restart, static_cast(0), + colvarparse::parse_restart); it = it_restart; std::string restart_version; parse->get_keyval(restart_conf, "version", restart_version, std::string(""), - colvarparse::parse_silent); + colvarparse::parse_restart); if (restart_version.size() && (restart_version != std::string(COLVARS_VERSION))) { cvm::log("This state file was generated with version "+restart_version+"\n"); } @@ -1600,14 +1619,16 @@ std::ostream & colvarmodule::write_traj(std::ostream &os) } -void cvm::log(std::string const &message) +void cvm::log(std::string const &message, int min_log_level) { + if (cvm::log_level() < min_log_level) return; // allow logging when the module is not fully initialized size_t const d = (cvm::main() != NULL) ? depth() : 0; - if (d > 0) + if (d > 0) { proxy->log((std::string(2*d, ' '))+message); - else + } else { proxy->log(message); + } } @@ -1915,14 +1936,190 @@ int cvm::replica_comm_send(char* msg_data, int msg_len, int dest_rep) +template std::string _to_str(T const &x, + size_t width, size_t prec) +{ + std::ostringstream os; + if (width) os.width(width); + if (prec) { + os.setf(std::ios::scientific, std::ios::floatfield); + os.precision(prec); + } + os << x; + return os.str(); +} + + +template std::string _to_str_vector(std::vector const &x, + size_t width, size_t prec) +{ + if (!x.size()) return std::string(""); + std::ostringstream os; + if (prec) { + os.setf(std::ios::scientific, std::ios::floatfield); + } + os << "{ "; + if (width) os.width(width); + if (prec) os.precision(prec); + os << x[0]; + for (size_t i = 1; i < x.size(); i++) { + os << ", "; + if (width) os.width(width); + if (prec) os.precision(prec); + os << x[i]; + } + os << " }"; + return os.str(); +} + + + +std::string colvarmodule::to_str(std::string const &x) +{ + return std::string("\"")+x+std::string("\""); +} + +std::string colvarmodule::to_str(char const *x) +{ + return std::string("\"")+std::string(x)+std::string("\""); +} + +std::string colvarmodule::to_str(bool x) +{ + return (x ? "on" : "off"); +} + +std::string colvarmodule::to_str(int const &x, + size_t width, size_t prec) +{ + return _to_str(x, width, prec); +} + +std::string colvarmodule::to_str(size_t const &x, + size_t width, size_t prec) +{ + return _to_str(x, width, prec); +} + +std::string colvarmodule::to_str(long int const &x, + size_t width, size_t prec) +{ + return _to_str(x, width, prec); +} + +std::string colvarmodule::to_str(step_number const &x, + size_t width, size_t prec) +{ + return _to_str(x, width, prec); +} + +std::string colvarmodule::to_str(cvm::real const &x, + size_t width, size_t prec) +{ + return _to_str(x, width, prec); +} + +std::string colvarmodule::to_str(cvm::rvector const &x, + size_t width, size_t prec) +{ + return _to_str(x, width, prec); +} + +std::string colvarmodule::to_str(cvm::quaternion const &x, + size_t width, size_t prec) +{ + return _to_str(x, width, prec); +} + +std::string colvarmodule::to_str(colvarvalue const &x, + size_t width, size_t prec) +{ + return _to_str(x, width, prec); +} + +std::string colvarmodule::to_str(cvm::vector1d const &x, + size_t width, size_t prec) +{ + return _to_str< cvm::vector1d >(x, width, prec); +} + +std::string colvarmodule::to_str(cvm::matrix2d const &x, + size_t width, size_t prec) +{ + return _to_str< cvm::matrix2d >(x, width, prec); +} + + +std::string colvarmodule::to_str(std::vector const &x, + size_t width, size_t prec) +{ + return _to_str_vector(x, width, prec); +} + +std::string colvarmodule::to_str(std::vector const &x, + size_t width, size_t prec) +{ + return _to_str_vector(x, width, prec); +} + +std::string colvarmodule::to_str(std::vector const &x, + size_t width, size_t prec) +{ + return _to_str_vector(x, width, prec); +} + +std::string colvarmodule::to_str(std::vector const &x, + size_t width, size_t prec) +{ + return _to_str_vector(x, width, prec); +} + +std::string colvarmodule::to_str(std::vector const &x, + size_t width, size_t prec) +{ + return _to_str_vector(x, width, prec); +} + +std::string colvarmodule::to_str(std::vector const &x, + size_t width, size_t prec) +{ + return _to_str_vector(x, width, prec); +} + +std::string colvarmodule::to_str(std::vector const &x, + size_t width, size_t prec) +{ + return _to_str_vector(x, width, prec); +} + +std::string colvarmodule::to_str(std::vector const &x, + size_t width, size_t prec) +{ + return _to_str_vector(x, width, prec); +} + + +std::string cvm::wrap_string(std::string const &s, size_t nchars) +{ + if (!s.size()) { + return std::string(nchars, ' '); + } else { + return ( (s.size() <= nchars) ? + (s+std::string(nchars-s.size(), ' ')) : + (std::string(s, 0, nchars)) ); + } +} + + // shared pointer to the proxy object colvarproxy *colvarmodule::proxy = NULL; // static runtime data cvm::real colvarmodule::debug_gradients_step_size = 1.0e-07; int colvarmodule::errorCode = 0; -long colvarmodule::it = 0; -long colvarmodule::it_restart = 0; +int colvarmodule::log_level_ = 10; +cvm::step_number colvarmodule::it = 0; +cvm::step_number colvarmodule::it_restart = 0; size_t colvarmodule::restart_out_freq = 0; size_t colvarmodule::cv_traj_freq = 0; bool colvarmodule::use_scripted_forces = false; diff --git a/lib/colvars/colvarmodule.h b/lib/colvars/colvarmodule.h index 99b797627e..30620a2527 100644 --- a/lib/colvars/colvarmodule.h +++ b/lib/colvars/colvarmodule.h @@ -10,6 +10,8 @@ #ifndef COLVARMODULE_H #define COLVARMODULE_H +#include + #include "colvars_version.h" #ifndef COLVARS_DEBUG @@ -55,6 +57,7 @@ class colvar; class colvarbias; class colvarproxy; class colvarscript; +class colvarvalue; /// \brief Collective variables module (main class) @@ -88,10 +91,16 @@ public: // TODO colvarscript should be unaware of colvarmodule's internals friend class colvarscript; + /// Use a 64-bit integer to store the step number + typedef long long step_number; + /// Defining an abstract real number allows to switch precision typedef double real; - /// Override std::pow with a product for n integer + + // Math functions + + /// Override the STL pow() with a product for n integer static inline real integer_power(real const &x, int const n) { // Original code: math_special.h in LAMMPS @@ -105,8 +114,68 @@ public: return (n > 0) ? yy : 1.0/yy; } - /// Residue identifier - typedef int residue_id; + /// Reimplemented to work around MS compiler issues + static inline real pow(real const &x, real const &y) + { + return ::pow(static_cast(x), static_cast(y)); + } + + /// Reimplemented to work around MS compiler issues + static inline real floor(real const &x) + { + return ::floor(static_cast(x)); + } + + /// Reimplemented to work around MS compiler issues + static inline real fabs(real const &x) + { + return ::fabs(static_cast(x)); + } + + /// Reimplemented to work around MS compiler issues + static inline real sqrt(real const &x) + { + return ::sqrt(static_cast(x)); + } + + /// Reimplemented to work around MS compiler issues + static inline real sin(real const &x) + { + return ::sin(static_cast(x)); + } + + /// Reimplemented to work around MS compiler issues + static inline real cos(real const &x) + { + return ::cos(static_cast(x)); + } + + /// Reimplemented to work around MS compiler issues + static inline real acos(real const &x) + { + return ::acos(static_cast(x)); + } + + /// Reimplemented to work around MS compiler issues + static inline real atan2(real const &x, real const &y) + { + return ::atan2(static_cast(x), static_cast(y)); + } + + /// Reimplemented to work around MS compiler issues + static inline real exp(real const &x) + { + return ::exp(static_cast(x)); + } + + /// Reimplemented to work around MS compiler issues. Note: log() is + /// currently defined as the text logging function, but this can be changed + /// at a later time + static inline real logn(real const &x) + { + return ::log(static_cast(x)); + } + class rvector; template class vector1d; @@ -114,6 +183,10 @@ public: class quaternion; class rotation; + + /// Residue identifier + typedef int residue_id; + /// \brief Atom position (different type name from rvector, to make /// possible future PBC-transparent implementations) typedef rvector atom_pos; @@ -150,19 +223,19 @@ public: /// Current step number - static long it; + static step_number it; /// Starting step number for this run - static long it_restart; + static step_number it_restart; /// Return the current step number from the beginning of this run - static inline long step_relative() + static inline step_number step_relative() { return it - it_restart; } /// Return the current step number from the beginning of the whole /// calculation - static inline long step_absolute() + static inline step_number step_absolute() { return it; } @@ -203,9 +276,10 @@ private: std::vector named_atom_groups; public: /// Register a named atom group into named_atom_groups - inline void register_named_atom_group(atom_group * ag) { - named_atom_groups.push_back(ag); - } + void register_named_atom_group(atom_group *ag); + + /// Remove a named atom group from named_atom_groups + void unregister_named_atom_group(atom_group *ag); /// Array of collective variables std::vector *variables(); @@ -254,8 +328,7 @@ public: /// \brief How many objects are configured yet? size_t size() const; - /// \brief Constructor \param config_name Configuration file name - /// \param restart_name (optional) Restart file name + /// \brief Constructor colvarmodule(colvarproxy *proxy); /// Destructor @@ -265,6 +338,7 @@ public: int reset(); /// Open a config file, load its contents, and pass it to config_string() + /// \param config_file_name Configuration file name int read_config_file(char const *config_file_name); /// \brief Parse a config string assuming it is a complete configuration @@ -431,26 +505,92 @@ public: long traj_read_begin, long traj_read_end); - /// Quick conversion of an object to a string - template static std::string to_str(T const &x, - size_t const &width = 0, - size_t const &prec = 0); - /// Quick conversion of a vector of objects to a string - template static std::string to_str(std::vector const &x, - size_t const &width = 0, - size_t const &prec = 0); + /// Convert to string for output purposes + static std::string to_str(char const *s); + + /// Convert to string for output purposes + static std::string to_str(std::string const &s); + + /// Convert to string for output purposes + static std::string to_str(bool x); + + /// Convert to string for output purposes + static std::string to_str(int const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(size_t const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(long int const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(step_number const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(real const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(rvector const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(quaternion const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(colvarvalue const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(vector1d const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(matrix2d const &x, + size_t width = 0, size_t prec = 0); + + + /// Convert to string for output purposes + static std::string to_str(std::vector const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(std::vector const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(std::vector const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(std::vector const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(std::vector const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(std::vector const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(std::vector const &x, + size_t width = 0, size_t prec = 0); + + /// Convert to string for output purposes + static std::string to_str(std::vector const &x, + size_t width = 0, size_t prec = 0); + /// Reduce the number of characters in a string - static inline std::string wrap_string(std::string const &s, - size_t const &nchars) - { - if (!s.size()) - return std::string(nchars, ' '); - else - return ( (s.size() <= size_t(nchars)) ? - (s+std::string(nchars-s.size(), ' ')) : - (std::string(s, 0, nchars)) ); - } + static std::string wrap_string(std::string const &s, + size_t nchars); /// Number of characters to represent a time step static size_t const it_width; @@ -485,7 +625,9 @@ public: static void request_total_force(); /// Print a message to the main log - static void log(std::string const &message); + /// \param message Message to print + /// \param min_log_level Only print if cvm::log_level() >= min_log_level + static void log(std::string const &message, int min_log_level = 10); /// Print a message to the main log and exit with error code static int fatal_error(std::string const &message); @@ -493,6 +635,50 @@ public: /// Print a message to the main log and set global error code static int error(std::string const &message, int code = COLVARS_ERROR); +private: + + /// Level of logging requested by the user + static int log_level_; + +public: + + /// Level of logging requested by the user + static inline int log_level() + { + return log_level_; + } + + /// Level at which initialization messages are logged + static inline int log_init_messages() + { + return 1; + } + + /// Level at which a keyword's user-provided value is logged + static inline int log_user_params() + { + return 2; + } + + /// Level at which a keyword's default value is logged + static inline int log_default_params() + { + return 3; + } + + /// Level at which output-file operations are logged + static inline int log_output_files() + { + return 4; + } + + /// Level at which input-file operations (configuration, state) are logged + static inline int log_input_files() + { + return 5; + } + + // Replica exchange commands. static bool replica_enabled(); static int replica_index(); @@ -630,41 +816,4 @@ std::ostream & operator << (std::ostream &os, cvm::rvector const &v); std::istream & operator >> (std::istream &is, cvm::rvector &v); -template std::string cvm::to_str(T const &x, - size_t const &width, - size_t const &prec) { - std::ostringstream os; - if (width) os.width(width); - if (prec) { - os.setf(std::ios::scientific, std::ios::floatfield); - os.precision(prec); - } - os << x; - return os.str(); -} - - -template std::string cvm::to_str(std::vector const &x, - size_t const &width, - size_t const &prec) { - if (!x.size()) return std::string(""); - std::ostringstream os; - if (prec) { - os.setf(std::ios::scientific, std::ios::floatfield); - } - os << "{ "; - if (width) os.width(width); - if (prec) os.precision(prec); - os << x[0]; - for (size_t i = 1; i < x.size(); i++) { - os << ", "; - if (width) os.width(width); - if (prec) os.precision(prec); - os << x[i]; - } - os << " }"; - return os.str(); -} - - #endif diff --git a/lib/colvars/colvarparse.cpp b/lib/colvars/colvarparse.cpp index d8b3a359cd..10dce911ee 100644 --- a/lib/colvars/colvarparse.cpp +++ b/lib/colvars/colvarparse.cpp @@ -10,6 +10,7 @@ #include #include +#include #include "colvarmodule.h" #include "colvarvalue.h" @@ -20,15 +21,21 @@ char const * const colvarparse::white_space = " \t"; -// definition of single-value keyword parsers +namespace { -template bool colvarparse::_get_keyval_scalar_(std::string const &conf, - char const *key, - TYPE &value, - TYPE const &def_value, - Parse_Mode const parse_mode) + // Avoid having to put the bool assignment in the template :-( + void set_bool(void *p, bool val) + { + bool *v = reinterpret_cast(p); + *v = val; + } + +} + + +bool colvarparse::get_key_string_value(std::string const &conf, + char const *key, std::string &data) { - std::string data; bool b_found = false, b_found_any = false; size_t save_pos = 0, found_count = 0; @@ -48,29 +55,163 @@ template bool colvarparse::_get_keyval_scalar_(std::string const std::string(key)+"\".\n", INPUT_ERROR); } + return b_found_any; +} + + +template +void colvarparse::mark_key_set_user(std::string const &key_str, + TYPE const &value, + Parse_Mode const &parse_mode) +{ + key_set_modes[to_lower_cppstr(key_str)] = key_set_user; + if (parse_mode & parse_echo) { + cvm::log("# "+key_str+" = "+cvm::to_str(value)+"\n", + cvm::log_user_params()); + } +} + + +template +void colvarparse::mark_key_set_default(std::string const &key_str, + TYPE const &def_value, + Parse_Mode const &parse_mode) +{ + key_set_modes[to_lower_cppstr(key_str)] = key_set_default; + if (parse_mode & parse_echo_default) { + cvm::log("# "+key_str+" = "+cvm::to_str(def_value)+ + " [default]\n", cvm::log_default_params()); + } +} + + +void colvarparse::error_key_required(std::string const &key_str, + Parse_Mode const &parse_mode) +{ + if (key_already_set(key_str)) { + return; + } + if (parse_mode & parse_restart) { + cvm::error("Error: keyword \""+key_str+ + "\" is missing from the restart.\n", INPUT_ERROR); + } else { + cvm::error("Error: keyword \""+key_str+ + "\" is required.\n", INPUT_ERROR); + } +} + + +template +int colvarparse::_get_keyval_scalar_value_(std::string const &key_str, + std::string const &data, + TYPE &value, + TYPE const &def_value) +{ + std::istringstream is(data); + size_t value_count = 0; + TYPE x(def_value); + + while (is >> x) { + value = x; + value_count++; + } + + if (value_count == 0) { + return cvm::error("Error: in parsing \""+ + key_str+"\".\n", INPUT_ERROR); + } + + if (value_count > 1) { + return cvm::error("Error: multiple values " + "are not allowed for keyword \""+ + key_str+"\".\n", INPUT_ERROR); + } + + return COLVARS_OK; +} + + +template<> +int colvarparse::_get_keyval_scalar_value_(std::string const &key_str, + std::string const &data, + bool &value, + bool const &def_value) +{ + if ( (data == std::string("on")) || + (data == std::string("yes")) || + (data == std::string("true")) ) { + set_bool(reinterpret_cast(&value), true); + } else if ( (data == std::string("off")) || + (data == std::string("no")) || + (data == std::string("false")) ) { + set_bool(reinterpret_cast(&value), false); + } else { + return cvm::error("Error: boolean values only are allowed " + "for \""+key_str+"\".\n", INPUT_ERROR); + } + return COLVARS_OK; +} + + +template +int colvarparse::_get_keyval_scalar_novalue_(std::string const &key_str, + TYPE &value, + Parse_Mode const &parse_mode) +{ + return cvm::error("Error: improper or missing value " + "for \""+key_str+"\".\n", INPUT_ERROR); +} + +template<> +int colvarparse::_get_keyval_scalar_novalue_(std::string const &key_str, + bool &value, + Parse_Mode const &parse_mode) +{ + set_bool(reinterpret_cast(&value), true); + mark_key_set_user(key_str, value, parse_mode); + return COLVARS_OK; +} + + +template +bool colvarparse::_get_keyval_scalar_(std::string const &conf, + char const *key, + TYPE &value, + TYPE const &def_value, + Parse_Mode const &parse_mode) +{ + std::string const key_str(key); + + std::string data; + bool const b_found_any = get_key_string_value(conf, key, data); + if (data.size()) { - std::istringstream is(data); - TYPE x(def_value); - if (is >> x) { - value = x; + + _get_keyval_scalar_value_(key_str, data, value, def_value); + + mark_key_set_user(key_str, value, parse_mode); + + } else { // No string value + + if (b_found_any) { + + _get_keyval_scalar_novalue_(key_str, value, parse_mode); + } else { - cvm::error("Error: in parsing \""+ - std::string(key)+"\".\n", INPUT_ERROR); - } - if (parse_mode != parse_silent) { - cvm::log("# "+std::string(key)+" = "+ - cvm::to_str(value)+"\n"); - } - } else { - if (b_found_any) { - cvm::error("Error: improper or missing value " - "for \""+std::string(key)+"\".\n", INPUT_ERROR); - } - value = def_value; - if (parse_mode != parse_silent) { - cvm::log("# "+std::string(key)+" = "+ - cvm::to_str(def_value)+" [default]\n"); + if (parse_mode & parse_required) { + if (cvm::debug()) { + cvm::log("get_keyval, parse_required = "+cvm::to_str(parse_mode & parse_required)+ + "\n"); + } + error_key_required(key_str, parse_mode); + return false; + } + + if ( (parse_mode & parse_override) || !(key_already_set(key)) ) { + value = def_value; + mark_key_set_default(key_str, value, parse_mode); + } } } @@ -78,96 +219,17 @@ template bool colvarparse::_get_keyval_scalar_(std::string const } -bool colvarparse::_get_keyval_scalar_string_(std::string const &conf, - char const *key, - std::string &value, - std::string const &def_value, - Parse_Mode const parse_mode) +template +bool colvarparse::_get_keyval_vector_(std::string const &conf, + char const *key, + std::vector &values, + std::vector const &def_values, + Parse_Mode const &parse_mode) { + std::string const key_str(key); + std::string data; - bool b_found = false, b_found_any = false; - size_t save_pos = 0, found_count = 0; - - do { - std::string data_this = ""; - b_found = key_lookup(conf, key, &data_this, &save_pos); - if (b_found) { - if (!b_found_any) - b_found_any = true; - found_count++; - data = data_this; - } - } while (b_found); - - if (found_count > 1) { - cvm::error("Error: found more than one instance of \""+ - std::string(key)+"\".\n", INPUT_ERROR); - } - - if (data.size()) { - std::istringstream is(data); - size_t data_count = 0; - std::string x(def_value); - while (is >> x) { - value = x; - data_count++; - } - if (data_count == 0) - cvm::error("Error: in parsing \""+ - std::string(key)+"\".\n", INPUT_ERROR); - if (data_count > 1) { - cvm::error("Error: multiple values " - "are not allowed for keyword \""+ - std::string(key)+"\".\n", INPUT_ERROR); - } - if (parse_mode != parse_silent) { - cvm::log("# "+std::string(key)+" = \""+ - cvm::to_str(value)+"\"\n"); - } - } else { - - if (b_found_any) { - cvm::error("Error: improper or missing value " - "for \""+std::string(key)+"\".\n", INPUT_ERROR); - } - value = def_value; - if (parse_mode != parse_silent) { - cvm::log("# "+std::string(key)+" = \""+ - cvm::to_str(def_value)+"\" [default]\n"); - } - } - - return b_found_any; -} - - -// multiple-value keyword parsers - -template bool colvarparse::_get_keyval_vector_(std::string const &conf, - char const *key, - std::vector &values, - std::vector const &def_values, - Parse_Mode const parse_mode) -{ - std::string data; - bool b_found = false, b_found_any = false; - size_t save_pos = 0, found_count = 0; - - do { - std::string data_this = ""; - b_found = key_lookup(conf, key, &data_this, &save_pos); - if (b_found) { - if (!b_found_any) - b_found_any = true; - found_count++; - data = data_this; - } - } while (b_found); - - if (found_count > 1) { - cvm::error("Error: found more than one instance of \""+ - std::string(key)+"\".\n", INPUT_ERROR); - } + bool const b_found_any = get_key_string_value(conf, key, data); if (data.size()) { std::istringstream is(data); @@ -175,10 +237,11 @@ template bool colvarparse::_get_keyval_vector_(std::string const if (values.size() == 0) { std::vector x; - if (def_values.size()) + if (def_values.size()) { x = def_values; - else + } else { x.assign(1, TYPE()); + } for (size_t i = 0; ( is >> x[ ((i bool colvarparse::_get_keyval_vector_(std::string const values[i] = x; } else { cvm::error("Error: in parsing \""+ - std::string(key)+"\".\n", INPUT_ERROR); + key_str+"\".\n", INPUT_ERROR); } } } - if (parse_mode != parse_silent) { - cvm::log("# "+std::string(key)+" = "+ - cvm::to_str(values)+"\n"); - } + mark_key_set_user< std::vector >(key_str, values, parse_mode); } else { if (b_found_any) { cvm::error("Error: improper or missing values for \""+ - std::string(key)+"\".\n", INPUT_ERROR); - } + key_str+"\".\n", INPUT_ERROR); + } else { - for (size_t i = 0; i < values.size(); i++) - values[i] = def_values[ (i > def_values.size()) ? 0 : i ]; + if ((values.size() > 0) && (values.size() != def_values.size())) { + cvm::error("Error: the number of default values for \""+ + key_str+"\" is different from the number of " + "current values.\n", BUG_ERROR); + } + + if (parse_mode & parse_required) { + error_key_required(key_str, parse_mode); + return false; + } + + if ( (parse_mode & parse_override) || !(key_already_set(key)) ) { + for (size_t i = 0; i < values.size(); i++) { + values[i] = def_values[i]; + } + mark_key_set_default< std::vector >(key_str, def_values, + parse_mode); + } - if (parse_mode != parse_silent) { - cvm::log("# "+std::string(key)+" = "+ - cvm::to_str(def_values)+" [default]\n"); } } @@ -255,13 +328,22 @@ bool colvarparse::get_keyval(std::string const &conf, return _get_keyval_scalar_(conf, key, value, def_value, parse_mode); } +bool colvarparse::get_keyval(std::string const &conf, + char const *key, + cvm::step_number &value, + cvm::step_number const &def_value, + Parse_Mode const parse_mode) +{ + return _get_keyval_scalar_(conf, key, value, def_value, parse_mode); +} + bool colvarparse::get_keyval(std::string const &conf, char const *key, std::string &value, std::string const &def_value, Parse_Mode const parse_mode) { - return _get_keyval_scalar_string_(conf, key, value, def_value, parse_mode); + return _get_keyval_scalar_(conf, key, value, def_value, parse_mode); } bool colvarparse::get_keyval(std::string const &conf, @@ -300,66 +382,13 @@ bool colvarparse::get_keyval(std::string const &conf, return _get_keyval_scalar_(conf, key, value, def_value, parse_mode); } - bool colvarparse::get_keyval(std::string const &conf, char const *key, bool &value, bool const &def_value, Parse_Mode const parse_mode) { - std::string data; - bool b_found = false, b_found_any = false; - size_t save_pos = 0, found_count = 0; - - do { - std::string data_this = ""; - b_found = key_lookup(conf, key, &data_this, &save_pos); - if (b_found) { - if (!b_found_any) - b_found_any = true; - found_count++; - data = data_this; - } - } while (b_found); - - if (found_count > 1) { - cvm::error("Error: found more than one instance of \""+ - std::string(key)+"\".\n", INPUT_ERROR); - } - - if (data.size()) { - if ( (data == std::string("on")) || - (data == std::string("yes")) || - (data == std::string("true")) ) { - value = true; - } else if ( (data == std::string("off")) || - (data == std::string("no")) || - (data == std::string("false")) ) { - value = false; - } else - cvm::error("Error: boolean values only are allowed " - "for \""+std::string(key)+"\".\n", INPUT_ERROR); - if (parse_mode != parse_silent) { - cvm::log("# "+std::string(key)+" = "+ - (value ? "on" : "off")+"\n"); - } - } else { - - if (b_found_any) { - if (parse_mode != parse_silent) { - cvm::log("# "+std::string(key)+" = on\n"); - } - value = true; - } else { - value = def_value; - if (parse_mode != parse_silent) { - cvm::log("# "+std::string(key)+" = "+ - (def_value ? "on" : "off")+" [default]\n"); - } - } - } - - return b_found_any; + return _get_keyval_scalar_(conf, key, value, def_value, parse_mode); } @@ -440,15 +469,27 @@ bool colvarparse::get_keyval(std::string const &conf, void colvarparse::add_keyword(char const *key) { - for (std::list::iterator ki = allowed_keywords.begin(); - ki != allowed_keywords.end(); ki++) { - if (to_lower_cppstr(std::string(key)) == *ki) - return; + std::string const key_str_lower(to_lower_cppstr(std::string(key))); + + if (key_set_modes.find(key_str_lower) != key_set_modes.end()) { + return; } - // not found in the list - // if (cvm::debug()) - // cvm::log("Registering a new keyword, \""+std::string (key)+"\".\n"); - allowed_keywords.push_back(to_lower_cppstr(std::string(key))); + + key_set_modes[key_str_lower] = key_not_set; + + allowed_keywords.push_back(key_str_lower); +} + + +bool colvarparse::key_already_set(std::string const &key_str) +{ + std::string const key_str_lower(to_lower_cppstr(key_str)); + + if (key_set_modes.find(key_str_lower) == key_set_modes.end()) { + return false; + } + + return (key_set_modes[key_str_lower] > 0); } @@ -457,6 +498,10 @@ void colvarparse::strip_values(std::string &conf) size_t offset = 0; data_begin_pos.sort(); data_end_pos.sort(); + std::list::iterator data_begin_pos_last = std::unique(data_begin_pos.begin(), data_begin_pos.end()); + data_begin_pos.erase(data_begin_pos_last, data_begin_pos.end()); + std::list::iterator data_end_pos_last = std::unique(data_end_pos.begin(), data_end_pos.end()); + data_end_pos.erase(data_end_pos_last, data_end_pos.end()); std::list::iterator data_begin = data_begin_pos.begin(); std::list::iterator data_end = data_end_pos.begin(); @@ -464,28 +509,16 @@ void colvarparse::strip_values(std::string &conf) for ( ; (data_begin != data_begin_pos.end()) && (data_end != data_end_pos.end()) ; data_begin++, data_end++) { - - // std::cerr << "data_begin, data_end " - // << *data_begin << ", " << *data_end - // << "\n"; - size_t const nchars = *data_end-*data_begin; - - // std::cerr << "conf[data_begin:data_end] = \"" - // << std::string (conf, *data_begin - offset, nchars) - // << "\"\n"; - conf.erase(*data_begin - offset, nchars); offset += nchars; - - // std::cerr << ("Stripped config = \"\n"+conf+"\"\n"); - } } void colvarparse::clear_keyword_registry() { + key_set_modes.clear(); allowed_keywords.clear(); data_begin_pos.clear(); data_end_pos.clear(); diff --git a/lib/colvars/colvarparse.h b/lib/colvars/colvarparse.h index 28ad3c052b..8501ee8c14 100644 --- a/lib/colvars/colvarparse.h +++ b/lib/colvars/colvarparse.h @@ -12,6 +12,7 @@ #include #include +#include #include "colvarmodule.h" #include "colvarvalue.h" @@ -24,35 +25,9 @@ /// need to parse input inherit from this class colvarparse { -protected: - - /// \brief List of legal keywords for this object: this is updated - /// by each call to colvarparse::get_keyval() or - /// colvarparse::key_lookup() - std::list allowed_keywords; - - /// \brief List of delimiters for the values of each keyword in the - /// configuration string; all keywords will be stripped of their - /// values before the keyword check is performed - std::list data_begin_pos; - - /// \brief List of delimiters for the values of each keyword in the - /// configuration string; all keywords will be stripped of their - /// values before the keyword check is performed - std::list data_end_pos; - - /// \brief Add a new valid keyword to the list - void add_keyword(char const *key); - - /// \brief Remove all the values from the config string - void strip_values(std::string &conf); - - /// \brief Configuration string of the object (includes comments) - std::string config_string; - public: - + /// Default constructor inline colvarparse() { init(); @@ -88,14 +63,23 @@ public: /// How a keyword is parsed in a string enum Parse_Mode { - /// \brief(default) Read the first instance of a keyword (if - /// any), report its value, and print a warning when there is more - /// than one - parse_normal, - /// \brief Like parse_normal, but don't send any message to the log - /// (useful e.g. in restart files when such messages are very - /// numerous and redundant) - parse_silent + /// Zero for all flags + parse_null = 0, + /// Print the value of a keyword if it is given + parse_echo = (1<<1), + /// Print the default value of a keyword, if it is NOT given + parse_echo_default = (1<<2), + /// Do not print the keyword + parse_silent = 0, + /// Raise error if the keyword is not provided + parse_required = (1<<16), + /// Successive calls to get_keyval() will override the previous values + /// when the keyword is not given any more + parse_override = (1<<17), + /// The call is being executed from a read_restart() function + parse_restart = (1<<18), + /// Alias for old default behavior (should be phased out) + parse_normal = (1<<2) | (1<<1) | (1<<17) }; /// \brief Check that all the keywords within "conf" are in the list @@ -146,6 +130,11 @@ public: long &value, long const &def_value = 0, Parse_Mode const parse_mode = parse_normal); + bool get_keyval(std::string const &conf, + char const *key, + cvm::step_number &value, + cvm::step_number const &def_value = 0, + Parse_Mode const parse_mode = parse_normal); bool get_keyval(std::string const &conf, char const *key, std::string &value, @@ -219,23 +208,57 @@ public: protected: - // Templates - template bool _get_keyval_scalar_(std::string const &conf, - char const *key, - TYPE &value, - TYPE const &def_value, - Parse_Mode const parse_mode); - bool _get_keyval_scalar_string_(std::string const &conf, - char const *key, - std::string &value, - std::string const &def_value, - Parse_Mode const parse_mode); + /// Get the string value of a keyword, and save it for later parsing + bool get_key_string_value(std::string const &conf, + char const *key, std::string &data); - template bool _get_keyval_vector_(std::string const &conf, - char const *key, - std::vector &values, - std::vector const &def_values, - Parse_Mode const parse_mode); + /// Template for single-value keyword parsers + template + bool _get_keyval_scalar_(std::string const &conf, + char const *key, + TYPE &value, + TYPE const &def_value, + Parse_Mode const &parse_mode); + + /// Template for multiple-value keyword parsers + template + bool _get_keyval_vector_(std::string const &conf, + char const *key, + std::vector &values, + std::vector const &def_values, + Parse_Mode const &parse_mode); + + /// Extract the value of a variable from a string + template + int _get_keyval_scalar_value_(std::string const &key_str, + std::string const &data, + TYPE &value, + TYPE const &def_value); + + /// Handle the case where the user provides a keyword without value + template + int _get_keyval_scalar_novalue_(std::string const &key_str, + TYPE &value, + Parse_Mode const &parse_mode); + + /// Record that the keyword has just been user-defined + template + void mark_key_set_user(std::string const &key_str, + TYPE const &value, + Parse_Mode const &parse_mode); + + /// Record that the keyword has just been set to its default value + template + void mark_key_set_default(std::string const &key_str, + TYPE const &def_value, + Parse_Mode const &parse_mode); + + /// Raise error condition due to the keyword being required! + void error_key_required(std::string const &key_str, + Parse_Mode const &parse_mode); + + /// True if the keyword has been set already + bool key_already_set(std::string const &key_str); public: @@ -286,7 +309,7 @@ public: size_t *save_pos = NULL); /// \brief Reads a configuration line, adds it to config_string, and returns - /// the stream \param is Input stream \param s String that will hold the + /// the stream \param is Input stream \param line String that will hold the /// configuration line, with comments stripped std::istream & read_config_line(std::istream &is, std::string &line); @@ -299,7 +322,51 @@ public: /// from this position static int check_braces(std::string const &conf, size_t const start_pos); +protected: + + /// \brief List of legal keywords for this object: this is updated + /// by each call to colvarparse::get_keyval() or + /// colvarparse::key_lookup() + std::list allowed_keywords; + + /// How a keyword has been set + enum key_set_mode { + key_not_set = 0, + key_set_user = 1, + key_set_default = 2 + }; + + /// Track which keywords have been already set, and how + std::map key_set_modes; + + /// \brief List of delimiters for the values of each keyword in the + /// configuration string; all keywords will be stripped of their + /// values before the keyword check is performed + std::list data_begin_pos; + + /// \brief List of delimiters for the values of each keyword in the + /// configuration string; all keywords will be stripped of their + /// values before the keyword check is performed + std::list data_end_pos; + + /// \brief Add a new valid keyword to the list + void add_keyword(char const *key); + + /// \brief Remove all the values from the config string + void strip_values(std::string &conf); + + /// \brief Configuration string of the object (includes comments) + std::string config_string; + }; +/// Bitwise OR between two Parse_mode flags +inline colvarparse::Parse_Mode operator | (colvarparse::Parse_Mode const &mode1, + colvarparse::Parse_Mode const &mode2) +{ + return static_cast(static_cast(mode1) | + static_cast(mode2)); +} + #endif diff --git a/lib/colvars/colvarproxy.cpp b/lib/colvars/colvarproxy.cpp index da9257eee2..5f8e82d30a 100644 --- a/lib/colvars/colvarproxy.cpp +++ b/lib/colvars/colvarproxy.cpp @@ -60,7 +60,7 @@ bool colvarproxy_system::total_forces_same_step() const inline int round_to_integer(cvm::real x) { - return std::floor(x+0.5); + return cvm::floor(x+0.5); } @@ -129,7 +129,10 @@ cvm::rvector colvarproxy_system::position_distance(cvm::atom_pos const &pos1, -colvarproxy_atoms::colvarproxy_atoms() {} +colvarproxy_atoms::colvarproxy_atoms() +{ + updated_masses_ = updated_charges_ = false; +} colvarproxy_atoms::~colvarproxy_atoms() @@ -544,7 +547,7 @@ int colvarproxy_script::run_colvar_gradient_callback( colvarproxy_tcl::colvarproxy_tcl() { - _tcl_interp = NULL; + tcl_interp_ = NULL; } @@ -573,7 +576,7 @@ char const *colvarproxy_tcl::tcl_obj_to_str(unsigned char *obj) int colvarproxy_tcl::tcl_run_force_callback() { #if defined(COLVARS_TCL) - Tcl_Interp *const tcl_interp = reinterpret_cast(_tcl_interp); + Tcl_Interp *const tcl_interp = reinterpret_cast(tcl_interp_); std::string cmd = std::string("calc_colvar_forces ") + cvm::to_str(cvm::step_absolute()); int err = Tcl_Eval(tcl_interp, cmd.c_str()); @@ -596,7 +599,7 @@ int colvarproxy_tcl::tcl_run_colvar_callback( { #if defined(COLVARS_TCL) - Tcl_Interp *const tcl_interp = reinterpret_cast(_tcl_interp); + Tcl_Interp *const tcl_interp = reinterpret_cast(tcl_interp_); size_t i; std::string cmd = std::string("calc_") + name; for (i = 0; i < cvc_values.size(); i++) { @@ -633,7 +636,7 @@ int colvarproxy_tcl::tcl_run_colvar_gradient_callback( { #if defined(COLVARS_TCL) - Tcl_Interp *const tcl_interp = reinterpret_cast(_tcl_interp); + Tcl_Interp *const tcl_interp = reinterpret_cast(tcl_interp_); size_t i; std::string cmd = std::string("calc_") + name + "_gradient"; for (i = 0; i < cvc_values.size(); i++) { diff --git a/lib/colvars/colvarproxy.h b/lib/colvars/colvarproxy.h index 3ff5f3c697..3bbdfe522e 100644 --- a/lib/colvars/colvarproxy.h +++ b/lib/colvars/colvarproxy.h @@ -29,7 +29,7 @@ /// /// To interface to a new MD engine, the simplest solution is to derive a new /// class from \link colvarproxy \endlink. Currently implemented are: \link -/// colvarproxy_lammps, \endlink, \link colvarproxy_namd, \endlink, \link +/// colvarproxy_lammps \endlink, \link colvarproxy_namd \endlink, \link /// colvarproxy_vmd \endlink. @@ -227,11 +227,15 @@ public: inline std::vector *modify_atom_masses() { + // assume that we are requesting masses to change them + updated_masses_ = true; return &atoms_masses; } inline std::vector *modify_atom_charges() { + // assume that we are requesting charges to change them + updated_charges_ = true; return &atoms_charges; } @@ -250,6 +254,18 @@ public: return &atoms_new_colvar_forces; } + /// Record whether masses have been updated + inline bool updated_masses() const + { + return updated_masses_; + } + + /// Record whether masses have been updated + inline bool updated_charges() const + { + return updated_charges_; + } + protected: /// \brief Array of 0-based integers used to uniquely associate atoms @@ -268,6 +284,9 @@ protected: /// \brief Forces applied from colvars, to be communicated to the MD integrator std::vector atoms_new_colvar_forces; + /// Whether the masses and charges have been updated from the host code + bool updated_masses_, updated_charges_; + /// Used by all init_atom() functions: create a slot for an atom not /// requested yet; returns the index in the arrays int add_atom_slot(int atom_id); @@ -522,7 +541,7 @@ public: protected: /// Pointer to Tcl interpreter object - void *_tcl_interp; + void *tcl_interp_; /// Set Tcl pointers virtual void init_tcl_pointers(); diff --git a/lib/colvars/colvars_version.h b/lib/colvars/colvars_version.h index bd84d077d7..2521fdf872 100644 --- a/lib/colvars/colvars_version.h +++ b/lib/colvars/colvars_version.h @@ -1,5 +1,5 @@ #ifndef COLVARS_VERSION -#define COLVARS_VERSION "2018-11-16" +#define COLVARS_VERSION "2019-04-26" // This file is part of the Collective Variables module (Colvars). // The original version of Colvars and its updates are located at: // https://github.com/colvars/colvars diff --git a/lib/colvars/colvarscript.cpp b/lib/colvars/colvarscript.cpp index c9fe0497a9..1ad3283337 100644 --- a/lib/colvars/colvarscript.cpp +++ b/lib/colvars/colvarscript.cpp @@ -137,6 +137,10 @@ int colvarscript::run(int objc, unsigned char *const objv[]) if (cmd == "update") { error_code |= proxy->update_input(); + if (error_code) { + result += "Error updating the Colvars module.\n"; + return error_code; + } error_code |= colvars->calc(); error_code |= proxy->update_output(); if (error_code) { @@ -273,6 +277,10 @@ int colvarscript::run(int objc, unsigned char *const objv[]) int colvarscript::proc_colvar(colvar *cv, int objc, unsigned char *const objv[]) { + if (objc < 3) { + result = "Missing arguments"; + return COLVARSCRIPT_ERROR; + } std::string const subcmd(obj_to_str(objv[2])); if (subcmd == "value") { @@ -323,6 +331,47 @@ int colvarscript::proc_colvar(colvar *cv, int objc, unsigned char *const objv[]) return COLVARS_OK; } + if (subcmd == "getatomgroups") { + std::vector > lists = cv->get_atom_lists(); + std::vector >::iterator li = lists.begin(); + + for ( ; li != lists.end(); ++li) { + result += "{"; + std::vector::iterator lj = (*li).begin(); + for ( ; lj != (*li).end(); ++lj) { + result += cvm::to_str(*lj); + result += " "; + } + result += "} "; + } + return COLVARS_OK; + } + + if (subcmd == "getatomids") { + std::vector::iterator li = cv->atom_ids.begin(); + + for ( ; li != cv->atom_ids.end(); ++li) { + result += cvm::to_str(*li); + result += " "; + } + return COLVARS_OK; + } + + if (subcmd == "getgradients") { + std::vector::iterator li = cv->atomic_gradients.begin(); + + for ( ; li != cv->atomic_gradients.end(); ++li) { + result += "{"; + int j; + for (j = 0; j < 3; ++j) { + result += cvm::to_str((*li)[j]); + result += " "; + } + result += "} "; + } + return COLVARS_OK; + } + if (subcmd == "getappliedforce") { result = (cv->applied_force()).to_simple_string(); return COLVARS_OK; @@ -410,6 +459,10 @@ int colvarscript::proc_colvar(colvar *cv, int objc, unsigned char *const objv[]) int colvarscript::proc_bias(colvarbias *b, int objc, unsigned char *const objv[]) { + if (objc < 3) { + result = "Missing arguments"; + return COLVARSCRIPT_ERROR; + } std::string const subcmd(obj_to_str(objv[2])); if (subcmd == "energy") { diff --git a/lib/colvars/colvarscript.h b/lib/colvars/colvarscript.h index 313dbd661b..341cb1f72c 100644 --- a/lib/colvars/colvarscript.h +++ b/lib/colvars/colvarscript.h @@ -191,8 +191,9 @@ inline static colvarbias *colvarbias_obj(void *pobj) #ifdef COLVARSCRIPT_CPP #define CVSCRIPT_COMM_FN(COMM,N_ARGS_MIN,N_ARGS_MAX,ARGS,FN_BODY) \ - int CVSCRIPT_COMM_FNAME(COMM)(void *pobj, \ - int objc, unsigned char *const objv[]) \ + extern "C" int CVSCRIPT_COMM_FNAME(COMM)(void *pobj, \ + int objc, \ + unsigned char *const objv[]) \ { \ colvarscript *script = colvarscript_obj(); \ script->clear_results(); \ diff --git a/lib/colvars/colvartypes.cpp b/lib/colvars/colvartypes.cpp index 2b45d77e07..b81a943eab 100644 --- a/lib/colvars/colvartypes.cpp +++ b/lib/colvars/colvartypes.cpp @@ -19,6 +19,8 @@ bool colvarmodule::rotation::monitor_crossings = false; cvm::real colvarmodule::rotation::crossing_threshold = 1.0E-02; +namespace { + /// Numerical recipes diagonalization static int jacobi(cvm::real **a, cvm::real *d, cvm::real **v, int *nrot); @@ -28,6 +30,7 @@ static int eigsrt(cvm::real *d, cvm::real **v); /// Transpose the matrix static int transpose(cvm::real **v); +} std::string cvm::rvector::to_simple_string() const @@ -245,13 +248,11 @@ cvm::quaternion::position_derivative_inner(cvm::rvector const &pos, // Seok C, Dill KA. Using quaternions to calculate RMSD. J Comput // Chem. 25(15):1849-57 (2004) DOI: 10.1002/jcc.20110 PubMed: 15376254 -void colvarmodule::rotation::build_matrix(std::vector const &pos1, - std::vector const &pos2, - cvm::matrix2d &S) +void colvarmodule::rotation::build_correlation_matrix( + std::vector const &pos1, + std::vector const &pos2) { // build the correlation matrix - C.resize(3, 3); - C.reset(); size_t i; for (i = 0; i < pos1.size(); i++) { C.xx() += pos1[i].x * pos2[i].x; @@ -264,7 +265,11 @@ void colvarmodule::rotation::build_matrix(std::vector const &pos1 C.zy() += pos1[i].z * pos2[i].y; C.zz() += pos1[i].z * pos2[i].z; } +} + +void colvarmodule::rotation::compute_overlap_matrix() +{ // build the "overlap" matrix, whose eigenvectors are stationary // points of the RMSD in the space of rotations S[0][0] = C.xx() + C.yy() + C.zz(); @@ -286,37 +291,38 @@ void colvarmodule::rotation::build_matrix(std::vector const &pos1 } -void colvarmodule::rotation::diagonalize_matrix(cvm::matrix2d &S, - cvm::vector1d &S_eigval, - cvm::matrix2d &S_eigvec) +void colvarmodule::rotation::diagonalize_matrix( + cvm::matrix2d &m, + cvm::vector1d &eigval, + cvm::matrix2d &eigvec) { - S_eigval.resize(4); - S_eigval.reset(); - S_eigvec.resize(4,4); - S_eigvec.reset(); + eigval.resize(4); + eigval.reset(); + eigvec.resize(4, 4); + eigvec.reset(); // diagonalize int jac_nrot = 0; - if (jacobi(S.c_array(), S_eigval.c_array(), S_eigvec.c_array(), &jac_nrot) != + if (jacobi(m.c_array(), eigval.c_array(), eigvec.c_array(), &jac_nrot) != COLVARS_OK) { cvm::error("Too many iterations in routine jacobi.\n" "This is usually the result of an ill-defined set of atoms for " "rotational alignment (RMSD, rotateReference, etc).\n"); } - eigsrt(S_eigval.c_array(), S_eigvec.c_array()); + eigsrt(eigval.c_array(), eigvec.c_array()); // jacobi saves eigenvectors by columns - transpose(S_eigvec.c_array()); + transpose(eigvec.c_array()); // normalize eigenvectors for (size_t ie = 0; ie < 4; ie++) { cvm::real norm2 = 0.0; size_t i; for (i = 0; i < 4; i++) { - norm2 += S_eigvec[ie][i] * S_eigvec[ie][i]; + norm2 += eigvec[ie][i] * eigvec[ie][i]; } - cvm::real const norm = std::sqrt(norm2); + cvm::real const norm = cvm::sqrt(norm2); for (i = 0; i < 4; i++) { - S_eigvec[ie][i] /= norm; + eigvec[ie][i] /= norm; } } } @@ -324,23 +330,26 @@ void colvarmodule::rotation::diagonalize_matrix(cvm::matrix2d &S, // Calculate the rotation, plus its derivatives -void colvarmodule::rotation::calc_optimal_rotation(std::vector const &pos1, - std::vector const &pos2) +void colvarmodule::rotation::calc_optimal_rotation( + std::vector const &pos1, + std::vector const &pos2) { - S.resize(4,4); + C.resize(3, 3); + C.reset(); + build_correlation_matrix(pos1, pos2); + + S.resize(4, 4); S.reset(); + compute_overlap_matrix(); - build_matrix(pos1, pos2, S); - - S_backup.resize(4,4); + S_backup.resize(4, 4); S_backup = S; if (b_debug_gradients) { - cvm::log("S = "+cvm::to_str(cvm::to_str(S_backup), cvm::cv_width, cvm::cv_prec)+"\n"); + cvm::log("S = "+cvm::to_str(S_backup, cvm::cv_width, cvm::cv_prec)+"\n"); } diagonalize_matrix(S, S_eigval, S_eigvec); - // eigenvalues and eigenvectors cvm::real const L0 = S_eigval[0]; cvm::real const L1 = S_eigval[1]; @@ -524,7 +533,7 @@ void colvarmodule::rotation::calc_optimal_rotation(std::vector co dq0_2[3][comp] * colvarmodule::debug_gradients_step_size); cvm::log( "|(l_0+dl_0) - l_0^new|/l_0 = "+ - cvm::to_str(std::fabs(L0+DL0 - L0_new)/L0, cvm::cv_width, cvm::cv_prec)+ + cvm::to_str(cvm::fabs(L0+DL0 - L0_new)/L0, cvm::cv_width, cvm::cv_prec)+ ", |(q_0+dq_0) - q_0^new| = "+ cvm::to_str((Q0+DQ0 - Q0_new).norm(), cvm::cv_width, cvm::cv_prec)+ "\n"); @@ -544,6 +553,9 @@ void colvarmodule::rotation::calc_optimal_rotation(std::vector co #define n 4 + +namespace { + int jacobi(cvm::real **a, cvm::real *d, cvm::real **v, int *nrot) { int j,iq,ip,i; @@ -567,7 +579,7 @@ int jacobi(cvm::real **a, cvm::real *d, cvm::real **v, int *nrot) sm=0.0; for (ip=0;ip 4 && (cvm::real)(std::fabs(d[ip])+g) == (cvm::real)std::fabs(d[ip]) - && (cvm::real)(std::fabs(d[iq])+g) == (cvm::real)std::fabs(d[iq])) + g=100.0*cvm::fabs(a[ip][iq]); + if (i > 4 && (cvm::real)(cvm::fabs(d[ip])+g) == (cvm::real)cvm::fabs(d[ip]) + && (cvm::real)(cvm::fabs(d[iq])+g) == (cvm::real)cvm::fabs(d[iq])) a[ip][iq]=0.0; - else if (std::fabs(a[ip][iq]) > tresh) { + else if (cvm::fabs(a[ip][iq]) > tresh) { h=d[iq]-d[ip]; - if ((cvm::real)(std::fabs(h)+g) == (cvm::real)std::fabs(h)) + if ((cvm::real)(cvm::fabs(h)+g) == (cvm::real)cvm::fabs(h)) t=(a[ip][iq])/h; else { theta=0.5*h/(a[ip][iq]); - t=1.0/(std::fabs(theta)+std::sqrt(1.0+theta*theta)); + t=1.0/(cvm::fabs(theta)+cvm::sqrt(1.0+theta*theta)); if (theta < 0.0) t = -t; } - c=1.0/std::sqrt(1+t*t); + c=1.0/cvm::sqrt(1+t*t); s=t*c; tau=s/(1.0+c); h=t*a[ip][iq]; @@ -663,5 +675,7 @@ int transpose(cvm::real **v) return COLVARS_OK; } +} + #undef n #undef ROTATE diff --git a/lib/colvars/colvartypes.h b/lib/colvars/colvartypes.h index 4ef9557dcb..9973d92e98 100644 --- a/lib/colvars/colvartypes.h +++ b/lib/colvars/colvartypes.h @@ -10,7 +10,6 @@ #ifndef COLVARTYPES_H #define COLVARTYPES_H -#include #include #include "colvarmodule.h" @@ -220,7 +219,7 @@ public: inline cvm::real norm() const { - return std::sqrt(this->norm2()); + return cvm::sqrt(this->norm2()); } inline cvm::real sum() const @@ -801,7 +800,7 @@ public: inline cvm::real norm() const { - return std::sqrt(this->norm2()); + return cvm::sqrt(this->norm2()); } inline cvm::rvector unit() const @@ -1008,17 +1007,17 @@ public: cvm::real theta_in, cvm::real psi_in) { - q0 = ( (std::cos(phi_in/2.0)) * (std::cos(theta_in/2.0)) * (std::cos(psi_in/2.0)) + - (std::sin(phi_in/2.0)) * (std::sin(theta_in/2.0)) * (std::sin(psi_in/2.0)) ); + q0 = ( (cvm::cos(phi_in/2.0)) * (cvm::cos(theta_in/2.0)) * (cvm::cos(psi_in/2.0)) + + (cvm::sin(phi_in/2.0)) * (cvm::sin(theta_in/2.0)) * (cvm::sin(psi_in/2.0)) ); - q1 = ( (std::sin(phi_in/2.0)) * (std::cos(theta_in/2.0)) * (std::cos(psi_in/2.0)) - - (std::cos(phi_in/2.0)) * (std::sin(theta_in/2.0)) * (std::sin(psi_in/2.0)) ); + q1 = ( (cvm::sin(phi_in/2.0)) * (cvm::cos(theta_in/2.0)) * (cvm::cos(psi_in/2.0)) - + (cvm::cos(phi_in/2.0)) * (cvm::sin(theta_in/2.0)) * (cvm::sin(psi_in/2.0)) ); - q2 = ( (std::cos(phi_in/2.0)) * (std::sin(theta_in/2.0)) * (std::cos(psi_in/2.0)) + - (std::sin(phi_in/2.0)) * (std::cos(theta_in/2.0)) * (std::sin(psi_in/2.0)) ); + q2 = ( (cvm::cos(phi_in/2.0)) * (cvm::sin(theta_in/2.0)) * (cvm::cos(psi_in/2.0)) + + (cvm::sin(phi_in/2.0)) * (cvm::cos(theta_in/2.0)) * (cvm::sin(psi_in/2.0)) ); - q3 = ( (std::cos(phi_in/2.0)) * (std::cos(theta_in/2.0)) * (std::sin(psi_in/2.0)) - - (std::sin(phi_in/2.0)) * (std::sin(theta_in/2.0)) * (std::cos(psi_in/2.0)) ); + q3 = ( (cvm::cos(phi_in/2.0)) * (cvm::cos(theta_in/2.0)) * (cvm::sin(psi_in/2.0)) - + (cvm::sin(phi_in/2.0)) * (cvm::sin(theta_in/2.0)) * (cvm::cos(psi_in/2.0)) ); } /// \brief Default constructor @@ -1115,7 +1114,7 @@ public: /// Norm of the quaternion inline cvm::real norm() const { - return std::sqrt(this->norm2()); + return cvm::sqrt(this->norm2()); } /// Return the conjugate quaternion @@ -1177,7 +1176,7 @@ public: } /// \brief Provides the quaternion product. \b NOTE: for the inner - /// product use: \code h.inner (q); \endcode + /// product use: `h.inner (q);` friend inline cvm::quaternion operator * (cvm::quaternion const &h, cvm::quaternion const &q) { @@ -1263,7 +1262,7 @@ public: cvm::real const cos_omega = this->q0*Q2.q0 + this->q1*Q2.q1 + this->q2*Q2.q2 + this->q3*Q2.q3; - cvm::real const omega = std::acos( (cos_omega > 1.0) ? 1.0 : + cvm::real const omega = cvm::acos( (cos_omega > 1.0) ? 1.0 : ( (cos_omega < -1.0) ? -1.0 : cos_omega) ); // get the minimum distance: x and -x are the same quaternion @@ -1278,11 +1277,11 @@ public: inline cvm::quaternion dist2_grad(cvm::quaternion const &Q2) const { cvm::real const cos_omega = this->q0*Q2.q0 + this->q1*Q2.q1 + this->q2*Q2.q2 + this->q3*Q2.q3; - cvm::real const omega = std::acos( (cos_omega > 1.0) ? 1.0 : + cvm::real const omega = cvm::acos( (cos_omega > 1.0) ? 1.0 : ( (cos_omega < -1.0) ? -1.0 : cos_omega) ); - cvm::real const sin_omega = std::sin(omega); + cvm::real const sin_omega = cvm::sin(omega); - if (std::fabs(sin_omega) < 1.0E-14) { + if (cvm::fabs(sin_omega) < 1.0E-14) { // return a null 4d vector return cvm::quaternion(0.0, 0.0, 0.0, 0.0); } @@ -1338,14 +1337,16 @@ public: /// \brief Perform gradient tests bool b_debug_gradients; - /// \brief Positions to superimpose: the rotation should brings pos1 - /// into pos2 - std::vector pos1, pos2; - + /// Correlation matrix C (3, 3) cvm::rmatrix C; + /// Overlap matrix S (4, 4) cvm::matrix2d S; + + /// Eigenvalues of S cvm::vector1d S_eigval; + + /// Eigenvectors of S cvm::matrix2d S_eigvec; /// Used for debugging gradients @@ -1404,8 +1405,8 @@ public: : b_debug_gradients(false) { cvm::rvector const axis_n = axis.unit(); - cvm::real const sina = std::sin(angle/2.0); - q = cvm::quaternion(std::cos(angle/2.0), + cvm::real const sina = cvm::sin(angle/2.0); + q = cvm::quaternion(cvm::cos(angle/2.0), sina * axis_n.x, sina * axis_n.y, sina * axis_n.z); } @@ -1437,7 +1438,7 @@ public: inline cvm::real spin_angle(cvm::rvector const &axis) const { cvm::rvector const q_vec = q.get_vector(); - cvm::real alpha = (180.0/PI) * 2.0 * std::atan2(axis * q_vec, q.q0); + cvm::real alpha = (180.0/PI) * 2.0 * cvm::atan2(axis * q_vec, q.q0); while (alpha > 180.0) alpha -= 360; while (alpha < -180.0) alpha += 360; return alpha; @@ -1473,9 +1474,9 @@ public: { cvm::rvector const q_vec = q.get_vector(); cvm::real const alpha = - (180.0/PI) * 2.0 * std::atan2(axis * q_vec, q.q0); + (180.0/PI) * 2.0 * cvm::atan2(axis * q_vec, q.q0); - cvm::real const cos_spin_2 = std::cos(alpha * (PI/180.0) * 0.5); + cvm::real const cos_spin_2 = cvm::cos(alpha * (PI/180.0) * 0.5); cvm::real const cos_theta_2 = ( (cos_spin_2 != 0.0) ? (q.q0 / cos_spin_2) : (0.0) ); @@ -1489,7 +1490,7 @@ public: cvm::rvector const q_vec = q.get_vector(); cvm::real const iprod = axis * q_vec; - cvm::real const cos_spin_2 = std::cos(std::atan2(iprod, q.q0)); + cvm::real const cos_spin_2 = cvm::cos(cvm::atan2(iprod, q.q0)); if (q.q0 != 0.0) { @@ -1529,15 +1530,17 @@ protected: /// eigenvalue crossing) cvm::quaternion q_old; - /// Build the overlap matrix S (used by calc_optimal_rotation()) - void build_matrix(std::vector const &pos1, - std::vector const &pos2, - cvm::matrix2d &S); + /// Build the correlation matrix C (used by calc_optimal_rotation()) + void build_correlation_matrix(std::vector const &pos1, + std::vector const &pos2); - /// Diagonalize the overlap matrix S (used by calc_optimal_rotation()) - void diagonalize_matrix(cvm::matrix2d &S, - cvm::vector1d &S_eigval, - cvm::matrix2d &S_eigvec); + /// Compute the overlap matrix S (used by calc_optimal_rotation()) + void compute_overlap_matrix(); + + /// Diagonalize a given matrix m (used by calc_optimal_rotation()) + static void diagonalize_matrix(cvm::matrix2d &m, + cvm::vector1d &eigval, + cvm::matrix2d &eigvec); }; diff --git a/lib/colvars/colvarvalue.cpp b/lib/colvars/colvarvalue.cpp index 86b99ed3d6..accc5defec 100644 --- a/lib/colvars/colvarvalue.cpp +++ b/lib/colvars/colvarvalue.cpp @@ -144,10 +144,10 @@ void colvarvalue::apply_constraints() case colvarvalue::type_quaternionderiv: break; case colvarvalue::type_unit3vector: - rvector_value /= std::sqrt(rvector_value.norm2()); + rvector_value /= cvm::sqrt(rvector_value.norm2()); break; case colvarvalue::type_quaternion: - quaternion_value /= std::sqrt(quaternion_value.norm2()); + quaternion_value /= cvm::sqrt(quaternion_value.norm2()); break; case colvarvalue::type_vector: if (elem_types.size() > 0) { @@ -579,7 +579,7 @@ colvarvalue colvarvalue::dist2_grad(colvarvalue const &x2) const cvm::rvector const &v1 = this->rvector_value; cvm::rvector const &v2 = x2.rvector_value; cvm::real const cos_t = v1 * v2; - cvm::real const sin_t = std::sqrt(1.0 - cos_t*cos_t); + cvm::real const sin_t = cvm::sqrt(1.0 - cos_t*cos_t); return colvarvalue( 2.0 * sin_t * cvm::rvector((-1.0) * sin_t * v2.x + cos_t/sin_t * (v1.x - cos_t*v2.x), @@ -630,7 +630,7 @@ colvarvalue const colvarvalue::interpolate(colvarvalue const &x1, break; case colvarvalue::type_unit3vector: case colvarvalue::type_quaternion: - if (interp.norm()/std::sqrt(d2) < 1.0e-6) { + if (interp.norm()/cvm::sqrt(d2) < 1.0e-6) { cvm::error("Error: interpolation between "+cvm::to_str(x1)+" and "+ cvm::to_str(x2)+" with lambda = "+cvm::to_str(lambda)+ " is undefined: result = "+cvm::to_str(interp)+"\n", diff --git a/lib/colvars/colvarvalue.h b/lib/colvars/colvarvalue.h index 25255e2f7c..29b535a1a8 100644 --- a/lib/colvars/colvarvalue.h +++ b/lib/colvars/colvarvalue.h @@ -17,22 +17,22 @@ /// \brief Value of a collective variable: this is a metatype which /// can be set at runtime. By default it is set to be a scalar /// number, and can be treated as such in all operations (this is -/// done by most \link cvc \endlink implementations). +/// done by most \link colvar::cvc \endlink implementations). /// /// \link colvarvalue \endlink allows \link colvar \endlink to be /// treat different data types. By default, a \link colvarvalue /// \endlink variable is a scalar number. To use it as /// another type, declare and initialize it as -/// \code colvarvalue x(colvarvalue::type_xxx)\endcode, use \link x.type -/// (colvarvalue::type_xxx) \endlink at a later stage, or if unset, -/// assign the type with \code x = y; \endcode, provided y is correctly set. +/// `colvarvalue x(colvarvalue::type_xxx)`, use `x.type (colvarvalue::type_xxx)` +/// at a later stage, or if unset, +/// assign the type with `x = y;`, provided y is correctly set. /// /// All operators (either unary or binary) on a \link /// colvarvalue \endlink object performs one or more checks on the /// \link Type \endlink, except when reading from a stream, when there is no way to -/// detect the \link Type \endlink. To use \code is >> x; \endcode x \b MUST +/// detect the \link Type \endlink. To use `is >> x;` x \b MUST /// already have a type correcly set up for properly parsing the -/// stream. No problem of course with the output streams: \code os << x; \endcode +/// stream. No problem of course with the output streams: `os << x;` /// /// \em Note \em on \em performance: to avoid type checks in a long array of \link /// colvarvalue \endlink objects, use one of the existing "_opt" functions or implement a new one @@ -159,7 +159,7 @@ public: /// \brief If the variable has constraints (e.g. unitvector or /// quaternion), transform it to satisfy them; this function needs /// to be called only when the \link colvarvalue \endlink - /// is calculated outside of \link cvc \endlink objects + /// is calculated outside of \link colvar::cvc \endlink objects void apply_constraints(); /// Get the current type @@ -184,7 +184,7 @@ public: /// Norm of this colvarvalue inline cvm::real norm() const { - return std::sqrt(this->norm2()); + return cvm::sqrt(this->norm2()); } /// Sum of the components of this colvarvalue (if more than one dimension) @@ -728,7 +728,7 @@ inline cvm::real colvarvalue::dist2(colvarvalue const &x2) const case colvarvalue::type_unit3vector: case colvarvalue::type_unit3vectorderiv: // angle between (*this) and x2 is the distance - return std::acos(this->rvector_value * x2.rvector_value) * std::acos(this->rvector_value * x2.rvector_value); + return cvm::acos(this->rvector_value * x2.rvector_value) * cvm::acos(this->rvector_value * x2.rvector_value); case colvarvalue::type_quaternion: case colvarvalue::type_quaternionderiv: // angle between (*this) and x2 is the distance, the quaternion diff --git a/src/USER-COLVARS/colvarproxy_lammps.cpp b/src/USER-COLVARS/colvarproxy_lammps.cpp index ff74602b41..651999f79c 100644 --- a/src/USER-COLVARS/colvarproxy_lammps.cpp +++ b/src/USER-COLVARS/colvarproxy_lammps.cpp @@ -153,18 +153,29 @@ void colvarproxy_lammps::init(const char *conf_file) if (_lmp->update->ntimestep != 0) { cvm::log("Setting initial step number from LAMMPS: "+ cvm::to_str(_lmp->update->ntimestep)+"\n"); - colvars->it = colvars->it_restart = _lmp->update->ntimestep; + colvars->it = colvars->it_restart = + static_cast(_lmp->update->ntimestep); } if (cvm::debug()) { - log("atoms_ids = "+cvm::to_str(atoms_ids)+"\n"); - log("atoms_ncopies = "+cvm::to_str(atoms_ncopies)+"\n"); - log("atoms_positions = "+cvm::to_str(atoms_positions)+"\n"); - log(cvm::line_marker); - log("Info: done initializing the colvars proxy object.\n"); + cvm::log("atoms_ids = "+cvm::to_str(atoms_ids)+"\n"); + cvm::log("atoms_ncopies = "+cvm::to_str(atoms_ncopies)+"\n"); + cvm::log("atoms_positions = "+cvm::to_str(atoms_positions)+"\n"); + cvm::log(cvm::line_marker); + cvm::log("Info: done initializing the colvars proxy object.\n"); } } +void colvarproxy_lammps::add_config_file(const char *conf_file) +{ + colvars->read_config_file(conf_file); +} + +void colvarproxy_lammps::add_config_string(const std::string &conf) +{ + colvars->read_config_string(conf); +} + colvarproxy_lammps::~colvarproxy_lammps() { delete _random; @@ -185,7 +196,7 @@ int colvarproxy_lammps::setup() double colvarproxy_lammps::compute() { if (cvm::debug()) { - log(std::string(cvm::line_marker)+ + cvm::log(std::string(cvm::line_marker)+ "colvarproxy_lammps step no. "+ cvm::to_str(_lmp->update->ntimestep)+" [first - last = "+ cvm::to_str(_lmp->update->beginstep)+" - "+ @@ -238,20 +249,20 @@ double colvarproxy_lammps::compute() bias_energy = 0.0; if (cvm::debug()) { - log("atoms_ids = "+cvm::to_str(atoms_ids)+"\n"); - log("atoms_ncopies = "+cvm::to_str(atoms_ncopies)+"\n"); - log("atoms_positions = "+cvm::to_str(atoms_positions)+"\n"); - log("atoms_new_colvar_forces = "+cvm::to_str(atoms_new_colvar_forces)+"\n"); + cvm::log("atoms_ids = "+cvm::to_str(atoms_ids)+"\n"); + cvm::log("atoms_ncopies = "+cvm::to_str(atoms_ncopies)+"\n"); + cvm::log("atoms_positions = "+cvm::to_str(atoms_positions)+"\n"); + cvm::log("atoms_new_colvar_forces = "+cvm::to_str(atoms_new_colvar_forces)+"\n"); } // call the collective variable module colvars->calc(); if (cvm::debug()) { - log("atoms_ids = "+cvm::to_str(atoms_ids)+"\n"); - log("atoms_ncopies = "+cvm::to_str(atoms_ncopies)+"\n"); - log("atoms_positions = "+cvm::to_str(atoms_positions)+"\n"); - log("atoms_new_colvar_forces = "+cvm::to_str(atoms_new_colvar_forces)+"\n"); + cvm::log("atoms_ids = "+cvm::to_str(atoms_ids)+"\n"); + cvm::log("atoms_ncopies = "+cvm::to_str(atoms_ncopies)+"\n"); + cvm::log("atoms_positions = "+cvm::to_str(atoms_positions)+"\n"); + cvm::log("atoms_new_colvar_forces = "+cvm::to_str(atoms_new_colvar_forces)+"\n"); } return bias_energy; diff --git a/src/USER-COLVARS/colvarproxy_lammps.h b/src/USER-COLVARS/colvarproxy_lammps.h index cdd86cbd16..c3d9dbb35f 100644 --- a/src/USER-COLVARS/colvarproxy_lammps.h +++ b/src/USER-COLVARS/colvarproxy_lammps.h @@ -103,6 +103,11 @@ class colvarproxy_lammps : public colvarproxy { // Write files expected from Colvars (called by post_run()) void write_output_files(); + // read additional config from file + void add_config_file(char const *config_filename); + + // read additional config from string + void add_config_string(const std::string &config); // implementation of pure methods from base class public: diff --git a/src/USER-COLVARS/colvarproxy_lammps_version.h b/src/USER-COLVARS/colvarproxy_lammps_version.h index edd6778c64..0a4f9fdf4f 100644 --- a/src/USER-COLVARS/colvarproxy_lammps_version.h +++ b/src/USER-COLVARS/colvarproxy_lammps_version.h @@ -1,5 +1,5 @@ #ifndef COLVARPROXY_VERSION -#define COLVARPROXY_VERSION "2018-08-29" +#define COLVARPROXY_VERSION "2019-04-09" // This file is part of the Collective Variables module (Colvars). // The original version of Colvars and its updates are located at: // https://github.com/colvars/colvars diff --git a/src/USER-COLVARS/fix_colvars.cpp b/src/USER-COLVARS/fix_colvars.cpp index 545ceb7b0e..ff0e8fb334 100644 --- a/src/USER-COLVARS/fix_colvars.cpp +++ b/src/USER-COLVARS/fix_colvars.cpp @@ -480,6 +480,31 @@ void FixColvars::one_time_init() /* ---------------------------------------------------------------------- */ +int FixColvars::modify_param(int narg, char **arg) +{ + if (strcmp(arg[0],"configfile") == 0) { + if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); + if (me == 0) { + if (! proxy) + error->one(FLERR,"Cannot use fix_modify before initialization"); + proxy->add_config_file(arg[1]); + } + return 2; + } else if (strcmp(arg[0],"config") == 0) { + if (narg < 2) error->all(FLERR,"Illegal fix_modify command"); + if (me == 0) { + if (! proxy) + error->one(FLERR,"Cannot use fix_modify before initialization"); + std::string conf(arg[1]); + proxy->add_config_string(conf); + } + return 2; + } + return 0; +} + +/* ---------------------------------------------------------------------- */ + void FixColvars::setup(int vflag) { const tagint * const tag = atom->tag; diff --git a/src/USER-COLVARS/fix_colvars.h b/src/USER-COLVARS/fix_colvars.h index 3029ba9db5..a0c197fca4 100644 --- a/src/USER-COLVARS/fix_colvars.h +++ b/src/USER-COLVARS/fix_colvars.h @@ -50,6 +50,7 @@ class FixColvars : public Fix { virtual int setmask(); virtual void init(); virtual void setup(int); + virtual int modify_param(int, char **); virtual void min_setup(int vflag) {setup(vflag);}; virtual void min_post_force(int); virtual void post_force(int); From d7da1db745128ed3c10c78d73613f88a8ed6a492 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 1 May 2019 08:20:24 -0400 Subject: [PATCH 104/311] teach CMake that verlet/lrt/intel depends on KSPACE --- cmake/CMakeLists.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index dbbbc7f7ac..63bc168271 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1220,8 +1220,7 @@ if(PKG_USER-INTEL) ${USER-INTEL_SOURCES_DIR}/fix_nh_intel.cpp ${USER-INTEL_SOURCES_DIR}/intel_buffers.cpp ${USER-INTEL_SOURCES_DIR}/nbin_intel.cpp - ${USER-INTEL_SOURCES_DIR}/npair_intel.cpp - ${USER-INTEL_SOURCES_DIR}/verlet_lrt_intel.cpp) + ${USER-INTEL_SOURCES_DIR}/npair_intel.cpp) set_property(GLOBAL PROPERTY "USER-INTEL_SOURCES" "${USER-INTEL_SOURCES}") @@ -1230,9 +1229,12 @@ if(PKG_USER-INTEL) RegisterNBinStyle(${USER-INTEL_SOURCES_DIR}/nbin_intel.h) RegisterNPairStyle(${USER-INTEL_SOURCES_DIR}/npair_intel.h) RegisterFixStyle(${USER-INTEL_SOURCES_DIR}/fix_intel.h) - RegisterIntegrateStyle(${USER-INTEL_SOURCES_DIR}/verlet_lrt_intel.h) get_property(USER-INTEL_SOURCES GLOBAL PROPERTY USER-INTEL_SOURCES) + if(PKG_KSPACE) + list(APPEND USER-INTEL_SOURCES ${USER-INTEL_SOURCES_DIR}/verlet_lrt_intel.cpp) + RegisterIntegrateStyle(${USER-INTEL_SOURCES_DIR}/verlet_lrt_intel.h) + endif() list(APPEND LIB_SOURCES ${USER-INTEL_SOURCES}) include_directories(${USER-INTEL_SOURCES_DIR}) From d7dd78126c6423d6ecbdec7a93f505272fcbe0b3 Mon Sep 17 00:00:00 2001 From: Oliver Henrich Date: Thu, 2 May 2019 16:48:41 +0100 Subject: [PATCH 105/311] Homogenised label of relative hbond and stk strength to conform with oxDNA literature --- src/USER-CGDNA/pair_oxdna2_coaxstk.cpp | 2 +- src/USER-CGDNA/pair_oxdna2_dh.cpp | 4 ++-- src/USER-CGDNA/pair_oxdna_coaxstk.cpp | 2 +- src/USER-CGDNA/pair_oxdna_hbond.cpp | 12 ++++++------ src/USER-CGDNA/pair_oxdna_stk.cpp | 12 ++++++------ src/USER-CGDNA/pair_oxdna_xstk.cpp | 2 +- 6 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/USER-CGDNA/pair_oxdna2_coaxstk.cpp b/src/USER-CGDNA/pair_oxdna2_coaxstk.cpp index f54197aea7..dfea97f0bf 100644 --- a/src/USER-CGDNA/pair_oxdna2_coaxstk.cpp +++ b/src/USER-CGDNA/pair_oxdna2_coaxstk.cpp @@ -62,9 +62,9 @@ PairOxdna2Coaxstk::~PairOxdna2Coaxstk() memory->destroy(cut_cxst_hi); memory->destroy(cut_cxst_lc); memory->destroy(cut_cxst_hc); + memory->destroy(cutsq_cxst_hc); memory->destroy(b_cxst_lo); memory->destroy(b_cxst_hi); - memory->destroy(cutsq_cxst_hc); memory->destroy(a_cxst1); memory->destroy(theta_cxst1_0); diff --git a/src/USER-CGDNA/pair_oxdna2_dh.cpp b/src/USER-CGDNA/pair_oxdna2_dh.cpp index 10e7121427..b4afad12db 100644 --- a/src/USER-CGDNA/pair_oxdna2_dh.cpp +++ b/src/USER-CGDNA/pair_oxdna2_dh.cpp @@ -225,8 +225,8 @@ void PairOxdna2Dh::compute(int eflag, int vflag) // increment energy and virial - if (evflag) ev_tally(a,b,nlocal,newton_pair, - evdwl,0.0,fpair,delr[0],delr[1],delr[2]); + if (evflag) ev_tally(a,b,nlocal,newton_pair, + evdwl,0.0,fpair,delr[0],delr[1],delr[2]); } } diff --git a/src/USER-CGDNA/pair_oxdna_coaxstk.cpp b/src/USER-CGDNA/pair_oxdna_coaxstk.cpp index 6d3061620d..6f3fa4fa4e 100644 --- a/src/USER-CGDNA/pair_oxdna_coaxstk.cpp +++ b/src/USER-CGDNA/pair_oxdna_coaxstk.cpp @@ -62,9 +62,9 @@ PairOxdnaCoaxstk::~PairOxdnaCoaxstk() memory->destroy(cut_cxst_hi); memory->destroy(cut_cxst_lc); memory->destroy(cut_cxst_hc); + memory->destroy(cutsq_cxst_hc); memory->destroy(b_cxst_lo); memory->destroy(b_cxst_hi); - memory->destroy(cutsq_cxst_hc); memory->destroy(a_cxst1); memory->destroy(theta_cxst1_0); diff --git a/src/USER-CGDNA/pair_oxdna_hbond.cpp b/src/USER-CGDNA/pair_oxdna_hbond.cpp index d2aa236a05..8cd28f10c8 100644 --- a/src/USER-CGDNA/pair_oxdna_hbond.cpp +++ b/src/USER-CGDNA/pair_oxdna_hbond.cpp @@ -40,7 +40,7 @@ using namespace MFOxdna; // sequence-specific base-pairing strength // A:0 C:1 G:2 T:3, 5'- (i,j) -3' -static const double alpha[4][4] = +static const double alpha_hb[4][4] = {{1.00000,1.00000,1.00000,0.82915}, {1.00000,1.00000,1.15413,1.00000}, {1.00000,1.15413,1.00000,1.00000}, @@ -71,10 +71,10 @@ PairOxdnaHbond::~PairOxdnaHbond() memory->destroy(cut_hb_hi); memory->destroy(cut_hb_lc); memory->destroy(cut_hb_hc); + memory->destroy(cutsq_hb_hc); memory->destroy(b_hb_lo); memory->destroy(b_hb_hi); memory->destroy(shift_hb); - memory->destroy(cutsq_hb_hc); memory->destroy(a_hb1); memory->destroy(theta_hb1_0); @@ -732,7 +732,7 @@ void PairOxdnaHbond::coeff(int narg, char **arg) for (int j = MAX(jlo,i); j <= jhi; j++) { epsilon_hb[i][j] = epsilon_hb_one; - if (seqdepflag) epsilon_hb[i][j] *= alpha[i-1][j-1]; + if (seqdepflag) epsilon_hb[i][j] *= alpha_hb[i-1][j-1]; a_hb[i][j] = a_hb_one; cut_hb_0[i][j] = cut_hb_0_one; cut_hb_c[i][j] = cut_hb_c_one; @@ -743,7 +743,7 @@ void PairOxdnaHbond::coeff(int narg, char **arg) b_hb_lo[i][j] = b_hb_lo_one; b_hb_hi[i][j] = b_hb_hi_one; shift_hb[i][j] = shift_hb_one; - if (seqdepflag) shift_hb[i][j] *= alpha[i-1][j-1]; + if (seqdepflag) shift_hb[i][j] *= alpha_hb[i-1][j-1]; a_hb1[i][j] = a_hb1_one; theta_hb1_0[i][j] = theta_hb1_0_one; @@ -831,7 +831,7 @@ double PairOxdnaHbond::init_one(int i, int j) } if (seqdepflag) { - epsilon_hb[j][i] = epsilon_hb[i][j] / alpha[i-1][j-1] * alpha[j-1][i-1]; + epsilon_hb[j][i] = epsilon_hb[i][j] / alpha_hb[i-1][j-1] * alpha_hb[j-1][i-1]; } else { epsilon_hb[j][i] = epsilon_hb[i][j]; @@ -846,7 +846,7 @@ double PairOxdnaHbond::init_one(int i, int j) cut_hb_lc[j][i] = cut_hb_lc[i][j]; cut_hb_hc[j][i] = cut_hb_hc[i][j]; if (seqdepflag) { - shift_hb[j][i] = shift_hb[i][j] / alpha[i-1][j-1] * alpha[j-1][i-1]; + shift_hb[j][i] = shift_hb[i][j] / alpha_hb[i-1][j-1] * alpha_hb[j-1][i-1]; } else { shift_hb[j][i] = shift_hb[i][j]; diff --git a/src/USER-CGDNA/pair_oxdna_stk.cpp b/src/USER-CGDNA/pair_oxdna_stk.cpp index 4cbc0317dd..93c65979ac 100644 --- a/src/USER-CGDNA/pair_oxdna_stk.cpp +++ b/src/USER-CGDNA/pair_oxdna_stk.cpp @@ -40,7 +40,7 @@ using namespace MFOxdna; // sequence-specific stacking strength // A:0 C:1 G:2 T:3, 5'- (i,j) -3' -static const double alpha[4][4] = +static const double eta_st[4][4] = {{1.11960,1.00852,0.96950,0.99632}, {1.01889,0.97804,1.02681,0.96950}, {0.98169,1.05913,0.97804,1.00852}, @@ -156,7 +156,7 @@ void PairOxdnaStk::compute(int eflag, int vflag) evdwl = 0.0; ev_init(eflag,vflag); - // loop over stacking interaction neighours using bond topology + // loop over stacking interaction neighbors using bond topology for (in = 0; in < nbondlist; in++) { @@ -774,7 +774,7 @@ void PairOxdnaStk::coeff(int narg, char **arg) for (int j = MAX(jlo,i); j <= jhi; j++) { epsilon_st[i][j] = epsilon_st_one; - if (seqdepflag) epsilon_st[i][j] *= alpha[i-1][j-1]; + if (seqdepflag) epsilon_st[i][j] *= eta_st[i-1][j-1]; a_st[i][j] = a_st_one; cut_st_0[i][j] = cut_st_0_one; cut_st_c[i][j] = cut_st_c_one; @@ -785,7 +785,7 @@ void PairOxdnaStk::coeff(int narg, char **arg) b_st_lo[i][j] = b_st_lo_one; b_st_hi[i][j] = b_st_hi_one; shift_st[i][j] = shift_st_one; - if (seqdepflag) shift_st[i][j] *= alpha[i-1][j-1]; + if (seqdepflag) shift_st[i][j] *= eta_st[i-1][j-1]; a_st4[i][j] = a_st4_one; theta_st4_0[i][j] = theta_st4_0_one; @@ -865,7 +865,7 @@ double PairOxdnaStk::init_one(int i, int j) } if (seqdepflag) { - epsilon_st[j][i] = epsilon_st[i][j] / alpha[i-1][j-1] * alpha[j-1][i-1]; + epsilon_st[j][i] = epsilon_st[i][j] / eta_st[i-1][j-1] * eta_st[j-1][i-1]; } else { epsilon_st[j][i] = epsilon_st[i][j]; @@ -880,7 +880,7 @@ double PairOxdnaStk::init_one(int i, int j) cut_st_lc[j][i] = cut_st_lc[i][j]; cut_st_hc[j][i] = cut_st_hc[i][j]; if (seqdepflag) { - shift_st[j][i] = shift_st[i][j] / alpha[i-1][j-1] * alpha[j-1][i-1]; + shift_st[j][i] = shift_st[i][j] / eta_st[i-1][j-1] * eta_st[j-1][i-1]; } else { shift_st[j][i] = shift_st[i][j]; diff --git a/src/USER-CGDNA/pair_oxdna_xstk.cpp b/src/USER-CGDNA/pair_oxdna_xstk.cpp index 071886556c..1365d0d2b2 100644 --- a/src/USER-CGDNA/pair_oxdna_xstk.cpp +++ b/src/USER-CGDNA/pair_oxdna_xstk.cpp @@ -62,9 +62,9 @@ PairOxdnaXstk::~PairOxdnaXstk() memory->destroy(cut_xst_hi); memory->destroy(cut_xst_lc); memory->destroy(cut_xst_hc); + memory->destroy(cutsq_xst_hc); memory->destroy(b_xst_lo); memory->destroy(b_xst_hi); - memory->destroy(cutsq_xst_hc); memory->destroy(a_xst1); memory->destroy(theta_xst1_0); From 3baf15ed6f91c105e451680e1e2e453c05b6a361 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 May 2019 11:35:18 -0400 Subject: [PATCH 106/311] apply bugfix from PR #1446 to allow switching from variable thermo output back to evenly spaced --- src/output.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/output.cpp b/src/output.cpp index 884647f478..55eaeb0aaa 100644 --- a/src/output.cpp +++ b/src/output.cpp @@ -675,8 +675,13 @@ void Output::set_thermo(int narg, char **arg) { if (narg != 1) error->all(FLERR,"Illegal thermo command"); + // always reset var_thermo, so it is possible to switch back from + // variable spaced thermo outputs to constant spaced ones. + + delete [] var_thermo; + var_thermo = NULL; + if (strstr(arg[0],"v_") == arg[0]) { - delete [] var_thermo; int n = strlen(&arg[0][2]) + 1; var_thermo = new char[n]; strcpy(var_thermo,&arg[0][2]); From a70f9c4f954667539526198026e5836a8cdfe14c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 May 2019 13:47:57 -0400 Subject: [PATCH 107/311] support using a variable instead of a constant interval for fix print --- doc/src/fix_print.txt | 17 ++++++++++++- src/fix_print.cpp | 58 +++++++++++++++++++++++++++++++++++-------- src/fix_print.h | 4 +++ 3 files changed, 67 insertions(+), 12 deletions(-) diff --git a/doc/src/fix_print.txt b/doc/src/fix_print.txt index d23c1103d3..cafc180718 100644 --- a/doc/src/fix_print.txt +++ b/doc/src/fix_print.txt @@ -14,7 +14,7 @@ fix ID group-ID print N string keyword value ... :pre ID, group-ID are documented in "fix"_fix.html command :ulb,l print = style name of this fix command :l -N = print every N steps :l +N = print every N steps; N can be a variable (see below) :l string = text string to print with optional variable names :l zero or more keyword/value pairs may be appended :l keyword = {file} or {append} or {screen} or {title} :l @@ -40,6 +40,21 @@ If it contains variables it must be enclosed in double quotes to insure they are not evaluated when the input script line is read, but will instead be evaluated each time the string is printed. +Instead of a numeric value, N can be specified as an "equal-style +variable"_variable.html, which should be specified as v_name, where +name is the variable name. In this case, the variable is evaluated at +the beginning of a run to determine the [next] timestep at which the +string will be written out. On that timestep, the variable will be +evaluated again to determine the next timestep, etc. +Thus the variable should return timestep values. See the stagger() +and logfreq() and stride() math functions for "equal-style +variables"_variable.html, as examples of useful functions to use in +this context. For example, the following commands will print output at +timesteps 10,20,30,100,200,300,1000,2000,etc: + +variable s equal logfreq(10,3,10) +fix extra all print v_s "Coords of marker atom = $x $y $z" :pre + The specified group-ID is ignored by this fix. See the "variable"_variable.html command for a description of {equal} diff --git a/src/fix_print.cpp b/src/fix_print.cpp index 969fcf8140..f6db88114a 100644 --- a/src/fix_print.cpp +++ b/src/fix_print.cpp @@ -29,11 +29,18 @@ using namespace FixConst; FixPrint::FixPrint(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg), - fp(NULL), string(NULL), copy(NULL), work(NULL) + fp(NULL), string(NULL), copy(NULL), work(NULL), var_print(NULL) { if (narg < 5) error->all(FLERR,"Illegal fix print command"); - nevery = force->inumeric(FLERR,arg[3]); - if (nevery <= 0) error->all(FLERR,"Illegal fix print command"); + if (strstr(arg[3],"v_") == arg[3]) { + int n = strlen(&arg[3][2]) + 1; + var_print = new char[n]; + strcpy(var_print,&arg[3][2]); + nevery = 1; + } else { + nevery = force->inumeric(FLERR,arg[3]); + if (nevery <= 0) error->all(FLERR,"Illegal fix print command"); + } MPI_Comm_rank(world,&me); @@ -89,13 +96,6 @@ FixPrint::FixPrint(LAMMPS *lmp, int narg, char **arg) : } delete [] title; - - // add nfirst to all computes that store invocation times - // since don't know a priori which are invoked via variables by this fix - // once in end_of_step() can set timestep for ones actually invoked - - const bigint nfirst = (update->ntimestep/nevery)*nevery + nevery; - modify->addstep_compute_all(nfirst); } /* ---------------------------------------------------------------------- */ @@ -103,6 +103,7 @@ FixPrint::FixPrint(LAMMPS *lmp, int narg, char **arg) : FixPrint::~FixPrint() { delete [] string; + delete [] var_print; memory->sfree(copy); memory->sfree(work); @@ -120,8 +121,35 @@ int FixPrint::setmask() /* ---------------------------------------------------------------------- */ +void FixPrint::init() +{ + if (var_print) { + ivar_print = input->variable->find(var_print); + if (ivar_print < 0) + error->all(FLERR,"Variable name for fix print timestep does not exist"); + if (!input->variable->equalstyle(ivar_print)) + error->all(FLERR,"Variable for fix print timestep is invalid style"); + next_print = static_cast + (input->variable->compute_equal(ivar_print)); + if (next_print <= update->ntimestep) + error->all(FLERR,"Fix print timestep variable returned a bad timestep"); + } else { + next_print = (update->ntimestep/nevery)*nevery + nevery; + } + + // add next_print to all computes that store invocation times + // since don't know a priori which are invoked via variables by this fix + // once in end_of_step() can set timestep for ones actually invoked + + modify->addstep_compute_all(next_print); +} + +/* ---------------------------------------------------------------------- */ + void FixPrint::end_of_step() { + if (update->ntimestep != next_print) return; + // make a copy of string to work on // substitute for $ variables (no printing) // append a newline and print final copy @@ -132,7 +160,15 @@ void FixPrint::end_of_step() strcpy(copy,string); input->substitute(copy,work,maxcopy,maxwork,0); - modify->addstep_compute(update->ntimestep + nevery); + if (var_print) { + next_print = static_cast + (input->variable->compute_equal(ivar_print)); + if (next_print <= update->ntimestep) + error->all(FLERR,"Fix print timestep variable returned a bad timestep"); + } else { + next_print = (update->ntimestep/nevery)*nevery + nevery; + } + modify->addstep_compute(next_print); if (me == 0) { if (screenflag && screen) fprintf(screen,"%s\n",copy); diff --git a/src/fix_print.h b/src/fix_print.h index 1f6efdf108..37b6680aee 100644 --- a/src/fix_print.h +++ b/src/fix_print.h @@ -29,6 +29,7 @@ class FixPrint : public Fix { public: FixPrint(class LAMMPS *, int, char **); ~FixPrint(); + void init(); int setmask(); void end_of_step(); @@ -37,6 +38,9 @@ class FixPrint : public Fix { FILE *fp; char *string,*copy,*work; int maxcopy,maxwork; + char *var_print; + int ivar_print; + bigint next_print; }; } From 66f7f2a5ef786ef97f86805cff22ceaf91631afa Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 May 2019 15:11:53 -0400 Subject: [PATCH 108/311] pass more cmake settings to LATTE downloaded library build --- cmake/CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 63bc168271..b68ed447a3 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -504,7 +504,10 @@ if(PKG_LATTE) URL https://github.com/lanl/LATTE/archive/v1.2.1.tar.gz URL_MD5 85ac414fdada2d04619c8f936344df14 SOURCE_SUBDIR cmake - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= ${CMAKE_REQUEST_PIC} -DBLAS_LIBRARIES=${BLAS_LIBRARIES} -DLAPACK_LIBRARIES=${LAPACK_LIBRARIES} + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= ${CMAKE_REQUEST_PIC} + -DBLAS_LIBRARIES=${BLAS_LIBRARIES} -DLAPACK_LIBRARIES=${LAPACK_LIBRARIES} + -DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER} -DCMAKE_Fortran_FLAGS=${CMAKE_Fortran_FLAGS} + -DCMAKE_Fortran_FLAGS_${BTYPE}=${CMAKE_Fortran_FLAGS_${BTYPE}} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} ) ExternalProject_get_property(latte_build INSTALL_DIR) set(LATTE_LIBRARIES ${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/liblatte.a) From a7226bd93d9973e37f3e5bcf30fdb712c3debb1a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 May 2019 15:12:31 -0400 Subject: [PATCH 109/311] remove unused variables --- src/SPIN/fix_nve_spin.cpp | 2 +- src/SPIN/fix_setforce_spin.cpp | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/SPIN/fix_nve_spin.cpp b/src/SPIN/fix_nve_spin.cpp index 20e0d355b1..9b67b29492 100644 --- a/src/SPIN/fix_nve_spin.cpp +++ b/src/SPIN/fix_nve_spin.cpp @@ -573,7 +573,7 @@ void FixNVESpin::AdvanceSingleSpin(int i) int *sametag = atom->sametag; double **sp = atom->sp; double **fm = atom->fm; - double msq,scale,fm2,energy,dts2; + double fm2,energy,dts2; double cp[3],g[3]; cp[0] = cp[1] = cp[2] = 0.0; diff --git a/src/SPIN/fix_setforce_spin.cpp b/src/SPIN/fix_setforce_spin.cpp index 72ad1ec89a..c2807418ec 100644 --- a/src/SPIN/fix_setforce_spin.cpp +++ b/src/SPIN/fix_setforce_spin.cpp @@ -126,7 +126,6 @@ void FixSetForceSpin::single_setforce_spin(int i, double fmi[3]) { double **x = atom->x; int *mask = atom->mask; - int nlocal = atom->nlocal; // update region if necessary From 81d3fa77bb020ea20752e0ebd9a6d2ada77dd977 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Sat, 4 May 2019 17:42:21 -0400 Subject: [PATCH 110/311] Add missing molecule_flag=1 in atom_vec_bond_kokkos --- src/KOKKOS/atom_vec_bond_kokkos.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/KOKKOS/atom_vec_bond_kokkos.cpp b/src/KOKKOS/atom_vec_bond_kokkos.cpp index c884d23880..2945f45ab3 100644 --- a/src/KOKKOS/atom_vec_bond_kokkos.cpp +++ b/src/KOKKOS/atom_vec_bond_kokkos.cpp @@ -43,6 +43,8 @@ AtomVecBondKokkos::AtomVecBondKokkos(LAMMPS *lmp) : AtomVecKokkos(lmp) size_data_vel = 4; xcol_data = 4; + atom->molecule_flag = 1; + k_count = DAT::tdual_int_1d("atom::k_count",1); atomKK = (AtomKokkos *) atom; commKK = (CommKokkos *) comm; From 1214e6ea79c6a16be31a8b4e343b96c6b4838140 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 May 2019 20:08:34 -0400 Subject: [PATCH 111/311] align USER-INTEL versions of REBO/AIREBO with MANYBODY implementation --- src/MANYBODY/pair_rebo.cpp | 2 -- src/USER-INTEL/pair_airebo_intel.h | 1 - src/USER-INTEL/pair_rebo_intel.cpp | 5 ----- 3 files changed, 8 deletions(-) diff --git a/src/MANYBODY/pair_rebo.cpp b/src/MANYBODY/pair_rebo.cpp index 02e0654ed7..e07a1b3495 100644 --- a/src/MANYBODY/pair_rebo.cpp +++ b/src/MANYBODY/pair_rebo.cpp @@ -41,8 +41,6 @@ void PairREBO::settings(int narg, char **/*arg*/) void PairREBO::spline_init() { PairAIREBO::spline_init(); - int i,j,k; - PCCf[0][2] = 0.007860700254745; PCCf[0][3] = 0.016125364564267; PCCf[1][1] = 0.003026697473481; diff --git a/src/USER-INTEL/pair_airebo_intel.h b/src/USER-INTEL/pair_airebo_intel.h index 95e054fc0f..675fda8fe3 100644 --- a/src/USER-INTEL/pair_airebo_intel.h +++ b/src/USER-INTEL/pair_airebo_intel.h @@ -27,7 +27,6 @@ PairStyle(airebo/intel,PairAIREBOIntel) #include "pair.h" #include "fix_intel.h" #include "pair_airebo.h" -//#include "airebo_common.h" namespace LAMMPS_NS { diff --git a/src/USER-INTEL/pair_rebo_intel.cpp b/src/USER-INTEL/pair_rebo_intel.cpp index b7cc3d1c71..e829b10ba1 100644 --- a/src/USER-INTEL/pair_rebo_intel.cpp +++ b/src/USER-INTEL/pair_rebo_intel.cpp @@ -34,9 +34,4 @@ void PairREBOIntel::settings(int narg, char ** /* arg */) cutlj = 0.0; ljflag = torflag = 0; - // - // this one parameter for C-C interactions is different in REBO vs AIREBO - // see Favata, Micheletti, Ryu, Pugno, Comp Phys Comm (2016) - - PCCf_2_0 = 0.0; } From fd3eade6d27920a2f0080e213f0da6dcfb316794 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 May 2019 20:42:36 -0400 Subject: [PATCH 112/311] update reference date and examples for changes in REBO --- doc/src/pair_airebo.txt | 2 +- .../USER/misc/kolmogorov_crespi_z/CH.airebo | 1 - .../USER/misc/kolmogorov_crespi_z/CH.rebo | 1 + .../kolmogorov_crespi_z/in.bilayer-graphene | 2 +- .../log.16Mar18.bilayer-graphene.g++.1 | 208 ----------------- .../log.16Mar18.bilayer-graphene.g++.4 | 208 ----------------- .../log.30Apr19.bilayer-graphene.g++.1 | 210 ++++++++++++++++++ .../log.30Apr19.bilayer-graphene.g++.4 | 210 ++++++++++++++++++ examples/airebo/CH.rebo | 1 + examples/airebo/in.airebo-0-0 | 2 +- examples/airebo/in.rebo2 | 4 +- ...0.g++.1 => log.30Apr2019.airebo-0-0.g++.1} | 30 +-- ...0.g++.4 => log.30Apr2019.airebo-0-0.g++.4} | 30 +-- ...o-m.g++.1 => log.30Apr2019.airebo-m.g++.1} | 26 ++- ...o-m.g++.4 => log.30Apr2019.airebo-m.g++.4} | 26 ++- ...irebo.g++.1 => log.30Apr2019.airebo.g++.1} | 26 ++- ...irebo.g++.4 => log.30Apr2019.airebo.g++.4} | 26 ++- ....rebo2.g++.1 => log.30Apr2019.rebo2.g++.1} | 32 +-- ....rebo2.g++.4 => log.30Apr2019.rebo2.g++.4} | 32 +-- 19 files changed, 549 insertions(+), 528 deletions(-) delete mode 120000 examples/USER/misc/kolmogorov_crespi_z/CH.airebo create mode 120000 examples/USER/misc/kolmogorov_crespi_z/CH.rebo delete mode 100644 examples/USER/misc/kolmogorov_crespi_z/log.16Mar18.bilayer-graphene.g++.1 delete mode 100644 examples/USER/misc/kolmogorov_crespi_z/log.16Mar18.bilayer-graphene.g++.4 create mode 100644 examples/USER/misc/kolmogorov_crespi_z/log.30Apr19.bilayer-graphene.g++.1 create mode 100644 examples/USER/misc/kolmogorov_crespi_z/log.30Apr19.bilayer-graphene.g++.4 create mode 120000 examples/airebo/CH.rebo rename examples/airebo/{log.12Dec18.airebo-0-0.g++.1 => log.30Apr2019.airebo-0-0.g++.1} (74%) rename examples/airebo/{log.12Dec18.airebo-0-0.g++.4 => log.30Apr2019.airebo-0-0.g++.4} (74%) rename examples/airebo/{log.12Dec18.airebo-m.g++.1 => log.30Apr2019.airebo-m.g++.1} (78%) rename examples/airebo/{log.12Dec18.airebo-m.g++.4 => log.30Apr2019.airebo-m.g++.4} (78%) rename examples/airebo/{log.12Dec18.airebo.g++.1 => log.30Apr2019.airebo.g++.1} (78%) rename examples/airebo/{log.12Dec18.airebo.g++.4 => log.30Apr2019.airebo.g++.4} (78%) rename examples/airebo/{log.12Dec18.rebo2.g++.1 => log.30Apr2019.rebo2.g++.1} (73%) rename examples/airebo/{log.12Dec18.rebo2.g++.4 => log.30Apr2019.rebo2.g++.4} (73%) diff --git a/doc/src/pair_airebo.txt b/doc/src/pair_airebo.txt index e9d47a721c..4956ba7575 100644 --- a/doc/src/pair_airebo.txt +++ b/doc/src/pair_airebo.txt @@ -116,7 +116,7 @@ various dihedral angle preferences in hydrocarbon configurations. Only a single pair_coeff command is used with the {airebo}, {airebo} or {rebo} style which specifies an AIREBO, REBO, or AIREBO-M potential file with parameters for C and H. Note that as of LAMMPS version -15 November 2018 the {rebo} style in LAMMPS uses its own potential +15 May 2019 the {rebo} style in LAMMPS uses its own potential file (CH.rebo). These are mapped to LAMMPS atom types by specifying N additional arguments after the filename in the pair_coeff command, where N is the number of LAMMPS atom types: diff --git a/examples/USER/misc/kolmogorov_crespi_z/CH.airebo b/examples/USER/misc/kolmogorov_crespi_z/CH.airebo deleted file mode 120000 index e43e44c133..0000000000 --- a/examples/USER/misc/kolmogorov_crespi_z/CH.airebo +++ /dev/null @@ -1 +0,0 @@ -../../../../potentials/CH.airebo \ No newline at end of file diff --git a/examples/USER/misc/kolmogorov_crespi_z/CH.rebo b/examples/USER/misc/kolmogorov_crespi_z/CH.rebo new file mode 120000 index 0000000000..c5a6a40100 --- /dev/null +++ b/examples/USER/misc/kolmogorov_crespi_z/CH.rebo @@ -0,0 +1 @@ +../../../../potentials/CH.rebo \ No newline at end of file diff --git a/examples/USER/misc/kolmogorov_crespi_z/in.bilayer-graphene b/examples/USER/misc/kolmogorov_crespi_z/in.bilayer-graphene index 3d63fc09ed..b019b3e5bb 100644 --- a/examples/USER/misc/kolmogorov_crespi_z/in.bilayer-graphene +++ b/examples/USER/misc/kolmogorov_crespi_z/in.bilayer-graphene @@ -22,7 +22,7 @@ group adsorbant type 2 ######################## Potential defition ######################## pair_style hybrid/overlay rebo kolmogorov/crespi/z 14.0 #################################################################### -pair_coeff * * rebo CH.airebo C C # chemical +pair_coeff * * rebo CH.rebo C C # chemical pair_coeff 1 2 kolmogorov/crespi/z CC.KC C C # long-range #################################################################### diff --git a/examples/USER/misc/kolmogorov_crespi_z/log.16Mar18.bilayer-graphene.g++.1 b/examples/USER/misc/kolmogorov_crespi_z/log.16Mar18.bilayer-graphene.g++.1 deleted file mode 100644 index 3ba8bfd5df..0000000000 --- a/examples/USER/misc/kolmogorov_crespi_z/log.16Mar18.bilayer-graphene.g++.1 +++ /dev/null @@ -1,208 +0,0 @@ -LAMMPS (8 Mar 2018) - using 1 OpenMP thread(s) per MPI task -# Initialization -units metal -boundary p p p -atom_style atomic -processors * * 1 # domain decomposition over x and y - -# System and atom definition -# we use 2 atom types so that inter- and intra-layer -# interactions can be specified separately -read_data data.bilayer-graphene # read lammps data file - orthogonal box = (0 0 -20) to (17.04 19.6761 40) - 1 by 1 by 1 MPI processor grid - reading atoms ... - 256 atoms -mass 1 12.0107 # carbon mass (g/mole) | membrane -mass 2 12.0107 # carbon mass (g/mole) | adsorbate -# Neighbor update settings -neighbor 2.0 bin -neigh_modify every 1 -neigh_modify delay 0 -neigh_modify check yes -# Separate atom groups -group membrane type 1 -128 atoms in group membrane -group adsorbant type 2 -128 atoms in group adsorbant - -######################## Potential defition ######################## -pair_style hybrid/overlay rebo kolmogorov/crespi/z 14.0 -#################################################################### -pair_coeff * * rebo CH.airebo C C # chemical -Reading potential file CH.airebo with DATE: 2011-10-25 -pair_coeff 1 2 kolmogorov/crespi/z CC.KC C C # long-range -#################################################################### - -#### Simulation settings #### -timestep 0.0001 -velocity all create 300.0 12345 -fix thermostat all nve -compute COM1 membrane com -compute COM2 adsorbant com -############################ - -# Output -#dump 1 all xyz 100 trajec.xyz -#dump_modify 1 format line "%s %12.6f %12.6f %12.6f" element "C" "C" -thermo 10 -thermo_style custom step time etotal pe temp c_COM1[3] c_COM2[3] # spcpu -thermo_modify line one format float %14.8f - -###### Run molecular dynamics ###### -run 1000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 16 - ghost atom cutoff = 16 - binsize = 8, bins = 3 3 8 - 3 neighbor lists, perpetual/occasional/extra = 3 0 0 - (1) pair rebo, perpetual - attributes: full, newton on, ghost - pair build: full/bin/ghost - stencil: full/ghost/bin/3d - bin: standard - (2) pair kolmogorov/crespi/z, perpetual, skip from (3) - attributes: half, newton on - pair build: skip - stencil: none - bin: none - (3) neighbor class addition, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 4.998 | 4.998 | 4.998 Mbytes -Step Time TotEng PotEng Temp c_COM1[3] c_COM2[3] - 0 0.00000000 -1888.67041214 -1898.55881323 300.00000000 0.00000000 3.30000000 - 10 0.00100000 -1888.67037221 -1898.21029897 289.42778520 -0.00020126 3.30020126 - 20 0.00200000 -1888.67021541 -1897.22943612 259.67456089 -0.00041357 3.30041357 - 30 0.00300000 -1888.66999308 -1895.86681311 218.34126559 -0.00063673 3.30063673 - 40 0.00400000 -1888.66978354 -1894.47163830 176.02000692 -0.00087055 3.30087055 - 50 0.00500000 -1888.66966068 -1893.37123377 142.63902862 -0.00111486 3.30111486 - 60 0.00600000 -1888.66966132 -1892.75822749 124.04127205 -0.00136952 3.30136952 - 70 0.00700000 -1888.66976974 -1892.63445751 120.28297808 -0.00163441 3.30163441 - 80 0.00800000 -1888.66992867 -1892.83467462 126.35245792 -0.00190946 3.30190946 - 90 0.00900000 -1888.67006868 -1893.11387069 134.81862145 -0.00219458 3.30219458 - 100 0.01000000 -1888.67013621 -1893.25481851 139.09272853 -0.00248973 3.30248973 - 110 0.01100000 -1888.67011201 -1893.15155790 135.96068294 -0.00279489 3.30279489 - 120 0.01200000 -1888.67001496 -1892.84002960 126.51230266 -0.00311004 3.30311004 - 130 0.01300000 -1888.66988997 -1892.47004238 115.29120968 -0.00343519 3.30343519 - 140 0.01400000 -1888.66979230 -1892.23503116 108.16426723 -0.00377038 3.30377038 - 150 0.01500000 -1888.66976478 -1892.28630583 109.72070257 -0.00411562 3.30411562 - 160 0.01600000 -1888.66982054 -1892.66640611 121.25071190 -0.00447099 3.30447099 - 170 0.01700000 -1888.66993790 -1893.28862637 140.12442721 -0.00483654 3.30483654 - 180 0.01800000 -1888.67007017 -1893.97029258 160.80119589 -0.00521235 3.30521235 - 190 0.01900000 -1888.67016712 -1894.50458787 177.00801243 -0.00559851 3.30559851 - 200 0.02000000 -1888.67019459 -1894.73890106 184.11590729 -0.00599512 3.30599512 - 210 0.02100000 -1888.67014420 -1894.62906014 180.78501932 -0.00640230 3.30640230 - 220 0.02200000 -1888.67003680 -1894.25249103 169.36370738 -0.00682016 3.30682016 - 230 0.02300000 -1888.66991386 -1893.77601613 154.91186767 -0.00724883 3.30724883 - 240 0.02400000 -1888.66982525 -1893.38995084 143.20188490 -0.00768845 3.30768845 - 250 0.02500000 -1888.66980630 -1893.23138936 138.39193056 -0.00813913 3.30813913 - 260 0.02600000 -1888.66986130 -1893.32993923 141.38012476 -0.00860097 3.30860097 - 270 0.02700000 -1888.66996305 -1893.60070606 149.59171763 -0.00907408 3.30907408 - 280 0.02800000 -1888.67006686 -1893.88587226 158.24010433 -0.00955849 3.30955849 - 290 0.02900000 -1888.67012981 -1894.02402669 162.42960292 -0.01005424 3.31005424 - 300 0.03000000 -1888.67012722 -1893.91715234 159.18726627 -0.01056129 3.31056129 - 310 0.03100000 -1888.67005731 -1893.57037242 148.66857852 -0.01107957 3.31107957 - 320 0.03200000 -1888.66994573 -1893.09358619 134.20694883 -0.01160898 3.31160898 - 330 0.03300000 -1888.66983589 -1892.66132663 121.09614207 -0.01214935 3.31214935 - 340 0.03400000 -1888.66977410 -1892.44446345 114.51869676 -0.01270046 3.31270046 - 350 0.03500000 -1888.66978826 -1892.53901235 117.38674604 -0.01326207 3.31326207 - 360 0.03600000 -1888.66987439 -1892.92337288 129.04508371 -0.01383390 3.31383390 - 370 0.03700000 -1888.66999800 -1893.46445570 145.45701555 -0.01441561 3.31441561 - 380 0.03800000 -1888.67010960 -1893.97065516 160.81100020 -0.01500688 3.31500688 - 390 0.03900000 -1888.67016540 -1894.26835818 169.84119247 -0.01560734 3.31560734 - 400 0.04000000 -1888.67014667 -1894.26967975 169.88185546 -0.01621664 3.31621664 - 410 0.04100000 -1888.67006166 -1894.00321069 161.80014280 -0.01683442 3.31683442 - 420 0.04200000 -1888.66994367 -1893.60086324 149.59707418 -0.01746033 3.31746033 - 430 0.04300000 -1888.66984058 -1893.24559841 138.82197275 -0.01809405 3.31809405 - 440 0.04400000 -1888.66979399 -1893.09727874 134.32357877 -0.01873527 3.31873527 - 450 0.04500000 -1888.66982139 -1893.22837442 138.30000378 -0.01938373 3.31938373 - 460 0.04600000 -1888.66990972 -1893.59670383 149.47191354 -0.02003918 3.32003918 - 470 0.04700000 -1888.67002173 -1894.06542598 163.68887743 -0.02070143 3.32070143 - 480 0.04800000 -1888.67011389 -1894.46010842 175.66018439 -0.02137030 3.32137030 - 490 0.04900000 -1888.67015175 -1894.63688098 181.02206322 -0.02204565 3.32204565 - 500 0.05000000 -1888.67012158 -1894.53632221 177.97216882 -0.02272740 3.32272740 - 510 0.05100000 -1888.67003762 -1894.20444731 167.90610436 -0.02341547 3.32341547 - 520 0.05200000 -1888.66993151 -1893.77231066 154.79891353 -0.02410981 3.32410981 - 530 0.05300000 -1888.66984505 -1893.40525927 143.66572038 -0.02481040 3.32481040 - 540 0.05400000 -1888.66981408 -1893.23762083 138.58074854 -0.02551724 3.32551724 - 550 0.05500000 -1888.66985005 -1893.31793594 141.01630317 -0.02623032 3.32623032 - 560 0.05600000 -1888.66993737 -1893.59069013 149.28862751 -0.02694963 3.32694963 - 570 0.05700000 -1888.67003852 -1893.92089571 159.30352588 -0.02767517 3.32767517 - 580 0.05800000 -1888.67011322 -1894.15124753 166.28980524 -0.02840691 3.32840691 - 590 0.05900000 -1888.67013192 -1894.16548041 166.72104345 -0.02914478 3.32914478 - 600 0.06000000 -1888.67008713 -1893.93443318 159.71275856 -0.02988871 3.32988871 - 610 0.06100000 -1888.66999438 -1893.52841656 147.39760646 -0.03063856 3.33063856 - 620 0.06200000 -1888.66988809 -1893.09235021 134.17119963 -0.03139416 3.33139416 - 630 0.06300000 -1888.66980996 -1892.79172016 125.05288240 -0.03215531 3.33215531 - 640 0.06400000 -1888.66979261 -1892.74755390 123.71346730 -0.03292176 3.33292176 - 650 0.06500000 -1888.66984332 -1892.98665459 130.96590324 -0.03369323 3.33369323 - 660 0.06600000 -1888.66994245 -1893.42999868 144.41332389 -0.03446937 3.33446937 - 670 0.06700000 -1888.67005233 -1893.92310681 159.37018806 -0.03524986 3.33524986 - 680 0.06800000 -1888.67013309 -1894.29451581 170.63575808 -0.03603430 3.33603430 - 690 0.06900000 -1888.67015452 -1894.41878117 174.40514192 -0.03682229 3.33682229 - 700 0.07000000 -1888.67010897 -1894.26288036 169.67671530 -0.03761343 3.33761343 - 710 0.07100000 -1888.67001367 -1893.89812904 158.61357114 -0.03840729 3.33840729 - 720 0.07200000 -1888.66990378 -1893.47348746 145.73388454 -0.03920344 3.33920344 - 730 0.07300000 -1888.66982212 -1893.15984839 136.22099960 -0.04000148 3.34000148 - 740 0.07400000 -1888.66980109 -1893.08373746 133.91254029 -0.04080098 3.34080098 - 750 0.07500000 -1888.66984794 -1893.27755511 139.79127024 -0.04160156 3.34160156 - 760 0.07600000 -1888.66994215 -1893.66837365 151.64528967 -0.04240282 3.34240282 - 770 0.07700000 -1888.67004554 -1894.10941206 165.02263027 -0.04320441 3.34320441 - 780 0.07800000 -1888.67011702 -1894.43947545 175.03411436 -0.04400599 3.34400599 - 790 0.07900000 -1888.67013297 -1894.54590471 178.26254255 -0.04480726 3.34480726 - 800 0.08000000 -1888.67008751 -1894.40384142 173.95392406 -0.04560792 3.34560792 - 810 0.08100000 -1888.66999923 -1894.08389003 164.24973321 -0.04640773 3.34640773 - 820 0.08200000 -1888.66990447 -1893.72313979 153.30795965 -0.04720647 3.34720647 - 830 0.08300000 -1888.66984367 -1893.46839190 145.58111626 -0.04800393 3.34800393 - 840 0.08400000 -1888.66984156 -1893.41412536 143.93481093 -0.04879995 3.34879995 - 850 0.08500000 -1888.66989670 -1893.56426154 148.48805553 -0.04959439 3.34959439 - 860 0.08600000 -1888.66998222 -1893.83463719 156.68827294 -0.05038713 3.35038713 - 870 0.08700000 -1888.67006171 -1894.09325045 164.53181920 -0.05117805 3.35117805 - 880 0.08800000 -1888.67010273 -1894.21712661 168.28880100 -0.05196706 3.35196706 - 890 0.08900000 -1888.67008993 -1894.14263950 166.02935656 -0.05275408 3.35275408 - 900 0.09000000 -1888.67002891 -1893.89014571 158.37090587 -0.05353904 3.35353904 - 910 0.09100000 -1888.66994326 -1893.55535709 148.21649469 -0.05432186 3.35432186 - 920 0.09200000 -1888.66986526 -1893.27257949 139.63979178 -0.05510247 3.35510247 - 930 0.09300000 -1888.66982730 -1893.16330891 136.32582949 -0.05588078 3.35588078 - 940 0.09400000 -1888.66984631 -1893.28643285 140.06065785 -0.05665670 3.35665670 - 950 0.09500000 -1888.66991503 -1893.61245342 149.94957268 -0.05743015 3.35743015 - 960 0.09600000 -1888.67000691 -1894.03423922 162.74316516 -0.05820101 3.35820101 - 970 0.09700000 -1888.67008649 -1894.40848025 174.09469037 -0.05896915 3.35896915 - 980 0.09800000 -1888.67012436 -1894.61056767 180.22458605 -0.05973444 3.35973444 - 990 0.09900000 -1888.67010608 -1894.58107659 179.33042338 -0.06049672 3.36049672 - 1000 0.10000000 -1888.67003981 -1894.34773305 172.25312330 -0.06125581 3.36125581 -Loop time of 3.90147 on 1 procs for 1000 steps with 256 atoms - -Performance: 2.215 ns/day, 10.837 hours/ns, 256.314 timesteps/s -99.4% 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.8786 | 3.8786 | 3.8786 | 0.0 | 99.41 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.010816 | 0.010816 | 0.010816 | 0.0 | 0.28 -Output | 0.002461 | 0.002461 | 0.002461 | 0.0 | 0.06 -Modify | 0.0051703 | 0.0051703 | 0.0051703 | 0.0 | 0.13 -Other | | 0.004447 | | | 0.11 - -Nlocal: 256 ave 256 max 256 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 1721 ave 1721 max 1721 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 37312 ave 37312 max 37312 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 94592 ave 94592 max 94592 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 94592 -Ave neighs/atom = 369.5 -Neighbor list builds = 0 -Dangerous builds = 0 -Total wall time: 0:00:03 diff --git a/examples/USER/misc/kolmogorov_crespi_z/log.16Mar18.bilayer-graphene.g++.4 b/examples/USER/misc/kolmogorov_crespi_z/log.16Mar18.bilayer-graphene.g++.4 deleted file mode 100644 index b2dd551654..0000000000 --- a/examples/USER/misc/kolmogorov_crespi_z/log.16Mar18.bilayer-graphene.g++.4 +++ /dev/null @@ -1,208 +0,0 @@ -LAMMPS (8 Mar 2018) - using 1 OpenMP thread(s) per MPI task -# Initialization -units metal -boundary p p p -atom_style atomic -processors * * 1 # domain decomposition over x and y - -# System and atom definition -# we use 2 atom types so that inter- and intra-layer -# interactions can be specified separately -read_data data.bilayer-graphene # read lammps data file - orthogonal box = (0 0 -20) to (17.04 19.6761 40) - 2 by 2 by 1 MPI processor grid - reading atoms ... - 256 atoms -mass 1 12.0107 # carbon mass (g/mole) | membrane -mass 2 12.0107 # carbon mass (g/mole) | adsorbate -# Neighbor update settings -neighbor 2.0 bin -neigh_modify every 1 -neigh_modify delay 0 -neigh_modify check yes -# Separate atom groups -group membrane type 1 -128 atoms in group membrane -group adsorbant type 2 -128 atoms in group adsorbant - -######################## Potential defition ######################## -pair_style hybrid/overlay rebo kolmogorov/crespi/z 14.0 -#################################################################### -pair_coeff * * rebo CH.airebo C C # chemical -Reading potential file CH.airebo with DATE: 2011-10-25 -pair_coeff 1 2 kolmogorov/crespi/z CC.KC C C # long-range -#################################################################### - -#### Simulation settings #### -timestep 0.0001 -velocity all create 300.0 12345 -fix thermostat all nve -compute COM1 membrane com -compute COM2 adsorbant com -############################ - -# Output -#dump 1 all xyz 100 trajec.xyz -#dump_modify 1 format line "%s %12.6f %12.6f %12.6f" element "C" "C" -thermo 10 -thermo_style custom step time etotal pe temp c_COM1[3] c_COM2[3] # spcpu -thermo_modify line one format float %14.8f - -###### Run molecular dynamics ###### -run 1000 -Neighbor list info ... - update every 1 steps, delay 0 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 16 - ghost atom cutoff = 16 - binsize = 8, bins = 3 3 8 - 3 neighbor lists, perpetual/occasional/extra = 3 0 0 - (1) pair rebo, perpetual - attributes: full, newton on, ghost - pair build: full/bin/ghost - stencil: full/ghost/bin/3d - bin: standard - (2) pair kolmogorov/crespi/z, perpetual, skip from (3) - attributes: half, newton on - pair build: skip - stencil: none - bin: none - (3) neighbor class addition, perpetual - attributes: half, newton on - pair build: half/bin/atomonly/newton - stencil: half/bin/3d/newton - bin: standard -Per MPI rank memory allocation (min/avg/max) = 4.572 | 4.572 | 4.572 Mbytes -Step Time TotEng PotEng Temp c_COM1[3] c_COM2[3] - 0 0.00000000 -1888.67041214 -1898.55881323 300.00000000 0.00000000 3.30000000 - 10 0.00100000 -1888.67037221 -1898.21029897 289.42778520 -0.00020126 3.30020126 - 20 0.00200000 -1888.67021541 -1897.22943612 259.67456089 -0.00041357 3.30041357 - 30 0.00300000 -1888.66999308 -1895.86681311 218.34126559 -0.00063673 3.30063673 - 40 0.00400000 -1888.66978354 -1894.47163830 176.02000692 -0.00087055 3.30087055 - 50 0.00500000 -1888.66966068 -1893.37123377 142.63902862 -0.00111486 3.30111486 - 60 0.00600000 -1888.66966132 -1892.75822749 124.04127205 -0.00136952 3.30136952 - 70 0.00700000 -1888.66976974 -1892.63445751 120.28297808 -0.00163441 3.30163441 - 80 0.00800000 -1888.66992867 -1892.83467462 126.35245792 -0.00190946 3.30190946 - 90 0.00900000 -1888.67006868 -1893.11387069 134.81862145 -0.00219458 3.30219458 - 100 0.01000000 -1888.67013621 -1893.25481851 139.09272853 -0.00248973 3.30248973 - 110 0.01100000 -1888.67011201 -1893.15155790 135.96068294 -0.00279489 3.30279489 - 120 0.01200000 -1888.67001496 -1892.84002960 126.51230266 -0.00311004 3.30311004 - 130 0.01300000 -1888.66988997 -1892.47004238 115.29120968 -0.00343519 3.30343519 - 140 0.01400000 -1888.66979230 -1892.23503116 108.16426723 -0.00377038 3.30377038 - 150 0.01500000 -1888.66976478 -1892.28630583 109.72070257 -0.00411562 3.30411562 - 160 0.01600000 -1888.66982054 -1892.66640611 121.25071190 -0.00447099 3.30447099 - 170 0.01700000 -1888.66993790 -1893.28862637 140.12442721 -0.00483654 3.30483654 - 180 0.01800000 -1888.67007017 -1893.97029258 160.80119589 -0.00521235 3.30521235 - 190 0.01900000 -1888.67016712 -1894.50458787 177.00801243 -0.00559851 3.30559851 - 200 0.02000000 -1888.67019459 -1894.73890106 184.11590729 -0.00599512 3.30599512 - 210 0.02100000 -1888.67014420 -1894.62906014 180.78501932 -0.00640230 3.30640230 - 220 0.02200000 -1888.67003680 -1894.25249103 169.36370738 -0.00682016 3.30682016 - 230 0.02300000 -1888.66991386 -1893.77601613 154.91186767 -0.00724883 3.30724883 - 240 0.02400000 -1888.66982525 -1893.38995084 143.20188490 -0.00768845 3.30768845 - 250 0.02500000 -1888.66980630 -1893.23138936 138.39193056 -0.00813913 3.30813913 - 260 0.02600000 -1888.66986130 -1893.32993923 141.38012476 -0.00860097 3.30860097 - 270 0.02700000 -1888.66996305 -1893.60070606 149.59171763 -0.00907408 3.30907408 - 280 0.02800000 -1888.67006686 -1893.88587226 158.24010433 -0.00955849 3.30955849 - 290 0.02900000 -1888.67012981 -1894.02402669 162.42960292 -0.01005424 3.31005424 - 300 0.03000000 -1888.67012722 -1893.91715234 159.18726627 -0.01056129 3.31056129 - 310 0.03100000 -1888.67005731 -1893.57037242 148.66857852 -0.01107957 3.31107957 - 320 0.03200000 -1888.66994573 -1893.09358619 134.20694883 -0.01160898 3.31160898 - 330 0.03300000 -1888.66983589 -1892.66132663 121.09614207 -0.01214935 3.31214935 - 340 0.03400000 -1888.66977410 -1892.44446345 114.51869676 -0.01270046 3.31270046 - 350 0.03500000 -1888.66978826 -1892.53901235 117.38674604 -0.01326207 3.31326207 - 360 0.03600000 -1888.66987439 -1892.92337288 129.04508371 -0.01383390 3.31383390 - 370 0.03700000 -1888.66999800 -1893.46445570 145.45701555 -0.01441561 3.31441561 - 380 0.03800000 -1888.67010960 -1893.97065516 160.81100020 -0.01500688 3.31500688 - 390 0.03900000 -1888.67016540 -1894.26835818 169.84119247 -0.01560734 3.31560734 - 400 0.04000000 -1888.67014667 -1894.26967975 169.88185546 -0.01621664 3.31621664 - 410 0.04100000 -1888.67006166 -1894.00321069 161.80014280 -0.01683442 3.31683442 - 420 0.04200000 -1888.66994367 -1893.60086324 149.59707418 -0.01746033 3.31746033 - 430 0.04300000 -1888.66984058 -1893.24559841 138.82197275 -0.01809405 3.31809405 - 440 0.04400000 -1888.66979399 -1893.09727874 134.32357877 -0.01873527 3.31873527 - 450 0.04500000 -1888.66982139 -1893.22837442 138.30000378 -0.01938373 3.31938373 - 460 0.04600000 -1888.66990972 -1893.59670383 149.47191354 -0.02003918 3.32003918 - 470 0.04700000 -1888.67002173 -1894.06542598 163.68887743 -0.02070143 3.32070143 - 480 0.04800000 -1888.67011389 -1894.46010842 175.66018439 -0.02137030 3.32137030 - 490 0.04900000 -1888.67015175 -1894.63688098 181.02206322 -0.02204565 3.32204565 - 500 0.05000000 -1888.67012158 -1894.53632221 177.97216882 -0.02272740 3.32272740 - 510 0.05100000 -1888.67003762 -1894.20444731 167.90610436 -0.02341547 3.32341547 - 520 0.05200000 -1888.66993151 -1893.77231066 154.79891353 -0.02410981 3.32410981 - 530 0.05300000 -1888.66984505 -1893.40525927 143.66572038 -0.02481040 3.32481040 - 540 0.05400000 -1888.66981408 -1893.23762083 138.58074854 -0.02551724 3.32551724 - 550 0.05500000 -1888.66985005 -1893.31793594 141.01630317 -0.02623032 3.32623032 - 560 0.05600000 -1888.66993737 -1893.59069013 149.28862751 -0.02694963 3.32694963 - 570 0.05700000 -1888.67003852 -1893.92089571 159.30352588 -0.02767517 3.32767517 - 580 0.05800000 -1888.67011322 -1894.15124753 166.28980524 -0.02840691 3.32840691 - 590 0.05900000 -1888.67013192 -1894.16548041 166.72104345 -0.02914478 3.32914478 - 600 0.06000000 -1888.67008713 -1893.93443318 159.71275856 -0.02988871 3.32988871 - 610 0.06100000 -1888.66999438 -1893.52841656 147.39760646 -0.03063856 3.33063856 - 620 0.06200000 -1888.66988809 -1893.09235021 134.17119963 -0.03139416 3.33139416 - 630 0.06300000 -1888.66980996 -1892.79172016 125.05288240 -0.03215531 3.33215531 - 640 0.06400000 -1888.66979261 -1892.74755390 123.71346730 -0.03292176 3.33292176 - 650 0.06500000 -1888.66984332 -1892.98665459 130.96590324 -0.03369323 3.33369323 - 660 0.06600000 -1888.66994245 -1893.42999868 144.41332389 -0.03446937 3.33446937 - 670 0.06700000 -1888.67005233 -1893.92310681 159.37018806 -0.03524986 3.33524986 - 680 0.06800000 -1888.67013309 -1894.29451581 170.63575808 -0.03603430 3.33603430 - 690 0.06900000 -1888.67015452 -1894.41878117 174.40514192 -0.03682229 3.33682229 - 700 0.07000000 -1888.67010897 -1894.26288036 169.67671530 -0.03761343 3.33761343 - 710 0.07100000 -1888.67001367 -1893.89812904 158.61357114 -0.03840729 3.33840729 - 720 0.07200000 -1888.66990378 -1893.47348746 145.73388454 -0.03920344 3.33920344 - 730 0.07300000 -1888.66982212 -1893.15984839 136.22099960 -0.04000148 3.34000148 - 740 0.07400000 -1888.66980109 -1893.08373746 133.91254029 -0.04080098 3.34080098 - 750 0.07500000 -1888.66984794 -1893.27755511 139.79127024 -0.04160156 3.34160156 - 760 0.07600000 -1888.66994215 -1893.66837365 151.64528967 -0.04240282 3.34240282 - 770 0.07700000 -1888.67004554 -1894.10941206 165.02263027 -0.04320441 3.34320441 - 780 0.07800000 -1888.67011702 -1894.43947545 175.03411436 -0.04400599 3.34400599 - 790 0.07900000 -1888.67013297 -1894.54590471 178.26254255 -0.04480726 3.34480726 - 800 0.08000000 -1888.67008751 -1894.40384142 173.95392406 -0.04560792 3.34560792 - 810 0.08100000 -1888.66999923 -1894.08389003 164.24973321 -0.04640773 3.34640773 - 820 0.08200000 -1888.66990447 -1893.72313979 153.30795965 -0.04720647 3.34720647 - 830 0.08300000 -1888.66984367 -1893.46839190 145.58111626 -0.04800393 3.34800393 - 840 0.08400000 -1888.66984156 -1893.41412536 143.93481093 -0.04879995 3.34879995 - 850 0.08500000 -1888.66989670 -1893.56426154 148.48805553 -0.04959439 3.34959439 - 860 0.08600000 -1888.66998222 -1893.83463719 156.68827294 -0.05038713 3.35038713 - 870 0.08700000 -1888.67006171 -1894.09325045 164.53181920 -0.05117805 3.35117805 - 880 0.08800000 -1888.67010273 -1894.21712661 168.28880100 -0.05196706 3.35196706 - 890 0.08900000 -1888.67008993 -1894.14263950 166.02935656 -0.05275408 3.35275408 - 900 0.09000000 -1888.67002891 -1893.89014571 158.37090587 -0.05353904 3.35353904 - 910 0.09100000 -1888.66994326 -1893.55535709 148.21649469 -0.05432186 3.35432186 - 920 0.09200000 -1888.66986526 -1893.27257949 139.63979178 -0.05510247 3.35510247 - 930 0.09300000 -1888.66982730 -1893.16330891 136.32582949 -0.05588078 3.35588078 - 940 0.09400000 -1888.66984631 -1893.28643285 140.06065785 -0.05665670 3.35665670 - 950 0.09500000 -1888.66991503 -1893.61245342 149.94957268 -0.05743015 3.35743015 - 960 0.09600000 -1888.67000691 -1894.03423922 162.74316516 -0.05820101 3.35820101 - 970 0.09700000 -1888.67008649 -1894.40848025 174.09469037 -0.05896915 3.35896915 - 980 0.09800000 -1888.67012436 -1894.61056767 180.22458605 -0.05973444 3.35973444 - 990 0.09900000 -1888.67010608 -1894.58107659 179.33042338 -0.06049672 3.36049672 - 1000 0.10000000 -1888.67003981 -1894.34773305 172.25312330 -0.06125581 3.36125581 -Loop time of 1.32192 on 4 procs for 1000 steps with 256 atoms - -Performance: 6.536 ns/day, 3.672 hours/ns, 756.476 timesteps/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 | 1.1157 | 1.172 | 1.2369 | 4.0 | 88.66 -Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.071678 | 0.13667 | 0.19304 | 11.8 | 10.34 -Output | 0.0029244 | 0.0031272 | 0.0035112 | 0.4 | 0.24 -Modify | 0.0016961 | 0.0017477 | 0.0017846 | 0.1 | 0.13 -Other | | 0.008334 | | | 0.63 - -Nlocal: 64 ave 64 max 64 min -Histogram: 4 0 0 0 0 0 0 0 0 0 -Nghost: 1265 ave 1265 max 1265 min -Histogram: 4 0 0 0 0 0 0 0 0 0 -Neighs: 9328 ave 9328 max 9328 min -Histogram: 4 0 0 0 0 0 0 0 0 0 -FullNghs: 23648 ave 23648 max 23648 min -Histogram: 4 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 94592 -Ave neighs/atom = 369.5 -Neighbor list builds = 0 -Dangerous builds = 0 -Total wall time: 0:00:01 diff --git a/examples/USER/misc/kolmogorov_crespi_z/log.30Apr19.bilayer-graphene.g++.1 b/examples/USER/misc/kolmogorov_crespi_z/log.30Apr19.bilayer-graphene.g++.1 new file mode 100644 index 0000000000..5c8616749e --- /dev/null +++ b/examples/USER/misc/kolmogorov_crespi_z/log.30Apr19.bilayer-graphene.g++.1 @@ -0,0 +1,210 @@ +LAMMPS (30 Apr 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) + using 1 OpenMP thread(s) per MPI task +# Initialization +units metal +boundary p p p +atom_style atomic +processors * * 1 # domain decomposition over x and y + +# System and atom definition +# we use 2 atom types so that inter- and intra-layer +# interactions can be specified separately +read_data data.bilayer-graphene # read lammps data file + orthogonal box = (0 0 -20) to (17.04 19.6761 40) + 1 by 1 by 1 MPI processor grid + reading atoms ... + 256 atoms + read_data CPU = 0.000291348 secs +mass 1 12.0107 # carbon mass (g/mole) | membrane +mass 2 12.0107 # carbon mass (g/mole) | adsorbate +# Neighbor update settings +neighbor 2.0 bin +neigh_modify every 1 +neigh_modify delay 0 +neigh_modify check yes +# Separate atom groups +group membrane type 1 +128 atoms in group membrane +group adsorbant type 2 +128 atoms in group adsorbant + +######################## Potential defition ######################## +pair_style hybrid/overlay rebo kolmogorov/crespi/z 14.0 +#################################################################### +pair_coeff * * rebo CH.rebo C C # chemical +Reading potential file CH.rebo with DATE: 2018-7-3 +pair_coeff 1 2 kolmogorov/crespi/z CC.KC C C # long-range +#################################################################### + +#### Simulation settings #### +timestep 0.0001 +velocity all create 300.0 12345 +fix thermostat all nve +compute COM1 membrane com +compute COM2 adsorbant com +############################ + +# Output +#dump 1 all xyz 100 trajec.xyz +#dump_modify 1 format line "%s %12.6f %12.6f %12.6f" element "C" "C" +thermo 10 +thermo_style custom step time etotal pe temp c_COM1[3] c_COM2[3] # spcpu +thermo_modify line one format float %14.8f + +###### Run molecular dynamics ###### +run 1000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 16 + ghost atom cutoff = 16 + binsize = 8, bins = 3 3 8 + 3 neighbor lists, perpetual/occasional/extra = 3 0 0 + (1) pair rebo, perpetual + attributes: full, newton on, ghost + pair build: full/bin/ghost + stencil: full/ghost/bin/3d + bin: standard + (2) pair kolmogorov/crespi/z, perpetual, skip from (3) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + (3) neighbor class addition, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.998 | 4.998 | 4.998 Mbytes +Step Time TotEng PotEng Temp c_COM1[3] c_COM2[3] + 0 0.00000000 -1888.67041233 -1898.55881343 300.00000000 0.00000000 3.30000000 + 10 0.00100000 -1888.67037240 -1898.21029916 289.42778520 -0.00020126 3.30020126 + 20 0.00200000 -1888.67021561 -1897.22943631 259.67456089 -0.00041357 3.30041357 + 30 0.00300000 -1888.66999327 -1895.86681330 218.34126559 -0.00063673 3.30063673 + 40 0.00400000 -1888.66978373 -1894.47163849 176.02000692 -0.00087055 3.30087055 + 50 0.00500000 -1888.66966087 -1893.37123396 142.63902861 -0.00111486 3.30111486 + 60 0.00600000 -1888.66966151 -1892.75822768 124.04127204 -0.00136952 3.30136952 + 70 0.00700000 -1888.66976993 -1892.63445770 120.28297806 -0.00163441 3.30163441 + 80 0.00800000 -1888.66992887 -1892.83467481 126.35245790 -0.00190946 3.30190946 + 90 0.00900000 -1888.67006887 -1893.11387088 134.81862143 -0.00219458 3.30219458 + 100 0.01000000 -1888.67013641 -1893.25481870 139.09272852 -0.00248973 3.30248973 + 110 0.01100000 -1888.67011221 -1893.15155809 135.96068294 -0.00279489 3.30279489 + 120 0.01200000 -1888.67001516 -1892.84002980 126.51230266 -0.00311004 3.30311004 + 130 0.01300000 -1888.66989017 -1892.47004258 115.29120969 -0.00343519 3.30343519 + 140 0.01400000 -1888.66979250 -1892.23503136 108.16426724 -0.00377038 3.30377038 + 150 0.01500000 -1888.66976498 -1892.28630603 109.72070258 -0.00411562 3.30411562 + 160 0.01600000 -1888.66982073 -1892.66640631 121.25071190 -0.00447099 3.30447099 + 170 0.01700000 -1888.66993810 -1893.28862656 140.12442720 -0.00483654 3.30483654 + 180 0.01800000 -1888.67007037 -1893.97029277 160.80119589 -0.00521235 3.30521235 + 190 0.01900000 -1888.67016732 -1894.50458806 177.00801243 -0.00559851 3.30559851 + 200 0.02000000 -1888.67019479 -1894.73890125 184.11590729 -0.00599512 3.30599512 + 210 0.02100000 -1888.67014440 -1894.62906034 180.78501933 -0.00640230 3.30640230 + 220 0.02200000 -1888.67003699 -1894.25249122 169.36370739 -0.00682016 3.30682016 + 230 0.02300000 -1888.66991405 -1893.77601632 154.91186768 -0.00724883 3.30724883 + 240 0.02400000 -1888.66982545 -1893.38995103 143.20188490 -0.00768845 3.30768845 + 250 0.02500000 -1888.66980650 -1893.23138955 138.39193054 -0.00813913 3.30813913 + 260 0.02600000 -1888.66986149 -1893.32993943 141.38012473 -0.00860097 3.30860097 + 270 0.02700000 -1888.66996324 -1893.60070625 149.59171759 -0.00907408 3.30907408 + 280 0.02800000 -1888.67006705 -1893.88587245 158.24010430 -0.00955849 3.30955849 + 290 0.02900000 -1888.67013001 -1894.02402688 162.42960290 -0.01005424 3.31005424 + 300 0.03000000 -1888.67012741 -1893.91715254 159.18726627 -0.01056129 3.31056129 + 310 0.03100000 -1888.67005750 -1893.57037262 148.66857854 -0.01107957 3.31107957 + 320 0.03200000 -1888.66994592 -1893.09358639 134.20694885 -0.01160898 3.31160898 + 330 0.03300000 -1888.66983608 -1892.66132683 121.09614209 -0.01214935 3.31214935 + 340 0.03400000 -1888.66977429 -1892.44446364 114.51869677 -0.01270046 3.31270046 + 350 0.03500000 -1888.66978845 -1892.53901254 117.38674604 -0.01326207 3.31326207 + 360 0.03600000 -1888.66987459 -1892.92337308 129.04508370 -0.01383390 3.31383390 + 370 0.03700000 -1888.66999819 -1893.46445589 145.45701553 -0.01441561 3.31441561 + 380 0.03800000 -1888.67010979 -1893.97065536 160.81100019 -0.01500688 3.31500688 + 390 0.03900000 -1888.67016559 -1894.26835837 169.84119248 -0.01560734 3.31560734 + 400 0.04000000 -1888.67014686 -1894.26967995 169.88185548 -0.01621664 3.31621664 + 410 0.04100000 -1888.67006186 -1894.00321089 161.80014284 -0.01683442 3.31683442 + 420 0.04200000 -1888.66994386 -1893.60086344 149.59707422 -0.01746033 3.31746033 + 430 0.04300000 -1888.66984078 -1893.24559860 138.82197278 -0.01809405 3.31809405 + 440 0.04400000 -1888.66979419 -1893.09727893 134.32357877 -0.01873527 3.31873527 + 450 0.04500000 -1888.66982159 -1893.22837461 138.30000376 -0.01938373 3.31938373 + 460 0.04600000 -1888.66990991 -1893.59670402 149.47191350 -0.02003918 3.32003918 + 470 0.04700000 -1888.67002193 -1894.06542618 163.68887740 -0.02070143 3.32070143 + 480 0.04800000 -1888.67011408 -1894.46010861 175.66018436 -0.02137030 3.32137030 + 490 0.04900000 -1888.67015195 -1894.63688117 181.02206322 -0.02204565 3.32204565 + 500 0.05000000 -1888.67012178 -1894.53632241 177.97216884 -0.02272740 3.32272740 + 510 0.05100000 -1888.67003782 -1894.20444750 167.90610440 -0.02341547 3.32341547 + 520 0.05200000 -1888.66993171 -1893.77231086 154.79891357 -0.02410981 3.32410981 + 530 0.05300000 -1888.66984524 -1893.40525947 143.66572040 -0.02481040 3.32481040 + 540 0.05400000 -1888.66981428 -1893.23762103 138.58074854 -0.02551724 3.32551724 + 550 0.05500000 -1888.66985024 -1893.31793613 141.01630314 -0.02623032 3.32623032 + 560 0.05600000 -1888.66993756 -1893.59069032 149.28862746 -0.02694963 3.32694963 + 570 0.05700000 -1888.67003871 -1893.92089591 159.30352583 -0.02767517 3.32767517 + 580 0.05800000 -1888.67011342 -1894.15124772 166.28980520 -0.02840691 3.32840691 + 590 0.05900000 -1888.67013211 -1894.16548061 166.72104344 -0.02914478 3.32914478 + 600 0.06000000 -1888.67008732 -1893.93443338 159.71275857 -0.02988871 3.32988871 + 610 0.06100000 -1888.66999458 -1893.52841675 147.39760649 -0.03063856 3.33063856 + 620 0.06200000 -1888.66988829 -1893.09235041 134.17119966 -0.03139416 3.33139416 + 630 0.06300000 -1888.66981016 -1892.79172036 125.05288241 -0.03215531 3.33215531 + 640 0.06400000 -1888.66979281 -1892.74755409 123.71346729 -0.03292176 3.33292176 + 650 0.06500000 -1888.66984352 -1892.98665478 130.96590321 -0.03369323 3.33369323 + 660 0.06600000 -1888.66994264 -1893.42999887 144.41332385 -0.03446937 3.33446937 + 670 0.06700000 -1888.67005253 -1893.92310700 159.37018803 -0.03524986 3.33524986 + 680 0.06800000 -1888.67013328 -1894.29451600 170.63575807 -0.03603430 3.33603430 + 690 0.06900000 -1888.67015472 -1894.41878137 174.40514195 -0.03682229 3.33682229 + 700 0.07000000 -1888.67010916 -1894.26288055 169.67671536 -0.03761343 3.33761343 + 710 0.07100000 -1888.67001386 -1893.89812923 158.61357122 -0.03840729 3.33840729 + 720 0.07200000 -1888.66990397 -1893.47348765 145.73388461 -0.03920344 3.33920344 + 730 0.07300000 -1888.66982231 -1893.15984859 136.22099965 -0.04000148 3.34000148 + 740 0.07400000 -1888.66980129 -1893.08373765 133.91254030 -0.04080098 3.34080098 + 750 0.07500000 -1888.66984814 -1893.27755530 139.79127022 -0.04160156 3.34160156 + 760 0.07600000 -1888.66994235 -1893.66837384 151.64528962 -0.04240282 3.34240282 + 770 0.07700000 -1888.67004573 -1894.10941225 165.02263022 -0.04320441 3.34320441 + 780 0.07800000 -1888.67011722 -1894.43947564 175.03411433 -0.04400599 3.34400599 + 790 0.07900000 -1888.67013317 -1894.54590490 178.26254255 -0.04480726 3.34480726 + 800 0.08000000 -1888.67008771 -1894.40384162 173.95392409 -0.04560792 3.34560792 + 810 0.08100000 -1888.66999942 -1894.08389023 164.24973325 -0.04640773 3.34640773 + 820 0.08200000 -1888.66990467 -1893.72313999 153.30795968 -0.04720647 3.34720647 + 830 0.08300000 -1888.66984387 -1893.46839210 145.58111627 -0.04800393 3.34800393 + 840 0.08400000 -1888.66984175 -1893.41412556 143.93481091 -0.04879995 3.34879995 + 850 0.08500000 -1888.66989690 -1893.56426173 148.48805548 -0.04959439 3.34959439 + 860 0.08600000 -1888.66998242 -1893.83463738 156.68827289 -0.05038713 3.35038713 + 870 0.08700000 -1888.67006191 -1894.09325064 164.53181916 -0.05117805 3.35117805 + 880 0.08800000 -1888.67010292 -1894.21712680 168.28880099 -0.05196706 3.35196706 + 890 0.08900000 -1888.67009013 -1894.14263970 166.02935659 -0.05275408 3.35275408 + 900 0.09000000 -1888.67002911 -1893.89014590 158.37090593 -0.05353904 3.35353904 + 910 0.09100000 -1888.66994346 -1893.55535729 148.21649476 -0.05432186 3.35432186 + 920 0.09200000 -1888.66986545 -1893.27257968 139.63979183 -0.05510247 3.35510247 + 930 0.09300000 -1888.66982750 -1893.16330910 136.32582951 -0.05588078 3.35588078 + 940 0.09400000 -1888.66984650 -1893.28643304 140.06065783 -0.05665670 3.35665670 + 950 0.09500000 -1888.66991522 -1893.61245361 149.94957262 -0.05743015 3.35743015 + 960 0.09600000 -1888.67000710 -1894.03423941 162.74316510 -0.05820101 3.35820101 + 970 0.09700000 -1888.67008668 -1894.40848044 174.09469033 -0.05896915 3.35896915 + 980 0.09800000 -1888.67012456 -1894.61056787 180.22458605 -0.05973444 3.35973444 + 990 0.09900000 -1888.67010627 -1894.58107679 179.33042341 -0.06049672 3.36049672 + 1000 0.10000000 -1888.67004000 -1894.34773324 172.25312335 -0.06125581 3.36125581 +Loop time of 2.60456 on 1 procs for 1000 steps with 256 atoms + +Performance: 3.317 ns/day, 7.235 hours/ns, 383.942 timesteps/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 | 2.5864 | 2.5864 | 2.5864 | 0.0 | 99.30 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.0079134 | 0.0079134 | 0.0079134 | 0.0 | 0.30 +Output | 0.0027175 | 0.0027175 | 0.0027175 | 0.0 | 0.10 +Modify | 0.00419 | 0.00419 | 0.00419 | 0.0 | 0.16 +Other | | 0.00331 | | | 0.13 + +Nlocal: 256 ave 256 max 256 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1721 ave 1721 max 1721 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 37312 ave 37312 max 37312 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 94592 ave 94592 max 94592 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 94592 +Ave neighs/atom = 369.5 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:02 diff --git a/examples/USER/misc/kolmogorov_crespi_z/log.30Apr19.bilayer-graphene.g++.4 b/examples/USER/misc/kolmogorov_crespi_z/log.30Apr19.bilayer-graphene.g++.4 new file mode 100644 index 0000000000..13d402b512 --- /dev/null +++ b/examples/USER/misc/kolmogorov_crespi_z/log.30Apr19.bilayer-graphene.g++.4 @@ -0,0 +1,210 @@ +LAMMPS (30 Apr 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) + using 1 OpenMP thread(s) per MPI task +# Initialization +units metal +boundary p p p +atom_style atomic +processors * * 1 # domain decomposition over x and y + +# System and atom definition +# we use 2 atom types so that inter- and intra-layer +# interactions can be specified separately +read_data data.bilayer-graphene # read lammps data file + orthogonal box = (0 0 -20) to (17.04 19.6761 40) + 2 by 2 by 1 MPI processor grid + reading atoms ... + 256 atoms + read_data CPU = 0.0488505 secs +mass 1 12.0107 # carbon mass (g/mole) | membrane +mass 2 12.0107 # carbon mass (g/mole) | adsorbate +# Neighbor update settings +neighbor 2.0 bin +neigh_modify every 1 +neigh_modify delay 0 +neigh_modify check yes +# Separate atom groups +group membrane type 1 +128 atoms in group membrane +group adsorbant type 2 +128 atoms in group adsorbant + +######################## Potential defition ######################## +pair_style hybrid/overlay rebo kolmogorov/crespi/z 14.0 +#################################################################### +pair_coeff * * rebo CH.rebo C C # chemical +Reading potential file CH.rebo with DATE: 2018-7-3 +pair_coeff 1 2 kolmogorov/crespi/z CC.KC C C # long-range +#################################################################### + +#### Simulation settings #### +timestep 0.0001 +velocity all create 300.0 12345 +fix thermostat all nve +compute COM1 membrane com +compute COM2 adsorbant com +############################ + +# Output +#dump 1 all xyz 100 trajec.xyz +#dump_modify 1 format line "%s %12.6f %12.6f %12.6f" element "C" "C" +thermo 10 +thermo_style custom step time etotal pe temp c_COM1[3] c_COM2[3] # spcpu +thermo_modify line one format float %14.8f + +###### Run molecular dynamics ###### +run 1000 +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 16 + ghost atom cutoff = 16 + binsize = 8, bins = 3 3 8 + 3 neighbor lists, perpetual/occasional/extra = 3 0 0 + (1) pair rebo, perpetual + attributes: full, newton on, ghost + pair build: full/bin/ghost + stencil: full/ghost/bin/3d + bin: standard + (2) pair kolmogorov/crespi/z, perpetual, skip from (3) + attributes: half, newton on + pair build: skip + stencil: none + bin: none + (3) neighbor class addition, perpetual + attributes: half, newton on + pair build: half/bin/atomonly/newton + stencil: half/bin/3d/newton + bin: standard +Per MPI rank memory allocation (min/avg/max) = 4.572 | 4.572 | 4.572 Mbytes +Step Time TotEng PotEng Temp c_COM1[3] c_COM2[3] + 0 0.00000000 -1888.67041233 -1898.55881343 300.00000000 0.00000000 3.30000000 + 10 0.00100000 -1888.67037240 -1898.21029916 289.42778520 -0.00020126 3.30020126 + 20 0.00200000 -1888.67021561 -1897.22943631 259.67456089 -0.00041357 3.30041357 + 30 0.00300000 -1888.66999327 -1895.86681330 218.34126559 -0.00063673 3.30063673 + 40 0.00400000 -1888.66978373 -1894.47163849 176.02000692 -0.00087055 3.30087055 + 50 0.00500000 -1888.66966087 -1893.37123396 142.63902861 -0.00111486 3.30111486 + 60 0.00600000 -1888.66966151 -1892.75822768 124.04127204 -0.00136952 3.30136952 + 70 0.00700000 -1888.66976993 -1892.63445770 120.28297806 -0.00163441 3.30163441 + 80 0.00800000 -1888.66992887 -1892.83467481 126.35245790 -0.00190946 3.30190946 + 90 0.00900000 -1888.67006887 -1893.11387088 134.81862143 -0.00219458 3.30219458 + 100 0.01000000 -1888.67013641 -1893.25481870 139.09272852 -0.00248973 3.30248973 + 110 0.01100000 -1888.67011221 -1893.15155809 135.96068294 -0.00279489 3.30279489 + 120 0.01200000 -1888.67001516 -1892.84002980 126.51230266 -0.00311004 3.30311004 + 130 0.01300000 -1888.66989017 -1892.47004258 115.29120969 -0.00343519 3.30343519 + 140 0.01400000 -1888.66979250 -1892.23503136 108.16426724 -0.00377038 3.30377038 + 150 0.01500000 -1888.66976498 -1892.28630603 109.72070258 -0.00411562 3.30411562 + 160 0.01600000 -1888.66982073 -1892.66640631 121.25071190 -0.00447099 3.30447099 + 170 0.01700000 -1888.66993810 -1893.28862656 140.12442720 -0.00483654 3.30483654 + 180 0.01800000 -1888.67007037 -1893.97029277 160.80119589 -0.00521235 3.30521235 + 190 0.01900000 -1888.67016732 -1894.50458806 177.00801243 -0.00559851 3.30559851 + 200 0.02000000 -1888.67019479 -1894.73890125 184.11590729 -0.00599512 3.30599512 + 210 0.02100000 -1888.67014440 -1894.62906034 180.78501933 -0.00640230 3.30640230 + 220 0.02200000 -1888.67003699 -1894.25249122 169.36370739 -0.00682016 3.30682016 + 230 0.02300000 -1888.66991405 -1893.77601632 154.91186768 -0.00724883 3.30724883 + 240 0.02400000 -1888.66982545 -1893.38995103 143.20188490 -0.00768845 3.30768845 + 250 0.02500000 -1888.66980650 -1893.23138955 138.39193054 -0.00813913 3.30813913 + 260 0.02600000 -1888.66986149 -1893.32993943 141.38012473 -0.00860097 3.30860097 + 270 0.02700000 -1888.66996324 -1893.60070625 149.59171759 -0.00907408 3.30907408 + 280 0.02800000 -1888.67006705 -1893.88587245 158.24010430 -0.00955849 3.30955849 + 290 0.02900000 -1888.67013001 -1894.02402688 162.42960290 -0.01005424 3.31005424 + 300 0.03000000 -1888.67012741 -1893.91715254 159.18726627 -0.01056129 3.31056129 + 310 0.03100000 -1888.67005750 -1893.57037262 148.66857854 -0.01107957 3.31107957 + 320 0.03200000 -1888.66994592 -1893.09358639 134.20694885 -0.01160898 3.31160898 + 330 0.03300000 -1888.66983608 -1892.66132683 121.09614209 -0.01214935 3.31214935 + 340 0.03400000 -1888.66977429 -1892.44446364 114.51869677 -0.01270046 3.31270046 + 350 0.03500000 -1888.66978845 -1892.53901254 117.38674604 -0.01326207 3.31326207 + 360 0.03600000 -1888.66987459 -1892.92337308 129.04508370 -0.01383390 3.31383390 + 370 0.03700000 -1888.66999819 -1893.46445589 145.45701553 -0.01441561 3.31441561 + 380 0.03800000 -1888.67010979 -1893.97065536 160.81100019 -0.01500688 3.31500688 + 390 0.03900000 -1888.67016559 -1894.26835837 169.84119248 -0.01560734 3.31560734 + 400 0.04000000 -1888.67014686 -1894.26967995 169.88185548 -0.01621664 3.31621664 + 410 0.04100000 -1888.67006186 -1894.00321089 161.80014284 -0.01683442 3.31683442 + 420 0.04200000 -1888.66994386 -1893.60086344 149.59707422 -0.01746033 3.31746033 + 430 0.04300000 -1888.66984078 -1893.24559860 138.82197278 -0.01809405 3.31809405 + 440 0.04400000 -1888.66979419 -1893.09727893 134.32357877 -0.01873527 3.31873527 + 450 0.04500000 -1888.66982159 -1893.22837461 138.30000376 -0.01938373 3.31938373 + 460 0.04600000 -1888.66990991 -1893.59670402 149.47191350 -0.02003918 3.32003918 + 470 0.04700000 -1888.67002193 -1894.06542618 163.68887740 -0.02070143 3.32070143 + 480 0.04800000 -1888.67011408 -1894.46010861 175.66018436 -0.02137030 3.32137030 + 490 0.04900000 -1888.67015195 -1894.63688117 181.02206322 -0.02204565 3.32204565 + 500 0.05000000 -1888.67012178 -1894.53632241 177.97216884 -0.02272740 3.32272740 + 510 0.05100000 -1888.67003782 -1894.20444750 167.90610440 -0.02341547 3.32341547 + 520 0.05200000 -1888.66993171 -1893.77231086 154.79891357 -0.02410981 3.32410981 + 530 0.05300000 -1888.66984524 -1893.40525947 143.66572040 -0.02481040 3.32481040 + 540 0.05400000 -1888.66981428 -1893.23762103 138.58074854 -0.02551724 3.32551724 + 550 0.05500000 -1888.66985024 -1893.31793613 141.01630314 -0.02623032 3.32623032 + 560 0.05600000 -1888.66993756 -1893.59069032 149.28862746 -0.02694963 3.32694963 + 570 0.05700000 -1888.67003871 -1893.92089591 159.30352583 -0.02767517 3.32767517 + 580 0.05800000 -1888.67011342 -1894.15124772 166.28980520 -0.02840691 3.32840691 + 590 0.05900000 -1888.67013211 -1894.16548061 166.72104344 -0.02914478 3.32914478 + 600 0.06000000 -1888.67008732 -1893.93443338 159.71275857 -0.02988871 3.32988871 + 610 0.06100000 -1888.66999458 -1893.52841675 147.39760649 -0.03063856 3.33063856 + 620 0.06200000 -1888.66988829 -1893.09235041 134.17119966 -0.03139416 3.33139416 + 630 0.06300000 -1888.66981016 -1892.79172036 125.05288241 -0.03215531 3.33215531 + 640 0.06400000 -1888.66979281 -1892.74755409 123.71346729 -0.03292176 3.33292176 + 650 0.06500000 -1888.66984352 -1892.98665478 130.96590321 -0.03369323 3.33369323 + 660 0.06600000 -1888.66994264 -1893.42999887 144.41332385 -0.03446937 3.33446937 + 670 0.06700000 -1888.67005253 -1893.92310700 159.37018803 -0.03524986 3.33524986 + 680 0.06800000 -1888.67013328 -1894.29451600 170.63575807 -0.03603430 3.33603430 + 690 0.06900000 -1888.67015472 -1894.41878137 174.40514195 -0.03682229 3.33682229 + 700 0.07000000 -1888.67010916 -1894.26288055 169.67671536 -0.03761343 3.33761343 + 710 0.07100000 -1888.67001386 -1893.89812923 158.61357122 -0.03840729 3.33840729 + 720 0.07200000 -1888.66990397 -1893.47348765 145.73388461 -0.03920344 3.33920344 + 730 0.07300000 -1888.66982231 -1893.15984859 136.22099965 -0.04000148 3.34000148 + 740 0.07400000 -1888.66980129 -1893.08373765 133.91254030 -0.04080098 3.34080098 + 750 0.07500000 -1888.66984814 -1893.27755530 139.79127022 -0.04160156 3.34160156 + 760 0.07600000 -1888.66994235 -1893.66837384 151.64528962 -0.04240282 3.34240282 + 770 0.07700000 -1888.67004573 -1894.10941225 165.02263022 -0.04320441 3.34320441 + 780 0.07800000 -1888.67011722 -1894.43947564 175.03411433 -0.04400599 3.34400599 + 790 0.07900000 -1888.67013317 -1894.54590490 178.26254255 -0.04480726 3.34480726 + 800 0.08000000 -1888.67008771 -1894.40384162 173.95392409 -0.04560792 3.34560792 + 810 0.08100000 -1888.66999942 -1894.08389023 164.24973325 -0.04640773 3.34640773 + 820 0.08200000 -1888.66990467 -1893.72313999 153.30795968 -0.04720647 3.34720647 + 830 0.08300000 -1888.66984387 -1893.46839210 145.58111627 -0.04800393 3.34800393 + 840 0.08400000 -1888.66984175 -1893.41412556 143.93481091 -0.04879995 3.34879995 + 850 0.08500000 -1888.66989690 -1893.56426173 148.48805548 -0.04959439 3.34959439 + 860 0.08600000 -1888.66998242 -1893.83463738 156.68827289 -0.05038713 3.35038713 + 870 0.08700000 -1888.67006191 -1894.09325064 164.53181916 -0.05117805 3.35117805 + 880 0.08800000 -1888.67010292 -1894.21712680 168.28880099 -0.05196706 3.35196706 + 890 0.08900000 -1888.67009013 -1894.14263970 166.02935659 -0.05275408 3.35275408 + 900 0.09000000 -1888.67002911 -1893.89014590 158.37090593 -0.05353904 3.35353904 + 910 0.09100000 -1888.66994346 -1893.55535729 148.21649476 -0.05432186 3.35432186 + 920 0.09200000 -1888.66986545 -1893.27257968 139.63979183 -0.05510247 3.35510247 + 930 0.09300000 -1888.66982750 -1893.16330910 136.32582951 -0.05588078 3.35588078 + 940 0.09400000 -1888.66984650 -1893.28643304 140.06065783 -0.05665670 3.35665670 + 950 0.09500000 -1888.66991522 -1893.61245361 149.94957262 -0.05743015 3.35743015 + 960 0.09600000 -1888.67000710 -1894.03423941 162.74316510 -0.05820101 3.35820101 + 970 0.09700000 -1888.67008668 -1894.40848044 174.09469033 -0.05896915 3.35896915 + 980 0.09800000 -1888.67012456 -1894.61056787 180.22458605 -0.05973444 3.35973444 + 990 0.09900000 -1888.67010627 -1894.58107679 179.33042341 -0.06049672 3.36049672 + 1000 0.10000000 -1888.67004000 -1894.34773324 172.25312335 -0.06125581 3.36125581 +Loop time of 1.55992 on 4 procs for 1000 steps with 256 atoms + +Performance: 5.539 ns/day, 4.333 hours/ns, 641.059 timesteps/s +96.5% 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.3161 | 1.3724 | 1.4128 | 3.0 | 87.98 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.11734 | 0.16017 | 0.21617 | 8.9 | 10.27 +Output | 0.0032182 | 0.0051764 | 0.010916 | 4.6 | 0.33 +Modify | 0.0020187 | 0.0022321 | 0.0026002 | 0.5 | 0.14 +Other | | 0.0199 | | | 1.28 + +Nlocal: 64 ave 64 max 64 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 1265 ave 1265 max 1265 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Neighs: 9328 ave 9328 max 9328 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 23648 ave 23648 max 23648 min +Histogram: 4 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 94592 +Ave neighs/atom = 369.5 +Neighbor list builds = 0 +Dangerous builds = 0 +Total wall time: 0:00:01 diff --git a/examples/airebo/CH.rebo b/examples/airebo/CH.rebo new file mode 120000 index 0000000000..9272e57972 --- /dev/null +++ b/examples/airebo/CH.rebo @@ -0,0 +1 @@ +../../potentials/CH.rebo \ No newline at end of file diff --git a/examples/airebo/in.airebo-0-0 b/examples/airebo/in.airebo-0-0 index edcb1561fb..077da68912 100644 --- a/examples/airebo/in.airebo-0-0 +++ b/examples/airebo/in.airebo-0-0 @@ -11,7 +11,7 @@ neighbor 0.5 bin neigh_modify delay 5 every 1 pair_style airebo 3.0 0 0 -pair_coeff * * ../../potentials/CH.airebo C H +pair_coeff * * CH.airebo C H velocity all create 300.0 761341 diff --git a/examples/airebo/in.rebo2 b/examples/airebo/in.rebo2 index 6834528ffb..e06cf462ca 100644 --- a/examples/airebo/in.rebo2 +++ b/examples/airebo/in.rebo2 @@ -1,4 +1,4 @@ -# AIREBO polyethelene benchmark +# REBO polyethelene benchmark units metal atom_style atomic @@ -11,7 +11,7 @@ neighbor 0.5 bin neigh_modify delay 5 every 1 pair_style rebo -pair_coeff * * ../../potentials/CH.rebo C H +pair_coeff * * CH.rebo C H velocity all create 300.0 761341 diff --git a/examples/airebo/log.12Dec18.airebo-0-0.g++.1 b/examples/airebo/log.30Apr2019.airebo-0-0.g++.1 similarity index 74% rename from examples/airebo/log.12Dec18.airebo-0-0.g++.1 rename to examples/airebo/log.30Apr2019.airebo-0-0.g++.1 index 7efacc2dd7..47f5f04a83 100644 --- a/examples/airebo/log.12Dec18.airebo-0-0.g++.1 +++ b/examples/airebo/log.30Apr2019.airebo-0-0.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (12 Dec 2018) +LAMMPS (30 Apr 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -10,19 +11,20 @@ read_data data.airebo 1 by 1 by 1 MPI processor grid reading atoms ... 60 atoms + read_data CPU = 0.000232458 secs replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 1 by 1 by 1 MPI processor grid 32640 atoms - Time spent = 0.00132823 secs + replicate CPU = 0.00206327 secs neighbor 0.5 bin neigh_modify delay 5 every 1 pair_style airebo 3.0 0 0 -pair_coeff * * ../../potentials/CH.airebo C H -Reading potential file ../../potentials/CH.airebo with DATE: 2011-10-25 +pair_coeff * * CH.airebo C H +Reading potential file CH.airebo with DATE: 2011-10-25 velocity all create 300.0 761341 @@ -56,20 +58,20 @@ Step Temp E_pair E_mol TotEng Press 80 202.34667 -138029.28 0 -137175.59 -7623.6634 90 194.92367 -137997.12 0 -137174.75 -32277.173 100 185.2078 -137954.64 0 -137173.26 -6888.5104 -Loop time of 4.96876 on 1 procs for 100 steps with 32640 atoms +Loop time of 9.70367 on 1 procs for 100 steps with 32640 atoms -Performance: 0.869 ns/day, 27.604 hours/ns, 20.126 timesteps/s -99.8% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 0.445 ns/day, 53.909 hours/ns, 10.305 timesteps/s +99.5% 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.4535 | 3.4535 | 3.4535 | 0.0 | 69.50 -Neigh | 1.4688 | 1.4688 | 1.4688 | 0.0 | 29.56 -Comm | 0.015106 | 0.015106 | 0.015106 | 0.0 | 0.30 -Output | 0.00098944 | 0.00098944 | 0.00098944 | 0.0 | 0.02 -Modify | 0.021631 | 0.021631 | 0.021631 | 0.0 | 0.44 -Other | | 0.008734 | | | 0.18 +Pair | 7.2508 | 7.2508 | 7.2508 | 0.0 | 74.72 +Neigh | 2.3573 | 2.3573 | 2.3573 | 0.0 | 24.29 +Comm | 0.03116 | 0.03116 | 0.03116 | 0.0 | 0.32 +Output | 0.0014739 | 0.0014739 | 0.0014739 | 0.0 | 0.02 +Modify | 0.0447 | 0.0447 | 0.0447 | 0.0 | 0.46 +Other | | 0.01819 | | | 0.19 Nlocal: 32640 ave 32640 max 32640 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -84,4 +86,4 @@ Total # of neighbors = 4902134 Ave neighs/atom = 150.188 Neighbor list builds = 9 Dangerous builds = 0 -Total wall time: 0:00:05 +Total wall time: 0:00:10 diff --git a/examples/airebo/log.12Dec18.airebo-0-0.g++.4 b/examples/airebo/log.30Apr2019.airebo-0-0.g++.4 similarity index 74% rename from examples/airebo/log.12Dec18.airebo-0-0.g++.4 rename to examples/airebo/log.30Apr2019.airebo-0-0.g++.4 index e2afb10452..a777e17885 100644 --- a/examples/airebo/log.12Dec18.airebo-0-0.g++.4 +++ b/examples/airebo/log.30Apr2019.airebo-0-0.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (12 Dec 2018) +LAMMPS (30 Apr 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -10,19 +11,20 @@ read_data data.airebo 1 by 1 by 4 MPI processor grid reading atoms ... 60 atoms + read_data CPU = 0.000363827 secs replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 2 by 2 by 1 MPI processor grid 32640 atoms - Time spent = 0.000664234 secs + replicate CPU = 0.00244427 secs neighbor 0.5 bin neigh_modify delay 5 every 1 pair_style airebo 3.0 0 0 -pair_coeff * * ../../potentials/CH.airebo C H -Reading potential file ../../potentials/CH.airebo with DATE: 2011-10-25 +pair_coeff * * CH.airebo C H +Reading potential file CH.airebo with DATE: 2011-10-25 velocity all create 300.0 761341 @@ -56,20 +58,20 @@ Step Temp E_pair E_mol TotEng Press 80 202.34667 -138029.28 0 -137175.59 -7623.6634 90 194.92367 -137997.12 0 -137174.75 -32277.173 100 185.2078 -137954.64 0 -137173.26 -6888.5104 -Loop time of 1.44469 on 4 procs for 100 steps with 32640 atoms +Loop time of 6.71962 on 4 procs for 100 steps with 32640 atoms -Performance: 2.990 ns/day, 8.026 hours/ns, 69.219 timesteps/s -99.7% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 0.643 ns/day, 37.331 hours/ns, 14.882 timesteps/s +96.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.92215 | 0.93812 | 0.95363 | 1.6 | 64.94 -Neigh | 0.45592 | 0.45842 | 0.46002 | 0.2 | 31.73 -Comm | 0.016539 | 0.03352 | 0.050276 | 8.6 | 2.32 -Output | 0.00043154 | 0.00059217 | 0.001025 | 0.0 | 0.04 -Modify | 0.0087888 | 0.0090455 | 0.0095809 | 0.3 | 0.63 -Other | | 0.004989 | | | 0.35 +Pair | 4.4598 | 4.6375 | 4.7708 | 5.5 | 69.01 +Neigh | 1.5903 | 1.6452 | 1.7207 | 3.8 | 24.48 +Comm | 0.16708 | 0.37041 | 0.56709 | 25.1 | 5.51 +Output | 0.001061 | 0.0059808 | 0.0090635 | 4.3 | 0.09 +Modify | 0.030086 | 0.03154 | 0.032522 | 0.5 | 0.47 +Other | | 0.02897 | | | 0.43 Nlocal: 8160 ave 8163 max 8157 min Histogram: 1 1 0 0 0 0 0 0 1 1 @@ -84,4 +86,4 @@ Total # of neighbors = 4902134 Ave neighs/atom = 150.188 Neighbor list builds = 9 Dangerous builds = 0 -Total wall time: 0:00:01 +Total wall time: 0:00:07 diff --git a/examples/airebo/log.12Dec18.airebo-m.g++.1 b/examples/airebo/log.30Apr2019.airebo-m.g++.1 similarity index 78% rename from examples/airebo/log.12Dec18.airebo-m.g++.1 rename to examples/airebo/log.30Apr2019.airebo-m.g++.1 index 8042130645..0115756737 100644 --- a/examples/airebo/log.12Dec18.airebo-m.g++.1 +++ b/examples/airebo/log.30Apr2019.airebo-m.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (12 Dec 2018) +LAMMPS (30 Apr 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -10,12 +11,13 @@ read_data data.airebo 1 by 1 by 1 MPI processor grid reading atoms ... 60 atoms + read_data CPU = 0.000225067 secs replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 1 by 1 by 1 MPI processor grid 32640 atoms - Time spent = 0.00136471 secs + replicate CPU = 0.00226521 secs neighbor 0.5 bin neigh_modify delay 5 every 1 @@ -56,20 +58,20 @@ Step Temp E_pair E_mol TotEng Press 80 164.28396 -138709.5 0 -138016.4 -1524.7353 90 180.26403 -138776.42 0 -138015.9 -27143.467 100 164.05694 -138706.58 0 -138014.44 5157.5517 -Loop time of 64.5779 on 1 procs for 100 steps with 32640 atoms +Loop time of 111.537 on 1 procs for 100 steps with 32640 atoms -Performance: 0.067 ns/day, 358.766 hours/ns, 1.549 timesteps/s -99.9% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 0.039 ns/day, 619.650 hours/ns, 0.897 timesteps/s +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 | 59.905 | 59.905 | 59.905 | 0.0 | 92.76 -Neigh | 4.615 | 4.615 | 4.615 | 0.0 | 7.15 -Comm | 0.024453 | 0.024453 | 0.024453 | 0.0 | 0.04 -Output | 0.00099945 | 0.00099945 | 0.00099945 | 0.0 | 0.00 -Modify | 0.021971 | 0.021971 | 0.021971 | 0.0 | 0.03 -Other | | 0.01029 | | | 0.02 +Pair | 103.58 | 103.58 | 103.58 | 0.0 | 92.87 +Neigh | 7.8371 | 7.8371 | 7.8371 | 0.0 | 7.03 +Comm | 0.046259 | 0.046259 | 0.046259 | 0.0 | 0.04 +Output | 0.001497 | 0.001497 | 0.001497 | 0.0 | 0.00 +Modify | 0.047151 | 0.047151 | 0.047151 | 0.0 | 0.04 +Other | | 0.02204 | | | 0.02 Nlocal: 32640 ave 32640 max 32640 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -84,4 +86,4 @@ Total # of neighbors = 22210922 Ave neighs/atom = 680.482 Neighbor list builds = 8 Dangerous builds = 0 -Total wall time: 0:01:05 +Total wall time: 0:01:53 diff --git a/examples/airebo/log.12Dec18.airebo-m.g++.4 b/examples/airebo/log.30Apr2019.airebo-m.g++.4 similarity index 78% rename from examples/airebo/log.12Dec18.airebo-m.g++.4 rename to examples/airebo/log.30Apr2019.airebo-m.g++.4 index 1aab3b3544..4139c58387 100644 --- a/examples/airebo/log.12Dec18.airebo-m.g++.4 +++ b/examples/airebo/log.30Apr2019.airebo-m.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (12 Dec 2018) +LAMMPS (30 Apr 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -10,12 +11,13 @@ read_data data.airebo 1 by 1 by 4 MPI processor grid reading atoms ... 60 atoms + read_data CPU = 0.000880957 secs replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 2 by 2 by 1 MPI processor grid 32640 atoms - Time spent = 0.000692129 secs + replicate CPU = 0.00271702 secs neighbor 0.5 bin neigh_modify delay 5 every 1 @@ -56,20 +58,20 @@ Step Temp E_pair E_mol TotEng Press 80 164.28396 -138709.5 0 -138016.4 -1524.7353 90 180.26403 -138776.42 0 -138015.9 -27143.467 100 164.05694 -138706.58 0 -138014.44 5157.5517 -Loop time of 17.8093 on 4 procs for 100 steps with 32640 atoms +Loop time of 68.9923 on 4 procs for 100 steps with 32640 atoms -Performance: 0.243 ns/day, 98.940 hours/ns, 5.615 timesteps/s -99.7% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 0.063 ns/day, 383.290 hours/ns, 1.449 timesteps/s +96.8% CPU use with 4 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 15.932 | 16.012 | 16.082 | 1.5 | 89.91 -Neigh | 1.5933 | 1.6063 | 1.6173 | 0.7 | 9.02 -Comm | 0.098741 | 0.17402 | 0.2676 | 16.8 | 0.98 -Output | 0.00044513 | 0.00074279 | 0.0016048 | 0.0 | 0.00 -Modify | 0.0088906 | 0.0089375 | 0.008992 | 0.0 | 0.05 -Other | | 0.007106 | | | 0.04 +Pair | 60.09 | 60.276 | 60.515 | 2.1 | 87.37 +Neigh | 6.7521 | 6.8996 | 7.0678 | 4.3 | 10.00 +Comm | 1.5441 | 1.7514 | 2.0838 | 16.9 | 2.54 +Output | 0.0010803 | 0.001972 | 0.0043106 | 3.0 | 0.00 +Modify | 0.031365 | 0.032539 | 0.034404 | 0.7 | 0.05 +Other | | 0.03104 | | | 0.04 Nlocal: 8160 ave 8167 max 8153 min Histogram: 1 0 1 0 0 0 0 1 0 1 @@ -84,4 +86,4 @@ Total # of neighbors = 22210922 Ave neighs/atom = 680.482 Neighbor list builds = 8 Dangerous builds = 0 -Total wall time: 0:00:18 +Total wall time: 0:01:10 diff --git a/examples/airebo/log.12Dec18.airebo.g++.1 b/examples/airebo/log.30Apr2019.airebo.g++.1 similarity index 78% rename from examples/airebo/log.12Dec18.airebo.g++.1 rename to examples/airebo/log.30Apr2019.airebo.g++.1 index ccc156c15b..61792e9a7a 100644 --- a/examples/airebo/log.12Dec18.airebo.g++.1 +++ b/examples/airebo/log.30Apr2019.airebo.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (12 Dec 2018) +LAMMPS (30 Apr 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -10,12 +11,13 @@ read_data data.airebo 1 by 1 by 1 MPI processor grid reading atoms ... 60 atoms + read_data CPU = 0.000217438 secs replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 1 by 1 by 1 MPI processor grid 32640 atoms - Time spent = 0.0013268 secs + replicate CPU = 0.00204968 secs neighbor 0.5 bin neigh_modify delay 5 every 1 @@ -56,20 +58,20 @@ Step Temp E_pair E_mol TotEng Press 80 157.16184 -138695.77 0 -138032.72 19824.698 90 196.15907 -138860.65 0 -138033.07 -7950.8463 100 178.31875 -138784.89 0 -138032.57 30997.671 -Loop time of 57.482 on 1 procs for 100 steps with 32640 atoms +Loop time of 98.1502 on 1 procs for 100 steps with 32640 atoms -Performance: 0.075 ns/day, 319.344 hours/ns, 1.740 timesteps/s -99.9% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 0.044 ns/day, 545.279 hours/ns, 1.019 timesteps/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 | 52.796 | 52.796 | 52.796 | 0.0 | 91.85 -Neigh | 4.6286 | 4.6286 | 4.6286 | 0.0 | 8.05 -Comm | 0.024035 | 0.024035 | 0.024035 | 0.0 | 0.04 -Output | 0.00098443 | 0.00098443 | 0.00098443 | 0.0 | 0.00 -Modify | 0.021958 | 0.021958 | 0.021958 | 0.0 | 0.04 -Other | | 0.01014 | | | 0.02 +Pair | 90.237 | 90.237 | 90.237 | 0.0 | 91.94 +Neigh | 7.796 | 7.796 | 7.796 | 0.0 | 7.94 +Comm | 0.048884 | 0.048884 | 0.048884 | 0.0 | 0.05 +Output | 0.0016053 | 0.0016053 | 0.0016053 | 0.0 | 0.00 +Modify | 0.045511 | 0.045511 | 0.045511 | 0.0 | 0.05 +Other | | 0.0217 | | | 0.02 Nlocal: 32640 ave 32640 max 32640 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -84,4 +86,4 @@ Total # of neighbors = 22217840 Ave neighs/atom = 680.694 Neighbor list builds = 8 Dangerous builds = 0 -Total wall time: 0:00:58 +Total wall time: 0:01:39 diff --git a/examples/airebo/log.12Dec18.airebo.g++.4 b/examples/airebo/log.30Apr2019.airebo.g++.4 similarity index 78% rename from examples/airebo/log.12Dec18.airebo.g++.4 rename to examples/airebo/log.30Apr2019.airebo.g++.4 index fbdd9ed2e1..9857d9c741 100644 --- a/examples/airebo/log.12Dec18.airebo.g++.4 +++ b/examples/airebo/log.30Apr2019.airebo.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (12 Dec 2018) +LAMMPS (30 Apr 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) using 1 OpenMP thread(s) per MPI task # AIREBO polyethelene benchmark @@ -10,12 +11,13 @@ read_data data.airebo 1 by 1 by 4 MPI processor grid reading atoms ... 60 atoms + read_data CPU = 0.000266314 secs replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 2 by 2 by 1 MPI processor grid 32640 atoms - Time spent = 0.000614405 secs + replicate CPU = 0.00146151 secs neighbor 0.5 bin neigh_modify delay 5 every 1 @@ -56,20 +58,20 @@ Step Temp E_pair E_mol TotEng Press 80 157.16184 -138695.77 0 -138032.72 19824.698 90 196.15907 -138860.65 0 -138033.07 -7950.8463 100 178.31875 -138784.89 0 -138032.57 30997.671 -Loop time of 15.9743 on 4 procs for 100 steps with 32640 atoms +Loop time of 60.4943 on 4 procs for 100 steps with 32640 atoms -Performance: 0.270 ns/day, 88.746 hours/ns, 6.260 timesteps/s -99.7% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 0.071 ns/day, 336.080 hours/ns, 1.653 timesteps/s +97.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 | 14.13 | 14.185 | 14.258 | 1.3 | 88.80 -Neigh | 1.5945 | 1.6093 | 1.6237 | 0.9 | 10.07 -Comm | 0.075436 | 0.16329 | 0.23273 | 14.3 | 1.02 -Output | 0.00041533 | 0.00069332 | 0.0014405 | 0.0 | 0.00 -Modify | 0.0089853 | 0.0090484 | 0.0091338 | 0.1 | 0.06 -Other | | 0.007319 | | | 0.05 +Pair | 51.737 | 52.46 | 52.86 | 6.2 | 86.72 +Neigh | 6.5823 | 6.6605 | 6.726 | 2.0 | 11.01 +Comm | 0.92426 | 1.3125 | 2.0111 | 37.0 | 2.17 +Output | 0.0010669 | 0.0019811 | 0.0043974 | 3.1 | 0.00 +Modify | 0.030364 | 0.031523 | 0.032495 | 0.5 | 0.05 +Other | | 0.028 | | | 0.05 Nlocal: 8160 ave 8174 max 8146 min Histogram: 1 0 1 0 0 0 0 1 0 1 @@ -84,4 +86,4 @@ Total # of neighbors = 22217840 Ave neighs/atom = 680.694 Neighbor list builds = 8 Dangerous builds = 0 -Total wall time: 0:00:16 +Total wall time: 0:01:01 diff --git a/examples/airebo/log.12Dec18.rebo2.g++.1 b/examples/airebo/log.30Apr2019.rebo2.g++.1 similarity index 73% rename from examples/airebo/log.12Dec18.rebo2.g++.1 rename to examples/airebo/log.30Apr2019.rebo2.g++.1 index 83c3a8ebea..7cd3d65294 100644 --- a/examples/airebo/log.12Dec18.rebo2.g++.1 +++ b/examples/airebo/log.30Apr2019.rebo2.g++.1 @@ -1,6 +1,7 @@ -LAMMPS (12 Dec 2018) +LAMMPS (30 Apr 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) using 1 OpenMP thread(s) per MPI task -# AIREBO polyethelene benchmark +# REBO polyethelene benchmark units metal atom_style atomic @@ -10,19 +11,20 @@ read_data data.airebo 1 by 1 by 1 MPI processor grid reading atoms ... 60 atoms + read_data CPU = 0.000190735 secs replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 1 by 1 by 1 MPI processor grid 32640 atoms - Time spent = 0.0013907 secs + replicate CPU = 0.00197148 secs neighbor 0.5 bin neigh_modify delay 5 every 1 pair_style rebo -pair_coeff * * ../../potentials/CH.rebo C H -Reading potential file ../../potentials/CH.rebo with DATE: 2018-7-3 +pair_coeff * * CH.rebo C H +Reading potential file CH.rebo with DATE: 2018-7-3 velocity all create 300.0 761341 @@ -56,20 +58,20 @@ Step Temp E_pair E_mol TotEng Press 80 202.37482 -138029.39 0 -137175.59 -7622.7319 90 194.90628 -137997.05 0 -137174.75 -32267.471 100 185.17818 -137954.51 0 -137173.26 -6901.7499 -Loop time of 4.96341 on 1 procs for 100 steps with 32640 atoms +Loop time of 9.44819 on 1 procs for 100 steps with 32640 atoms -Performance: 0.870 ns/day, 27.574 hours/ns, 20.147 timesteps/s -99.8% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 0.457 ns/day, 52.490 hours/ns, 10.584 timesteps/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.4476 | 3.4476 | 3.4476 | 0.0 | 69.46 -Neigh | 1.4692 | 1.4692 | 1.4692 | 0.0 | 29.60 -Comm | 0.015226 | 0.015226 | 0.015226 | 0.0 | 0.31 -Output | 0.00098777 | 0.00098777 | 0.00098777 | 0.0 | 0.02 -Modify | 0.021646 | 0.021646 | 0.021646 | 0.0 | 0.44 -Other | | 0.008718 | | | 0.18 +Pair | 7.037 | 7.037 | 7.037 | 0.0 | 74.48 +Neigh | 2.3182 | 2.3182 | 2.3182 | 0.0 | 24.54 +Comm | 0.029898 | 0.029898 | 0.029898 | 0.0 | 0.32 +Output | 0.0014331 | 0.0014331 | 0.0014331 | 0.0 | 0.02 +Modify | 0.043851 | 0.043851 | 0.043851 | 0.0 | 0.46 +Other | | 0.01774 | | | 0.19 Nlocal: 32640 ave 32640 max 32640 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -84,4 +86,4 @@ Total # of neighbors = 4902134 Ave neighs/atom = 150.188 Neighbor list builds = 9 Dangerous builds = 0 -Total wall time: 0:00:05 +Total wall time: 0:00:09 diff --git a/examples/airebo/log.12Dec18.rebo2.g++.4 b/examples/airebo/log.30Apr2019.rebo2.g++.4 similarity index 73% rename from examples/airebo/log.12Dec18.rebo2.g++.4 rename to examples/airebo/log.30Apr2019.rebo2.g++.4 index f38f484238..14086fbf40 100644 --- a/examples/airebo/log.12Dec18.rebo2.g++.4 +++ b/examples/airebo/log.30Apr2019.rebo2.g++.4 @@ -1,6 +1,7 @@ -LAMMPS (12 Dec 2018) +LAMMPS (30 Apr 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) using 1 OpenMP thread(s) per MPI task -# AIREBO polyethelene benchmark +# REBO polyethelene benchmark units metal atom_style atomic @@ -10,19 +11,20 @@ read_data data.airebo 1 by 1 by 4 MPI processor grid reading atoms ... 60 atoms + read_data CPU = 0.000682831 secs replicate 17 16 2 orthogonal box = (-2.1 -2.1 0) to (69.3 65.1 51.158) 2 by 2 by 1 MPI processor grid 32640 atoms - Time spent = 0.000644684 secs + replicate CPU = 0.00221777 secs neighbor 0.5 bin neigh_modify delay 5 every 1 pair_style rebo -pair_coeff * * ../../potentials/CH.rebo C H -Reading potential file ../../potentials/CH.rebo with DATE: 2018-7-3 +pair_coeff * * CH.rebo C H +Reading potential file CH.rebo with DATE: 2018-7-3 velocity all create 300.0 761341 @@ -56,20 +58,20 @@ Step Temp E_pair E_mol TotEng Press 80 202.37482 -138029.39 0 -137175.59 -7622.7319 90 194.90628 -137997.05 0 -137174.75 -32267.471 100 185.17818 -137954.51 0 -137173.26 -6901.7499 -Loop time of 1.4517 on 4 procs for 100 steps with 32640 atoms +Loop time of 6.35645 on 4 procs for 100 steps with 32640 atoms -Performance: 2.976 ns/day, 8.065 hours/ns, 68.885 timesteps/s -99.4% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 0.680 ns/day, 35.314 hours/ns, 15.732 timesteps/s +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 | 0.92079 | 0.93883 | 0.95524 | 1.6 | 64.67 -Neigh | 0.45826 | 0.46013 | 0.46316 | 0.3 | 31.70 -Comm | 0.02183 | 0.038046 | 0.052974 | 7.5 | 2.62 -Output | 0.00044131 | 0.00057179 | 0.00093198 | 0.0 | 0.04 -Modify | 0.0088243 | 0.0089917 | 0.0092998 | 0.2 | 0.62 -Other | | 0.005127 | | | 0.35 +Pair | 4.4335 | 4.5041 | 4.56 | 2.1 | 70.86 +Neigh | 1.5332 | 1.5919 | 1.6466 | 3.6 | 25.04 +Comm | 0.098299 | 0.20854 | 0.26277 | 14.2 | 3.28 +Output | 0.0011072 | 0.0018047 | 0.0037503 | 2.6 | 0.03 +Modify | 0.028811 | 0.030358 | 0.031516 | 0.6 | 0.48 +Other | | 0.01977 | | | 0.31 Nlocal: 8160 ave 8163 max 8157 min Histogram: 1 1 0 0 0 0 0 0 1 1 @@ -84,4 +86,4 @@ Total # of neighbors = 4902134 Ave neighs/atom = 150.188 Neighbor list builds = 9 Dangerous builds = 0 -Total wall time: 0:00:01 +Total wall time: 0:00:06 From c28cf9f742e1f2ba7ad73cea9a3515ec6587fb4f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 4 May 2019 20:53:43 -0400 Subject: [PATCH 113/311] set variant flag in USER-INTEL (AI)REBO(-M) styles --- src/USER-INTEL/pair_airebo_morse_intel.cpp | 4 +++- src/USER-INTEL/pair_rebo_intel.cpp | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/USER-INTEL/pair_airebo_morse_intel.cpp b/src/USER-INTEL/pair_airebo_morse_intel.cpp index 21de29e1a7..f68e299fa0 100644 --- a/src/USER-INTEL/pair_airebo_morse_intel.cpp +++ b/src/USER-INTEL/pair_airebo_morse_intel.cpp @@ -23,7 +23,9 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ PairAIREBOMorseIntel::PairAIREBOMorseIntel(LAMMPS *lmp) - : PairAIREBOIntel(lmp) {} + : PairAIREBOIntel(lmp) { + variant = AIREBO_M; +} /* ---------------------------------------------------------------------- global settings diff --git a/src/USER-INTEL/pair_rebo_intel.cpp b/src/USER-INTEL/pair_rebo_intel.cpp index e829b10ba1..d067005cfd 100644 --- a/src/USER-INTEL/pair_rebo_intel.cpp +++ b/src/USER-INTEL/pair_rebo_intel.cpp @@ -22,7 +22,9 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -PairREBOIntel::PairREBOIntel(LAMMPS *lmp) : PairAIREBOIntel(lmp) {} +PairREBOIntel::PairREBOIntel(LAMMPS *lmp) : PairAIREBOIntel(lmp) { + variant = REBO_2; +} /* ---------------------------------------------------------------------- global settings From 24e41bc0857d67c101dea6e4dc187fe44d5251aa Mon Sep 17 00:00:00 2001 From: Mingjian Wen Date: Sat, 4 May 2019 22:24:05 -0500 Subject: [PATCH 114/311] Update doc and examples due to the change of parameters --- doc/src/pair_drip.txt | 18 ++++--- examples/USER/misc/drip/C.drip | 10 ++-- .../misc/drip/log.19Apr2019.g++.in.CH_drip | 50 +++++++++---------- .../misc/drip/log.19Apr2019.g++.in.C_drip | 34 ++++++------- src/USER-MISC/pair_drip.cpp | 3 +- 5 files changed, 61 insertions(+), 54 deletions(-) diff --git a/doc/src/pair_drip.txt b/doc/src/pair_drip.txt index fada61a329..7d041a8f08 100644 --- a/doc/src/pair_drip.txt +++ b/doc/src/pair_drip.txt @@ -33,8 +33,8 @@ pair_coeff * * rebo CH.airebo C H :pre Style {drip} computes the interlayer interactions of layered materials using the dihedral-angle-corrected registry-dependent (DRIP) potential as described -in "(Wen)"_#Wen1, which is based on the "(Kolmogorov)"_#Kolmogorov1 potential -and provides an improvded prediction for forces. +in "(Wen)"_#Wen2018, which is based on the "(Kolmogorov)"_#Kolmogorov2005 +potential and provides an improvded prediction for forces. The total potential energy of a system is :c,image(Eqs/pair_drip.jpg) @@ -88,9 +88,10 @@ pair_style hybrid/overlay drip rebo pair_coeff * * drip C.drip C NULL pair_coeff * * rebo CH.airebo C H :pre -NOTE: The parameter file developed in "(Wen)"_#Wen1 is provided with LAMMPS (see -the "potentials" directory). - +NOTE: The potential parameters developed in "(Wen)"_#Wen2018 are provided with +LAMMPS (see the "potentials" directory). Besides those in "Wen"_#Wen2018, an +additional parameter "normal_cutoff", specific to the LAMMPS implementation, is +used to find the three nearest neighbors of an atom to construct the normal. :line @@ -131,9 +132,10 @@ simulation doesn't use "metal" units. :line -:link(Wen1) -[(Wen)] M. Wen, S. Carr, S. Fang, E. Kaxiras, and E. B. Tadmor, Phys. Rev. B, 98, 235404 (2018) +:link(Wen2018) +[(Wen)] M. Wen, S. Carr, S. Fang, E. Kaxiras, and E. B. Tadmor, Phys. Rev. B, +98, 235404 (2018) -:link(Kolmogorov1) +:link(Kolmogorov2005) [(Kolmogorov)] A. N. Kolmogorov, V. H. Crespi, Phys. Rev. B 71, 235415 (2005) diff --git a/examples/USER/misc/drip/C.drip b/examples/USER/misc/drip/C.drip index 43d5ca4208..74e006d682 100644 --- a/examples/USER/misc/drip/C.drip +++ b/examples/USER/misc/drip/C.drip @@ -6,10 +6,14 @@ # Cite as M. Wen, S. Carr, S. Fang, E. Kaxiras, and E. B. Tadmor, Phys. Rev. B, 98, 235404 (2018). -# C0 C2 C4 C delta lambda A z0 B eta rho_cut r_cut -C C 1.1598e-02 1.2981e-02 3.2515e-02 7.8151e-03 8.3679e-01 2.7158 2.2216e-02 3.34 7.6799e-03 1.1432 1.562 12.0 +# C0 C2 C4 C delta lambda A z0 B eta rho_cut r_cut normal_cut +C C 1.1598e-02 1.2981e-02 3.2515e-02 7.8151e-03 8.3679e-01 2.7158 2.2216e-02 3.34 7.6799e-03 1.1432 1.562 12.0 3.7 # C0, C2, C4, C, A, and B in [eV] -# delta, z0, eta, rho_cut, and r_cut in [Angstrom] +# delta, z0, eta, rho_cut, r_cut, and normal_cut in [Angstrom] # lambda in [1/Angstrom] +# +# "normal_cut" is a parameter not present in the Wen paper, but specific to the +# LAMMPS implementation, which is used to find the 3 nearest neighbors of an +# atom to construct the normal. diff --git a/examples/USER/misc/drip/log.19Apr2019.g++.in.CH_drip b/examples/USER/misc/drip/log.19Apr2019.g++.in.CH_drip index e1dccf1c2b..466a8403ea 100644 --- a/examples/USER/misc/drip/log.19Apr2019.g++.in.CH_drip +++ b/examples/USER/misc/drip/log.19Apr2019.g++.in.CH_drip @@ -16,8 +16,8 @@ read_data data.CH 0 = max # of 1-3 neighbors 0 = max # of 1-4 neighbors 1 = max # of special neighbors - special bonds CPU = 0.000135899 secs - read_data CPU = 0.00296116 secs + special bonds CPU = 0.000221014 secs + read_data CPU = 0.00603986 secs # potential @@ -44,9 +44,9 @@ WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimizat Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 14 - ghost atom cutoff = 14 - binsize = 7, bins = 6 4 1 + master list distance cutoff = 17.7 + ghost atom cutoff = 17.7 + binsize = 8.85, bins = 5 3 1 2 neighbor lists, perpetual/occasional/extra = 2 0 0 (1) pair drip, perpetual, skip from (2) attributes: full, newton on, ghost @@ -58,52 +58,52 @@ Neighbor list info ... pair build: full/bin/ghost stencil: full/ghost/bin/3d bin: standard -Per MPI rank memory allocation (min/avg/max) = 11.71 | 11.71 | 11.71 Mbytes +Per MPI rank memory allocation (min/avg/max) = 12.92 | 12.92 | 12.92 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 0 -2883.1071 0 -2883.1071 366130.38 2779.5956 10 0 -3229.1892 0 -3229.1892 -19780.166 2779.5956 20 0 -3268.3574 0 -3268.3574 -15169.468 2779.5956 30 0 -3270.013 0 -3270.013 -19827.419 2779.5956 - 40 0 -3270.1341 0 -3270.1341 -20652.573 2779.5956 - 50 0 -3270.2612 0 -3270.2612 -22644.203 2779.5956 - 57 0 -3270.2821 0 -3270.2821 -23259.55 2779.5956 -Loop time of 2.88099 on 1 procs for 57 steps with 545 atoms + 40 0 -3270.1341 0 -3270.1341 -20652.569 2779.5956 + 50 0 -3270.2612 0 -3270.2612 -22644.747 2779.5956 + 57 0 -3270.2819 0 -3270.2819 -23254.995 2779.5956 +Loop time of 3.06624 on 1 procs for 57 steps with 545 atoms -99.0% CPU use with 1 MPI tasks x no OpenMP threads +99.3% CPU use with 1 MPI tasks x no OpenMP threads Minimization stats: Stopping criterion = max force evaluations Energy initial, next-to-last, final = - -2883.10712045 -3270.28053776 -3270.28206154 - Force two-norm initial, final = 114.766 0.235923 - Force max component initial, final = 12.0195 0.0426664 - Final line search alpha, max atom move = 1 0.0426664 + -2883.10712045 -3270.28039929 -3270.28192718 + Force two-norm initial, final = 114.766 0.235428 + Force max component initial, final = 12.0195 0.0484347 + Final line search alpha, max atom move = 1 0.0484347 Iterations, force evaluations = 57 101 MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 2.8692 | 2.8692 | 2.8692 | 0.0 | 99.59 -Bond | 3.5524e-05 | 3.5524e-05 | 3.5524e-05 | 0.0 | 0.00 +Pair | 3.0539 | 3.0539 | 3.0539 | 0.0 | 99.60 +Bond | 4.1485e-05 | 4.1485e-05 | 4.1485e-05 | 0.0 | 0.00 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0014327 | 0.0014327 | 0.0014327 | 0.0 | 0.05 -Output | 0.0069089 | 0.0069089 | 0.0069089 | 0.0 | 0.24 +Comm | 0.0019863 | 0.0019863 | 0.0019863 | 0.0 | 0.06 +Output | 0.0070152 | 0.0070152 | 0.0070152 | 0.0 | 0.23 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0.003388 | | | 0.12 +Other | | 0.003321 | | | 0.11 Nlocal: 545 ave 545 max 545 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 2346 ave 2346 max 2346 min +Nghost: 3175 ave 3175 max 3175 min Histogram: 1 0 0 0 0 0 0 0 0 0 Neighs: 0 ave 0 max 0 min Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 180462 ave 180462 max 180462 min +FullNghs: 294122 ave 294122 max 294122 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Total # of neighbors = 180462 -Ave neighs/atom = 331.123 +Total # of neighbors = 294122 +Ave neighs/atom = 539.673 Ave special neighs/atom = 0 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:00:02 +Total wall time: 0:00:03 diff --git a/examples/USER/misc/drip/log.19Apr2019.g++.in.C_drip b/examples/USER/misc/drip/log.19Apr2019.g++.in.C_drip index ac078d4a8c..44619014c1 100644 --- a/examples/USER/misc/drip/log.19Apr2019.g++.in.C_drip +++ b/examples/USER/misc/drip/log.19Apr2019.g++.in.C_drip @@ -16,8 +16,8 @@ read_data data.C 0 = max # of 1-3 neighbors 0 = max # of 1-4 neighbors 1 = max # of special neighbors - special bonds CPU = 0.000100136 secs - read_data CPU = 0.00110912 secs + special bonds CPU = 0.000164032 secs + read_data CPU = 0.00137401 secs # potential @@ -43,9 +43,9 @@ WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimizat Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 14 - ghost atom cutoff = 14 - binsize = 7, bins = 6 4 1 + master list distance cutoff = 17.7 + ghost atom cutoff = 17.7 + binsize = 8.85, bins = 5 3 1 2 neighbor lists, perpetual/occasional/extra = 2 0 0 (1) pair drip, perpetual attributes: full, newton on, ghost @@ -57,7 +57,7 @@ Neighbor list info ... pair build: copy stencil: none bin: none -Per MPI rank memory allocation (min/avg/max) = 11.4 | 11.4 | 11.4 Mbytes +Per MPI rank memory allocation (min/avg/max) = 12.21 | 12.21 | 12.21 Mbytes Step Temp E_pair E_mol TotEng Press Volume 0 0 -2941.0549 0 -2941.0549 -52204.715 2052.0534 10 0 -2966.9787 0 -2966.9787 -29717.01 2052.0534 @@ -66,9 +66,9 @@ Step Temp E_pair E_mol TotEng Press Volume 40 0 -2967.0888 0 -2967.0888 -29997.486 2052.0534 50 0 -2967.0896 0 -2967.0896 -30072.387 2052.0534 51 0 -2967.0896 0 -2967.0896 -30076.548 2052.0534 -Loop time of 2.8619 on 1 procs for 51 steps with 400 atoms +Loop time of 2.89944 on 1 procs for 51 steps with 400 atoms -98.9% CPU use with 1 MPI tasks x no OpenMP threads +99.6% CPU use with 1 MPI tasks x no OpenMP threads Minimization stats: Stopping criterion = max force evaluations @@ -82,25 +82,25 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 2.8529 | 2.8529 | 2.8529 | 0.0 | 99.69 -Bond | 3.314e-05 | 3.314e-05 | 3.314e-05 | 0.0 | 0.00 +Pair | 2.8899 | 2.8899 | 2.8899 | 0.0 | 99.67 +Bond | 3.171e-05 | 3.171e-05 | 3.171e-05 | 0.0 | 0.00 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0010927 | 0.0010927 | 0.0010927 | 0.0 | 0.04 -Output | 0.0053217 | 0.0053217 | 0.0053217 | 0.0 | 0.19 +Comm | 0.001483 | 0.001483 | 0.001483 | 0.0 | 0.05 +Output | 0.0055339 | 0.0055339 | 0.0055339 | 0.0 | 0.19 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0.002526 | | | 0.09 +Other | | 0.002449 | | | 0.08 Nlocal: 400 ave 400 max 400 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 1716 ave 1716 max 1716 min +Nghost: 2357 ave 2357 max 2357 min Histogram: 1 0 0 0 0 0 0 0 0 0 Neighs: 0 ave 0 max 0 min Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 180462 ave 180462 max 180462 min +FullNghs: 294122 ave 294122 max 294122 min Histogram: 1 0 0 0 0 0 0 0 0 0 -Total # of neighbors = 180462 -Ave neighs/atom = 451.155 +Total # of neighbors = 294122 +Ave neighs/atom = 735.305 Ave special neighs/atom = 0 Neighbor list builds = 0 Dangerous builds = 0 diff --git a/src/USER-MISC/pair_drip.cpp b/src/USER-MISC/pair_drip.cpp index 338891c77a..2b339fe6fd 100644 --- a/src/USER-MISC/pair_drip.cpp +++ b/src/USER-MISC/pair_drip.cpp @@ -700,7 +700,8 @@ void PairDRIP::find_nearest3neigh() // store neighbors to be used later to compute normal if (nb3_rsq >= 1.0e10) { if (ione(FLERR, "No enough neighbors to construct normal."); + error->one(FLERR, "No enough neighbors to construct normal. Check the " + "configuration to see whether atoms fly away."); } else { // This only happens for ghost atoms that are near the boundary of the // domain (i.e. r > r_cut + n_cut). These ghost atoms will not be From db54b0375172f62562562f40cf5bdbc6665a8734 Mon Sep 17 00:00:00 2001 From: Mingjian Wen Date: Sat, 4 May 2019 22:55:22 -0500 Subject: [PATCH 115/311] Force line length to 80 --- ...in.CH_drip => log.4May2019.g++.in.CH_drip} | 0 ...+.in.C_drip => log.4May2019.g++.in.C_drip} | 0 src/USER-MISC/pair_drip.cpp | 36 ++++++++++--------- 3 files changed, 19 insertions(+), 17 deletions(-) rename examples/USER/misc/drip/{log.19Apr2019.g++.in.CH_drip => log.4May2019.g++.in.CH_drip} (100%) rename examples/USER/misc/drip/{log.19Apr2019.g++.in.C_drip => log.4May2019.g++.in.C_drip} (100%) diff --git a/examples/USER/misc/drip/log.19Apr2019.g++.in.CH_drip b/examples/USER/misc/drip/log.4May2019.g++.in.CH_drip similarity index 100% rename from examples/USER/misc/drip/log.19Apr2019.g++.in.CH_drip rename to examples/USER/misc/drip/log.4May2019.g++.in.CH_drip diff --git a/examples/USER/misc/drip/log.19Apr2019.g++.in.C_drip b/examples/USER/misc/drip/log.4May2019.g++.in.C_drip similarity index 100% rename from examples/USER/misc/drip/log.19Apr2019.g++.in.C_drip rename to examples/USER/misc/drip/log.4May2019.g++.in.C_drip diff --git a/src/USER-MISC/pair_drip.cpp b/src/USER-MISC/pair_drip.cpp index 2b339fe6fd..8922594c79 100644 --- a/src/USER-MISC/pair_drip.cpp +++ b/src/USER-MISC/pair_drip.cpp @@ -568,15 +568,15 @@ double PairDRIP::calc_repulsive(int const i, int const j, Param& p, fi[k] += tmp; fj[k] -= tmp; - // contributions from the transverse decay part tdij and the dihedral part gij + // contributions from transverse decay part tdij and the dihedral part gij // derivative of V2 contribute to atoms i, j - fi[k] -= HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_dri[k] + dgij_dri[k]); - fj[k] -= HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drj[k] + dgij_drj[k]); + fi[k] -= HALF*tp*V1*((dtdij+dgij_drhosq)*drhosqij_dri[k]+dgij_dri[k]); + fj[k] -= HALF*tp*V1*((dtdij+dgij_drhosq)*drhosqij_drj[k]+dgij_drj[k]); // derivative of V2 contribute to nearest 3 neighs of atom i - fnbi1[k] = -HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb1[k] + dgij_drk1[k]); - fnbi2[k] = -HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb2[k] + dgij_drk2[k]); - fnbi3[k] = -HALF * tp * V1 * ((dtdij + dgij_drhosq) * drhosqij_drnb3[k] + dgij_drk3[k]); + fnbi1[k] = -HALF*tp*V1*((dtdij+dgij_drhosq)*drhosqij_drnb1[k]+dgij_drk1[k]); + fnbi2[k] = -HALF*tp*V1*((dtdij+dgij_drhosq)*drhosqij_drnb2[k]+dgij_drk2[k]); + fnbi3[k] = -HALF*tp*V1*((dtdij+dgij_drhosq)*drhosqij_drnb3[k]+dgij_drk3[k]); // derivative of V2 contribute to nearest 3 neighs of atom j fnbj1[k] = -HALF * tp * V1 * dgij_drl1[k]; fnbj2[k] = -HALF * tp * V1 * dgij_drl2[k]; @@ -746,9 +746,10 @@ void PairDRIP::calc_normal(int const i, double *const normal, /* ---------------------------------------------------------------------- */ void PairDRIP::get_drhosqij(double const *rij, double const *ni, - V3 const *dni_dri, V3 const *dni_drn1, V3 const *dni_drn2, V3 const *dni_drn3, - double *const drhosq_dri, double *const drhosq_drj, double *const drhosq_drn1, - double *const drhosq_drn2, double *const drhosq_drn3) + V3 const *dni_dri, V3 const *dni_drn1, V3 const *dni_drn2, + V3 const *dni_drn3, double *const drhosq_dri, double *const drhosq_drj, + double *const drhosq_drn1, double *const drhosq_drn2, + double *const drhosq_drn3) { int k; double ni_dot_rij = 0; @@ -764,7 +765,7 @@ void PairDRIP::get_drhosqij(double const *rij, double const *ni, mat_dot_vec(dni_drn3, rij, dni_drn3_dot_rij); for (k = 0; k < DIM; k++) { - drhosq_dri[k] = -2 * rij[k] - 2 * ni_dot_rij * (-ni[k] + dni_dri_dot_rij[k]); + drhosq_dri[k] = -2*rij[k] - 2 * ni_dot_rij * (-ni[k] + dni_dri_dot_rij[k]); drhosq_drj[k] = 2 * rij[k] - 2 * ni_dot_rij * ni[k]; drhosq_drn1[k] = -2 * ni_dot_rij * dni_drn1_dot_rij[k]; drhosq_drn2[k] = -2 * ni_dot_rij * dni_drn2_dot_rij[k]; @@ -817,8 +818,8 @@ double PairDRIP::dihedral(const int i, const int j, Param& p, // local vars double cos_kl[3][3]; // cos_omega_k1ijl1, cos_omega_k1ijl2 ... double d_dcos_kl[3][3]; // deriv of dihedral w.r.t to cos_omega_kijl - double dcos_kl[3][3][4][DIM]; // 4 indicates k, i, j, l, e.g. dcoskl[0][1][0] means - // dcos_omega_k1ijl2 / drk + double dcos_kl[3][3][4][DIM]; // 4 indicates k, i, j, l. e.g. dcoskl[0][1][0] + // means dcos_omega_k1ijl2 / drk // if larger than cutoff of rho, return 0 @@ -849,7 +850,8 @@ double PairDRIP::dihedral(const int i, const int j, Param& p, for (int m = 0; m < 3; m++) { for (int n = 0; n < 3; n++) { cos_kl[m][n] = deriv_cos_omega(x[k[m]], x[i], x[j], x[l[n]], - dcos_kl[m][n][0], dcos_kl[m][n][1], dcos_kl[m][n][2], dcos_kl[m][n][3]); + dcos_kl[m][n][0], dcos_kl[m][n][1], + dcos_kl[m][n][2], dcos_kl[m][n][3]); } } @@ -995,7 +997,7 @@ double PairDRIP::tap(double r, double cutoff, double& dtap) else { double roc = (r - r_min) / (cutoff - r_min); double roc_sq = roc * roc; - t = roc_sq * roc_sq * (-35.0 + 84.0 * roc + roc_sq * (-70.0 + 20.0 * roc)) + 1; + t = roc_sq*roc_sq*(-35.0 + 84.0 * roc + roc_sq * (-70.0 + 20.0 * roc)) + 1; dtap = roc_sq * roc / (cutoff - r_min) * (-140.0 + 420.0 * roc + roc_sq * (-420.0 + 140.0 * roc)); } @@ -1013,10 +1015,10 @@ double PairDRIP::tap_rho(double rhosq, double cut_rhosq, double& drhosq) roc_sq = rhosq / cut_rhosq; roc = sqrt(roc_sq); - t = roc_sq * roc_sq * (-35.0 + 84.0 * roc + roc_sq * (-70.0 + 20.0 * roc)) + 1; + t = roc_sq*roc_sq*(-35.0 + 84.0 * roc + roc_sq * (-70.0 + 20.0 * roc)) + 1; // Note this dtap/drho_sq not dtap/drho - drhosq = roc_sq / cut_rhosq * (-70.0 + 210.0 * roc + roc_sq * (-210.0 + 70.0 * roc)); + drhosq = roc_sq/cut_rhosq*(-70.0 + 210.0*roc + roc_sq*(-210.0 + 70.0*roc)); return t; } @@ -1024,7 +1026,7 @@ double PairDRIP::tap_rho(double rhosq, double cut_rhosq, double& drhosq) /* ---------------------------------------------------------------------- Compute the normalized cross product of two vector rkl, rkm, and the derivates w.r.t rk, rl, rm. - NOTE, the returned dcross_drk, dcross_drl, and dcross_drm are actually the + Note, the returned dcross_drk, dcross_drl, and dcross_drm are actually the transpose. ------------------------------------------------------------------------- */ From d86a7b95de08fd666f682cae8245ddd413c9dfdc Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 5 May 2019 08:48:27 -0400 Subject: [PATCH 116/311] fix spelling issues --- doc/src/pair_drip.txt | 4 ++-- doc/utils/sphinx-config/false_positives.txt | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/src/pair_drip.txt b/doc/src/pair_drip.txt index 7d041a8f08..84c92b04e4 100644 --- a/doc/src/pair_drip.txt +++ b/doc/src/pair_drip.txt @@ -34,7 +34,7 @@ pair_coeff * * rebo CH.airebo C H :pre Style {drip} computes the interlayer interactions of layered materials using the dihedral-angle-corrected registry-dependent (DRIP) potential as described in "(Wen)"_#Wen2018, which is based on the "(Kolmogorov)"_#Kolmogorov2005 -potential and provides an improvded prediction for forces. +potential and provides an improved prediction for forces. The total potential energy of a system is :c,image(Eqs/pair_drip.jpg) @@ -117,7 +117,7 @@ pair interactions. The {C.drip} parameter file provided with LAMMPS (see the "potentials" directory) is parameterized for metal "units"_units.html. You can use the DRIP -potential with any LAMMPS units, but you would need to create your own cutstom +potential with any LAMMPS units, but you would need to create your own custom parameter file with coefficients listed in the appropriate units, if your simulation doesn't use "metal" units. diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index a845673715..9f8bc8871f 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -1156,6 +1156,7 @@ Interparticle interstitials Intr intra +intralayer intramolecular ints inv @@ -1272,6 +1273,7 @@ Katsnelson Katsura Kaufmann Kawata +Kaxiras Kayser kb kB From 4d4219ca3e5e4b071ae173560ece19a22fc90c05 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 5 May 2019 08:59:03 -0400 Subject: [PATCH 117/311] integrate drip pair style more closely into manual --- doc/src/Commands_pair.txt | 1 + doc/src/lammps.book | 1 + doc/src/pair_ilp_graphene_hbn.txt | 7 ++++--- doc/src/pair_kolmogorov_crespi_full.txt | 7 ++++--- doc/src/pair_kolmogorov_crespi_z.txt | 1 + doc/src/pair_lebedeva_z.txt | 1 + doc/src/pair_style.txt | 3 ++- 7 files changed, 14 insertions(+), 7 deletions(-) diff --git a/doc/src/Commands_pair.txt b/doc/src/Commands_pair.txt index e887f0178a..ad55513a48 100644 --- a/doc/src/Commands_pair.txt +++ b/doc/src/Commands_pair.txt @@ -80,6 +80,7 @@ OPT. "dpd/fdt/energy (k)"_pair_dpd_fdt.html, "dpd/tstat (go)"_pair_dpd.html, "dsmc"_pair_dsmc.html, +"drip"_pair_drip.html, "eam (gikot)"_pair_eam.html, "eam/alloy (gikot)"_pair_eam.html, "eam/cd (o)"_pair_eam.html, diff --git a/doc/src/lammps.book b/doc/src/lammps.book index e97ef4b994..ec46b1a8b0 100644 --- a/doc/src/lammps.book +++ b/doc/src/lammps.book @@ -572,6 +572,7 @@ pair_dipole.html pair_dpd.html pair_dpd_fdt.html pair_dsmc.html +pair_drip.html pair_eam.html pair_edip.html pair_eff.html diff --git a/doc/src/pair_ilp_graphene_hbn.txt b/doc/src/pair_ilp_graphene_hbn.txt index 3a5d4accd5..6a28c5e064 100644 --- a/doc/src/pair_ilp_graphene_hbn.txt +++ b/doc/src/pair_ilp_graphene_hbn.txt @@ -50,11 +50,11 @@ calculating the normals. NOTE: This potential (ILP) is intended for interlayer interactions between two different layers of graphene, hexagonal boron nitride (h-BN) and their hetero-junction. To perform a realistic simulation, this potential must be used in combination with -intra-layer potential, such as "AIREBO"_pair_airebo.html or "Tersoff"_pair_tersoff.html potential. -To keep the intra-layer properties unaffected, the interlayer interaction +intralayer potential, such as "AIREBO"_pair_airebo.html or "Tersoff"_pair_tersoff.html potential. +To keep the intralayer properties unaffected, the interlayer interaction within the same layers should be avoided. Hence, each atom has to have a layer identifier such that atoms residing on the same layer interact via the -appropriate intra-layer potential and atoms residing on different layers +appropriate intralayer potential and atoms residing on different layers interact via the ILP. Here, the molecule id is chosen as the layer identifier, thus a data file with the "full" atom style is required to use this potential. @@ -117,6 +117,7 @@ units, if your simulation does not use {metal} units. "pair_coeff"_pair_coeff.html, "pair_none"_pair_none.html, "pair_style hybrid/overlay"_pair_hybrid.html, +"pair_style drip"_pair_drip.html, "pair_style pair_kolmogorov_crespi_z"_pair_kolmogorov_crespi_z.html, "pair_style pair_kolmogorov_crespi_full"_pair_kolmogorov_crespi_full.html, "pair_style pair_lebedeva_z"_pair_lebedeva_z.html, diff --git a/doc/src/pair_kolmogorov_crespi_full.txt b/doc/src/pair_kolmogorov_crespi_full.txt index 05effc5620..20ebe9a3b1 100644 --- a/doc/src/pair_kolmogorov_crespi_full.txt +++ b/doc/src/pair_kolmogorov_crespi_full.txt @@ -44,12 +44,12 @@ can be found in pair style "ilp/graphene/hbn"_pair_ilp_graphene_hbn.html. NOTE: This potential (ILP) is intended for interlayer interactions between two different layers of graphene. To perform a realistic simulation, this potential -must be used in combination with intra-layer potential, such as +must be used in combination with intralayer potential, such as "AIREBO"_pair_airebo.html or "Tersoff"_pair_tersoff.html potential. -To keep the intra-layer properties unaffected, the interlayer interaction +To keep the intralayer properties unaffected, the interlayer interaction within the same layers should be avoided. Hence, each atom has to have a layer identifier such that atoms residing on the same layer interact via the -appropriate intra-layer potential and atoms residing on different layers +appropriate intralayer potential and atoms residing on different layers interact via the ILP. Here, the molecule id is chosen as the layer identifier, thus a data file with the "full" atom style is required to use this potential. @@ -106,6 +106,7 @@ units. "pair_coeff"_pair_coeff.html, "pair_none"_pair_none.html, "pair_style hybrid/overlay"_pair_hybrid.html, +"pair_style drip"_pair_drip.html, "pair_style pair_lebedeva_z"_pair_lebedeva_z.html, "pair_style kolmogorov/crespi/z"_pair_kolmogorov_crespi_z.html, "pair_style ilp/graphene/hbn"_pair_ilp_graphene_hbn.html. diff --git a/doc/src/pair_kolmogorov_crespi_z.txt b/doc/src/pair_kolmogorov_crespi_z.txt index aabb3460e7..c3132bb031 100644 --- a/doc/src/pair_kolmogorov_crespi_z.txt +++ b/doc/src/pair_kolmogorov_crespi_z.txt @@ -59,6 +59,7 @@ package"_Build_package.html doc page for more info. "pair_coeff"_pair_coeff.html, "pair_none"_pair_none.html, "pair_style hybrid/overlay"_pair_hybrid.html, +"pair_style drip"_pair_drip.html, "pair_style ilp/graphene/hbn"_pair_ilp_graphene_hbn.html. "pair_style kolmogorov/crespi/full"_pair_kolmogorov_crespi_full.html, "pair_style lebedeva/z"_pair_lebedeva_z.html diff --git a/doc/src/pair_lebedeva_z.txt b/doc/src/pair_lebedeva_z.txt index 9eab56d0d9..a05f5a3533 100644 --- a/doc/src/pair_lebedeva_z.txt +++ b/doc/src/pair_lebedeva_z.txt @@ -53,6 +53,7 @@ package"_Build_package.html doc page for more info. "pair_coeff"_pair_coeff.html, "pair_style none"_pair_none.html, "pair_style hybrid/overlay"_pair_hybrid.html, +"pair_style drip"_pair_drip.html, "pair_style ilp/graphene/hbd"_pair_ilp_graphene_hbn.html, "pair_style kolmogorov/crespi/z"_pair_kolmogorov_crespi_z.html, "pair_style kolmogorov/crespi/full"_pair_kolmogorov_crespi_full.html. diff --git a/doc/src/pair_style.txt b/doc/src/pair_style.txt index f6fcd110d8..516c20b564 100644 --- a/doc/src/pair_style.txt +++ b/doc/src/pair_style.txt @@ -147,6 +147,7 @@ accelerated styles exist. "dpd/fdt/energy"_pair_dpd_fdt.html - DPD for constant energy and enthalpy "dpd/tstat"_pair_dpd.html - pair-wise DPD thermostatting "dsmc"_pair_dsmc.html - Direct Simulation Monte Carlo (DSMC) +"drip"_pair_drip.html - Dihedral-angle-corrected registry-dependent inter-layer potential (DRIP) "eam"_pair_eam.html - embedded atom method (EAM) "eam/alloy"_pair_eam.html - alloy EAM "eam/cd"_pair_eam.html - concentration-dependent EAM @@ -174,7 +175,7 @@ accelerated styles exist. "kolmogorov/crespi/full"_pair_kolmogorov_crespi_full.html - Kolmogorov-Crespi (KC) potential with no simplifications "kolmogorov/crespi/z"_pair_kolmogorov_crespi_z.html - Kolmogorov-Crespi (KC) potential with normals along z-axis "lcbop"_pair_lcbop.html - long-range bond-order potential (LCBOP) -"lebedeva/z"_pair_lebedeva_z.html - Lebedeva inter-layer potential for graphene with normals along z-axis +"lebedeva/z"_pair_lebedeva_z.html - Lebedeva interlayer potential for graphene with normals along z-axis "lennard/mdf"_pair_mdf.html - LJ potential in A/B form with a taper function "line/lj"_pair_line_lj.html - LJ potential between line segments "list"_pair_list.html - potential between pairs of atoms explicitly listed in an input file From 0a4b0cf01909c3f9a1302fd4e42c42ea5eba3e77 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 5 May 2019 09:20:10 -0400 Subject: [PATCH 118/311] add pair style drip to .gitignore --- src/.gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/.gitignore b/src/.gitignore index 27f4f8a64c..3702c5ad18 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -782,6 +782,8 @@ /pair_dpd_mt.h /pair_dsmc.cpp /pair_dsmc.h +/pair_drip.cpp +/pair_drip.h /pair_eam.cpp /pair_eam.h /pair_eam_alloy.cpp From f163d7dc9b8a779bb486b2ff162e529d86b76b7c Mon Sep 17 00:00:00 2001 From: Mingjian Wen Date: Sun, 5 May 2019 08:56:15 -0500 Subject: [PATCH 119/311] typo fix --- doc/src/pair_style.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/pair_style.txt b/doc/src/pair_style.txt index 516c20b564..ea0c029321 100644 --- a/doc/src/pair_style.txt +++ b/doc/src/pair_style.txt @@ -147,7 +147,7 @@ accelerated styles exist. "dpd/fdt/energy"_pair_dpd_fdt.html - DPD for constant energy and enthalpy "dpd/tstat"_pair_dpd.html - pair-wise DPD thermostatting "dsmc"_pair_dsmc.html - Direct Simulation Monte Carlo (DSMC) -"drip"_pair_drip.html - Dihedral-angle-corrected registry-dependent inter-layer potential (DRIP) +"drip"_pair_drip.html - Dihedral-angle-corrected registry-dependent interlayer potential (DRIP) "eam"_pair_eam.html - embedded atom method (EAM) "eam/alloy"_pair_eam.html - alloy EAM "eam/cd"_pair_eam.html - concentration-dependent EAM From da6e576ffd0eee5c99d87b684b8322e52c8197dc Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 5 May 2019 10:17:45 -0400 Subject: [PATCH 120/311] silence warnings about unused variables and parameters, minor tweaks --- src/USER-MISC/pair_drip.cpp | 21 ++++++++------------- src/USER-MISC/pair_drip.h | 8 ++++---- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/USER-MISC/pair_drip.cpp b/src/USER-MISC/pair_drip.cpp index 8922594c79..118c033b5c 100644 --- a/src/USER-MISC/pair_drip.cpp +++ b/src/USER-MISC/pair_drip.cpp @@ -13,7 +13,7 @@ /* ---------------------------------------------------------------------- Contributing author: Mingjian Wen (University of Minnesota) - e-mail: wenxx151@umn.edu + e-mail: wenxx151@umn.edu, wenxx151@gmail.com This implements the DRIP model as described in M. Wen, S. Carr, S. Fang, E. Kaxiras, and E. B. Tadmor, @@ -115,7 +115,7 @@ void PairDRIP::allocate() global settings ------------------------------------------------------------------------- */ -void PairDRIP::settings(int narg, char **arg) +void PairDRIP::settings(int narg, char ** /* arg */) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); if (strcmp(force->pair_style,"hybrid/overlay")!=0) @@ -351,9 +351,8 @@ void PairDRIP::read_file(char *filename) void PairDRIP::compute(int eflag, int vflag) { - int i,j,ii,jj,inum,jnum,itype,jtype,k,l,kk,ll; - tagint itag,jtag; - double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fpair,r,rsq; + int i,j,ii,jj,inum,jnum,itype,jtype; + double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,rsq; int *ilist,*jlist,*numneigh,**firstneigh; double ni[DIM]; @@ -365,7 +364,6 @@ void PairDRIP::compute(int eflag, int vflag) double **x = atom->x; double **f = atom->f; int *type = atom->type; - tagint *tag = atom->tag; int nlocal = atom->nlocal; int newton_pair = force->newton_pair; @@ -381,7 +379,6 @@ void PairDRIP::compute(int eflag, int vflag) if (nearest3neigh[i][0] == -1) { continue; } - itag = tag[i]; xtmp = x[i][0]; ytmp = x[i][1]; ztmp = x[i][2]; @@ -401,7 +398,6 @@ void PairDRIP::compute(int eflag, int vflag) continue; } jtype = map[type[j]]; - jtag = tag[j]; delx = x[j][0] - xtmp; dely = x[j][1] - ytmp; @@ -417,7 +413,7 @@ void PairDRIP::compute(int eflag, int vflag) double fj[DIM] = {0., 0., 0.}; double rvec[DIM] = {delx, dely, delz}; - double phi_attr = calc_attractive(i,j,p, rsq, rvec, fi, fj); + double phi_attr = calc_attractive(p, rsq, rvec, fi, fj); double phi_repul = calc_repulsive(i, j, p, rsq, rvec, ni, dni_dri, dni_drnb1, dni_drnb2, dni_drnb3, fi, fj); @@ -457,8 +453,8 @@ if (vflag_fdotr) Attractive part, i.e. the r^(-6) part ------------------------------------------------------------------------- */ -double PairDRIP::calc_attractive(int const i, int const j, Param& p, - double const rsq, double const *rvec, double *const fi, double *const fj) +double PairDRIP::calc_attractive(Param& p, double const rsq, double const *rvec, + double *const fi, double *const fj) { double const z0 = p.z0; double const A = p.A; @@ -617,7 +613,7 @@ double PairDRIP::calc_repulsive(int const i, int const j, Param& p, void PairDRIP::find_nearest3neigh() { - int i, j, ii, jj, n, allnum, inum, jnum, itype, jtype, size; + int i, j, ii, jj, allnum, inum, jnum, itype, jtype, size; double xtmp, ytmp, ztmp, delx, dely, delz, rsq; int *ilist, *jlist, *numneigh, **firstneigh; @@ -644,7 +640,6 @@ void PairDRIP::find_nearest3neigh() memory->grow(nearest3neigh, size, 3, "pair:nearest3neigh"); } - n = 0; xtmp = x[i][0]; ytmp = x[i][1]; ztmp = x[i][2]; diff --git a/src/USER-MISC/pair_drip.h b/src/USER-MISC/pair_drip.h index 3035d88ad8..0a8f90dfc2 100644 --- a/src/USER-MISC/pair_drip.h +++ b/src/USER-MISC/pair_drip.h @@ -70,8 +70,8 @@ protected: void allocate(); // DRIP specific functions - double calc_attractive(int const, int const, Param&, double const, - double const *, double *const, double *const); + double calc_attractive(Param&, double const, double const *, + double *const, double *const); double calc_repulsive(int const, int const, Param&, double const, double const *, double const *, V3 const *, V3 const *, V3 const *, @@ -105,12 +105,12 @@ protected: double *const, V3 *const, V3 *const, V3 *const); // inline functions - inline double dot(double const *x, double const *y) + inline double dot(double const *x, double const *y) const { return x[0]*y[0]+x[1]*y[1]+x[2]*y[2]; } - inline void mat_dot_vec(V3 const *X, double const *y, double *const z) + inline void mat_dot_vec(V3 const *X, double const *y, double *const z) const { for (int k = 0; k < 3; k++) { z[k] = X[k][0]*y[0]+X[k][1]*y[1]+X[k][2]*y[2]; From bac8b267dfa165a884ff32a353d54f1d51776f33 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 5 May 2019 10:26:27 -0400 Subject: [PATCH 121/311] make sure fix deform related variables are always initialized to avoid issues with the DomainOMP class. --- src/domain.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/domain.cpp b/src/domain.cpp index 86c4eb2c02..4f23423ae8 100644 --- a/src/domain.cpp +++ b/src/domain.cpp @@ -57,6 +57,7 @@ Domain::Domain(LAMMPS *lmp) : Pointers(lmp) { box_exist = 0; box_change = 0; + deform_flag = deform_vremap = deform_groupbit = 0; dimension = 3; nonperiodic = 0; From 1d1611ce44d0745c1a90c850af42b0505a10370b Mon Sep 17 00:00:00 2001 From: Steven Strong Date: Tue, 7 May 2019 15:35:37 -0500 Subject: [PATCH 122/311] init del3 to silence valgrind errors --- src/USER-MISC/pair_e3b.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/USER-MISC/pair_e3b.cpp b/src/USER-MISC/pair_e3b.cpp index 5e60ac956b..ba65e1eb8f 100644 --- a/src/USER-MISC/pair_e3b.cpp +++ b/src/USER-MISC/pair_e3b.cpp @@ -357,6 +357,16 @@ void PairE3B::allocateE3B() memory->create(fpair3,pairmax,NUMO,NUMH ,"pair:fpair3"); memory->create(del3 ,pairmax,NUMO,NUMH,DIM,"pair:del3"); + //set del3 to zero to silence valgrind memcheck errors + //don't need to do this in every call to compute() because we set + //exps and fpair3 to zero, and all uses of del3 are multiplied by one of those + int ii,jj,kk,ll; + for (ii=0; iinatoms; maxID=find_maxID(); if (!natoms) From 6c3cae88230f63060b469d5cdb666fcdaceb4e4b Mon Sep 17 00:00:00 2001 From: Steven Strong Date: Tue, 7 May 2019 15:37:45 -0500 Subject: [PATCH 123/311] remove unused vars --- src/USER-MISC/pair_e3b.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/USER-MISC/pair_e3b.cpp b/src/USER-MISC/pair_e3b.cpp index ba65e1eb8f..d6ed8f8cf2 100644 --- a/src/USER-MISC/pair_e3b.cpp +++ b/src/USER-MISC/pair_e3b.cpp @@ -85,7 +85,6 @@ PairE3B::~PairE3B() void PairE3B::compute(int eflag, int vflag) { int i,j,k,h,ii,jj,hh,kk,inum,jnum,otherO; - tagint itag,jtag; double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fpair,rsq,tmpexp; double fxtmp,fytmp,fztmp,fix,fiy,fiz; double delxh,delyh,delzh,rsqh,tmpr; @@ -122,7 +121,6 @@ void PairE3B::compute(int eflag, int vflag) if (type[i]!=typeO) continue; - itag = tag[i]; xtmp = x[i][0]; ytmp = x[i][1]; ztmp = x[i][2]; @@ -139,7 +137,6 @@ void PairE3B::compute(int eflag, int vflag) if (type[j]!=typeO) continue; - jtag = tag[j]; delx = xtmp - x[j][0]; dely = ytmp - x[j][1]; delz = ztmp - x[j][2]; @@ -480,9 +477,7 @@ void PairE3B::init_style() error->all(FLERR,"Pair style E3B requires newton pair on"); // need a half neighbor list - int irequest = neighbor->request(this,instance_me); - //don't need this, half is default - //neighbor->requests[irequest]->half = 0; + neighbor->request(this,instance_me); if (!force->pair_match("tip4p",false,0)) if (comm->me==0) error->warning(FLERR,"E3B pair_style is designed for use with hybrid/overlay tip4p style"); From 12f8834b806eefa86b72df95ca6b8abd8a6ab9d6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 7 May 2019 19:26:57 -0400 Subject: [PATCH 124/311] correction of the incomplete implementation warning in write_coeff --- doc/src/write_coeff.txt | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/doc/src/write_coeff.txt b/doc/src/write_coeff.txt index 5dc4b331de..74d19b5c3d 100644 --- a/doc/src/write_coeff.txt +++ b/doc/src/write_coeff.txt @@ -26,11 +26,9 @@ coefficients in a way, that it can be read by LAMMPS with the option of "write_data"_write_data.html this can be used to move the Coeffs sections from a data file into a separate file. -NOTE: The write_coeff command is not yet fully implemented in two -respects. First, some pair styles do not yet write their coefficient -information into the coeff file. This means you will need to specify -that information in your input script that reads the data file, via -the "pair_coeff"_pair_coeff.html command. +NOTE: The write_coeff command is not yet fully implemented as +some pair styles do not output their coefficient information. +This means you will need to add/copy this information manually. :line From 8c193b8c426bffce94ae58cd280f4ae100f5db68 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 7 May 2019 19:28:19 -0400 Subject: [PATCH 125/311] add support for write_data/write_coeff to pair style lj/mdf --- src/USER-MISC/pair_lj_mdf.cpp | 23 +++++++++++++++++++++++ src/USER-MISC/pair_lj_mdf.h | 2 ++ 2 files changed, 25 insertions(+) diff --git a/src/USER-MISC/pair_lj_mdf.cpp b/src/USER-MISC/pair_lj_mdf.cpp index ca0118ffb0..06fd0fcb7e 100644 --- a/src/USER-MISC/pair_lj_mdf.cpp +++ b/src/USER-MISC/pair_lj_mdf.cpp @@ -349,6 +349,29 @@ void PairLJMDF::read_restart_settings(FILE *fp) MPI_Bcast(&mix_flag,1,MPI_INT,0,world); } +/* ---------------------------------------------------------------------- + proc 0 writes to data file +------------------------------------------------------------------------- */ + +void PairLJMDF::write_data(FILE *fp) +{ + for (int i = 1; i <= atom->ntypes; i++) + fprintf(fp,"%d %g %g\n",i,epsilon[i][i],sigma[i][i]); +} + +/* ---------------------------------------------------------------------- + proc 0 writes all pairs to data file +------------------------------------------------------------------------- */ + +void PairLJMDF::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\n", + i,j,epsilon[i][j],sigma[i][j], + cut_inner[i][j],cut[i][j]); +} + /* ---------------------------------------------------------------------- */ double PairLJMDF::single(int /*i*/, int /*j*/, int itype, int jtype, diff --git a/src/USER-MISC/pair_lj_mdf.h b/src/USER-MISC/pair_lj_mdf.h index c6236a923c..6ce6fdda2c 100644 --- a/src/USER-MISC/pair_lj_mdf.h +++ b/src/USER-MISC/pair_lj_mdf.h @@ -37,6 +37,8 @@ class PairLJMDF : public Pair { void read_restart(FILE *); void write_restart_settings(FILE *); void read_restart_settings(FILE *); + void write_data(FILE *); + void write_data_all(FILE *); double single(int, int, int, int, double, double, double, double &); void *extract(const char *, int &); From 45e6ed018e1eef09997fba7b0d0c2d5d25a83045 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 7 May 2019 19:45:13 -0400 Subject: [PATCH 126/311] correct formula for lennard/mdf potential --- doc/src/Eqs/pair_mdf-6.jpg | Bin 2407 -> 2519 bytes doc/src/Eqs/pair_mdf-6.tex | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/Eqs/pair_mdf-6.jpg b/doc/src/Eqs/pair_mdf-6.jpg index 54a08b25d6ee7ac64d947c8ee8f90cadc0d210c1..60bd7e3a9ea4d51829edb3f3d1b54adaac26d96d 100644 GIT binary patch literal 2519 zcmbW!c|6ox9|!O=yD=oY2H8g0mocO4*+$YtT4>~!EnBoqwo0^6hDN6B8B!|34TCWu zOO_G|Ef^({Y-On|mws2>d!Og^^w;w|-}CyMf6n)u*Z2K8&}(QAtldVjrvMlX0NCmR zP(QE+0%$Y_jS|3MFj%aBppb;H5Dq7_PE1@xLLRTMULG$er%2G*sHm)^A}6P|NnJ}% zpF|=lY&0_4Of=OoAQ68&0>fglLO3BAVPP4flAIFpe=evFhzbBQC`7=N0bCS@5QRaH zfWqpWDA>;ee-{jnK%&qX0jwZywV`}1fWr_7I1+(EA(5-yk*ntbDT)$P(zis5@ASYZ zACn-SO}ZhVVpUQv>HK_}VBmTD99B?DT4o(yb;CwAbqx~PaMNZZV{02*irrTGZM$~w z+3VuEkLKm=bI8}vKY)HBBs45M;^g@YF|ijf#W7e{uO+9Xrln`(-n^A}`_A3`g3>Zh zc||3+ir3KisHwT7_3@Lg?w%JfU%l?_dpGocc;v(A$FcF5*|{%Yzs)Z!F8y%90OBv! z>i!q(7nkU&3ywr0keDAX7(8q>2vHi=1TGI3Q zb3rKr>7DA#586-Je+N7Ff64v@`?sqP2q9prpN9|y7GQo!EjLc68W=Xrri0si`*` zXf^Cqb;hLs9N%8!D}!tm{^gL09|X>d&Ih_RNK^i(KPlN8)NYuKU`1{Zp!&4moR~M> zd*=h+e?sS`>|#mzg9nNld%XArFeT?LBz~1iwVuuxor=PlT5OVVaA7F6dHhqqb9ME(jt+;wbY*3GIrxs|b&J+V>Fza0+PJd0yXKbNIj z`baDlHQbXl712>iYF$i!r~%4`iZ(fRo>q;DTDf zV^s83$T6S4;O3CMFR`uXRt2Ss`rzm=J?ZrlvzZHlIH$&(F+*B0tMIf{<^85R1ZMZT ztTZ&W&=D1O+(<@_@x`N?&4D#6yRe58uubwY0|Ui(B2J;QuBE&p+Ssr*cZBK<%*GCW zsBmlKxq9CZobu}Mi-(g>6*akl3Y)Cs4OO3|>ez}4S?_}2)b=C3tA;1{l7ASkSSsj~ zxuhD4hE!vAxj+(oTbxq#BviqJXt z5|%ZgG>GDP=38ffVrj<5gN!z-E|vk&G6*c@v9}QIN756W?H_NEt%|;EqeA~f#+wqRly=3N`FlHOrFZw zH}!zP7Hts-U<{&WwZRFAJ!Xc~ZEm4K&Rt!7k;57^K4;to!D`2^rL*;4)1RSpdGT&{ zyH(4Xk^IcG-dDjQJ_qU7ols9S5l?2KmcM_DTEOZ;K(0twpX?(R70~XZzIpb08}7Cl zy(-hJMh(6~Z>%>~9xokd@Ss!@5fy=!lkWy|t%WCx-(C6xkoWyy;Ip zDZ{>6l9%3FG(>KmaD~9(nTsocW3epP4uMtz?rnOdx$pKlX0pbD1?78pd5<@9 zcId1ckn(eo9C%Q}DZES&6H6#&%6fTmeE@UeOHqLS78L!>&X=YKggf{5`eT(+jAC{fdq<1xFnCj?E8xG> zQ9k%tWIU{IWYQ&gW}rgm%C|+W61|Q!yNg{%c%A4heyY=H`z}T4O6?%JM}$h2S?M@X}-0&GP(R6)b=+>l@Ix0gn z_mpi%9Q)d`!#qb`JDnRSOAjrm+(0H?_^2TFzTYUnK-2GXO`#s=vL=NQYiD$*uGz6F z-w)(6)IjbHo_P87wt&`3w4tcMO6Tjr?8C2wbKL^)U*E_j=Ntp`|5sWI5PXR1ug7Fo7z zRqR~j$&g3Vvj-kctGne>*8gUFe=^dpXqP+u(=+GqT_rV?>XauY4yn9^%FGd#vo$9% zP5Lx*af(s%ZbeFD%}2wN)UpRHhcm+-x)4}TkB!?~Tn7F-Z6&}jfn6PnG^F}A;#1P) zAD0Jm@d!O?zqQbMqCvgc1m$I)rpeZzgYG3(@p#?bv(Xkxwh}OHiJeirZg!k6c~vgqgdSLJRDgQ_1XB}h-T(jq literal 2407 zcmZWrc~sJg7XASut|hoD=7w8lQ@P=mYX+F6BsgJ~rlx3GQfMxfI_k8zrGPcLRghY! zXzojHWiC@Lps9eVIGOuoW=+0yoH=jad*{4+&$<8H@1F1b2}QQ=m|&I7~(YwiCOhr6pzHyAcTZZa7?C38^fvpr#0it7xmJ zX=rF_YRW6?pmg@2kb5-uY_|i_5`a6<38e30zFo(XVn;t<4{Z1u;qWxp{}pfQ)@CT@8Jyqp{-I9LsDJmn9KYa3f5pr z)c}yko9#?_Up8KT7_lV^xM@{VLF~R8eg5(+1F^AHC=$}ec~SWyvEN;T$p0`@+W+BI zPFWAGBz=~+8OR%*^9MW>XwMNMLClI52>pkl6t=Uc(qTuBF?jQ$#bR6mnX{g!pmwVl zz0g#FC_=z)qR|+y74e$Ya~!(=TIpLQRY+C5_ zoN(y%GDrkIR#u&fJVs>Jwmn_|54A$2I#gA0iCUXC#C$9jT~LT4x8iot zhde`>fh6rl_!$S^NUd2z;t?YpLGxs|jU?~Dy0mf+dvbr~b{O*v}!217T^64>ux(yr%i8SRst~*=&6s1u1mu{ zJ!)CUotycOT^ZbEJ=}?1P(5QUMbuQjoQH&MmKvR9PguEe|K@;^8Un1q;&HQ!)gFzlE^e~tExN;9c&4L>f z`Gyy6Qb>3o_ZzE*_1Wsil6II68}I0OoS(T@L>+E|)%fXM$_TCc5ycTyq{Olh3^_(s zry4~xB&`t|VX#&yjS+*2g7vzV;U=@EGXvCB(?R>%b4H;SIQ{?KI_D(P(Iyq`4K1nwt%V+F@b#ic;Oo?naGJ3YDE4{q- z@~OQNKMG)C%x$1*MeD8~dX4>^{cgR-=S9VV`_ElmuaJjp&GoddfQz|B@1sJxD^ZDu zJOK6&Zlt!B>FX6mi)W5ZjCw%(R1G%fw`%YGv(YT_;TMmNj1)ZCU{%akzi3!!u0NYd z%;uy`*CD1|ui-{p=3XHQZ~86zLwE;m?1w2jd89b^zS(}?!;!UTHlfG*~Dn~ zFxK}v;(mU;pp<6QhTaS(>!rzSQxN^+ShA#Vk}f6j4aja*rl@5^iRAr-W>@RJcH8gVc-nYcwDM$k@%}c~f}(BUkk3^3eGB6!eok%r z-=HdeFSP&w9zr)cl)r)aS*V8b-3r6`2m-Fe`)DAG)J_GaaTK0(8@7 z?+zq2Wz7ek+y3i_LJ<3On!NWOWu`&E3r^t*00V+)L(O4olWX8 zO_NeGfj1uR0Socw-K+1nvPSaC?T3YJL$6)V_@cX4(E)-$n0oZLS5_jqHV9R7xck|b z68EdxRIA=Kr@_>XW;TMAucfk)=zaAa;(fUV1|P9e7tr7A-rO>|%+=SXHNE%72vnWm z?OHOZi{ccDM?|2Y*s-xATDA`vTcrV@U!>)T!htzjsa!0;+dccq;d;{gz#7AT5g%=0 zQ?jHd3alb62Y+upV|s&ccPvD`E-61qbeQWExAJ-~Y1wD-L@>WL6Pw-T=y;eioa6aP z)ixMo<$(c(I--EEh=$+wTX(ILnmlnkUwSn5!{+JWU1D@*r23tLGC`r8*PWNa4aF%& zVN%*!xwWVw&MtStdhipkX5r`HA$pbd3W>}>c7GTgm-I)!g>w~`#ZRK-h9DX@%X(lyS^#|GCjM`6& zU+SKn8*d0{A(&R*xKq5i#eLWnAamfhz`fL=U5u}TxK@otea*qHmd20f?Gu=}-mmJT z1h4g9%CcTgAj$E|(k+#p`yJHtbZsmsgq&v!E9I>?d{xDzY2UM|muBlVvYlesQ$hKF z9kWQP!S8CMrWjGA}e$;+l8w^_7$-^e|07X(!??0FH KpBJQUd;CxAo>~L| diff --git a/doc/src/Eqs/pair_mdf-6.tex b/doc/src/Eqs/pair_mdf-6.tex index 9f25e09bc7..b80f6f69b5 100644 --- a/doc/src/Eqs/pair_mdf-6.tex +++ b/doc/src/Eqs/pair_mdf-6.tex @@ -1,9 +1,9 @@ \documentclass[12pt]{article} - +\pagestyle{empty} \begin{document} $$ - E(r) = \frac{A}{r^{12}} - \frac{A}{r^{6}} + E(r) = \frac{A}{r^{12}} - \frac{B}{r^{6}} $$ \end{document} From 711cd4122fe0c561b445d52206f94c6d6e7efac3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 7 May 2019 19:52:00 -0400 Subject: [PATCH 127/311] corrections to documentation and implementation of pair styles lj/mdf, buck/mdf, and lennard/mdf --- doc/src/pair_mdf.txt | 68 ++++++++++++++---------------- src/USER-MISC/pair_buck_mdf.cpp | 40 +----------------- src/USER-MISC/pair_lennard_mdf.cpp | 8 +--- src/USER-MISC/pair_lj_mdf.cpp | 4 +- 4 files changed, 37 insertions(+), 83 deletions(-) diff --git a/doc/src/pair_mdf.txt b/doc/src/pair_mdf.txt index 8a1551dded..44c9e7f67d 100644 --- a/doc/src/pair_mdf.txt +++ b/doc/src/pair_mdf.txt @@ -30,16 +30,16 @@ args = list of arguments for a particular style :l [Examples:] pair_style lj/mdf 2.5 3.0 -pair_coeff * * 1 1 -pair_coeff 1 1 1 1.1 2.8 3.0 3.2 :pre +pair_coeff * * 1.0 1.0 +pair_coeff 1 1 1.1 2.8 3.0 3.2 :pre pair_style buck 2.5 3.0 pair_coeff * * 100.0 1.5 200.0 pair_coeff * * 100.0 1.5 200.0 3.0 3.5 :pre pair_style lennard/mdf 2.5 3.0 -pair_coeff * * 1 1 -pair_coeff 1 1 1 1.1 2.8 3.0 3.2 :pre +pair_coeff * * 1.0 1.0 +pair_coeff 1 1 1021760.3664 2120.317338 3.0 3.2 :pre [Description:] @@ -69,11 +69,12 @@ standard 12-6 Lennard-Jones written in the epsilon/sigma form: :c,image(Eqs/pair_mdf-4.jpg) -The following coefficients must be defined for each pair of atoms -types via the pair_coeff command as in the examples above, or in the -data file or restart files read by the "read_data"_read_data.html or -"read_restart commands"_read_restart.html, or by mixing as described -below: +Either the first two or all of the following coefficients must be +defined for each pair of atoms types via the pair_coeff command as +in the examples above, or in the data file read by the +"read_data"_read_data.html. The two cutoffs default to the global +values and epsilon and sigma can also be determined by mixing as +described below: epsilon (energy units) sigma (distance units) @@ -83,7 +84,9 @@ r_{cut} (distance units) :ul :line For the {buck/mdf} pair_style, the potential energy, {E(r)}, is the -standard Buckingham potential: +standard Buckingham potential with three required coefficients. +The two cutoffs can be omitted and default to the corresponding +global values: :c,image(Eqs/pair_mdf-5.jpg) @@ -91,19 +94,20 @@ A (energy units) \rho (distance units) C (energy-distance^6 units) r_m (distance units) -r_{cut}$ (distance units) :ul +r_{cut} (distance units) :ul :line For the {lennard/mdf} pair_style, the potential energy, {E(r)}, is the -standard 12-6 Lennard-Jones written in the $A/B$ form: +standard 12-6 Lennard-Jones written in the A/B form: :c,image(Eqs/pair_mdf-6.jpg) The following coefficients must be defined for each pair of atoms types via the pair_coeff command as in the examples above, or in the -data file or restart files read by the read_data or read_restart -commands, or by mixing as described below: +data file read by the read_data commands, or by mixing as described below. +The two cutoffs default to their global values and must be either both +given or both left out: A (energy-distance^12 units) B (energy-distance^6 units) @@ -115,33 +119,23 @@ r_{cut} (distance units) :ul [Mixing, shift, table, tail correction, restart, rRESPA info]: For atom type pairs I,J and I != J, the epsilon and sigma coefficients -and cutoff distance for all of the lj/cut pair styles can be mixed. +and cutoff distances for the lj/mdf pair style can be mixed. The default mix value is {geometric}. See the "pair_modify" command -for details. +for details. The other two pair styles buck/mdf and lennard/mdf do not +support mixing, so all I,J pairs of coefficients must be specified +explicitly. -All of the {lj/cut} pair styles support the -"pair_modify"_pair_modify.html shift option for the energy of the -Lennard-Jones portion of the pair interaction. +None of the lj/mdf, buck/mdf, or lennard/mdf pair styles supports +the "pair_modify"_pair_modify.html shift option or long-range +tail corrections to pressure and energy. -The {lj/cut/coul/long} and {lj/cut/tip4p/long} pair styles support the -"pair_modify"_pair_modify.html table option since they can tabulate -the short-range portion of the long-range Coulombic interaction. +These styles write their information to "binary restart +files"_restart.html, so pair_style and pair_coeff commands do not need +to be specified in an input script that reads a restart file. -All of the {lj/cut} pair styles support the -"pair_modify"_pair_modify.html tail option for adding a long-range -tail correction to the energy and pressure for the Lennard-Jones -portion of the pair interaction. - -All of the {lj/cut} pair styles write their information to "binary -restart files"_restart.html, so pair_style and pair_coeff commands do -not need to be specified in an input script that reads a restart file. - -The {lj/cut} and {lj/cut/coul/long} pair styles support the use of the -{inner}, {middle}, and {outer} keywords of the "run_style -respa"_run_style.html command, meaning the pairwise forces can be -partitioned by distance at different levels of the rRESPA hierarchy. -The other styles only support the {pair} keyword of run_style respa. -See the "run_style"_run_style.html command for details. +These styles can only be used via the {pair} keyword of the "run_style +respa"_run_style.html command. They do not support the {inner}, +{middle}, {outer} keywords. :line diff --git a/src/USER-MISC/pair_buck_mdf.cpp b/src/USER-MISC/pair_buck_mdf.cpp index b5e81417ee..afd15d7fdb 100644 --- a/src/USER-MISC/pair_buck_mdf.cpp +++ b/src/USER-MISC/pair_buck_mdf.cpp @@ -52,7 +52,6 @@ PairBuckMDF::~PairBuckMDF() memory->destroy(rhoinv); memory->destroy(buck1); memory->destroy(buck2); - memory->destroy(offset); } } @@ -177,7 +176,6 @@ void PairBuckMDF::allocate() memory->create(rhoinv,n+1,n+1,"pair:rhoinv"); memory->create(buck1,n+1,n+1,"pair:buck1"); memory->create(buck2,n+1,n+1,"pair:buck2"); - memory->create(offset,n+1,n+1,"pair:offset"); } /* ---------------------------------------------------------------------- @@ -207,7 +205,8 @@ void PairBuckMDF::settings(int narg, char **arg) void PairBuckMDF::coeff(int narg, char **arg) { - if (narg != 5 && narg != 7) error->all(FLERR,"Incorrect args for pair coefficients"); + if (narg != 5 && narg != 7) + error->all(FLERR,"Incorrect args for pair coefficients"); if (!allocated) allocate(); int ilo,ihi,jlo,jhi; @@ -258,11 +257,6 @@ double PairBuckMDF::init_one(int i, int j) buck1[i][j] = a[i][j]/rho[i][j]; buck2[i][j] = 6.0*c[i][j]; - if (offset_flag && (cut[i][j] > 0.0)) { - double rexp = exp(-cut[i][j]/rho[i][j]); - offset[i][j] = a[i][j]*rexp - c[i][j]/pow(cut[i][j],6.0); - } else offset[i][j] = 0.0; - cut_inner[j][i] = cut_inner[i][j]; cut_inner_sq[i][j] = cut_inner[i][j]*cut_inner[i][j]; cut_inner_sq[j][i] = cut_inner_sq[i][j]; @@ -272,36 +266,6 @@ double PairBuckMDF::init_one(int i, int j) rhoinv[j][i] = rhoinv[i][j]; buck1[j][i] = buck1[i][j]; buck2[j][i] = buck2[i][j]; - offset[j][i] = offset[i][j]; - - // compute I,J contribution to long-range tail correction - // count total # of atoms of type I and J via Allreduce - - if (tail_flag) { - int *type = atom->type; - int nlocal = atom->nlocal; - - double count[2],all[2]; - count[0] = count[1] = 0.0; - for (int k = 0; k < nlocal; k++) { - if (type[k] == i) count[0] += 1.0; - if (type[k] == j) count[1] += 1.0; - } - MPI_Allreduce(count,all,2,MPI_DOUBLE,MPI_SUM,world); - - double rho1 = rho[i][j]; - double rho2 = rho1*rho1; - double rho3 = rho2*rho1; - double rc = cut[i][j]; - double rc2 = rc*rc; - double rc3 = rc2*rc; - etail_ij = 2.0*MY_PI*all[0]*all[1]* - (a[i][j]*exp(-rc/rho1)*rho1*(rc2 + 2.0*rho1*rc + 2.0*rho2) - - c[i][j]/(3.0*rc3)); - ptail_ij = (-1/3.0)*2.0*MY_PI*all[0]*all[1]* - (-a[i][j]*exp(-rc/rho1)* - (rc3 + 3.0*rho1*rc2 + 6.0*rho2*rc + 6.0*rho3) + 2.0*c[i][j]/rc3); - } return cut[i][j]; } diff --git a/src/USER-MISC/pair_lennard_mdf.cpp b/src/USER-MISC/pair_lennard_mdf.cpp index b51639e80e..e2e81e4943 100644 --- a/src/USER-MISC/pair_lennard_mdf.cpp +++ b/src/USER-MISC/pair_lennard_mdf.cpp @@ -251,13 +251,7 @@ void PairLJ_AB_MDF::coeff(int narg, char **arg) double PairLJ_AB_MDF::init_one(int i, int j) { - if (setflag[i][j] == 0) { - aparm[i][j] = mix_energy(aparm[i][i],aparm[j][j], - bparm[i][i],bparm[j][j]); - bparm[i][j] = mix_distance(bparm[i][i],bparm[j][j]); - cut_inner[i][j] = mix_distance(cut_inner[i][i],cut_inner[j][j]); - cut[i][j] = mix_distance(cut[i][i],cut[j][j]); - } + if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); cut_inner_sq[i][j] = cut_inner[i][j]*cut_inner[i][j]; diff --git a/src/USER-MISC/pair_lj_mdf.cpp b/src/USER-MISC/pair_lj_mdf.cpp index 06fd0fcb7e..cfe125f21f 100644 --- a/src/USER-MISC/pair_lj_mdf.cpp +++ b/src/USER-MISC/pair_lj_mdf.cpp @@ -33,7 +33,9 @@ using namespace LAMMPS_NS; /* ---------------------------------------------------------------------- */ -PairLJMDF::PairLJMDF(LAMMPS *lmp) : Pair(lmp) {} +PairLJMDF::PairLJMDF(LAMMPS *lmp) : Pair(lmp) { + writedata = 1; +} /* ---------------------------------------------------------------------- */ From da75fc3eaafd7117003b0ad6f6dfb0771b0b1620 Mon Sep 17 00:00:00 2001 From: Steven Strong Date: Wed, 8 May 2019 09:05:09 -0500 Subject: [PATCH 128/311] incorporate compute_pe_e3b into compute_pair --- doc/src/Commands_compute.txt | 1 - doc/src/compute.txt | 1 - doc/src/compute_pe_e3b.txt | 60 --------------------- doc/src/computes.txt | 1 - doc/src/pair_e3b.txt | 6 +-- examples/USER/e3b/README | 2 +- examples/USER/e3b/in.e3b-tip4p2005 | 4 +- src/.gitignore | 7 +-- src/USER-MISC/README | 1 - src/USER-MISC/compute_pe_e3b.cpp | 86 ------------------------------ src/USER-MISC/compute_pe_e3b.h | 45 ---------------- src/USER-MISC/pair_e3b.cpp | 14 +++-- src/USER-MISC/pair_e3b.h | 6 --- 13 files changed, 19 insertions(+), 215 deletions(-) delete mode 100644 doc/src/compute_pe_e3b.txt delete mode 100644 src/USER-MISC/compute_pe_e3b.cpp delete mode 100644 src/USER-MISC/compute_pe_e3b.h diff --git a/doc/src/Commands_compute.txt b/doc/src/Commands_compute.txt index e36234a306..f566702609 100644 --- a/doc/src/Commands_compute.txt +++ b/doc/src/Commands_compute.txt @@ -91,7 +91,6 @@ KOKKOS, o = USER-OMP, t = OPT. "pe/atom"_compute_pe_atom.html, "pe/mol/tally"_compute_tally.html, "pe/tally"_compute_tally.html, -"pe/e3b"_compute_pe_e3b.html, "plasticity/atom"_compute_plasticity_atom.html, "pressure"_compute_pressure.html, "pressure/cylinder"_compute_pressure_cylinder.html, diff --git a/doc/src/compute.txt b/doc/src/compute.txt index 047d838b2d..87dbee57d6 100644 --- a/doc/src/compute.txt +++ b/doc/src/compute.txt @@ -240,7 +240,6 @@ compute"_Commands_compute.html doc page are followed by one or more of "pe/atom"_compute_pe_atom.html - potential energy for each atom "pe/mol/tally"_compute_tally.html - "pe/tally"_compute_tally.html - -"pe/e3b"_compute_pe_e3b.html - potential energy from pair_style e3b "plasticity/atom"_compute_plasticity_atom.html - Peridynamic plasticity for each atom "pressure"_compute_pressure.html - total pressure and pressure tensor "pressure/cylinder"_compute_pressure_cylinder.html - diff --git a/doc/src/compute_pe_e3b.txt b/doc/src/compute_pe_e3b.txt deleted file mode 100644 index 8fdfd6c1c6..0000000000 --- a/doc/src/compute_pe_e3b.txt +++ /dev/null @@ -1,60 +0,0 @@ -"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c - -:link(lws,http://lammps.sandia.gov) -:link(ld,Manual.html) -:link(lc,Commands_all.html) - -:line - -compute pe/e3b command :h3 - -[Syntax:] - -compute ID group-ID pe/e3b :pre - -ID, group-ID are documented in "compute"_compute.html command -pe/e3b = style name of this compute command :ul - -[Examples:] - -compute 1 all pe/e3b :pre - -[Description:] - -Define a computation that calculates the contribution of "pair_style e3b"_pair_e3b.html to the potential energy. -The specified group must be "all". -See the "compute pe/atom"_compute_pe_atom.html command if you want per-atom -energies. -These per-atom values could be summed for a group of atoms via the "compute reduce"_compute_reduce.html command. - -The "pair_style e3b"_pair_e3b.html potential is composed of 4 terms. -This compute calculates the total e3b contribution to the energy as well as each of the four terms. -The four terms are stored as a 4-element vector in the order pe_Ea, pe_Eb, pe_Ec, pe_E2. -See "pair_style e3b"_pair_e3b.html for more details, and an example script can be found in the examples/USER/e3b directory. - -:line - -[Output info:] - -This compute calculates a global scalar (the total e3b energy) and a global -vector of length 4 (the four energy terms), which can be accessed by indices -1-4. These values can be used by any command that uses global scalar -or vector values from a compute as input. See the "Howto -output"_Howto_output.html doc page for an overview of LAMMPS output -options. - -The scalar and vector values calculated by this compute are -"extensive" and in energy -"units"_units.html. - -[Restrictions:] - -This compute must be used with "pair_style e3b"_pair_e3b.html. - -[Related commands:] - -"pair_style e3b"_pair_e3b.html, -"compute pe"_compute_pe.html, -"compute pe/atom"_compute_pe_atom.html - -[Default:] none diff --git a/doc/src/computes.txt b/doc/src/computes.txt index eefbe5116c..926b8da222 100644 --- a/doc/src/computes.txt +++ b/doc/src/computes.txt @@ -66,7 +66,6 @@ Computes :h1 compute_pair_local compute_pe compute_pe_atom - compute_pe_e3b compute_plasticity_atom compute_pressure compute_pressure_cylinder diff --git a/doc/src/pair_e3b.txt b/doc/src/pair_e3b.txt index b9e6ea2ace..fe4349a57d 100644 --- a/doc/src/pair_e3b.txt +++ b/doc/src/pair_e3b.txt @@ -86,8 +86,8 @@ This estimate defaults to 10 and can be changed using the {neigh} keyword, which If the neigh setting is too small, the simulation will fail with the error "neigh is too small". If the neigh setting is too large, the pair style will use more memory than necessary. -This pair style makes 4 different contributions to the potential energy from the E2, Ea, Eb, and Ec terms above. -The value of each of these terms can be computed using "compute pe/e3b"_compute_pe_e3b.html. +This pair style tallies a breakdown of the total E3B potential energy into sub-categories, which can be accessed via the "compute pair"_compute_pair.html command as a vector of values of length 4. +The 4 values correspond to the terms in the first equation above: the E2 term, the Ea term, the Eb term, and the Ec term. See the examples/USER/e3b directory for a complete example script. @@ -124,7 +124,7 @@ The {preset} keyword currently only works with real, metal, si, and cgs "units"_ [Related commands:] -"pair_coeff"_pair_coeff.html, "compute pe/e3b"_compute_pe_e3b.html +"pair_coeff"_pair_coeff.html, "compute pair"_compute_pair.html [Default:] diff --git a/examples/USER/e3b/README b/examples/USER/e3b/README index 9dd4c284d6..8ef1a54fa2 100644 --- a/examples/USER/e3b/README +++ b/examples/USER/e3b/README @@ -1,6 +1,6 @@ The input script in.lammps simulates bulk water using the 2015 E3B potential. -This script also demonstrates the use of compute pe/e3b to calculate the +This script also demonstrates the use of compute pair to calculate the potential energy contribution of the e3b pair style. These potential energy contributions can be found in the output file e3b.txt. See the LAMMPS documentation for more details. diff --git a/examples/USER/e3b/in.e3b-tip4p2005 b/examples/USER/e3b/in.e3b-tip4p2005 index 64b82046a6..ffb03969d2 100644 --- a/examples/USER/e3b/in.e3b-tip4p2005 +++ b/examples/USER/e3b/in.e3b-tip4p2005 @@ -74,9 +74,9 @@ velocity all create ${myT} 15856 dist gaussian rot yes mom yes run 0 velocity all scale ${myT} -compute e3b all pe/e3b +compute e3b all pair e3b fix e3b all ave/time 1 1 ${thermo_rate} c_e3b c_e3b[*] & - file e3b.txt title2 "step pe_e3b pe_ea pe_eb pe_ec pe_e2" + file e3b.txt title2 "step pe_e3b pe_e2 pe_ea pe_eb pe_ec" ############################################################################# #equilibrate bulk water at NVT diff --git a/src/.gitignore b/src/.gitignore index 3a6acbd871..54ca4549df 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -309,8 +309,6 @@ /compute_meso_t_atom.h /compute_msd_nongauss.cpp /compute_msd_nongauss.h -/compute_pe_e3b.cpp -/compute_pe_e3b.h /compute_pe_tally.cpp /compute_pe_tally.h /compute_plasticity_atom.cpp @@ -794,6 +792,10 @@ /pair_eam_cd.h /pair_eam_fs.cpp /pair_eam_fs.h +/fix_electron_stopping.cpp +/fix_electron_stopping.h +/pair_lebedeva_z.cpp +/pair_lebedeva_z.h /pair_lj_expand_coul_long.cpp /pair_lj_expand_coul_long.h /pair_edip.cpp @@ -1242,4 +1244,3 @@ /pair_smtbq.h /pair_vashishta*.cpp /pair_vashishta*.h - diff --git a/src/USER-MISC/README b/src/USER-MISC/README index 2107242826..a3fb40e26e 100644 --- a/src/USER-MISC/README +++ b/src/USER-MISC/README @@ -29,7 +29,6 @@ bond_style harmonic/shift/cut, Carsten Svaneborg, science at zqex.dk, 8 Aug 11 compute ackland/atom, Gerolf Ziegenhain, gerolf at ziegenhain.com, 4 Oct 2007 compute basal/atom, Christopher Barrett, cdb333 at cavs.msstate.edu, 3 Mar 2013 compute cnp/atom, Paulo Branicio (USC), branicio at usc.edu, 31 May 2017 -compute pe/e3b, Steven Strong (U Chicago), stevene.strong at gmail dot com, 16 Apr 19 compute entropy/atom, Pablo Piaggi (EPFL), pablo.piaggi at epfl.ch, 15 June 2018 compute pressure/cylinder, Cody K. Addington (NCSU), , 2 Oct 2018 compute stress/mop, Romain Vermorel (U Pau) & Laurent Joly (U Lyon), romain.vermorel at univ-pau.fr & ljoly.ulyon at gmail.com, 5 Sep 18 diff --git a/src/USER-MISC/compute_pe_e3b.cpp b/src/USER-MISC/compute_pe_e3b.cpp deleted file mode 100644 index c2d63e074e..0000000000 --- a/src/USER-MISC/compute_pe_e3b.cpp +++ /dev/null @@ -1,86 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - 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: Steven E Strong - stevene.strong at gmail dot com -------------------------------------------------------------------------- */ - -#include "compute_pe_e3b.h" -#include "pair_e3b.h" - -#include "pair.h" -#include "update.h" -#include "error.h" -#include "force.h" - -using namespace LAMMPS_NS; - -/* ---------------------------------------------------------------------- */ - -ComputePEE3B::ComputePEE3B(LAMMPS *lmp, int narg, char **arg) : - Compute(lmp, narg, arg), e3b(NULL) -{ - // 0 1 2 - //compute ID grp pe/e3b - if (narg != 3) error->all(FLERR,"Illegal compute pe/e3b command"); - - scalar_flag = 1; - vector_flag = 1; - size_vector = 4; //etotA,etotB,etotC,etot2 - extvector = extscalar = 1; - timeflag = 1; - - peflag = 1; // we need Pair::ev_tally() to be run - - invoked_vector = invoked_scalar = -1; - vector = new double[size_vector]; -} - -/* ---------------------------------------------------------------------- */ - -ComputePEE3B::~ComputePEE3B() -{ - delete[] vector; -} - -/* ---------------------------------------------------------------------- */ - -void ComputePEE3B::init() { - Pair *pair = force->pair_match("e3b",false,0); - if (pair==NULL) - error->all(FLERR,"This compute must be used with pair_style e3b"); - - e3b = (PairE3B *) pair; - if (e3b==NULL) - error->all(FLERR,"something went wrong"); -} - -/* ---------------------------------------------------------------------- */ - -void ComputePEE3B::compute_vector() -{ - invoked_vector = update->ntimestep; - if (update->eflag_global != invoked_scalar) - error->all(FLERR,"Energy was not tallied on needed timestep"); - - // sum energies across procs - MPI_Allreduce(e3b->etot,vector,4,MPI_DOUBLE,MPI_SUM,world); -} - -double ComputePEE3B::compute_scalar() { - invoked_scalar = update->ntimestep; - if (invoked_scalar != invoked_vector) - compute_vector(); - - scalar = vector[0]+vector[1]+vector[2]+vector[3]; - return scalar; -} diff --git a/src/USER-MISC/compute_pe_e3b.h b/src/USER-MISC/compute_pe_e3b.h deleted file mode 100644 index a23c48b38d..0000000000 --- a/src/USER-MISC/compute_pe_e3b.h +++ /dev/null @@ -1,45 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - 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 COMPUTE_CLASS - -ComputeStyle(pe/e3b,ComputePEE3B) - -#else - -#ifndef LMP_COMPUTE_PEE3B_H -#define LMP_COMPUTE_PEE3B_H - -#include "compute.h" - -namespace LAMMPS_NS { - -class ComputePEE3B : public Compute { - - public: - ComputePEE3B(class LAMMPS *, int, char **); - virtual ~ComputePEE3B(); - - void init(); - - double compute_scalar(); - void compute_vector(); - - private: - class PairE3B *e3b; -}; - -} - -#endif -#endif diff --git a/src/USER-MISC/pair_e3b.cpp b/src/USER-MISC/pair_e3b.cpp index d6ed8f8cf2..1be5f5100d 100644 --- a/src/USER-MISC/pair_e3b.cpp +++ b/src/USER-MISC/pair_e3b.cpp @@ -48,6 +48,8 @@ PairE3B::PairE3B(LAMMPS *lmp) : Pair(lmp),pairPerAtom(10) single_enable = 0; restartinfo = 0; one_coeff = 1; + nextra=4; //store and tally pot energy terms eA, eB, eC, and e2 + pvector = new double[nextra]; allocatedE3B = false; pairO = NULL; @@ -78,6 +80,8 @@ PairE3B::~PairE3B() memory->destroy(fpair3); memory->destroy(sumExp); } + + delete[] pvector; } /* ---------------------------------------------------------------------- */ @@ -99,7 +103,7 @@ void PairE3B::compute(int eflag, int vflag) memset(sumExp,0.0,nbytes); evdwl = 0.0; - etot[0]=etot[1]=etot[2]=etot[3]=0.0; + pvector[0]=pvector[1]=pvector[2]=pvector[3]=0.0; if (eflag || vflag) ev_setup(eflag,vflag); else evflag = vflag_fdotr = 0; @@ -161,7 +165,7 @@ void PairE3B::compute(int eflag, int vflag) if (evflag) { ev_tally(i,j,nlocal,newton_pair,tmpexp,0.0,fpair,delx,dely,delz); - etot[3] += tmpexp; + pvector[0] += tmpexp; } } //end if rsq Date: Wed, 8 May 2019 10:19:21 -0400 Subject: [PATCH 129/311] update legacy pdf manual input config --- doc/src/lammps.book | 1 - 1 file changed, 1 deletion(-) diff --git a/doc/src/lammps.book b/doc/src/lammps.book index cbe0bbb68e..8f61026280 100644 --- a/doc/src/lammps.book +++ b/doc/src/lammps.book @@ -475,7 +475,6 @@ compute_pair.html compute_pair_local.html compute_pe.html compute_pe_atom.html -compute_pe_e3b.html compute_plasticity_atom.html compute_pressure.html compute_pressure_cylinder.html From 2f580380a4a29bf6c163fa77cc3681927203923e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 9 May 2019 12:29:38 -0400 Subject: [PATCH 130/311] adjust drip potential example for new requirements for pair style rebo. recreate log files --- examples/USER/misc/drip/C.drip | 20 +- examples/USER/misc/drip/CH.airebo | 37595 ---------------- examples/USER/misc/drip/CH.rebo | 1 + examples/USER/misc/drip/in.CH_drip | 2 +- examples/USER/misc/drip/in.C_drip | 2 +- ...+.in.CH_drip => log.30Apr19.CH_drip.g++.1} | 52 +- .../USER/misc/drip/log.30Apr19.CH_drip.g++.4 | 111 + ...g++.in.C_drip => log.30Apr19.C_drip.g++.1} | 32 +- .../USER/misc/drip/log.30Apr19.C_drip.g++.4 | 111 + 9 files changed, 270 insertions(+), 37656 deletions(-) mode change 100644 => 120000 examples/USER/misc/drip/C.drip delete mode 100644 examples/USER/misc/drip/CH.airebo create mode 120000 examples/USER/misc/drip/CH.rebo rename examples/USER/misc/drip/{log.4May2019.g++.in.CH_drip => log.30Apr19.CH_drip.g++.1} (60%) create mode 100644 examples/USER/misc/drip/log.30Apr19.CH_drip.g++.4 rename examples/USER/misc/drip/{log.4May2019.g++.in.C_drip => log.30Apr19.C_drip.g++.1} (79%) create mode 100644 examples/USER/misc/drip/log.30Apr19.C_drip.g++.4 diff --git a/examples/USER/misc/drip/C.drip b/examples/USER/misc/drip/C.drip deleted file mode 100644 index 74e006d682..0000000000 --- a/examples/USER/misc/drip/C.drip +++ /dev/null @@ -1,19 +0,0 @@ -# DATE: 2019-04-19 CONTRIBUTOR: Mingjian Wen, wenxx151@umn.edu -# -# Parameters of the Dihedral-angle-corrected registry-dependent interlayer (DRIP) -# potential for multilayer graphene structures. -# -# Cite as M. Wen, S. Carr, S. Fang, E. Kaxiras, and E. B. Tadmor, Phys. Rev. B, 98, 235404 (2018). - - -# C0 C2 C4 C delta lambda A z0 B eta rho_cut r_cut normal_cut -C C 1.1598e-02 1.2981e-02 3.2515e-02 7.8151e-03 8.3679e-01 2.7158 2.2216e-02 3.34 7.6799e-03 1.1432 1.562 12.0 3.7 - - -# C0, C2, C4, C, A, and B in [eV] -# delta, z0, eta, rho_cut, r_cut, and normal_cut in [Angstrom] -# lambda in [1/Angstrom] -# -# "normal_cut" is a parameter not present in the Wen paper, but specific to the -# LAMMPS implementation, which is used to find the 3 nearest neighbors of an -# atom to construct the normal. diff --git a/examples/USER/misc/drip/C.drip b/examples/USER/misc/drip/C.drip new file mode 120000 index 0000000000..44959e2423 --- /dev/null +++ b/examples/USER/misc/drip/C.drip @@ -0,0 +1 @@ +../../../../potentials/C.drip \ No newline at end of file diff --git a/examples/USER/misc/drip/CH.airebo b/examples/USER/misc/drip/CH.airebo deleted file mode 100644 index c89077194f..0000000000 --- a/examples/USER/misc/drip/CH.airebo +++ /dev/null @@ -1,37595 +0,0 @@ -# DATE: 2011-10-25 CONTRIBUTOR: Ase Henry, ase@gatech.edu CITATION: Stuart, Tutein and Harrison, J Chem Phys, 112, 6472-6486 (2000) -# AIREBO Brenner/Stuart potential -# Cite as S. J. Stuart, A. B. Tutein, J. A. Harrison, -# "A reactive potential for hydrocarbons with intermolecular interactions", -# J. Chem. Phys. 112 (2000) 6472-6486. - -1.7 rcmin_CC -1.3 rcmin_CH -1.1 rcmin_HH -2.0 rcmax_CC -1.8 rcmax_CH -1.7 rcmax_HH -2.0 rcmaxp_CC -1.6 rcmaxp_CH -1.7 rcmaxp_HH -0.1 smin -2.0 Nmin -3.0 Nmax -3.2 NCmin -3.7 NCmax -0.3134602960832605 Q_CC -0.3407757282257080 Q_CH -0.370 Q_HH -4.746539060659529 alpha_CC -4.102549828548784 alpha_CH -3.536 alpha_HH -10953.54416216992 A_CC -149.940987228812 A_CH -31.6731 A_HH -12388.79197798375 BIJc_CC1 -17.56740646508968 BIJc_CC2 -30.71493208065162 BIJc_CC3 -32.35518665873256 BIJc_CH1 -0.0 BIJc_CH2 -0.0 BIJc_CH3 -28.2297 BIJc_HH1 -0.0 BIJc_HH2 -0.0 BIJc_HH3 -4.720452312717397 Beta_CC1 -1.433213249951261 Beta_CC2 -1.382691250599169 Beta_CC3 -1.434458059249837 Beta_CH1 -0.0 Beta_CH2 -0.0 Beta_CH3 -1.708 Beta_HH1 -1.0 Beta_HH2 -1.0 Beta_HH3 -0.0 rho_CC -1.09 rho_CH -0.7415887 rho_HH -3.4 rcLJmin_CC -3.025 rcLJmin_CH -2.65 rcLJmin_HH -3.816370964 rcLJmax_CC -3.395447696 rcLJmax_CH -2.974524428 rcLJmax_HH -0.77 bLJmin_CC -0.75 bLJmin_CH -0.32 bLJmin_HH -0.81 bLJmax_CC -0.9 bLJmax_CH -0.42 bLJmax_HH -0.002843732471143 epsilon_CC -0.002064935027177 epsilon_CH -0.001499422575693 epsilon_HH -3.4 sigma_CC -3.025 sigma_CH -2.65 sigma_HH -0.3078851086 epsilonT_CCCC -0.1786600912 epsilonT_CCCH -0.1249753356 epsilonT_HCCH - -# gC1 and gC2 - -5 --1.0 --0.6666666667 --0.5 --0.3333333333 -1.0 - - 0.2816950000 - 1.0627430000 - 2.1363075000 - 2.5334145000 - 1.5544035000 - 0.3862485000 - 0.2827390000 - 1.0718770000 - 2.1681365000 - 2.5885710000 - 1.6019100000 - 0.4025160000 - 0.6900250000 - 5.4601600000 - 23.0108000000 - 54.9086400000 - 68.6124000000 - 34.7051520000 - 0.2718560918 - 0.4892740137 - -0.4328177539 - -0.5616817383 - 1.2708702246 - -0.0375008379 - - 0.2816950000 - 1.0627430000 - 2.1363075000 - 2.5334145000 - 1.5544035000 - 0.3862485000 - 0.2827390000 - 1.0718770000 - 2.1681365000 - 2.5885710000 - 1.6019100000 - 0.4025160000 - 0.6900250000 - 5.4601600000 - 23.0108000000 - 54.9086400000 - 68.6124000000 - 34.7051520000 - 0.3754514434 - 1.4072691309 - 2.2551320117 - 2.0288747461 - 1.4269207324 - 0.5063519355 - -# gH - -4 --1.0 --0.8333333333 --0.5 -1.0 - - 270.4568000026 - 1549.6358000143 - 3781.7719000316 - 4582.1544000348 - 2721.4308000191 - 630.6336000042 - 16.9534406250 - -21.0823875000 - -102.4683000000 - -210.6432299999 - -229.8471299999 - -94.9946400000 - 19.0650249321 - 2.0177562840 - -2.5664219198 - 3.2913322346 - -2.6535615062 - 0.8376699753 - -# pCC - -4 -0.0 -4.0 -0.0 -4.0 - - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0986400000 - 0.0657600000 - 0.0000000000 - 0.0000000000 - 0.0657600000 - -0.0438400000 - -0.0025000000 - 0.0060000000 - -0.0045000000 - 0.0010000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2339100000 - -0.6402960000 - 0.4802220000 - -0.1067160000 - -0.1559400000 - 0.4268640000 - -0.3201480000 - 0.0711440000 - 0.4650000000 - -0.5985000000 - 0.2493750000 - -0.0332500000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.9074060000 - 2.4787080000 - -1.0327950000 - 0.1377060000 - 1.2716040000 - -1.6524720000 - 0.6885300000 - -0.0918040000 - -1.2900000000 - 1.1610000000 - -0.3386250000 - 0.0322500000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 3.8700000000 - -3.4830000000 - 1.0158750000 - -0.0967500000 - -2.5800000000 - 2.3220000000 - -0.6772500000 - 0.0645000000 - -0.1380150000 - 0.0000000000 - 0.5932650000 - -0.3955100000 - 0.3312360000 - 0.0000000000 - -1.5027480000 - 1.0018320000 - -0.2484270000 - 0.0000000000 - 1.1270610000 - -0.7513740000 - 0.0552060000 - 0.0000000000 - -0.2504580000 - 0.1669720000 - -0.3654800000 - 1.0205280000 - -0.7653960000 - 0.1700880000 - 1.0582800000 - -2.9471040000 - 2.2103280000 - -0.4911840000 - -0.7937100000 - 2.2103280000 - -1.6577460000 - 0.3683880000 - 0.1763800000 - -0.4911840000 - 0.3683880000 - -0.0818640000 - 0.6832080000 - -0.9109440000 - 0.3795600000 - -0.0506080000 - -2.0496240000 - 2.7328320000 - -1.1386800000 - 0.1518240000 - 1.5372180000 - -2.0496240000 - 0.8540100000 - -0.1138680000 - -0.3416040000 - 0.4554720000 - -0.1897800000 - 0.0253040000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.7452810000 - 0.0000000000 - -2.4934230000 - 1.6622820000 - -0.9937080000 - 0.0000000000 - 3.3245640000 - -2.2163760000 - 0.4140450000 - 0.0000000000 - -1.3852350000 - 0.9234900000 - -0.0552060000 - 0.0000000000 - 0.1846980000 - -0.1231320000 - 0.3434400000 - -1.0303200000 - 0.7727400000 - -0.1717200000 - -0.4579200000 - 1.3737600000 - -1.0303200000 - 0.2289600000 - 0.1908000000 - -0.5724000000 - 0.4293000000 - -0.0954000000 - -0.0254400000 - 0.0763200000 - -0.0572400000 - 0.0127200000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -# pCH - -4 -0.0 -4.0 -0.0 -4.0 - - 0.0000000000 - 0.0000000000 - 0.6280110000 - -0.4186740000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0300000000 - 0.0000000000 - -3.1001400000 - 2.0667600000 - -0.0200000000 - 0.0000000000 - 2.0667600000 - -1.3778400000 - -1.1595980000 - 3.2854440000 - -2.4640830000 - 0.5475740000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.4966950000 - -3.6001800000 - 2.7001350000 - -0.6000300000 - -0.3311300000 - 2.4001200000 - -1.8000900000 - 0.4000200000 - -6.7698340000 - 8.6212080000 - -3.5921700000 - 0.4789560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 44.5208070000 - -58.1453640000 - 24.2272350000 - -3.2302980000 - -29.6805380000 - 38.7635760000 - -16.1514900000 - 2.1535320000 - 24.3142400000 - -21.8828160000 - 6.3824880000 - -0.6078560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -72.9427200000 - 65.6484480000 - -19.1474640000 - 1.8235680000 - 48.6284800000 - -43.7656320000 - 12.7649760000 - -1.2157120000 - -0.6502100000 - 0.0000000000 - -1.0558290000 - 0.7038860000 - 1.5845040000 - 0.0000000000 - 1.5611040000 - -1.0407360000 - -1.1883780000 - 0.0000000000 - -1.1708280000 - 0.7805520000 - 0.2640840000 - 0.0000000000 - 0.2601840000 - -0.1734560000 - 9.9867120000 - -26.3732760000 - 19.7799570000 - -4.3955460000 - -26.3537880000 - 68.3007840000 - -51.2255880000 - 11.3834640000 - 19.7653410000 - -51.2255880000 - 38.4191910000 - -8.5375980000 - -4.3922980000 - 11.3834640000 - -8.5375980000 - 1.8972440000 - -32.2817400000 - 43.0423200000 - -17.9343000000 - 2.3912400000 - 96.8452200000 - -129.1269600000 - 53.8029000000 - -7.1737200000 - -72.6339150000 - 96.8452200000 - -40.3521750000 - 5.3802900000 - 16.1408700000 - -21.5211600000 - 8.9671500000 - -1.1956200000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -5.3172460000 - 0.0000000000 - 40.2945870000 - -26.8630580000 - 6.6795480000 - 0.0000000000 - -52.4957760000 - 34.9971840000 - -2.7831450000 - 0.0000000000 - 21.8732400000 - -14.5821600000 - 0.3710860000 - 0.0000000000 - -2.9164320000 - 1.9442880000 - -32.4571320000 - 97.3713960000 - -73.0285470000 - 16.2285660000 - 43.2761760000 - -129.8285280000 - 97.3713960000 - -21.6380880000 - -18.0317400000 - 54.0952200000 - -40.5714150000 - 9.0158700000 - 2.4042320000 - -7.2126960000 - 5.4095220000 - -1.2021160000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 24.6068000000 - 0.0000000000 - -73.8204000000 - 49.2136000000 - -22.1461200000 - 0.0000000000 - 66.4383600000 - -44.2922400000 - 6.4592850000 - 0.0000000000 - -19.3778550000 - 12.9185700000 - -0.6151700000 - 0.0000000000 - 1.8455100000 - -1.2303400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -# piCC - -6 -0.0 -4.0 -0.0 -4.0 -0.0 -9.0 - - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1952414550000000 - -0.1301609700000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1301609700000000 - 0.0867739800000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1952414550000000 - -0.1301609700000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2460512699999999 - -0.1640341799999999 - 0.0000000000000000 - 0.0000000000000000 - -0.1640341799999999 - 0.1093561200000001 - 0.0000000000000000 - 0.0000000000000000 - -0.1301609700000000 - 0.0867739800000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1640341799999999 - 0.1093561200000001 - 0.0000000000000000 - 0.0000000000000000 - 0.1093561200000001 - -0.0729040800000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1859428215000000 - 0.6024559355999999 - -0.4518419517000000 - 0.1004093226000000 - 0.1239618810000000 - -0.4016372904000000 - 0.3012279677999999 - -0.0669395484000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1859428215000000 - 0.6024559355999999 - -0.4518419517000000 - 0.1004093226000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3234498210000000 - 0.9186318863999997 - -0.6208630397999997 - 0.1076980643999998 - 0.2156332139999999 - -0.6124212575999999 - 0.4139086932000001 - -0.0717987096000001 - 0.1239618810000000 - -0.4016372904000000 - 0.3012279677999999 - -0.0669395484000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2156332139999999 - -0.6124212575999999 - 0.4139086932000001 - -0.0717987096000001 - -0.1437554760000001 - 0.4082808384000002 - -0.2759391288000001 - 0.0478658064000000 - 0.1388410212000000 - -0.1785098844000000 - 0.0743791185000000 - -0.0099172158000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4016472399000000 - 0.5355296532000000 - -0.2231373555000000 - 0.0297516474000000 - 0.2677648266000000 - -0.3570197688000000 - 0.1487582370000000 - -0.0198344316000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4016472399000000 - 0.5355296532000000 - -0.2231373555000000 - 0.0297516474000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 4.5450778986000007 - -5.3987902596000001 - 2.0451633165000001 - -0.2545255422000000 - -3.0300519324000001 - 3.5991935063999998 - -1.3634422110000000 - 0.1696836948000000 - 0.2677648266000000 - -0.3570197688000000 - 0.1487582370000000 - -0.0198344316000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.0300519324000001 - 3.5991935063999998 - -1.3634422110000000 - 0.1696836948000000 - 2.0200346216000002 - -2.3994623376000002 - 0.9089614740000000 - -0.1131224632000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1170126711000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0780084474000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0780084474000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0520056316000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1170126711000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0780084474000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0780084474000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0520056316000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1170126711000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0780084474000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0780084474000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0520056316000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1170126711000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0780084474000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0780084474000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0520056316000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1170126711000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0780084474000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0780084474000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0520056316000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1170126711000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0780084474000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0780084474000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0520056316000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1101605377500000 - -0.0734403585000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1081921266000000 - 0.0721280844000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0811440949500000 - -0.0540960633000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0180320211000000 - 0.0120213474000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.5308662927499996 - 1.0205775285000001 - 0.0000000000000000 - 0.0000000000000000 - 4.2922496105999990 - -2.8614997404000002 - 0.0000000000000000 - 0.0000000000000000 - -3.1601247079499992 - 2.1067498053000002 - 0.0000000000000000 - 0.0000000000000000 - 0.6759999350999999 - -0.4506666234000001 - 0.0000000000000000 - 0.0000000000000000 - 1.0205775285000001 - -0.6803850190000000 - 0.0000000000000000 - 0.0000000000000000 - -2.8614997404000002 - 1.9076664936000003 - 0.0000000000000000 - 0.0000000000000000 - 2.1067498053000002 - -1.4044998702000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4506666234000001 - 0.3004444156000000 - -0.3953362375000001 - 1.0369354002000000 - -0.7777015501500000 - 0.1728225667000000 - 0.8000527127999999 - -2.0066802120000000 - 1.5050101590000000 - -0.3344467020000000 - -0.6000395345999999 - 1.5050101590000000 - -1.1287576192500000 - 0.2508350265000000 - 0.1333421188000000 - -0.3344467020000000 - 0.2508350265000000 - -0.0557411170000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 3.3103306184999992 - -9.0968349185999990 - 6.7318116889499997 - -1.4555961530999999 - -8.5868161127999993 - 23.8242035591999937 - -17.5957091693999956 - 3.7890715931999996 - 6.3613620845999996 - -17.6319026693999987 - 13.0195943770499980 - -2.8024286948999997 - -1.3786360187999998 - 3.8132005931999995 - -2.8144931948999998 - 0.6052619321999999 - -2.2068870789999999 - 6.0645566123999997 - -4.4878744592999995 - 0.9703974353999998 - 5.7245440751999999 - -15.8828023728000005 - 11.7304727795999995 - -2.5260477287999996 - -4.2409080563999995 - 11.7546017795999980 - -8.6797295846999987 - 1.8682857965999997 - 0.9190906791999999 - -2.5421337287999997 - 1.8763287965999997 - -0.4035079547999999 - 1.4805008319000001 - -1.9673896319999999 - 0.8197456799999999 - -0.1092994240000000 - -3.5413013375999998 - 4.7217351167999997 - -1.9673896319999997 - 0.2623186176000000 - 2.6559760031999997 - -3.5413013375999993 - 1.4755422239999998 - -0.1967389632000000 - -0.5902168896000000 - 0.7869558527999999 - -0.3278982720000000 - 0.0437197696000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -19.2295206957000033 - 24.4584372960000032 - -9.9185720400000008 - 1.2982590720000002 - 48.8229586128000079 - -61.7340105504000007 - 24.9051738960000009 - -3.2480382528000007 - -36.6172189596000024 - 46.3005079128000006 - -18.6788804219999989 - 2.4360286896000005 - 8.1371597688000001 - -10.2890017584000013 - 4.1508623160000004 - -0.5413397088000000 - 12.8196804638000010 - -16.3056248640000021 - 6.6123813600000005 - -0.8655060480000000 - -32.5486390752000005 - 41.1560070336000052 - -16.6034492640000018 - 2.1653588352000002 - 24.4114793064000004 - -30.8670052752000004 - 12.4525869480000004 - -1.6240191264000001 - -5.4247731792000007 - 6.8593345056000006 - -2.7672415440000000 - 0.3608931392000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 3.2914572557999993 - -3.1368362039999997 - 0.9712843094999998 - -0.0996618390000000 - -7.9931075507999978 - 7.5284068895999994 - -2.3310823427999994 - 0.2391884136000000 - 5.9948306630999983 - -5.6463051671999986 - 1.7483117570999998 - -0.1793913102000000 - -1.3321845917999997 - 1.2547344815999997 - -0.3885137237999999 - 0.0398647356000000 - -2.1943048371999994 - 2.0912241359999992 - -0.6475228729999998 - 0.0664412260000000 - 5.3287383671999988 - -5.0189379263999987 - 1.5540548951999997 - -0.1594589424000000 - -3.9965537753999993 - 3.7642034447999992 - -1.1655411713999997 - 0.1195942068000000 - 0.8881230611999998 - -0.8364896543999999 - 0.2590091492000000 - -0.0265764904000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 51.2174335277999973 - -34.7252003400000007 - 7.7793458265000002 - -0.5762478390000000 - -125.8865034036000026 - 85.2980168160000147 - -19.1108755836000022 - 1.4156204136000001 - 98.0036935526999997 - -66.4204326120000133 - 14.8837136877000020 - -1.1024973102000000 - -23.3736279005999990 - 15.8476161360000010 - -3.5521839306000000 - 0.2631247356000000 - -34.1449556852000029 - 23.1501335600000040 - -5.1862305510000013 - 0.3841652260000000 - 83.9243356024000065 - -56.8653445440000098 - 12.7405837224000020 - -0.9437469424000001 - -65.3357957018000093 - 44.2802884080000041 - -9.9224757918000019 - 0.7349982068000001 - 15.5824186004000005 - -10.5650774240000018 - 2.3681226204000003 - -0.1754164904000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 18.8699219402999923 - -9.8715457799999946 - 1.7195853929999991 - -0.0996618419999999 - -45.3977355935999753 - 23.6917098719999899 - -4.1270049431999976 - 0.2391884207999999 - 34.0686926951999851 - -17.7687824039999924 - 3.0952537073999986 - -0.1793913155999999 - -7.5798832655999968 - 3.9486183119999980 - -0.6878341571999995 - 0.0398647368000000 - -12.5799479601999984 - 6.5810305199999988 - -1.1463902619999997 - 0.0664412280000000 - 30.2651570623999930 - -15.7944732479999974 - 2.7513366287999990 - -0.1594589472000000 - -22.7124617967999924 - 11.8458549359999967 - -2.0635024715999997 - 0.1195942104000000 - 5.0532555103999988 - -2.6324122079999994 - 0.4585561047999999 - -0.0265764912000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0187635363000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1549554239999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1366075680000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0394199040000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0125090242000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1033036160000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0910717120000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0262799360000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0187635363000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1549554239999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1366075680000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0394199040000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0125090242000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1033036160000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0910717120000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0262799360000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0187635363000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1549554239999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1366075680000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0394199040000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0125090242000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1033036160000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0910717120000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0262799360000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -7.0321606498499998 - 4.6881070998999999 - 0.0000000000000000 - 0.0000000000000000 - 9.1366163297999989 - -6.0910775531999999 - 0.0000000000000000 - 0.0000000000000000 - -3.8069234707500001 - 2.5379489805000000 - 0.0000000000000000 - 0.0000000000000000 - 0.5075897961000000 - -0.3383931974000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 24.1765592188500023 - -16.1177061459000015 - 0.0000000000000000 - 0.0000000000000000 - -30.8078686818000023 - 20.5385791212000015 - 0.0000000000000000 - 0.0000000000000000 - 12.6594244507500004 - -8.4396163005000009 - 0.0000000000000000 - 0.0000000000000000 - -1.6721732601000001 - 1.1147821734000001 - 0.0000000000000000 - 0.0000000000000000 - -16.1177061459000015 - 10.7451374305999998 - 0.0000000000000000 - 0.0000000000000000 - 20.5385791212000015 - -13.6923860807999986 - 0.0000000000000000 - 0.0000000000000000 - -8.4396163005000009 - 5.6264108669999997 - 0.0000000000000000 - 0.0000000000000000 - 1.1147821734000001 - -0.7431881155999999 - 1.7964189073000001 - -9.9371338973999990 - 7.4528504230499992 - -1.6561889829000001 - -2.4750911663999995 - 13.2495118631999986 - -9.9371338973999990 - 2.2082519771999998 - 1.0312879859999999 - -5.5206299429999994 - 4.1404724572499996 - -0.9201049905000001 - -0.1375050648000000 - 0.7360839924000000 - -0.5520629942999999 - 0.1226806654000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -44.4148786822999924 - 125.9369562125999806 - -94.4527171594499890 - 20.9894927020999980 - 57.1409193383999963 - -161.7845013575999928 - 121.3383760181999946 - -26.9640835595999988 - -23.5724663909999990 - 66.7014588990000021 - -50.0260941742499909 - 11.1169098164999998 - 3.1219955187999995 - -8.8305278531999996 - 6.6228958898999997 - -1.4717546421999999 - 30.4859639041999984 - -86.0604782867999916 - 64.5453587151000079 - -14.3434130477999986 - -39.2202895175999942 - 110.5595581391999929 - -82.9196686044000018 - 18.4265930231999988 - 16.1842872989999975 - -45.5939825580000004 - 34.1954869185000021 - -7.5989970929999995 - -2.1439049731999997 - 6.0371976743999998 - -4.5278982558000003 - 1.0061996123999999 - 41.0697356006999996 - -54.7530359903999937 - 22.8137649960000033 - -3.0418353327999998 - -52.4181452760000042 - 69.8908603680000056 - -29.1211918200000000 - 3.8828255760000001 - 21.8408938650000017 - -29.1211918200000000 - 12.1338299250000006 - -1.6178439899999999 - -2.9121191820000001 - 3.8828255760000001 - -1.6178439899999999 - 0.2157125320000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -58.7754249068999997 - 72.4365406656000062 - -30.1818919440000002 - 4.0242522591999998 - 71.7688591056000007 - -88.1435659967999925 - 36.7264858320000016 - -4.8968647776000003 - -29.9036912940000015 - 36.7264858320000016 - -15.3027024300000001 - 2.0403603240000003 - 3.9871588392000001 - -4.8968647776000003 - 2.0403603240000003 - -0.2720480432000001 - 34.4529747782000015 - -41.9835046752000025 - 17.4931269480000005 - -2.3324169264000001 - -41.7636522936000034 - 50.6527056287999997 - -21.1052940120000017 - 2.8140392016000000 - 17.4015217890000002 - -21.1052940120000017 - 8.7938725049999995 - -1.1725163339999998 - -2.3202029051999999 - 2.8140392016000000 - -1.1725163339999998 - 0.1563355111999999 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -22.5910445969999856 - 16.9389155015999862 - -5.2449352712999966 - 0.5381739305999996 - 29.8518848603999807 - -22.5852206687999839 - 6.9932470283999955 - -0.7175652407999995 - -12.4382853584999911 - 9.4105086119999921 - -2.9138529284999981 - 0.2989855169999998 - 1.6584380477999987 - -1.2547344815999988 - 0.3885137237999997 - -0.0398647356000000 - 15.0606963979999851 - -11.2926103343999884 - 3.4966235141999964 - -0.3587826203999996 - -19.9012565735999800 - 15.0568137791999828 - -4.6621646855999952 - 0.4783768271999995 - 8.2921902389999929 - -6.2736724079999924 - 1.9425686189999980 - -0.1993236779999998 - -1.1056253651999990 - 0.8364896543999990 - -0.2590091491999997 - 0.0265764904000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 132.0402867341999809 - -94.3691021639999832 - 21.4156989368999930 - -1.5863480693999996 - -133.2574315811999668 - 96.4624295519999748 - -21.9475812491999918 - 1.6257467591999992 - 44.7574818254999798 - -32.8519189799999864 - 7.4931545204999956 - -0.5550484829999996 - -5.0106466433999977 - 3.7277438639999976 - -0.8522720693999993 - 0.0631312643999999 - -88.0268578227999967 - 62.9127347760000006 - -14.2771326246000001 - 1.0575653796000002 - 88.8382877207999968 - -64.3082863680000116 - 14.6317208328000028 - -1.0838311728000001 - -29.8383212170000043 - 21.9012793200000040 - -4.9954363470000018 - 0.3700323220000001 - 3.3404310956000010 - -2.4851625760000013 - 0.5681813796000004 - -0.0420875096000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -104.3657106932998886 - 53.3063472119999489 - -9.2857611221999896 - 0.5381739467999993 - 139.1294649887998673 - -71.0751296159999271 - 12.3810148295999856 - -0.7175652623999991 - -58.0317834119999389 - 29.6146373399999696 - -5.1587561789999938 - 0.2989855259999996 - 7.7430087215999910 - -3.9486183119999954 - 0.6878341571999992 - -0.0398647367999999 - 69.5771404621999920 - -35.5375648079999991 - 6.1905074148000008 - -0.3587826312000001 - -92.7529766592000016 - 47.3834197440000082 - -8.2540098864000022 - 0.4783768416000003 - 38.6878556080000138 - -19.7430915600000105 - 3.4391707860000027 - -0.1993236840000002 - -5.1620058144000041 - 2.6324122080000025 - -0.4585561048000005 - 0.0265764912000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5694553116999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 3.4011244799999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.4783081999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2025453600000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.7129702077999998 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.2674163199999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9855388000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1350302400000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5694553116999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 3.4011244799999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.4783081999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2025453600000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.7129702077999998 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.2674163199999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9855388000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1350302400000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5694553116999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 3.4011244799999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.4783081999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2025453600000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.7129702077999998 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.2674163199999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9855388000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1350302400000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1796984025000000 - 0.1197989350000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.5390952075000000 - -0.3593968050000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3593968050000000 - 0.2395978700000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0598994675000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 6.7523780425000002 - -15.7744311360000005 - 11.8308233519999995 - -2.6290718559999999 - -6.7580597519999994 - 16.2193434048000000 - -12.1645075536000000 - 2.7032239007999999 - 1.9711007609999998 - -4.7306418263999994 - 3.5479813698000000 - -0.7884403043999999 - -0.1877238820000000 - 0.4505373168000000 - -0.3379029876000000 - 0.0750895528000000 - -7.0045704549999996 - 16.5234516479999982 - -12.3925887360000004 - 2.7539086080000001 - 6.7580597519999994 - -16.2193434048000000 - 12.1645075536000000 - -2.7032239007999999 - -1.9711007609999998 - 4.7306418263999994 - -3.5479813698000000 - 0.7884403043999999 - 0.1877238820000000 - -0.4505373168000000 - 0.3379029876000000 - -0.0750895528000000 - 1.7561266437000007 - -2.3348907144000020 - 0.9728711310000014 - -0.1297161508000003 - -0.0000000000000012 - 0.0000000000000029 - -0.0000000000000020 - 0.0000000000000004 - 0.0000000000000005 - -0.0000000000000012 - 0.0000000000000008 - -0.0000000000000002 - -0.0000000000000001 - 0.0000000000000002 - -0.0000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -46.0039935710999970 - 61.0691501591999995 - -25.4454792330000004 - 3.3927305643999999 - 36.4935226607999965 - -48.6580302144000001 - 20.2741792560000000 - -2.7032239007999999 - -10.6439441093999996 - 14.1919254792000000 - -5.9133022830000002 - 0.7884403043999999 - 1.0137089628000000 - -1.3516119503999999 - 0.5631716460000000 - -0.0750895528000000 - 44.1854485514000146 - -58.7342594448000099 - 24.4726081020000059 - -3.2630144136000014 - -36.4935226608000107 - 48.6580302144000143 - -20.2741792560000071 - 2.7032239008000012 - 10.6439441094000031 - -14.1919254792000071 - 5.9133022830000037 - -0.7884403044000006 - -1.0137089628000004 - 1.3516119504000006 - -0.5631716460000002 - 0.0750895528000001 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2021309517000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1347539678000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2021309517000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1347539678000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2021309517000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1347539678000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2021309517000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1347539678000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2021309517000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1347539678000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2021309517000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1347539678000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1101605377500000 - -0.0734403585000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.5308662927499996 - 1.0205775285000001 - 0.0000000000000000 - 0.0000000000000000 - 1.0205775285000001 - -0.6803850190000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1081921266000000 - 0.0721280844000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 4.2922496105999990 - -2.8614997404000002 - 0.0000000000000000 - 0.0000000000000000 - -2.8614997404000002 - 1.9076664936000003 - 0.0000000000000000 - 0.0000000000000000 - 0.0811440949500000 - -0.0540960633000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.1601247079499992 - 2.1067498053000002 - 0.0000000000000000 - 0.0000000000000000 - 2.1067498053000002 - -1.4044998702000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0180320211000000 - 0.0120213474000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.6759999350999999 - -0.4506666234000001 - 0.0000000000000000 - 0.0000000000000000 - -0.4506666234000001 - 0.3004444156000000 - -0.3953362375000001 - 1.0369354002000000 - -0.7777015501500000 - 0.1728225667000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 3.3103306184999992 - -9.0968349185999990 - 6.7318116889499997 - -1.4555961531000001 - -2.2068870789999999 - 6.0645566123999997 - -4.4878744593000004 - 0.9703974354000000 - 0.8000527127999999 - -2.0066802120000000 - 1.5050101590000000 - -0.3344467020000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -8.5868161127999993 - 23.8242035591999972 - -17.5957091693999992 - 3.7890715932000001 - 5.7245440751999999 - -15.8828023728000005 - 11.7304727795999995 - -2.5260477288000001 - -0.6000395345999999 - 1.5050101590000000 - -1.1287576192500000 - 0.2508350265000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 6.3613620845999996 - -17.6319026693999987 - 13.0195943770500016 - -2.8024286949000006 - -4.2409080564000003 - 11.7546017796000015 - -8.6797295847000004 - 1.8682857965999999 - 0.1333421188000000 - -0.3344467020000000 - 0.2508350265000000 - -0.0557411170000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.3786360188000000 - 3.8132005932000004 - -2.8144931949000003 - 0.6052619322000001 - 0.9190906792000001 - -2.5421337288000001 - 1.8763287966000000 - -0.4035079547999999 - 1.4805008319000001 - -1.9673896319999999 - 0.8197456799999999 - -0.1092994240000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -19.2295206957000033 - 24.4584372960000032 - -9.9185720400000008 - 1.2982590720000002 - 12.8196804638000010 - -16.3056248640000021 - 6.6123813600000005 - -0.8655060480000000 - -3.5413013375999998 - 4.7217351167999997 - -1.9673896319999997 - 0.2623186176000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 48.8229586128000079 - -61.7340105504000007 - 24.9051738960000009 - -3.2480382528000007 - -32.5486390752000005 - 41.1560070336000052 - -16.6034492640000018 - 2.1653588352000002 - 2.6559760031999997 - -3.5413013375999993 - 1.4755422239999998 - -0.1967389632000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -36.6172189596000024 - 46.3005079128000006 - -18.6788804219999989 - 2.4360286896000005 - 24.4114793064000004 - -30.8670052752000004 - 12.4525869480000004 - -1.6240191264000001 - -0.5902168896000000 - 0.7869558527999999 - -0.3278982720000000 - 0.0437197696000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 8.1371597688000001 - -10.2890017584000013 - 4.1508623160000004 - -0.5413397088000000 - -5.4247731792000007 - 6.8593345056000006 - -2.7672415440000000 - 0.3608931392000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 3.2914572557999993 - -3.1368362039999997 - 0.9712843094999998 - -0.0996618390000000 - -2.1943048371999994 - 2.0912241359999992 - -0.6475228729999998 - 0.0664412260000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -7.9931075507999978 - 7.5284068895999994 - -2.3310823427999994 - 0.2391884136000000 - 5.3287383671999988 - -5.0189379263999987 - 1.5540548951999997 - -0.1594589424000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.9948306630999983 - -5.6463051671999986 - 1.7483117570999998 - -0.1793913102000000 - -3.9965537753999993 - 3.7642034447999992 - -1.1655411713999997 - 0.1195942068000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.3321845917999997 - 1.2547344815999997 - -0.3885137237999999 - 0.0398647356000000 - 0.8881230611999998 - -0.8364896543999999 - 0.2590091492000000 - -0.0265764904000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 51.2174335277999973 - -34.7252003400000007 - 7.7793458265000002 - -0.5762478390000000 - -34.1449556852000029 - 23.1501335600000040 - -5.1862305510000013 - 0.3841652260000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -125.8865034036000026 - 85.2980168160000147 - -19.1108755836000022 - 1.4156204136000001 - 83.9243356024000065 - -56.8653445440000098 - 12.7405837224000020 - -0.9437469424000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 98.0036935526999997 - -66.4204326120000133 - 14.8837136877000020 - -1.1024973102000000 - -65.3357957018000093 - 44.2802884080000041 - -9.9224757918000019 - 0.7349982068000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -23.3736279005999990 - 15.8476161360000010 - -3.5521839306000000 - 0.2631247356000000 - 15.5824186004000005 - -10.5650774240000018 - 2.3681226204000003 - -0.1754164904000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 18.8699219402999923 - -9.8715457799999946 - 1.7195853929999991 - -0.0996618419999999 - -12.5799479601999984 - 6.5810305199999988 - -1.1463902619999997 - 0.0664412280000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -45.3977355935999753 - 23.6917098719999899 - -4.1270049431999976 - 0.2391884207999999 - 30.2651570623999930 - -15.7944732479999974 - 2.7513366287999990 - -0.1594589472000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 34.0686926951999851 - -17.7687824039999924 - 3.0952537073999986 - -0.1793913155999999 - -22.7124617967999924 - 11.8458549359999967 - -2.0635024715999997 - 0.1195942104000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -7.5798832655999968 - 3.9486183119999980 - -0.6878341571999995 - 0.0398647368000000 - 5.0532555103999988 - -2.6324122079999994 - 0.4585561047999999 - -0.0265764912000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0187635363000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0125090242000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1549554239999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1033036160000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1366075680000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0910717120000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0394199040000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0262799360000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0187635363000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0125090242000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1549554239999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1033036160000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1366075680000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0910717120000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0394199040000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0262799360000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0187635363000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0125090242000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1549554239999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1033036160000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1366075680000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0910717120000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0394199040000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0262799360000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 4.2228846869999987 - -2.8152564579999999 - 0.0000000000000000 - 0.0000000000000000 - -11.0322309923999988 - 7.3548206615999998 - 0.0000000000000000 - 0.0000000000000000 - 8.1954232442999988 - -5.4636154962000010 - 0.0000000000000000 - 0.0000000000000000 - -1.7862051654000000 - 1.1908034436000001 - 0.0000000000000000 - 0.0000000000000000 - -11.0322309923999988 - 7.3548206615999998 - 0.0000000000000000 - 0.0000000000000000 - 29.4624929663999993 - -19.6416619776000019 - 0.0000000000000000 - 0.0000000000000000 - -21.8606197247999994 - 14.5737464832000008 - 0.0000000000000000 - 0.0000000000000000 - 4.7529154943999998 - -3.1686103296000003 - 0.0000000000000000 - 0.0000000000000000 - 8.1954232442999988 - -5.4636154962000010 - 0.0000000000000000 - 0.0000000000000000 - -21.8606197247999994 - 14.5737464832000008 - 0.0000000000000000 - 0.0000000000000000 - 16.2182772935999999 - -10.8121848624000023 - 0.0000000000000000 - 0.0000000000000000 - -3.5253116208000002 - 2.3502077472000003 - 0.0000000000000000 - 0.0000000000000000 - -1.7862051654000000 - 1.1908034436000001 - 0.0000000000000000 - 0.0000000000000000 - 4.7529154943999998 - -3.1686103296000003 - 0.0000000000000000 - 0.0000000000000000 - -3.5253116208000002 - 2.3502077472000003 - 0.0000000000000000 - 0.0000000000000000 - 0.7659025824000001 - -0.5106017216000001 - -6.4539249160000001 - 18.7708587479999949 - -13.9570580609999997 - 3.0477524580000002 - 17.1048773232000002 - -49.5868839695999952 - 36.8269049772000017 - -8.0223086616000003 - -12.7236579923999980 - 36.8751629771999987 - -27.3839287329000030 - 5.9642314962000009 - 2.7808128872000002 - -8.0544806615999995 - 5.9803174962000005 - -1.3020514436000004 - 17.1048773232000002 - -49.5868839695999952 - 36.8269049772000017 - -8.0223086616000003 - -45.7490319551999889 - 132.4958518656000024 - -98.2821148992000104 - 21.3561259776000014 - 33.9967739664000064 - -98.4268888992000086 - 73.0028361744000023 - -15.8595944832000022 - -7.4148386592000008 - 21.4526419776000026 - -15.9078524832000010 - 3.4543543296000006 - -12.7236579923999997 - 36.8751629771999987 - -27.3839287329000030 - 5.9642314962000009 - 33.9967739663999993 - -98.4268888992000086 - 73.0028361744000165 - -15.8595944832000004 - -25.2613304747999976 - 73.1114166744000045 - -54.2205646307999984 - 11.7765708624000016 - 5.5086289944000004 - -15.9319814832000013 - 11.8127643624000012 - -2.5645157472000006 - 2.7808128872000002 - -8.0544806615999995 - 5.9803174962000005 - -1.3020514436000004 - -7.4148386592000008 - 21.4526419776000026 - -15.9078524832000010 - 3.4543543296000006 - 5.5086289944000004 - -15.9319814832000013 - 11.8127643624000012 - -2.5645157472000006 - -1.2008064432000003 - 3.4704403296000006 - -2.5725587472000004 - 0.5582257216000001 - 39.8894121000000013 - -50.7093326999999903 - 20.7656306250000000 - -2.7364611499999998 - -107.5650035999999830 - 136.5474131999999940 - -55.8049815000000038 - 7.3437953999999994 - 80.6737526999999801 - -102.4105598999999955 - 41.8537361250000046 - -5.5078465500000000 - -17.9275005999999983 - 22.7579021999999966 - -9.3008302500000006 - 1.2239659000000001 - -107.5650035999999972 - 136.5474131999999940 - -55.8049815000000038 - 7.3437953999999994 - 288.7152523199999905 - -365.7688358399999515 - 149.1343596000000105 - -19.5939748799999975 - -216.5364392399999645 - 274.3266268799999921 - -111.8507697000000007 - 14.6954811599999999 - 48.1192087200000032 - -60.9614726399999967 - 24.8557266000000006 - -3.2656624800000000 - 80.6737526999999943 - -102.4105598999999955 - 41.8537361250000046 - -5.5078465500000000 - -216.5364392400000213 - 274.3266268799999921 - -111.8507697000000007 - 14.6954811599999999 - 162.4023294299999804 - -205.7449701599999798 - 83.8880772750000006 - -11.0216108699999999 - -36.0894065399999988 - 45.7211044800000010 - -18.6417949500000013 - 2.4492468600000001 - -17.9275005999999983 - 22.7579021999999966 - -9.3008302500000006 - 1.2239659000000001 - 48.1192087200000032 - -60.9614726399999967 - 24.8557266000000006 - -3.2656624800000000 - -36.0894065399999988 - 45.7211044800000010 - -18.6417949500000013 - 2.4492468600000001 - 8.0198681199999999 - -10.1602454400000006 - 4.1426211000000004 - -0.5442770800000001 - -11.9141455994999941 - 11.5908520439999947 - -3.4999733044999992 - 0.3484810289999999 - 31.2390159023999878 - -30.3275138687999863 - 9.1769633783999964 - -0.9160839407999998 - -23.4292619267999918 - 22.7456354015999942 - -6.8827225337999982 - 0.6870629555999997 - 5.2065026503999983 - -5.0545856447999986 - 1.5294938963999996 - -0.1526806568000000 - 31.2390159023999843 - -30.3275138687999899 - 9.1769633783999964 - -0.9160839407999998 - -81.3681242063999548 - 78.8087587967999639 - -23.8895779823999916 - 2.3899521887999993 - 61.0260931547999803 - -59.1065690975999729 - 17.9171834867999920 - -1.7924641415999993 - -13.5613540343999954 - 13.1347931327999969 - -3.9815963303999986 - 0.3983253647999999 - -23.4292619267999882 - 22.7456354015999906 - -6.8827225337999982 - 0.6870629555999997 - 61.0260931547999803 - -59.1065690975999729 - 17.9171834867999955 - -1.7924641415999993 - -45.7695698660999852 - 44.3299268231999832 - -13.4378876150999957 - 1.3443481061999996 - 10.1710155257999979 - -9.8510948495999990 - 2.9861972477999990 - -0.2987440236000000 - 5.2065026503999983 - -5.0545856447999986 - 1.5294938963999996 - -0.1526806568000000 - -13.5613540343999954 - 13.1347931327999969 - -3.9815963303999986 - 0.3983253647999999 - 10.1710155257999979 - -9.8510948495999990 - 2.9861972477999990 - -0.2987440236000000 - -2.2602256723999994 - 2.1891321887999995 - -0.6635993883999999 - 0.0663875608000000 - -135.7455229915000245 - 92.5172767399999998 - -20.7448023915000022 - 1.5366520290000003 - 370.6031730607999748 - -252.4316724479999721 - 56.5982632008000053 - -4.1924639408000006 - -282.7374677955999687 - 192.5863143359999867 - -43.1827734005999986 - 3.1987239556000002 - 64.9572541768000065 - -44.2469854080000005 - 9.9224278667999997 - -0.7349946568000001 - 370.6031730607999748 - -252.4316724480000289 - 56.5982632008000053 - -4.1924639408000006 - -1001.6410292688001391 - 681.9045713280002019 - -152.8863145488000157 - 11.3249121888000026 - 765.5860359516002518 - -521.2161084960000608 - 116.8669639116000099 - -8.6568121415999997 - -176.5103475448000268 - 120.1758818880000064 - -26.9492044248000013 - 1.9962373648000000 - -282.7374677955999687 - 192.5863143359999867 - -43.1827734005999986 - 3.1987239556000002 - 765.5860359516000244 - -521.2161084960000608 - 116.8669639116000099 - -8.6568121415999997 - -584.9559749637001005 - 398.2528413720000344 - -89.3018939337000006 - 6.6149551062000000 - 134.7753046586000210 - -91.7631914159999980 - 20.5789413186000019 - -1.5243660235999998 - 64.9572541768000065 - -44.2469854080000005 - 9.9224278667999997 - -0.7349946568000001 - -176.5103475448000268 - 120.1758818880000064 - -26.9492044248000013 - 1.9962373648000000 - 134.7753046586000210 - -91.7631914159999980 - 20.5789413186000019 - -1.5243660235999998 - -31.0134205908000027 - 21.1168336479999965 - -4.7362260707999999 - 0.3508315608000000 - -49.4848264664999746 - 26.2405983299999868 - -4.5854146104999991 - 0.2657560369999998 - 133.8931721307999396 - -70.8746726159999696 - 12.3806633795999943 - -0.7175439623999997 - -100.4470670980999500 - 53.1560044619999772 - -9.2854975346999957 - 0.5381579717999998 - 22.3336540217999939 - -11.8124454359999937 - 2.0634438965999995 - -0.1195906604000000 - 133.8931721307999396 - -70.8746726159999696 - 12.3806633795999943 - -0.7175439623999997 - -357.7270527887998810 - 189.0525821759999303 - -33.0151960655999872 - 1.9134562463999991 - 268.3768535915999109 - -141.7894366319999335 - 24.7613970491999922 - -1.4350921847999993 - -59.6755514647999803 - 31.5087636959999884 - -5.5025326775999988 - 0.3189093743999999 - -100.4470670980999643 - 53.1560044619999914 - -9.2854975346999957 - 0.5381579717999998 - 268.3768535915999109 - -141.7894366319999335 - 24.7613970491999922 - -1.4350921847999993 - -201.3438131936999298 - 106.3420774739999501 - -18.5710477868999924 - 1.0763191385999997 - 44.7702575985999829 - -23.6315727719999913 - 4.1268995081999993 - -0.2391820307999999 - 22.3336540217999939 - -11.8124454359999937 - 2.0634438965999995 - -0.1195906604000000 - -59.6755514647999803 - 31.5087636959999884 - -5.5025326775999988 - 0.3189093743999999 - 44.7702575985999829 - -23.6315727719999913 - 4.1268995081999993 - -0.2391820307999999 - -9.9549879107999981 - 5.2514606159999992 - -0.9170887795999998 - 0.0531515624000000 - 0.7858877775000047 - -0.0838432500000021 - 0.0001730625000003 - -0.0000088750000000 - -1.8374687780000103 - 0.2012238000000045 - -0.0004153500000007 - 0.0000213000000000 - 1.3509135835000063 - -0.1509178500000028 - 0.0003115125000004 - -0.0000159750000000 - -0.2881194630000009 - 0.0335373000000004 - -0.0000692250000000 - 0.0000035500000000 - -1.8374687780000101 - 0.2012238000000045 - -0.0004153500000007 - 0.0000213000000000 - 4.2207095280000200 - -0.4829371200000090 - 0.0009968400000013 - -0.0000511200000001 - -3.0839681460000103 - 0.3622028400000043 - -0.0007476300000006 - 0.0000383400000000 - 0.6490755880000003 - -0.0804895199999999 - 0.0001661399999999 - -0.0000085200000000 - 1.3509135835000063 - -0.1509178500000028 - 0.0003115125000004 - -0.0000159750000000 - -3.0839681460000108 - 0.3622028400000043 - -0.0007476300000006 - 0.0000383400000000 - 2.2518031095000022 - -0.2716521300000003 - 0.0005607224999999 - -0.0000287550000000 - -0.4732126909999979 - 0.0603671399999987 - -0.0001246049999998 - 0.0000063900000000 - -0.2881194630000009 - 0.0335373000000004 - -0.0000692250000000 - 0.0000035500000000 - 0.6490755880000003 - -0.0804895199999999 - 0.0001661399999999 - -0.0000085200000000 - -0.4732126909999979 - 0.0603671399999987 - -0.0001246049999998 - 0.0000063900000000 - 0.0991165979999985 - -0.0134149199999992 - 0.0000276899999999 - -0.0000014200000000 - 0.7871924025000062 - -0.0842160000000026 - 0.0001996875000003 - -0.0000088750000000 - -1.8405998780000177 - 0.2021184000000074 - -0.0004792500000010 - 0.0000213000000000 - 1.3532619085000168 - -0.1515888000000072 - 0.0003594375000010 - -0.0000159750000000 - -0.2886413130000054 - 0.0336864000000023 - -0.0000798750000003 - 0.0000035500000000 - -1.8405998780000132 - 0.2021184000000054 - -0.0004792500000007 - 0.0000213000000000 - 4.2282241680000388 - -0.4850841600000161 - 0.0011502000000022 - -0.0000511200000001 - -3.0896041260000380 - 0.3638131200000160 - -0.0008626500000022 - 0.0000383400000001 - 0.6503280280000123 - -0.0808473600000053 - 0.0001917000000008 - -0.0000085200000000 - 1.3532619085000075 - -0.1515888000000030 - 0.0003594375000004 - -0.0000159750000000 - -3.0896041260000238 - 0.3638131200000099 - -0.0008626500000014 - 0.0000383400000001 - 2.2560300945000247 - -0.2728598400000106 - 0.0006469875000015 - -0.0000287550000001 - -0.4741520210000086 - 0.0606355200000037 - -0.0001437750000005 - 0.0000063900000000 - -0.2886413130000007 - 0.0336864000000003 - -0.0000798750000000 - 0.0000035500000000 - 0.6503280280000028 - -0.0808473600000012 - 0.0001917000000002 - -0.0000085200000000 - -0.4741520210000038 - 0.0606355200000017 - -0.0001437750000003 - 0.0000063900000000 - 0.0993253380000016 - -0.0134745600000007 - 0.0000319500000001 - -0.0000014200000000 - -46.8607035974999846 - 17.1221579999999953 - -2.0678986874999996 - 0.0827161250000000 - 112.5143505220000009 - -41.0931791999999874 - 4.9629568499999985 - -0.1985187000000000 - -84.4129508914999889 - 30.8198843999999923 - -3.7222176374999982 - 0.1488890250000000 - 18.7705170869999911 - -6.8488631999999967 - 0.8271594749999995 - -0.0330864500000000 - 112.5143505219999867 - -41.0931791999999945 - 4.9629568499999994 - -0.1985187000000000 - -270.2236567919999288 - 98.6236300799999697 - -11.9110964399999943 - 0.4764448799999998 - 202.7493065939999042 - -73.9677225599999701 - 8.9333223299999958 - -0.3573336599999999 - -45.0916521319999788 - 16.4372716799999949 - -1.9851827399999988 - 0.0794074800000000 - -84.4129508914999889 - 30.8198843999999923 - -3.7222176374999991 - 0.1488890250000000 - 202.7493065939999610 - -73.9677225599999844 - 8.9333223299999975 - -0.3573336599999999 - -152.1231529454999531 - 55.4757919199999776 - -6.6999917474999968 - 0.2680002449999999 - 33.8323330989999818 - -12.3279537599999927 - 1.4888870549999993 - -0.0595556100000000 - 18.7705170869999982 - -6.8488631999999985 - 0.8271594750000000 - -0.0330864500000000 - -45.0916521319999930 - 16.4372716799999985 - -1.9851827399999995 - 0.0794074800000000 - 33.8323330989999960 - -12.3279537599999962 - 1.4888870549999995 - -0.0595556100000000 - -7.5243380219999976 - 2.7395452799999989 - -0.3308637899999998 - 0.0132345800000000 - 0.0000000000000000 - 0.0000000000000000 - -32.6217780473999994 - 21.7478520315999972 - 0.0000000000000000 - 0.0000000000000000 - 42.1036102331999942 - -28.0690734888000009 - 0.0000000000000000 - 0.0000000000000000 - -17.3069209304999987 - 11.5379472869999997 - 0.0000000000000000 - 0.0000000000000000 - 2.2865894573999999 - -1.5243929716000000 - 0.0000000000000000 - 0.0000000000000000 - 80.7563291291999974 - -53.8375527528000006 - 0.0000000000000000 - 0.0000000000000000 - -103.7670803135999904 - 69.1780535423999936 - 0.0000000000000000 - 0.0000000000000000 - 42.5275334640000011 - -28.3516889759999984 - 0.0000000000000000 - 0.0000000000000000 - -5.6073377951999994 - 3.7382251968000002 - 0.0000000000000000 - 0.0000000000000000 - -60.5672468468999909 - 40.3781645645999987 - 0.0000000000000000 - 0.0000000000000000 - 77.8253102351999928 - -51.8835401567999952 - 0.0000000000000000 - 0.0000000000000000 - -31.8956500979999973 - 21.2637667320000006 - 0.0000000000000000 - 0.0000000000000000 - 4.2055033464000005 - -2.8036688975999997 - 0.0000000000000000 - 0.0000000000000000 - 13.4593881881999984 - -8.9729254587999989 - 0.0000000000000000 - 0.0000000000000000 - -17.2945133855999984 - 11.5296755904000001 - 0.0000000000000000 - 0.0000000000000000 - 7.0879222439999996 - -4.7252814960000000 - 0.0000000000000000 - 0.0000000000000000 - -0.9345562992000001 - 0.6230375328000000 - 44.2256531812000020 - -132.2389900727999930 - 99.1792425546000089 - -22.0398316788000024 - -57.1087958436000065 - 170.7439982111999939 - -128.0579986584000096 - 28.4573330352000013 - 23.4803316015000050 - -70.1983325880000137 - 52.6487494410000068 - -11.6997220980000023 - -3.1027108802000005 - 9.2757776784000008 - -6.9568332588000015 - 1.5459629464000002 - -138.5907206816000041 - 397.2227929391999623 - -297.9170947044000286 - 66.2037988232000032 - 178.4133265968000046 - -511.2056480831998897 - 383.4042360623999457 - -85.2009413472000006 - -73.3938860820000087 - 210.1673533679999650 - -157.6255150260000164 - 35.0278922279999989 - 9.7018514776000000 - -27.7703137824000024 - 20.8277353368000036 - -4.6283856304000004 - 105.4788598592000142 - -301.6030611396000722 - 226.2022958546999973 - -50.2671768566000026 - -135.7846198235999964 - 388.1433357647999856 - -291.1075018236000460 - 64.6905559607999976 - 55.8681749264999965 - -159.6001399019999667 - 119.7001049265000034 - -26.6000233170000016 - -7.3860899902000003 - 21.0910186536000026 - -15.8182639902000002 - 3.5151697756000004 - -23.2462882296000011 - 66.5586023016000041 - -49.9189517261999995 - 11.0931003835999995 - 29.9256277248000018 - -85.6571172480000058 - 64.2428379360000008 - -14.2761862080000022 - -12.3115115519999989 - 35.2179655199999999 - -26.4134741400000017 - 5.8696609200000003 - 1.6275348736000002 - -4.6537287359999997 - 3.4902965520000002 - -0.7756214560000001 - -50.0478950811999894 - 64.5349948775999991 - -26.8895811989999984 - 3.5852774931999991 - 69.5343934043999923 - -89.6509583711999767 - 37.3545659879999903 - -4.9806087983999987 - -28.9726639184999897 - 37.3545659879999903 - -15.5644024949999960 - 2.0752536659999996 - 3.8630218557999996 - -4.9806087983999987 - 2.0752536659999996 - -0.2767004887999999 - 183.1902844943999753 - -243.4800953951999531 - 101.4500397479999805 - -13.5266719663999986 - -250.0931194127999788 - 331.8487242623999691 - -138.2703017759999966 - 18.4360402367999967 - 104.2054664220000006 - -138.2703017759999966 - 57.6126257399999915 - -7.6816834319999989 - -13.8940621895999961 - 18.4360402367999967 - -7.6816834319999989 - 1.0242244575999997 - -151.8031018499999618 - 201.5326388519999909 - -83.9719328549999915 - 11.1962577139999979 - 206.0974818899999832 - -273.2155583040000124 - 113.8398159599999957 - -15.1786421279999963 - -85.8739507874999930 - 113.8398159599999815 - -47.4332566499999970 - 6.3244342199999988 - 11.4498601049999991 - -15.1786421279999963 - 6.3244342199999988 - -0.8432578959999998 - 35.4079979087999988 - -46.8875383343999914 - 19.5364743059999952 - -2.6048632407999994 - -47.9516943455999893 - 63.4177924127999972 - -26.4240801719999965 - 3.5232106895999991 - 19.9798726439999967 - -26.4240801719999965 - 11.0100334049999979 - -1.4680044539999997 - -2.6639830191999998 - 3.5232106895999991 - -1.4680044539999997 - 0.1957339271999999 - 42.6442853668999575 - -40.0053803687999618 - 11.9066088158999897 - -1.1642323157999992 - -56.7584044271999559 - 53.3405071583999586 - -15.8754784211999898 - 1.5523097543999986 - 23.6493351779999799 - -22.2252113159999816 - 6.6147826754999954 - -0.6467957309999994 - -3.1532446903999967 - 2.9633615087999976 - -0.8819710233999991 - 0.0862394307999999 - -120.2324494991998876 - 109.5640452863999030 - -32.7718093751999717 - 3.2246967023999971 - 159.8769737135998525 - -146.0853937151998707 - 43.6957458335999576 - -4.2995956031999967 - -66.6154057139999480 - 60.8689140479999509 - -18.2065607639999811 - 1.7914981679999984 - 8.8820540951999920 - -8.1158552063999920 - 2.4275414351999975 - -0.2388664223999998 - 89.9558741243999265 - -82.1730339647999273 - 24.5788570313999770 - -2.4185225267999977 - -119.6268492851999099 - 109.5640452863999030 - -32.7718093751999717 - 3.2246967023999975 - 49.8445205354999530 - -45.6516855359999596 - 13.6549205729999876 - -1.3436236259999990 - -6.6459360713999933 - 6.0868914047999940 - -1.8206560763999984 - 0.1791498167999998 - -19.8930995831999802 - 18.2606742143999838 - -5.4619682291999947 - 0.5374494503999995 - 26.4589082855999749 - -24.3475656191999761 - 7.2826243055999935 - -0.7165992671999993 - -11.0245451189999901 - 10.1448190079999918 - -3.0344267939999972 - 0.2985830279999998 - 1.4699393491999986 - -1.3526425343999988 - 0.4045902391999996 - -0.0398110704000000 - -184.9754434746999721 - 126.2750600519999864 - -28.5549122366999981 - 2.1151786841999995 - 189.3135113616000069 - -129.2160267359999750 - 29.2643043155999933 - -2.1677262455999999 - -64.5253657339999904 - 44.0523311399999926 - -9.9912321314999986 - 0.7400912689999999 - 7.3273586311999983 - -5.0036281519999983 - 1.1364106841999997 - -0.0841785692000000 - 549.7599647855997773 - -378.5554258559998857 - 85.6643485175999899 - -6.3455072976000002 - -561.1830773327999395 - 387.2884078079999881 - -87.7923953568000002 - 6.5031403967999992 - 190.7604902219999872 - -132.0071299200000112 - 29.9734807320000023 - -2.2202578319999997 - -21.6066616295999978 - 14.9909026559999994 - -3.4092032976000000 - 0.2525335776000000 - -412.5384365891999892 - 283.9165693919999285 - -64.2482613882000066 - 4.7591304731999999 - 421.1681889995999200 - -290.4663058559999627 - 65.8442965176000001 - -4.8773552975999994 - -143.1874014164999949 - 99.0053474399999942 - -22.4801105490000026 - 1.6651933740000002 - 16.2206007222000004 - -11.2431769920000004 - 2.5569024732000005 - -0.1894001832000000 - 91.7723027975999912 - -63.0925709760000046 - 14.2773914196000007 - -1.0575845496000000 - -93.7177668888000142 - 64.5480679679999980 - -14.6320658928000018 - 1.0838567328000002 - 31.8714375370000056 - -22.0011883200000042 - 4.9955801220000016 - -0.3700429720000001 - -3.6115132716000011 - 2.4984837760000009 - -0.5682005496000003 - 0.0420889296000000 - 130.2289587202998575 - -70.6241013659999197 - 12.3802240670999844 - -0.7175173373999989 - -173.8642248983998115 - 94.1654684879999024 - -16.5069654227999791 - 0.9566897831999988 - 72.5249910409999359 - -39.2356118699999570 - 6.8779022594999919 - -0.3986207429999995 - -9.6772489387999912 - 5.2314149159999950 - -0.9170536345999990 - 0.0531494323999999 - -395.8553984243995956 - 212.1429210479998346 - -37.1411466587999683 - 2.1525807671999981 - 528.3530069471995603 - -282.8572280639997985 - 49.5215288783999625 - -2.8701076895999975 - -220.3917782279998789 - 117.8571783599999208 - -20.6339703659999856 - 1.1958782039999993 - 29.4073208303999856 - -15.7142904479999928 - 2.7511960487999989 - -0.1594504272000000 - 296.6730858182997963 - -159.1071907859998760 - 27.8558599940999869 - -1.6144355753999990 - -395.9838742103997902 - 212.1429210479998915 - -37.1411466587999826 - 2.1525807671999990 - 165.1767999209999402 - -88.3928837699999690 - 15.4754777744999963 - -0.8969086529999999 - -22.0398861227999987 - 11.7857178359999999 - -2.0633970366000001 - 0.1195878204000000 - -65.8302577373999753 - 35.3571535079999890 - -6.1901911097999989 - 0.3587634612000000 - 87.8715804911999783 - -47.1428713439999996 - 8.2535881464000003 - -0.4783512816000001 - -36.6539405380000005 - 19.6428630600000034 - -3.4389950610000017 - 0.1993130340000001 - 4.8908171384000028 - -2.6190484080000020 - 0.4585326748000005 - -0.0265750712000000 - -5.5045576885001175 - 0.4527535500000591 - -0.0009345375000100 - 0.0000479250000006 - 7.1137969800001573 - -0.6036714000000785 - 0.0012460500000132 - -0.0000639000000007 - -2.8825180750000672 - 0.2515297500000336 - -0.0005191875000056 - 0.0000266250000003 - 0.3770856100000094 - -0.0335373000000047 - 0.0000692250000008 - -0.0000035500000000 - 11.3420452620003189 - -1.0866085200001598 - 0.0022428900000267 - -0.0001150200000015 - -14.5769179680004157 - 1.4488113600002079 - -0.0029905200000346 - 0.0001533600000019 - 5.8290238200001756 - -0.6036714000000871 - 0.0012460500000144 - -0.0000639000000008 - -0.7554527760000237 - 0.0804895200000117 - -0.0001661400000019 - 0.0000085200000001 - -8.7249969465002888 - 0.8149563900001421 - -0.0016821675000234 - 0.0000862650000013 - 11.2135694760003659 - -1.0866085200001803 - 0.0022428900000296 - -0.0001150200000016 - -4.4888016150001500 - 0.4527535500000732 - -0.0009345375000119 - 0.0000479250000006 - 0.5821940820000193 - -0.0603671400000094 - 0.0001246050000015 - -0.0000063900000001 - 2.0359828770000856 - -0.1811014200000415 - 0.0003738150000067 - -0.0000191700000004 - -2.6167403280001054 - 0.2414685600000509 - -0.0004984200000082 - 0.0000255600000004 - 1.0495264700000413 - -0.1006119000000198 - 0.0002076750000032 - -0.0000106500000002 - -0.1363117960000050 - 0.0134149200000024 - -0.0000276900000004 - 0.0000014200000000 - -5.5116026635001862 - 0.4547664000000811 - -0.0010783125000117 - 0.0000479250000006 - 7.1231902800002480 - -0.6063552000001071 - 0.0014377500000154 - -0.0000639000000007 - -2.8864319500001070 - 0.2526480000000459 - -0.0005990625000066 - 0.0000266250000003 - 0.3776074600000149 - -0.0336864000000064 - 0.0000798750000009 - -0.0000035500000000 - 11.3589532020005066 - -1.0914393600002181 - 0.0025879500000312 - -0.0001150200000015 - -14.5994618880006595 - 1.4552524800002826 - -0.0034506000000403 - 0.0001533600000019 - 5.8384171200002770 - -0.6063552000001183 - 0.0014377500000168 - -0.0000639000000008 - -0.7567052160000375 - 0.0808473600000159 - -0.0001917000000022 - 0.0000085200000001 - -8.7376779015004544 - 0.8185795200001927 - -0.0019409625000273 - 0.0000862650000013 - 11.2304774160005767 - -1.0914393600002443 - 0.0025879500000344 - -0.0001150200000016 - -4.4958465900002356 - 0.4547664000000990 - -0.0010783125000139 - 0.0000479250000006 - 0.5831334120000303 - -0.0606355200000127 - 0.0001437750000018 - -0.0000063900000001 - 2.0388008670001336 - -0.1819065600000558 - 0.0004313250000078 - -0.0000191700000004 - -2.6204976480001649 - 0.2425420800000685 - -0.0005751000000095 - 0.0000255600000004 - 1.0510920200000642 - -0.1010592000000266 - 0.0002396250000037 - -0.0000106500000002 - -0.1365205360000077 - 0.0134745600000031 - -0.0000319500000004 - 0.0000014200000000 - 251.7870357364997460 - -92.4596531999998916 - 11.1666529124999840 - -0.4466670749999995 - -335.9416609199996060 - 123.2795375999998271 - -14.8888705499999823 - 0.5955560999999993 - 140.0572560499998076 - -51.3664739999999256 - 6.2036960624999917 - -0.2481483749999996 - -18.6815509399999762 - 6.8488631999999914 - -0.8271594749999989 - 0.0330864500000000 - -606.1577789579991986 - 221.9031676799996831 - -26.7999669899999589 - 1.0720009799999985 - 808.7561809919991447 - -295.8708902399996532 - 35.7332893199999475 - -1.4293346399999980 - -337.2264340799995921 - 123.2795375999998413 - -14.8888705499999787 - 0.5955560999999991 - 44.9852749439999400 - -16.4372716799999807 - 1.9851827399999973 - -0.0794074799999999 - 454.3998712184992428 - -166.4273757599997339 - 20.0999752424999656 - -0.8040007349999987 - -606.2862547439991658 - 221.9031676799996831 - -26.7999669899999589 - 1.0720009799999983 - 252.8027918099996327 - -92.4596531999998632 - 11.1666529124999840 - -0.4466670749999994 - -33.7233517079999530 - 12.3279537599999820 - -1.4888870549999980 - 0.0595556099999999 - -100.8806544929998097 - 36.9838612799999282 - -4.4666611649999908 - 0.1786668299999996 - 134.6054428319997385 - -49.3118150399999138 - 5.9555482199999883 - -0.2382224399999995 - -56.1263831799999053 - 20.5465895999999653 - -2.4814784249999957 - 0.0992593499999998 - 7.4871428239999887 - -2.7395452799999958 - 0.3308637899999995 - -0.0132345800000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3353203725000000 - 0.2235469150000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.8047688940000000 - -0.5365125960000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6035766705000000 - 0.4023844470000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1341281490000000 - -0.0894187660000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 56.1396151825000089 - -135.0033327360000044 - 101.2524995520000033 - -22.5005554560000007 - -49.5027190080000068 - 118.8065256192000163 - -89.1048942144000051 - 19.8010876031999992 - 14.4382930439999981 - -34.6519033056000012 - 25.9889274792000009 - -5.7753172175999996 - -1.3750755280000000 - 3.3001812671999997 - -2.4751359503999999 - 0.5500302112000000 - -125.9664885020000042 - 302.9633875199999693 - -227.2225406400000054 - 50.4938979200000020 - 110.2406780160000039 - -264.5776272383999412 - 198.4332204287999843 - -44.0962712064000044 - -32.1535310880000011 - 77.1684746111999971 - -57.8763559583999978 - 12.8614124351999983 - 3.0622410560000000 - -7.3493785343999996 - 5.5120339008000006 - -1.2248964224000001 - 90.0868110965000000 - -216.6912079679999863 - 162.5184059759999968 - -36.1152013279999977 - -78.7312587600000029 - 188.9550210239999899 - -141.7162657679999995 - 31.4925035040000019 - 22.9632838050000032 - -55.1118811320000077 - 41.3339108490000058 - -9.1853135219999995 - -2.1869794100000002 - 5.2487505839999997 - -3.9365629379999998 - 0.8747917640000000 - -20.5720296569999981 - 49.4801736959999943 - -37.1101302719999921 - 8.2466956160000002 - 17.9932997519999986 - -43.1839194047999939 - 32.3879395535999990 - -7.1973199008000002 - -5.2480457610000002 - 12.5953098263999994 - -9.4464823697999982 - 2.0992183043999999 - 0.4998138820000000 - -1.1995533167999999 - 0.8996649876000000 - -0.1999255528000000 - -157.0620940015000429 - 216.2579120640000099 - -90.1074633599999970 - 12.0143284479999988 - 141.4799946432000013 - -194.6321208576000004 - 81.0967170240000002 - -10.8128956031999994 - -41.2649984375999992 - 56.7677019167999930 - -23.6532091320000006 - 3.1537612175999996 - 3.9299998511999998 - -5.4064478016000006 - 2.2526865840000001 - -0.3003582112000000 - 311.4225038820000009 - -432.5158241280000198 - 180.2149267199999656 - -24.0286568960000011 - -280.7129412863999391 - 389.2642417152000007 - -162.1934340479999719 - 21.6257912063999989 - 81.8746078751999846 - -113.5354038336000144 - 47.3064182640000013 - -6.3075224351999992 - -7.7975817024000005 - 10.8128956032000012 - -4.5053731680000002 - 0.6007164224000000 - -192.3943393994999838 - 270.3223900799999342 - -112.6343291999999963 - 15.0179105600000007 - 173.4794213039999988 - -243.2901510719999578 - 101.3708962799999824 - -13.5161195039999988 - -50.5981645469999961 - 70.9596273960000019 - -29.5665114150000008 - 3.9422015220000004 - 4.8188728140000006 - -6.7580597520000003 - 2.8158582299999999 - -0.3754477640000000 - 37.9715111430000007 - -54.0644780160000025 - 22.5268658399999993 - -3.0035821120000001 - -34.2464746608000041 - 48.6580302144000001 - -20.2741792560000036 - 2.7032239008000003 - 9.9885551094000000 - -14.1919254791999983 - 5.9133022830000002 - -0.7884403044000000 - -0.9512909627999999 - 1.3516119504000002 - -0.5631716460000000 - 0.0750895528000000 - 5.1313400465000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.4940959999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1248360000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -12.9643642139999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.2352400000000010 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.2769450000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.3120900000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 10.3474531604999989 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -8.9881919999999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.6215560000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2496720000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5768473690000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553890000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.1313400465000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.4940959999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1248360000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -12.9643642139999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.2352400000000010 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.2769450000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.3120900000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 10.3474531604999989 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -8.9881919999999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.6215560000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2496720000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5768473690000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553890000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.1313400465000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.4940959999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1248360000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -12.9643642139999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.2352400000000010 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.2769450000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.3120900000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 10.3474531604999989 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -8.9881919999999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.6215560000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2496720000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5768473690000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553890000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.1313400465000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.4940959999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1248360000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -12.9643642139999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.2352400000000010 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.2769450000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.3120900000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 10.3474531604999989 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -8.9881919999999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.6215560000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2496720000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5768473690000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553890000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.1313400465000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.4940959999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1248360000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -12.9643642139999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.2352400000000010 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.2769450000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.3120900000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 10.3474531604999989 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -8.9881919999999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.6215560000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2496720000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5768473690000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553890000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.1313400465000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.4940959999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1248360000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -12.9643642139999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.2352400000000010 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.2769450000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.3120900000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 10.3474531604999989 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -8.9881919999999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.6215560000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2496720000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5768473690000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553890000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -7.0321606498499998 - 4.6881070998999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 24.1765592188499987 - -16.1177061459000015 - 0.0000000000000000 - 0.0000000000000000 - -16.1177061459000015 - 10.7451374305999998 - 0.0000000000000000 - 0.0000000000000000 - 9.1366163297999989 - -6.0910775531999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -30.8078686817999952 - 20.5385791212000015 - 0.0000000000000000 - 0.0000000000000000 - 20.5385791212000015 - -13.6923860808000022 - 0.0000000000000000 - 0.0000000000000000 - -3.8069234707500001 - 2.5379489805000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 12.6594244507499987 - -8.4396163005000009 - 0.0000000000000000 - 0.0000000000000000 - -8.4396163005000009 - 5.6264108670000006 - 0.0000000000000000 - 0.0000000000000000 - 0.5075897961000000 - -0.3383931974000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.6721732600999999 - 1.1147821734000001 - 0.0000000000000000 - 0.0000000000000000 - 1.1147821734000001 - -0.7431881156000000 - 1.7964189073000001 - -9.9371338973999990 - 7.4528504230499992 - -1.6561889829000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -44.4148786822999995 - 125.9369562125999948 - -94.4527171594500032 - 20.9894927021000015 - 30.4859639041999984 - -86.0604782868000200 - 64.5453587151000079 - -14.3434130477999986 - -2.4750911663999995 - 13.2495118631999986 - -9.9371338973999990 - 2.2082519771999998 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 57.1409193383999963 - -161.7845013575999928 - 121.3383760181999946 - -26.9640835595999988 - -39.2202895176000013 - 110.5595581392000071 - -82.9196686044000160 - 18.4265930231999988 - 1.0312879859999999 - -5.5206299429999994 - 4.1404724572499996 - -0.9201049905000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -23.5724663909999990 - 66.7014588990000021 - -50.0260941742499980 - 11.1169098164999998 - 16.1842872989999975 - -45.5939825580000075 - 34.1954869185000021 - -7.5989970929999995 - -0.1375050648000000 - 0.7360839924000000 - -0.5520629942999999 - 0.1226806654000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 3.1219955187999999 - -8.8305278531999996 - 6.6228958898999997 - -1.4717546422000001 - -2.1439049731999997 - 6.0371976743999998 - -4.5278982558000003 - 1.0061996123999999 - 41.0697356006999996 - -54.7530359903999937 - 22.8137649960000033 - -3.0418353327999998 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -58.7754249068999925 - 72.4365406655999919 - -30.1818919439999931 - 4.0242522591999990 - 34.4529747782000015 - -41.9835046751999954 - 17.4931269480000005 - -2.3324169264000001 - -52.4181452760000042 - 69.8908603680000056 - -29.1211918200000000 - 3.8828255760000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 71.7688591055999865 - -88.1435659967999783 - 36.7264858319999945 - -4.8968647775999994 - -41.7636522935999963 - 50.6527056287999997 - -21.1052940120000017 - 2.8140392016000000 - 21.8408938650000017 - -29.1211918200000000 - 12.1338299250000006 - -1.6178439899999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -29.9036912939999979 - 36.7264858319999945 - -15.3027024299999965 - 2.0403603239999999 - 17.4015217890000002 - -21.1052940120000017 - 8.7938725049999995 - -1.1725163340000000 - -2.9121191820000001 - 3.8828255760000001 - -1.6178439899999999 - 0.2157125320000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 3.9871588391999992 - -4.8968647775999994 - 2.0403603239999999 - -0.2720480432000000 - -2.3202029051999999 - 2.8140392016000000 - -1.1725163340000000 - 0.1563355112000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -22.5910445969999856 - 16.9389155015999862 - -5.2449352712999966 - 0.5381739305999996 - 15.0606963979999851 - -11.2926103343999884 - 3.4966235141999964 - -0.3587826203999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 29.8518848603999807 - -22.5852206687999839 - 6.9932470283999955 - -0.7175652407999995 - -19.9012565735999800 - 15.0568137791999828 - -4.6621646855999952 - 0.4783768271999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -12.4382853584999911 - 9.4105086119999921 - -2.9138529284999981 - 0.2989855169999998 - 8.2921902389999929 - -6.2736724079999924 - 1.9425686189999980 - -0.1993236779999998 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.6584380477999987 - -1.2547344815999988 - 0.3885137237999997 - -0.0398647356000000 - -1.1056253651999990 - 0.8364896543999990 - -0.2590091491999997 - 0.0265764904000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 132.0402867341999809 - -94.3691021639999832 - 21.4156989368999930 - -1.5863480693999996 - -88.0268578227999967 - 62.9127347760000006 - -14.2771326246000001 - 1.0575653796000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -133.2574315811999668 - 96.4624295519999748 - -21.9475812491999918 - 1.6257467591999992 - 88.8382877207999968 - -64.3082863680000116 - 14.6317208328000028 - -1.0838311728000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 44.7574818254999798 - -32.8519189799999864 - 7.4931545204999956 - -0.5550484829999996 - -29.8383212170000043 - 21.9012793200000040 - -4.9954363470000018 - 0.3700323220000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -5.0106466433999977 - 3.7277438639999976 - -0.8522720693999993 - 0.0631312643999999 - 3.3404310956000010 - -2.4851625760000013 - 0.5681813796000004 - -0.0420875096000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -104.3657106932998886 - 53.3063472119999489 - -9.2857611221999896 - 0.5381739467999993 - 69.5771404621999920 - -35.5375648079999991 - 6.1905074148000008 - -0.3587826312000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 139.1294649887998673 - -71.0751296159999271 - 12.3810148295999856 - -0.7175652623999991 - -92.7529766592000016 - 47.3834197440000082 - -8.2540098864000022 - 0.4783768416000003 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -58.0317834119999389 - 29.6146373399999696 - -5.1587561789999938 - 0.2989855259999996 - 38.6878556080000138 - -19.7430915600000105 - 3.4391707860000027 - -0.1993236840000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 7.7430087215999910 - -3.9486183119999954 - 0.6878341571999992 - -0.0398647367999999 - -5.1620058144000041 - 2.6324122080000025 - -0.4585561048000005 - 0.0265764912000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5694553116999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.7129702077999998 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 3.4011244799999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.2674163199999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.4783081999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9855388000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2025453600000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1350302400000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5694553116999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.7129702077999998 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 3.4011244799999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.2674163199999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.4783081999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9855388000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2025453600000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1350302400000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5694553116999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.7129702077999998 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 3.4011244799999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.2674163199999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.4783081999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9855388000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2025453600000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1350302400000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -32.6217780473999994 - 21.7478520315999972 - 0.0000000000000000 - 0.0000000000000000 - 80.7563291291999974 - -53.8375527528000006 - 0.0000000000000000 - 0.0000000000000000 - -60.5672468468999909 - 40.3781645645999987 - 0.0000000000000000 - 0.0000000000000000 - 13.4593881881999984 - -8.9729254587999989 - 0.0000000000000000 - 0.0000000000000000 - 42.1036102331999942 - -28.0690734887999973 - 0.0000000000000000 - 0.0000000000000000 - -103.7670803135999904 - 69.1780535423999936 - 0.0000000000000000 - 0.0000000000000000 - 77.8253102351999928 - -51.8835401567999952 - 0.0000000000000000 - 0.0000000000000000 - -17.2945133855999984 - 11.5296755904000001 - 0.0000000000000000 - 0.0000000000000000 - -17.3069209304999987 - 11.5379472869999997 - 0.0000000000000000 - 0.0000000000000000 - 42.5275334640000011 - -28.3516889759999984 - 0.0000000000000000 - 0.0000000000000000 - -31.8956500979999973 - 21.2637667320000006 - 0.0000000000000000 - 0.0000000000000000 - 7.0879222439999996 - -4.7252814960000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2865894573999999 - -1.5243929716000000 - 0.0000000000000000 - 0.0000000000000000 - -5.6073377951999994 - 3.7382251968000002 - 0.0000000000000000 - 0.0000000000000000 - 4.2055033464000005 - -2.8036688975999997 - 0.0000000000000000 - 0.0000000000000000 - -0.9345562992000001 - 0.6230375328000000 - 44.2256531812000020 - -132.2389900727999930 - 99.1792425546000089 - -22.0398316788000024 - -138.5907206816000041 - 397.2227929391999623 - -297.9170947044000286 - 66.2037988232000032 - 105.4788598592000000 - -301.6030611396000722 - 226.2022958547000258 - -50.2671768566000026 - -23.2462882296000011 - 66.5586023016000041 - -49.9189517262000066 - 11.0931003835999995 - -57.1087958435999994 - 170.7439982111999939 - -128.0579986583999812 - 28.4573330352000013 - 178.4133265968000046 - -511.2056480832000034 - 383.4042360624000594 - -85.2009413472000006 - -135.7846198235999964 - 388.1433357647999856 - -291.1075018236000460 - 64.6905559607999976 - 29.9256277248000018 - -85.6571172480000058 - 64.2428379360000008 - -14.2761862080000022 - 23.4803316015000014 - -70.1983325879999995 - 52.6487494410000068 - -11.6997220980000023 - -73.3938860819999945 - 210.1673533680000219 - -157.6255150260000164 - 35.0278922279999989 - 55.8681749265000036 - -159.6001399020000235 - 119.7001049265000034 - -26.6000233170000016 - -12.3115115520000007 - 35.2179655199999999 - -26.4134741400000017 - 5.8696609200000003 - -3.1027108802000001 - 9.2757776784000008 - -6.9568332588000015 - 1.5459629464000002 - 9.7018514776000000 - -27.7703137823999988 - 20.8277353368000000 - -4.6283856304000004 - -7.3860899902000003 - 21.0910186535999991 - -15.8182639902000002 - 3.5151697756000004 - 1.6275348736000002 - -4.6537287359999997 - 3.4902965520000002 - -0.7756214560000001 - -50.0478950811999823 - 64.5349948775999849 - -26.8895811989999878 - 3.5852774931999987 - 183.1902844943999753 - -243.4800953951999247 - 101.4500397479999805 - -13.5266719663999968 - -151.8031018499999618 - 201.5326388519999625 - -83.9719328549999773 - 11.1962577139999979 - 35.4079979087999988 - -46.8875383343999914 - 19.5364743059999952 - -2.6048632407999994 - 69.5343934043999639 - -89.6509583711999625 - 37.3545659879999832 - -4.9806087983999978 - -250.0931194127999504 - 331.8487242623999123 - -138.2703017759999398 - 18.4360402367999932 - 206.0974818899999548 - -273.2155583039999556 - 113.8398159599999815 - -15.1786421279999963 - -47.9516943455999893 - 63.4177924127999830 - -26.4240801719999965 - 3.5232106895999991 - -28.9726639184999897 - 37.3545659879999832 - -15.5644024949999924 - 2.0752536659999992 - 104.2054664219999722 - -138.2703017759999682 - 57.6126257399999844 - -7.6816834319999980 - -85.8739507874999788 - 113.8398159599999815 - -47.4332566499999899 - 6.3244342199999988 - 19.9798726439999967 - -26.4240801719999965 - 11.0100334049999979 - -1.4680044539999997 - 3.8630218557999982 - -4.9806087983999978 - 2.0752536659999992 - -0.2767004887999999 - -13.8940621895999961 - 18.4360402367999932 - -7.6816834319999980 - 1.0242244575999997 - 11.4498601049999973 - -15.1786421279999963 - 6.3244342199999988 - -0.8432578959999998 - -2.6639830191999998 - 3.5232106895999991 - -1.4680044539999997 - 0.1957339272000000 - 42.6442853668999931 - -40.0053803687999974 - 11.9066088159000003 - -1.1642323158000001 - -120.2324494991999728 - 109.5640452863999741 - -32.7718093751999930 - 3.2246967023999997 - 89.9558741243999833 - -82.1730339647999841 - 24.5788570313999983 - -2.4185225267999999 - -19.8930995831999979 - 18.2606742143999980 - -5.4619682291999991 - 0.5374494503999999 - -56.7584044271999986 - 53.3405071583999941 - -15.8754784212000004 - 1.5523097544000002 - 159.8769737135999662 - -146.0853937151999560 - 43.6957458335999860 - -4.2995956031999993 - -119.6268492851999810 - 109.5640452863999741 - -32.7718093751999930 - 3.2246967023999993 - 26.4589082855999962 - -24.3475656191999974 - 7.2826243055999988 - -0.7165992671999999 - 23.6493351779999976 - -22.2252113159999993 - 6.6147826754999990 - -0.6467957310000000 - -66.6154057139999907 - 60.8689140479999864 - -18.2065607639999953 - 1.7914981679999997 - 49.8445205354999885 - -45.6516855359999880 - 13.6549205729999983 - -1.3436236259999998 - -11.0245451189999990 - 10.1448190079999989 - -3.0344267939999998 - 0.2985830280000000 - -3.1532446904000002 - 2.9633615088000003 - -0.8819710234000000 - 0.0862394308000000 - 8.8820540951999991 - -8.1158552063999991 - 2.4275414351999998 - -0.2388664223999999 - -6.6459360713999995 - 6.0868914047999993 - -1.8206560763999997 - 0.1791498168000000 - 1.4699393491999997 - -1.3526425343999997 - 0.4045902391999999 - -0.0398110704000000 - -184.9754434747000289 - 126.2750600520000148 - -28.5549122367000052 - 2.1151786842000004 - 549.7599647856001184 - -378.5554258559999994 - 85.6643485176000183 - -6.3455072976000011 - -412.5384365892000460 - 283.9165693920000422 - -64.2482613882000066 - 4.7591304732000008 - 91.7723027976000196 - -63.0925709760000046 - 14.2773914196000042 - -1.0575845496000000 - 189.3135113616000353 - -129.2160267360000034 - 29.2643043156000076 - -2.1677262455999999 - -561.1830773328000532 - 387.2884078080000450 - -87.7923953568000144 - 6.5031403968000010 - 421.1681889996000336 - -290.4663058560000763 - 65.8442965176000143 - -4.8773552976000012 - -93.7177668888000142 - 64.5480679680000122 - -14.6320658928000036 - 1.0838567328000002 - -64.5253657340000046 - 44.0523311400000068 - -9.9912321315000003 - 0.7400912690000001 - 190.7604902220000156 - -132.0071299200000112 - 29.9734807320000058 - -2.2202578320000006 - -143.1874014165000233 - 99.0053474400000084 - -22.4801105490000026 - 1.6651933740000002 - 31.8714375370000056 - -22.0011883200000042 - 4.9955801220000016 - -0.3700429720000001 - 7.3273586312000010 - -5.0036281520000010 - 1.1364106842000001 - -0.0841785692000000 - -21.6066616296000049 - 14.9909026560000029 - -3.4092032976000008 - 0.2525335776000001 - 16.2206007222000039 - -11.2431769920000022 - 2.5569024732000005 - -0.1894001832000000 - -3.6115132716000002 - 2.4984837760000005 - -0.5682005496000001 - 0.0420889296000000 - 130.2289587202999428 - -70.6241013659999624 - 12.3802240670999915 - -0.7175173373999993 - -395.8553984243998229 - 212.1429210479999199 - -37.1411466587999826 - 2.1525807671999990 - 296.6730858182999100 - -159.1071907859999612 - 27.8558599940999905 - -1.6144355753999995 - -65.8302577373999895 - 35.3571535079999961 - -6.1901911097999989 - 0.3587634612000000 - -173.8642248983998968 - 94.1654684879999451 - -16.5069654227999898 - 0.9566897831999992 - 528.3530069471997876 - -282.8572280639999121 - 49.5215288783999910 - -2.8701076895999988 - -395.9838742103999607 - 212.1429210479999483 - -37.1411466587999897 - 2.1525807671999995 - 87.8715804911999925 - -47.1428713439999996 - 8.2535881464000003 - -0.4783512816000000 - 72.5249910409999643 - -39.2356118699999783 - 6.8779022594999955 - -0.3986207429999997 - -220.3917782279999642 - 117.8571783599999776 - -20.6339703659999927 - 1.1958782039999996 - 165.1767999209999687 - -88.3928837699999974 - 15.4754777744999981 - -0.8969086529999999 - -36.6539405380000005 - 19.6428630599999998 - -3.4389950610000004 - 0.1993130340000000 - -9.6772489387999947 - 5.2314149159999976 - -0.9170536345999994 - 0.0531494324000000 - 29.4073208303999962 - -15.7142904479999963 - 2.7511960487999998 - -0.1594504272000000 - -22.0398861227999987 - 11.7857178359999999 - -2.0633970366000001 - 0.1195878204000000 - 4.8908171384000010 - -2.6190484080000003 - 0.4585326748000001 - -0.0265750712000000 - -5.5045576884998377 - 0.4527535499999218 - -0.0009345374999876 - 0.0000479249999993 - 11.3420452619995764 - -1.0866085199997961 - 0.0022428899999674 - -0.0001150199999983 - -8.7249969464996404 - 0.8149563899998263 - -0.0016821674999721 - 0.0000862649999985 - 2.0359828769999018 - -0.1811014199999522 - 0.0003738149999923 - -0.0000191699999996 - 7.1137969799997833 - -0.6036713999998966 - 0.0012460499999836 - -0.0000638999999991 - -14.5769179679994441 - 1.4488113599997343 - -0.0029905199999576 - 0.0001533599999978 - 11.2135694759995364 - -1.0866085199997786 - 0.0022428899999646 - -0.0001150199999981 - -2.6167403279998775 - 0.2414685599999410 - -0.0004984199999905 - 0.0000255599999995 - -2.8825180749999051 - 0.2515297499999547 - -0.0005191874999928 - 0.0000266249999996 - 5.8290238199997608 - -0.6036713999998863 - 0.0012460499999820 - -0.0000638999999990 - -4.4888016149998080 - 0.4527535499999084 - -0.0009345374999855 - 0.0000479249999992 - 1.0495264699999514 - -0.1006118999999768 - 0.0002076749999963 - -0.0000106499999998 - 0.3770856099999864 - -0.0335372999999935 - 0.0000692249999990 - -0.0000035499999999 - -0.7554527759999667 - 0.0804895199999842 - -0.0001661399999975 - 0.0000085199999999 - 0.5821940819999744 - -0.0603671399999879 - 0.0001246049999981 - -0.0000063899999999 - -0.1363117959999940 - 0.0134149199999972 - -0.0000276899999996 - 0.0000014200000000 - -5.5116026634997457 - 0.4547663999998953 - -0.0010783124999857 - 0.0000479249999993 - 11.3589532019993378 - -1.0914393599997261 - 0.0025879499999623 - -0.0001150199999983 - -8.7376779014994366 - 0.8185795199997661 - -0.0019409624999676 - 0.0000862649999985 - 2.0388008669998454 - -0.1819065599999353 - 0.0004313249999910 - -0.0000191699999996 - 7.1231902799996636 - -0.6063551999998610 - 0.0014377499999810 - -0.0000638999999991 - -14.5994618879991389 - 1.4552524799996427 - -0.0034505999999509 - 0.0001533599999978 - 11.2304774159992817 - -1.0914393599997021 - 0.0025879499999590 - -0.0001150199999981 - -2.6204976479998088 - 0.2425420799999205 - -0.0005750999999890 - 0.0000255599999995 - -2.8864319499998530 - 0.2526479999999392 - -0.0005990624999917 - 0.0000266249999996 - 5.8384171199996304 - -0.6063551999998473 - 0.0014377499999791 - -0.0000638999999990 - -4.4958465899997018 - 0.4547663999998769 - -0.0010783124999832 - 0.0000479249999992 - 1.0510920199999245 - -0.1010591999999689 - 0.0002396249999957 - -0.0000106499999998 - 0.3776074599999789 - -0.0336863999999913 - 0.0000798749999988 - -0.0000035499999999 - -0.7567052159999486 - 0.0808473599999789 - -0.0001916999999971 - 0.0000085199999999 - 0.5831334119999604 - -0.0606355199999838 - 0.0001437749999978 - -0.0000063899999999 - -0.1365205359999907 - 0.0134745599999963 - -0.0000319499999995 - 0.0000014200000000 - 251.7870357365003713 - -92.4596532000001332 - 11.1666529125000178 - -0.4466670750000007 - -606.1577789580009039 - 221.9031676800003083 - -26.7999669900000406 - 1.0720009800000017 - 454.3998712185007207 - -166.4273757600003023 - 20.0999752425000366 - -0.8040007350000014 - -100.8806544930002360 - 36.9838612800000845 - -4.4666611650000103 - 0.1786668300000004 - -335.9416609200004586 - 123.2795376000001681 - -14.8888705500000214 - 0.5955561000000008 - 808.7561809920013047 - -295.8708902400004490 - 35.7332893200000541 - -1.4293346400000022 - -606.2862547440010985 - 221.9031676800003652 - -26.7999669900000441 - 1.0720009800000017 - 134.6054428320002785 - -49.3118150400000985 - 5.9555482200000114 - -0.2382224400000005 - 140.0572560500002055 - -51.3664740000000748 - 6.2036960625000095 - -0.2481483750000004 - -337.2264340800005584 - 123.2795376000001966 - -14.8888705500000231 - 0.5955561000000009 - 252.8027918100004001 - -92.4596532000001616 - 11.1666529125000178 - -0.4466670750000007 - -56.1263831800001043 - 20.5465896000000399 - -2.4814784250000046 - 0.0992593500000002 - -18.6815509400000295 - 6.8488632000000109 - -0.8271594750000013 - 0.0330864500000001 - 44.9852749440000750 - -16.4372716800000234 - 1.9851827400000031 - -0.0794074800000001 - -33.7233517080000524 - 12.3279537600000193 - -1.4888870550000024 - 0.0595556100000001 - 7.4871428240000135 - -2.7395452800000046 - 0.3308637900000005 - -0.0132345800000000 - 0.0000000000000000 - 0.0000000000000000 - 204.6814854389999709 - -136.4543236259999901 - 0.0000000000000000 - 0.0000000000000000 - -270.4943405699999630 - 180.3295603799999753 - 0.0000000000000000 - 0.0000000000000000 - 112.7059752374999988 - -75.1373168249999992 - 0.0000000000000000 - 0.0000000000000000 - -15.0274633649999991 - 10.0183089100000000 - 0.0000000000000000 - 0.0000000000000000 - -270.4943405699999630 - 180.3295603799999753 - 0.0000000000000000 - 0.0000000000000000 - 357.4400451840000414 - -238.2933634559999803 - 0.0000000000000000 - 0.0000000000000000 - -148.9333521599999983 - 99.2889014399999894 - 0.0000000000000000 - 0.0000000000000000 - 19.8577802880000007 - -13.2385201919999993 - 0.0000000000000000 - 0.0000000000000000 - 112.7059752374999988 - -75.1373168249999992 - 0.0000000000000000 - 0.0000000000000000 - -148.9333521599999983 - 99.2889014399999894 - 0.0000000000000000 - 0.0000000000000000 - 62.0555634000000040 - -41.3703755999999956 - 0.0000000000000000 - 0.0000000000000000 - -8.2740751199999991 - 5.5160500800000003 - 0.0000000000000000 - 0.0000000000000000 - -15.0274633649999991 - 10.0183089100000000 - 0.0000000000000000 - 0.0000000000000000 - 19.8577802880000007 - -13.2385201919999993 - 0.0000000000000000 - 0.0000000000000000 - -8.2740751199999991 - 5.5160500800000003 - 0.0000000000000000 - 0.0000000000000000 - 1.1032100160000000 - -0.7354733440000000 - -221.1055395120000071 - 694.3984831799999711 - -520.7988623850000067 - 115.7330805300000094 - 278.7592949099999373 - -885.4177802399999564 - 664.0633351800000810 - -147.5696300400000212 - -112.8727612125000093 - 361.0594071000000440 - -270.7945553250000330 - 60.1765678499999979 - 14.7584174950000016 - -47.4421726800000059 - 35.5816295099999991 - -7.9070287800000010 - 278.7592949099999942 - -885.4177802400001838 - 664.0633351800000810 - -147.5696300400000212 - -351.5299650720000955 - 1129.6239523200001713 - -847.2179642400000148 - 188.2706587200000001 - 142.2576037800000108 - -460.5649308000000133 - 345.4236981000000242 - -76.7608218000000022 - -18.5931725040000018 - 60.5098382400000006 - -45.3823786800000022 - 10.0849730400000013 - -112.8727612125000093 - 361.0594071000000440 - -270.7945553250000330 - 60.1765678499999979 - 142.2576037800000108 - -460.5649308000000133 - 345.4236981000000242 - -76.7608218000000022 - -57.5184953249999964 - 187.6888395000000003 - -140.7666296250000073 - 31.2814732499999977 - 7.5130877100000006 - -24.6506705999999980 - 18.4880029500000020 - -4.1084451000000000 - 14.7584174950000016 - -47.4421726800000059 - 35.5816295099999991 - -7.9070287800000001 - -18.5931725040000018 - 60.5098382400000006 - -45.3823786800000022 - 10.0849730399999995 - 7.5130877100000006 - -24.6506705999999980 - 18.4880029499999985 - -4.1084451000000000 - -0.9809390280000001 - 3.2368216800000003 - -2.4276162599999997 - 0.5394702800000000 - 191.0667307679999567 - -232.3364261399999577 - 96.8068442249999919 - -12.9075792299999978 - -257.3214441299999748 - 309.7819015199999626 - -129.0757922999999892 - 17.2101056399999948 - 107.8726573874999985 - -129.0757922999999892 - 53.7815801249999978 - -7.1708773499999996 - -14.4412777849999969 - 17.2101056399999983 - -7.1708773499999996 - 0.9561169799999999 - -257.3214441299999748 - 309.7819015199999058 - -129.0757922999999892 - 17.2101056399999948 - 346.2666576479999776 - -413.0425353599999312 - 172.1010563999999761 - -22.9468075199999966 - -145.1204170199999908 - 172.1010564000000045 - -71.7087734999999924 - 9.5611698000000001 - 19.4242905360000009 - -22.9468075200000001 - 9.5611698000000001 - -1.2748226400000000 - 107.8726573874999701 - -129.0757922999999892 - 53.7815801249999907 - -7.1708773499999987 - -145.1204170199999908 - 172.1010563999999761 - -71.7087734999999924 - 9.5611697999999983 - 60.8179416749999930 - -71.7087734999999924 - 29.8786556250000004 - -3.9838207499999996 - -8.1402678900000005 - 9.5611698000000001 - -3.9838207500000000 - 0.5311760999999999 - -14.4412777849999969 - 17.2101056399999948 - -7.1708773499999987 - 0.9561169799999998 - 19.4242905359999973 - -22.9468075199999966 - 9.5611697999999983 - -1.2748226399999998 - -8.1402678900000005 - 9.5611697999999983 - -3.9838207499999996 - 0.5311760999999999 - 1.0895302519999999 - -1.2748226400000000 - 0.5311760999999999 - -0.0708234800000000 - -91.7268526394999384 - 94.0688623799999277 - -26.5321536524999857 - 2.4120022049999981 - 119.7366670799999042 - -125.4251498399999036 - 35.3762048699999738 - -3.2160029399999974 - -49.2348889499999558 - 52.2604790999999622 - -14.7400853624999861 - 1.3400012249999991 - 6.5063950599999956 - -6.9680638799999954 - 1.9653447149999987 - -0.1786668299999999 - 119.7366670799999042 - -125.4251498399999036 - 35.3762048699999738 - -3.2160029399999974 - -156.4774906319998422 - 167.2335331199998905 - -47.1682731599999627 - 4.2880039199999960 - 64.3563114299999484 - -69.6806387999999401 - 19.6534471499999839 - -1.7866682999999985 - -8.5059399239999927 - 9.2907518399999933 - -2.6204596199999983 - 0.2382224399999998 - -49.2348889499999558 - 52.2604790999999622 - -14.7400853624999897 - 1.3400012249999991 - 64.3563114299999484 - -69.6806387999999401 - 19.6534471499999839 - -1.7866682999999985 - -26.4640285124999792 - 29.0335994999999798 - -8.1889363124999939 - 0.7444451249999995 - 3.4973281349999974 - -3.8711465999999977 - 1.0918581749999994 - -0.0992593499999999 - 6.5063950599999956 - -6.9680638799999954 - 1.9653447149999987 - -0.1786668299999999 - -8.5059399239999927 - 9.2907518399999933 - -2.6204596199999983 - 0.2382224399999998 - 3.4973281349999974 - -3.8711465999999977 - 1.0918581749999994 - -0.0992593499999999 - -0.4621492179999996 - 0.5161528799999997 - -0.1455810899999999 - 0.0132345800000000 - 24.0740975205001106 - -2.4277887000000864 - 0.0034937325000216 - -0.0002587950000018 - -34.6645998000001612 - 3.2370516000001230 - -0.0046583100000299 - 0.0003450600000024 - 15.0989722500000738 - -1.3487715000000551 - 0.0019409625000130 - -0.0001437750000010 - -2.0714531000000118 - 0.1798362000000081 - -0.0002587950000018 - 0.0000191700000001 - -34.6645998000001612 - 3.2370516000001235 - -0.0046583100000299 - 0.0003450600000024 - 49.3908652080002355 - -4.3160688000001688 - 0.0062110800000399 - -0.0004600800000031 - -21.4221701700001006 - 1.7983620000000724 - -0.0025879500000166 - 0.0001917000000013 - 2.9311909560000142 - -0.2397816000000101 - 0.0003450600000022 - -0.0000255600000002 - 15.0989722500000720 - -1.3487715000000551 - 0.0019409625000130 - -0.0001437750000010 - -21.4221701700001006 - 1.7983620000000724 - -0.0025879500000166 - 0.0001917000000013 - 9.2770054875000412 - -0.7493175000000296 - 0.0010783125000066 - -0.0000798750000005 - -1.2681430650000054 - 0.0999090000000038 - -0.0001437750000008 - 0.0000106500000001 - -2.0714531000000118 - 0.1798362000000081 - -0.0002587950000018 - 0.0000191700000001 - 2.9311909560000142 - -0.2397816000000101 - 0.0003450600000022 - -0.0000255600000002 - -1.2681430650000054 - 0.0999090000000038 - -0.0001437750000008 - 0.0000106500000001 - 0.1732469420000007 - -0.0133212000000004 - 0.0000191700000001 - -0.0000014200000000 - 24.0935071455002721 - -2.4355525500001534 - 0.0042701175000289 - -0.0002587950000018 - -34.6904793000003693 - 3.2474034000002079 - -0.0056934900000389 - 0.0003450600000024 - 15.1097553750001588 - -1.3530847500000884 - 0.0023722875000164 - -0.0001437750000010 - -2.0728908500000220 - 0.1804113000000122 - -0.0003163050000022 - 0.0000191700000001 - -34.6904793000003622 - 3.2474034000002079 - -0.0056934900000389 - 0.0003450600000024 - 49.4253712080004988 - -4.3298712000002757 - 0.0075913200000511 - -0.0004600800000031 - -21.4365476700002091 - 1.8041130000001138 - -0.0031630500000209 - 0.0001917000000013 - 2.9331079560000273 - -0.2405484000000150 - 0.0004217400000027 - -0.0000255600000002 - 15.1097553750001588 - -1.3530847500000884 - 0.0023722875000164 - -0.0001437750000010 - -21.4365476700002091 - 1.8041130000001140 - -0.0031630500000209 - 0.0001917000000013 - 9.2829961125000828 - -0.7517137500000454 - 0.0013179375000082 - -0.0000798750000005 - -1.2689418150000105 - 0.1002285000000056 - -0.0001757250000010 - 0.0000106500000001 - -2.0728908500000220 - 0.1804113000000122 - -0.0003163050000022 - 0.0000191700000001 - 2.9331079560000273 - -0.2405484000000150 - 0.0004217400000027 - -0.0000255600000002 - -1.2689418150000105 - 0.1002285000000056 - -0.0001757250000010 - 0.0000106500000001 - 0.1733534420000013 - -0.0133638000000006 - 0.0000234300000001 - -0.0000014200000000 - 24.1214570055004529 - -2.4448691700002163 - 0.0050465025000343 - -0.0002587950000018 - -34.7277457800006175 - 3.2598255600002939 - -0.0067286700000462 - 0.0003450600000024 - 15.1252830750002651 - -1.3582606500001246 - 0.0028036125000195 - -0.0001437750000010 - -2.0749612100000361 - 0.1811014200000171 - -0.0003738150000026 - 0.0000191700000001 - -34.7277457800006175 - 3.2598255600002939 - -0.0067286700000462 - 0.0003450600000024 - 49.4750598480008250 - -4.3464340800003880 - 0.0089715600000605 - -0.0004600800000031 - -21.4572512700003450 - 1.8110142000001597 - -0.0037381500000247 - 0.0001917000000013 - 2.9358684360000451 - -0.2414685600000209 - 0.0004984200000032 - -0.0000255600000002 - 15.1252830750002616 - -1.3582606500001246 - 0.0028036125000195 - -0.0001437750000010 - -21.4572512700003450 - 1.8110142000001597 - -0.0037381500000247 - 0.0001917000000013 - 9.2916226125001380 - -0.7545892500000633 - 0.0015575625000096 - -0.0000798750000005 - -1.2700920150000172 - 0.1006119000000078 - -0.0002076750000012 - 0.0000106500000001 - -2.0749612100000361 - 0.1811014200000171 - -0.0003738150000026 - 0.0000191700000001 - 2.9358684360000451 - -0.2414685600000209 - 0.0004984200000032 - -0.0000255600000002 - -1.2700920150000172 - 0.1006119000000078 - -0.0002076750000012 - 0.0000106500000001 - 0.1735068020000020 - -0.0134149200000009 - 0.0000276900000001 - -0.0000014200000000 - 24.1594998705007029 - -2.4557385600002908 - 0.0058228875000397 - -0.0002587950000018 - -34.7784696000009532 - 3.2743180800003930 - -0.0077638500000534 - 0.0003450600000024 - 15.1464180000004074 - -1.3642992000001666 - 0.0032349375000225 - -0.0001437750000010 - -2.0777792000000561 - 0.1819065600000228 - -0.0004313250000031 - 0.0000191700000001 - -34.7784696000009532 - 3.2743180800003930 - -0.0077638500000534 - 0.0003450600000024 - 49.5426916080012703 - -4.3657574400005181 - 0.0103518000000699 - -0.0004600800000031 - -21.4854311700005276 - 1.8190656000002128 - -0.0043132500000285 - 0.0001917000000013 - 2.9396257560000691 - -0.2425420800000277 - 0.0005751000000037 - -0.0000255600000002 - 15.1464180000004074 - -1.3642992000001666 - 0.0032349375000225 - -0.0001437750000010 - -21.4854311700005276 - 1.8190656000002128 - -0.0043132500000285 - 0.0001917000000013 - 9.3033642375002099 - -0.7579440000000840 - 0.0017971875000111 - -0.0000798750000005 - -1.2716575650000261 - 0.1010592000000103 - -0.0002396250000013 - 0.0000106500000001 - -2.0777792000000561 - 0.1819065600000228 - -0.0004313250000031 - 0.0000191700000001 - 2.9396257560000691 - -0.2425420800000277 - 0.0005751000000037 - -0.0000255600000002 - -1.2716575650000261 - 0.1010592000000103 - -0.0002396250000013 - 0.0000106500000001 - 0.1737155420000029 - -0.0134745600000011 - 0.0000319500000001 - -0.0000014200000000 - -1365.2531474894988150 - 499.2821272799995995 - -60.2999257274999536 - 2.4120022049999981 - 1817.7717268799983685 - -665.7095030399993902 - 80.3999009699999192 - -3.2160029399999974 - -756.7494971999993822 - 277.3789595999998028 - -33.4999587374999663 - 1.3400012249999991 - 100.8416761599999063 - -36.9838612799999709 - 4.4666611649999961 - -0.1786668299999999 - 1817.7717268799983685 - -665.7095030399995039 - 80.3999009699999192 - -3.2160029399999974 - -2420.5242370319979273 - 887.6126707199993007 - -107.1998679599999207 - 4.2880039199999960 - 1007.7091224299991836 - -369.8386127999996802 - 44.6666116499999646 - -1.7866682999999985 - -134.2863147239999080 - 49.3118150399999564 - -5.9555482199999954 - 0.2382224399999998 - -756.7494971999992686 - 277.3789595999998028 - -33.4999587374999663 - 1.3400012249999991 - 1007.7091224299990699 - -369.8386127999996802 - 44.6666116499999646 - -1.7866682999999985 - -419.5276997624996511 - 154.0994219999998904 - -18.6110881874999841 - 0.7444451249999995 - 55.9058176349999627 - -20.5465895999999830 - 2.4814784249999979 - -0.0992593499999999 - 100.8416761599999063 - -36.9838612799999709 - 4.4666611649999961 - -0.1786668299999999 - -134.2863147239999080 - 49.3118150399999564 - -5.9555482199999954 - 0.2382224399999998 - 55.9058176349999627 - -20.5465895999999830 - 2.4814784249999979 - -0.0992593499999999 - -7.4499478179999956 - 2.7395452799999984 - -0.3308637899999998 - 0.0132345800000000 - 0.0000000000000000 - 0.0000000000000000 - 1.8107300115000000 - -1.2071533409999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.4143066819999999 - 1.6095377879999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.0059611175000001 - -0.6706407450000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1341281490000000 - 0.0894187660000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 225.3083766705000244 - -539.2915199999999913 - 404.4686400000000503 - -89.8819200000000080 - -202.2343199999999968 - 485.3623680000000604 - -364.0217760000000453 - 80.8937280000000101 - 58.9850100000000026 - -141.5640239999999892 - 106.1730180000000132 - -23.5940039999999982 - -5.6176200000000005 - 13.4822880000000005 - -10.1117160000000013 - 2.2470479999999999 - -262.9603688939999984 - 629.1734400000000278 - -471.8800800000000208 - 104.8622400000000141 - 235.9400400000000104 - -566.2560960000000705 - 424.6920720000000529 - -94.3760159999999928 - -68.8158449999999959 - 165.1580280000000300 - -123.8685210000000154 - 27.5263379999999991 - 6.5538900000000009 - -15.7293360000000000 - 11.7970019999999991 - -2.6215560000000000 - 100.2041203725000003 - -239.6851199999999835 - 179.7638400000000161 - -39.9475199999999973 - -89.8819200000000080 - 215.7166080000000079 - -161.7874560000000201 - 35.9527679999999989 - 26.2155599999999964 - -62.9173439999999999 - 47.1880080000000035 - -10.4862240000000000 - -2.4967199999999998 - 5.9921279999999992 - -4.4940959999999999 - 0.9986880000000000 - -12.5283093829999999 - 29.9606400000000015 - -22.4704800000000020 - 4.9934399999999997 - 11.2352400000000010 - -26.9645760000000010 - 20.2234320000000025 - -4.4940959999999999 - -3.2769449999999996 - 7.8646680000000000 - -5.8985010000000004 - 1.3107780000000000 - 0.3120900000000000 - -0.7490160000000000 - 0.5617620000000000 - -0.1248360000000000 - 45.5445366704999941 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -40.4468640000000050 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.7970019999999991 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.1235240000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -53.2358888939999986 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 47.1880079999999964 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -13.7631689999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 20.3090803724999986 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -17.9763839999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.2431120000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4993440000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5414293830000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553890000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 45.5445366704999941 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -40.4468640000000050 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.7970019999999991 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.1235240000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -53.2358888939999986 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 47.1880079999999964 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -13.7631689999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 20.3090803724999986 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -17.9763839999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.2431120000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4993440000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5414293830000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553890000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 45.5445366704999941 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -40.4468640000000050 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.7970019999999991 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.1235240000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -53.2358888939999986 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 47.1880079999999964 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -13.7631689999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 20.3090803724999986 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -17.9763839999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.2431120000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4993440000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5414293830000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553890000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 45.5445366704999941 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -40.4468640000000050 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.7970019999999991 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.1235240000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -53.2358888939999986 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 47.1880079999999964 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -13.7631689999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 20.3090803724999986 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -17.9763839999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.2431120000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4993440000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5414293830000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553890000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 45.5445366704999941 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -40.4468640000000050 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.7970019999999991 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.1235240000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -53.2358888939999986 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 47.1880079999999964 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -13.7631689999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 20.3090803724999986 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -17.9763839999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.2431120000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4993440000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5414293830000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553890000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 45.5445366704999941 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -40.4468640000000050 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.7970019999999991 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.1235240000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -53.2358888939999986 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 47.1880079999999964 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -13.7631689999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 20.3090803724999986 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -17.9763839999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.2431120000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4993440000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5414293830000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553890000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 45.5445366704999941 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -40.4468640000000050 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.7970019999999991 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.1235240000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -53.2358888939999986 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 47.1880079999999964 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -13.7631689999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 20.3090803724999986 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -17.9763839999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.2431120000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4993440000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5414293830000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553890000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1796984025000000 - 0.1197989350000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.5390952075000000 - -0.3593968050000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3593968050000000 - 0.2395978700000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0598994675000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 6.7523780425000002 - -15.7744311360000005 - 11.8308233519999995 - -2.6290718559999999 - -7.0045704549999996 - 16.5234516479999982 - -12.3925887360000004 - 2.7539086080000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -6.7580597519999994 - 16.2193434048000000 - -12.1645075536000000 - 2.7032239007999999 - 6.7580597519999994 - -16.2193434048000000 - 12.1645075536000000 - -2.7032239007999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.9711007609999998 - -4.7306418263999994 - 3.5479813698000000 - -0.7884403043999999 - -1.9711007609999998 - 4.7306418263999994 - -3.5479813698000000 - 0.7884403043999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1877238820000000 - 0.4505373168000000 - -0.3379029876000000 - 0.0750895528000000 - 0.1877238820000000 - -0.4505373168000000 - 0.3379029876000000 - -0.0750895528000000 - 1.7561266437000007 - -2.3348907144000020 - 0.9728711310000014 - -0.1297161508000003 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -46.0039935710999970 - 61.0691501591999995 - -25.4454792330000004 - 3.3927305643999999 - 44.1854485514000146 - -58.7342594448000099 - 24.4726081020000059 - -3.2630144136000014 - -0.0000000000000012 - 0.0000000000000029 - -0.0000000000000020 - 0.0000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 36.4935226607999965 - -48.6580302144000001 - 20.2741792560000000 - -2.7032239007999999 - -36.4935226608000107 - 48.6580302144000143 - -20.2741792560000071 - 2.7032239008000012 - 0.0000000000000005 - -0.0000000000000012 - 0.0000000000000008 - -0.0000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -10.6439441093999996 - 14.1919254792000000 - -5.9133022830000002 - 0.7884403043999999 - 10.6439441094000031 - -14.1919254792000071 - 5.9133022830000037 - -0.7884403044000006 - -0.0000000000000001 - 0.0000000000000002 - -0.0000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.0137089628000000 - -1.3516119503999999 - 0.5631716460000000 - -0.0750895528000000 - -1.0137089628000004 - 1.3516119504000006 - -0.5631716460000002 - 0.0750895528000001 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2021309517000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1347539678000007 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0000000000000007 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2021309517000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1347539678000007 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0000000000000007 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2021309517000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1347539678000007 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0000000000000007 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2021309517000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1347539678000007 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0000000000000007 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2021309517000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1347539678000007 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0000000000000007 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0049586079000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2021309517000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1347539678000007 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0000000000000007 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3353203725000000 - 0.2235469150000000 - 0.0000000000000000 - 0.0000000000000000 - 0.8047688940000000 - -0.5365125960000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6035766705000000 - 0.4023844470000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1341281490000000 - -0.0894187660000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 56.1396151825000018 - -135.0033327360000044 - 101.2524995520000033 - -22.5005554560000007 - -125.9664885020000042 - 302.9633875199999693 - -227.2225406399999770 - 50.4938979199999949 - 90.0868110964999858 - -216.6912079679999579 - 162.5184059759999968 - -36.1152013279999977 - -20.5720296569999981 - 49.4801736959999943 - -37.1101302719999921 - 8.2466956160000002 - -49.5027190080000068 - 118.8065256192000163 - -89.1048942144000051 - 19.8010876031999992 - 110.2406780160000039 - -264.5776272383999412 - 198.4332204287999843 - -44.0962712064000044 - -78.7312587600000029 - 188.9550210239999615 - -141.7162657679999711 - 31.4925035039999983 - 17.9932997519999986 - -43.1839194047999939 - 32.3879395535999990 - -7.1973199008000002 - 14.4382930439999981 - -34.6519033056000012 - 25.9889274792000009 - -5.7753172175999996 - -32.1535310880000011 - 77.1684746111999971 - -57.8763559583999978 - 12.8614124351999983 - 22.9632838049999997 - -55.1118811319999935 - 41.3339108489999987 - -9.1853135219999995 - -5.2480457610000002 - 12.5953098263999994 - -9.4464823697999982 - 2.0992183043999999 - -1.3750755280000000 - 3.3001812671999997 - -2.4751359503999999 - 0.5500302112000000 - 3.0622410560000000 - -7.3493785343999996 - 5.5120339008000006 - -1.2248964224000001 - -2.1869794100000002 - 5.2487505839999997 - -3.9365629379999998 - 0.8747917640000000 - 0.4998138820000000 - -1.1995533167999999 - 0.8996649876000000 - -0.1999255528000000 - -157.0620940015000429 - 216.2579120640000099 - -90.1074633599999970 - 12.0143284479999988 - 311.4225038820000009 - -432.5158241280000198 - 180.2149267199999940 - -24.0286568960000011 - -192.3943393995000122 - 270.3223900799999910 - -112.6343292000000105 - 15.0179105600000007 - 37.9715111430000007 - -54.0644780160000025 - 22.5268658399999993 - -3.0035821120000001 - 141.4799946432000013 - -194.6321208576000004 - 81.0967170240000002 - -10.8128956031999994 - -280.7129412863999960 - 389.2642417152000007 - -162.1934340480000003 - 21.6257912063999989 - 173.4794213039999988 - -243.2901510719999862 - 101.3708962799999966 - -13.5161195040000006 - -34.2464746608000041 - 48.6580302144000001 - -20.2741792560000036 - 2.7032239008000003 - -41.2649984375999992 - 56.7677019167999930 - -23.6532091319999971 - 3.1537612175999996 - 81.8746078751999988 - -113.5354038336000144 - 47.3064182640000013 - -6.3075224351999992 - -50.5981645469999961 - 70.9596273959999877 - -29.5665114149999972 - 3.9422015219999995 - 9.9885551094000000 - -14.1919254791999983 - 5.9133022830000002 - -0.7884403044000000 - 3.9299998511999998 - -5.4064478016000006 - 2.2526865840000001 - -0.3003582112000000 - -7.7975817024000005 - 10.8128956032000012 - -4.5053731680000002 - 0.6007164224000000 - 4.8188728140000006 - -6.7580597520000003 - 2.8158582299999999 - -0.3754477640000000 - -0.9512909628000000 - 1.3516119504000002 - -0.5631716460000000 - 0.0750895528000000 - 5.1313400465000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -12.9643642139999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 10.3474531604999989 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5768473689999998 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.4940959999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.2352399999999992 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -8.9881919999999980 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.2769449999999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.6215559999999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553889999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1248360000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.3120900000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2496720000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.1313400465000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -12.9643642139999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 10.3474531604999989 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5768473689999998 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.4940959999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.2352399999999992 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -8.9881919999999980 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.2769449999999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.6215559999999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553889999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1248360000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.3120900000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2496720000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.1313400465000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -12.9643642139999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 10.3474531604999989 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5768473689999998 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.4940959999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.2352399999999992 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -8.9881919999999980 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.2769449999999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.6215559999999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553889999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1248360000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.3120900000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2496720000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.1313400465000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -12.9643642139999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 10.3474531604999989 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5768473689999998 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.4940959999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.2352399999999992 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -8.9881919999999980 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.2769449999999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.6215559999999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553889999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1248360000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.3120900000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2496720000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.1313400465000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -12.9643642139999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 10.3474531604999989 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5768473689999998 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.4940959999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.2352399999999992 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -8.9881919999999980 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.2769449999999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.6215559999999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553889999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1248360000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.3120900000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2496720000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.1313400465000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -12.9643642139999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 10.3474531604999989 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5768473689999998 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.4940959999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.2352399999999992 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -8.9881919999999980 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.2769449999999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.6215559999999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553889999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1248360000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.3120900000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2496720000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.8107300115000000 - -1.2071533409999999 - 0.0000000000000000 - 0.0000000000000000 - -2.4143066819999999 - 1.6095377879999999 - 0.0000000000000000 - 0.0000000000000000 - 1.0059611175000001 - -0.6706407450000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1341281490000000 - 0.0894187660000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 225.3083766704999960 - -539.2915199999999913 - 404.4686400000000503 - -89.8819200000000080 - -262.9603688939999984 - 629.1734400000000278 - -471.8800800000000208 - 104.8622400000000141 - 100.2041203725000003 - -239.6851200000000119 - 179.7638400000000161 - -39.9475200000000044 - -12.5283093829999999 - 29.9606400000000015 - -22.4704800000000020 - 4.9934399999999997 - -202.2343199999999968 - 485.3623680000000036 - -364.0217760000000453 - 80.8937280000000101 - 235.9400400000000104 - -566.2560960000000705 - 424.6920720000000529 - -94.3760160000000070 - -89.8819200000000080 - 215.7166080000000079 - -161.7874560000000201 - 35.9527680000000061 - 11.2352400000000010 - -26.9645760000000010 - 20.2234320000000025 - -4.4940959999999999 - 58.9850100000000026 - -141.5640239999999892 - 106.1730180000000132 - -23.5940039999999982 - -68.8158449999999959 - 165.1580280000000016 - -123.8685210000000154 - 27.5263379999999991 - 26.2155600000000035 - -62.9173440000000070 - 47.1880080000000035 - -10.4862240000000000 - -3.2769449999999996 - 7.8646680000000000 - -5.8985010000000004 - 1.3107780000000000 - -5.6176200000000005 - 13.4822880000000005 - -10.1117160000000013 - 2.2470479999999999 - 6.5538900000000009 - -15.7293360000000000 - 11.7970019999999991 - -2.6215560000000000 - -2.4967199999999998 - 5.9921279999999992 - -4.4940959999999999 - 0.9986880000000000 - 0.3120900000000000 - -0.7490160000000000 - 0.5617620000000000 - -0.1248360000000000 - 45.5445366704999941 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -53.2358888940000057 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 20.3090803725000022 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5414293830000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -40.4468640000000050 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 47.1880080000000035 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -17.9763840000000030 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.7970019999999991 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -13.7631689999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.2431120000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553890000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.1235240000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4993440000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 45.5445366704999941 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -53.2358888940000057 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 20.3090803725000022 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5414293830000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -40.4468640000000050 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 47.1880080000000035 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -17.9763840000000030 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.7970019999999991 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -13.7631689999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.2431120000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553890000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.1235240000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4993440000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 45.5445366704999941 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -53.2358888940000057 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 20.3090803725000022 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5414293830000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -40.4468640000000050 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 47.1880080000000035 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -17.9763840000000030 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.7970019999999991 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -13.7631689999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.2431120000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553890000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.1235240000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4993440000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 45.5445366704999941 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -53.2358888940000057 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 20.3090803725000022 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5414293830000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -40.4468640000000050 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 47.1880080000000035 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -17.9763840000000030 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.7970019999999991 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -13.7631689999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.2431120000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553890000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.1235240000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4993440000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 45.5445366704999941 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -53.2358888940000057 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 20.3090803725000022 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5414293830000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -40.4468640000000050 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 47.1880080000000035 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -17.9763840000000030 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.7970019999999991 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -13.7631689999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.2431120000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553890000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.1235240000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4993440000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 45.5445366704999941 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -53.2358888940000057 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 20.3090803725000022 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5414293830000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -40.4468640000000050 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 47.1880080000000035 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -17.9763840000000030 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.7970019999999991 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -13.7631689999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.2431120000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553890000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.1235240000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4993440000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 45.5445366704999941 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -53.2358888940000057 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 20.3090803725000022 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.5414293830000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -40.4468640000000050 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 47.1880080000000035 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -17.9763840000000030 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2470479999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.7970019999999991 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -13.7631689999999995 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.2431120000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6553890000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.1235240000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3107780000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4993440000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0624180000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -# piCH - -6 -0.0 -4.0 -0.0 -4.0 -0.0 -9.0 - - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.3500000000000001 - 0.9000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9000000000000000 - -0.6000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9000000000000000 - -0.6000000000000001 - 0.0000000000000000 - 0.0000000000000000 - -0.6000000000000001 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4500000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.3000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.3000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -63.4499999999999886 - 80.9999999999999858 - -33.7499999999999929 - 4.4999999999999991 - 42.2999999999999972 - -53.9999999999999858 - 22.4999999999999964 - -2.9999999999999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 42.2999999999999972 - -53.9999999999999858 - 22.4999999999999964 - -2.9999999999999996 - -28.1999999999999957 - 36.0000000000000000 - -15.0000000000000000 - 2.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 179.5499999999999545 - -161.9999999999999716 - 47.2499999999999929 - -4.4999999999999991 - -119.6999999999999886 - 107.9999999999999716 - -31.4999999999999964 - 2.9999999999999996 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -119.6999999999999886 - 107.9999999999999716 - -31.4999999999999964 - 2.9999999999999996 - 79.7999999999999972 - -72.0000000000000000 - 21.0000000000000000 - -2.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4500000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.3000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.3000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4500000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.3000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.3000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4500000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.3000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.3000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4500000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.3000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.3000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4500000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.3000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.3000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.8000000000000003 - -1.2000000000000002 - 0.0000000000000000 - 0.0000000000000000 - -5.4000000000000004 - 3.6000000000000005 - 0.0000000000000000 - 0.0000000000000000 - 4.0500000000000007 - -2.7000000000000002 - 0.0000000000000000 - 0.0000000000000000 - -0.9000000000000000 - 0.6000000000000001 - 0.0000000000000000 - 0.0000000000000000 - -1.2000000000000002 - 0.8000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 3.6000000000000005 - -2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - -2.7000000000000002 - 1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - 0.6000000000000001 - -0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -18.1499999999999986 - 45.0000000000000000 - -33.7500000000000000 - 7.5000000000000000 - 43.2000000000000028 - -108.0000000000000000 - 81.0000000000000000 - -18.0000000000000000 - -32.3999999999999986 - 81.0000000000000000 - -60.7500000000000000 - 13.5000000000000000 - 7.2000000000000002 - -18.0000000000000000 - 13.5000000000000000 - -3.0000000000000000 - 12.0999999999999996 - -30.0000000000000000 - 22.5000000000000000 - -5.0000000000000000 - -28.8000000000000007 - 72.0000000000000000 - -54.0000000000000000 - 12.0000000000000000 - 21.6000000000000014 - -54.0000000000000000 - 40.5000000000000000 - -9.0000000000000000 - -4.7999999999999998 - 12.0000000000000000 - -9.0000000000000000 - 2.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 80.8499999999999943 - -108.0000000000000000 - 45.0000000000000000 - -6.0000000000000000 - -244.8000000000000114 - 324.0000000000000000 - -135.0000000000000000 - 18.0000000000000000 - 183.5999999999999943 - -243.0000000000000000 - 101.2500000000000000 - -13.5000000000000000 - -40.7999999999999972 - 54.0000000000000000 - -22.5000000000000000 - 3.0000000000000000 - -53.9000000000000057 - 72.0000000000000000 - -30.0000000000000000 - 4.0000000000000000 - 163.1999999999999886 - -216.0000000000000000 - 90.0000000000000000 - -12.0000000000000000 - -122.4000000000000057 - 162.0000000000000000 - -67.5000000000000000 - 9.0000000000000000 - 27.1999999999999993 - -36.0000000000000000 - 15.0000000000000000 - -2.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 60.6000000000000369 - -54.0000000000000284 - 15.7500000000000107 - -1.5000000000000011 - -1.8000000000001068 - 0.0000000000000999 - -0.0000000000000306 - 0.0000000000000031 - 1.3500000000000831 - -0.0000000000000759 - 0.0000000000000226 - -0.0000000000000022 - -0.3000000000000198 - 0.0000000000000173 - -0.0000000000000049 - 0.0000000000000004 - -40.4000000000000270 - 36.0000000000000213 - -10.5000000000000036 - 1.0000000000000004 - 1.2000000000000515 - -0.0000000000000426 - 0.0000000000000111 - -0.0000000000000009 - -0.9000000000000317 - 0.0000000000000253 - -0.0000000000000062 - 0.0000000000000004 - 0.2000000000000040 - -0.0000000000000027 - 0.0000000000000004 - 0.0000000000000000 - -3.9810265070966766 - 2.7143362548386434 - -0.6107256573386948 - 0.0452389375806441 - 9.5544636170320238 - -6.5144070116127439 - 1.4657415776128673 - -0.1085734501935457 - -7.1658477127740188 - 4.8858052587095582 - -1.0993061832096505 - 0.0814300876451593 - 1.5924106028386709 - -1.0857345019354574 - 0.2442902629354779 - -0.0180955750322576 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 12.5430795212900357 - -8.1430087645159333 - 1.8321769720160854 - -0.1357168127419323 - -30.4633908510960865 - 19.5432210348382434 - -4.3972247328386054 - 0.3257203505806374 - 22.8475431383220666 - -14.6574157761286834 - 3.2979185496289536 - -0.2442902629354781 - -5.0772318085160153 - 3.2572035058063742 - -0.7328707888064342 - 0.0542867250967729 - -8.3620530141933571 - 5.4286725096772885 - -1.2214513146773900 - 0.0904778751612881 - 20.3089272340640541 - -13.0288140232254914 - 2.9314831552257354 - -0.2171469003870915 - -15.2316954255480397 - 9.7716105174191163 - -2.1986123664193014 - 0.1628601752903186 - 3.3848212056773415 - -2.1714690038709143 - 0.4885805258709557 - -0.0361911500645152 - -0.0226194687903220 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0542867250967729 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0407150438225796 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0090477875161288 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.6678584063709662 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.9628601752903188 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.4721451314677392 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3271433625483865 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4452389375806441 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3085734501935460 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.9814300876451594 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2180955750322576 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0226194687903220 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0542867250967729 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0407150438225796 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0090477875161288 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.6678584063709662 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.9628601752903188 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.4721451314677392 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3271433625483865 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4452389375806441 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3085734501935460 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.9814300876451594 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2180955750322576 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0226194687903220 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0542867250967729 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0407150438225796 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0090477875161288 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.6678584063709662 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.9628601752903188 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.4721451314677392 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3271433625483865 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4452389375806441 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3085734501935460 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.9814300876451594 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2180955750322576 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0226194687903220 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0542867250967729 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0407150438225796 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0090477875161288 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.6678584063709662 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.9628601752903188 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.4721451314677392 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3271433625483865 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4452389375806441 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3085734501935460 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.9814300876451594 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2180955750322576 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -25.2000000000000028 - 16.8000000000000007 - 0.0000000000000000 - 0.0000000000000000 - 32.4000000000000057 - -21.6000000000000014 - 0.0000000000000000 - 0.0000000000000000 - -13.5000000000000000 - 9.0000000000000018 - 0.0000000000000000 - 0.0000000000000000 - 1.8000000000000000 - -1.2000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 16.8000000000000007 - -11.2000000000000011 - 0.0000000000000000 - 0.0000000000000000 - -21.6000000000000014 - 14.4000000000000021 - 0.0000000000000000 - 0.0000000000000000 - 9.0000000000000018 - -6.0000000000000009 - 0.0000000000000000 - 0.0000000000000000 - -1.2000000000000002 - 0.8000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 82.3499999999999943 - -217.8000000000000114 - 163.3499999999999943 - -36.2999999999999972 - -110.6999999999999886 - 291.6000000000000227 - -218.6999999999999886 - 48.6000000000000085 - 46.1250000000000000 - -121.5000000000000000 - 91.1250000000000000 - -20.2500000000000036 - -6.1500000000000004 - 16.2000000000000028 - -12.1500000000000021 - 2.7000000000000002 - -54.8999999999999986 - 145.1999999999999886 - -108.9000000000000057 - 24.1999999999999993 - 73.7999999999999972 - -194.4000000000000341 - 145.8000000000000114 - -32.3999999999999986 - -30.7500000000000000 - 81.0000000000000000 - -60.7500000000000000 - 13.5000000000000000 - 4.0999999999999996 - -10.8000000000000007 - 8.0999999999999996 - -1.7999999999999998 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 9.7500000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -13.5000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.6250000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.7500000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -6.5000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 9.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.7500000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.5000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1460.4000000000000909 - 1306.8000000000001819 - -381.1499999999999773 - 36.2999999999999972 - 1954.8000000000001819 - -1749.6000000000001364 - 510.3000000000000114 - -48.6000000000000085 - -814.5000000000001137 - 729.0000000000001137 - -212.6250000000000000 - 20.2500000000000036 - 108.5999999999999943 - -97.2000000000000028 - 28.3500000000000014 - -2.7000000000000002 - 973.5999999999999091 - -871.2000000000000455 - 254.0999999999999943 - -24.2000000000000028 - -1303.2000000000000455 - 1166.4000000000000909 - -340.2000000000000455 - 32.4000000000000057 - 543.0000000000000000 - -486.0000000000000568 - 141.7500000000000000 - -13.5000000000000000 - -72.4000000000000057 - 64.8000000000000114 - -18.8999999999999986 - 1.8000000000000000 - 21.4975431383220581 - -14.6574157761286745 - 3.2979185496289514 - -0.2442902629354779 - -28.6633908510960751 - 19.5432210348382327 - -4.3972247328386018 - 0.3257203505806372 - 11.9430795212900307 - -8.1430087645159297 - 1.8321769720160841 - -0.1357168127419322 - -1.5924106028386709 - 1.0857345019354574 - -0.2442902629354779 - 0.0180955750322576 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -72.8926294149661658 - 43.9722473283860253 - -9.8937556488868559 - 0.7328707888064337 - 96.7901725532882438 - -58.6296631045147052 - 13.1916741985158090 - -0.9771610517419118 - -40.3292385638700992 - 24.4290262935477962 - -5.4965309160482541 - 0.4071504382257967 - 5.3772318085160133 - -3.2572035058063733 - 0.7328707888064341 - -0.0542867250967729 - 48.5950862766441105 - -29.3148315522573526 - 6.5958370992579045 - -0.4885805258709559 - -64.5267817021921530 - 39.0864420696764654 - -8.7944494656772036 - 0.6514407011612744 - 26.8861590425800614 - -16.2860175290318594 - 3.6643539440321682 - -0.2714336254838643 - -3.5848212056773412 - 2.1714690038709143 - -0.4885805258709557 - 0.0361911500645152 - 0.1221451314677389 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1628601752903186 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0678584063709661 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0090477875161288 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -8.7664353944032172 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.2885805258709571 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.7035752191128983 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.6271433625483865 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.8442902629354787 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -7.5257203505806380 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 3.1357168127419324 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4180955750322576 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1221451314677389 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1628601752903186 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0678584063709661 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0090477875161288 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -8.7664353944032172 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.2885805258709571 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.7035752191128983 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.6271433625483865 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.8442902629354787 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -7.5257203505806380 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 3.1357168127419324 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4180955750322576 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1221451314677389 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1628601752903186 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0678584063709661 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0090477875161288 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -8.7664353944032172 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.2885805258709571 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.7035752191128983 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.6271433625483865 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.8442902629354787 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -7.5257203505806380 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 3.1357168127419324 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4180955750322576 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1221451314677389 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1628601752903186 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0678584063709661 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0090477875161288 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -8.7664353944032172 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.2885805258709571 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.7035752191128983 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.6271433625483865 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.8442902629354787 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -7.5257203505806380 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 3.1357168127419324 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4180955750322576 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.9000000000000000 - 0.6000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.6000000000000001 - -0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6749999999999999 - 0.8999999999999997 - -0.6749999999999997 - 0.1499999999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4499999999999999 - -0.5999999999999998 - 0.4499999999999998 - -0.1000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3750000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2500000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.6999999999999975 - -5.3999999999999968 - 1.5749999999999993 - -0.1499999999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.7999999999999985 - 3.5999999999999988 - -1.0499999999999998 - 0.1000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.8000000000000003 - -1.2000000000000002 - 0.0000000000000000 - 0.0000000000000000 - -1.2000000000000002 - 0.8000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -5.4000000000000004 - 3.6000000000000005 - 0.0000000000000000 - 0.0000000000000000 - 3.6000000000000005 - -2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 4.0500000000000007 - -2.7000000000000002 - 0.0000000000000000 - 0.0000000000000000 - -2.7000000000000002 - 1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.9000000000000000 - 0.6000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.6000000000000001 - -0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -18.1499999999999986 - 45.0000000000000000 - -33.7500000000000000 - 7.5000000000000000 - 12.0999999999999996 - -30.0000000000000000 - 22.5000000000000000 - -5.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 43.2000000000000028 - -108.0000000000000000 - 81.0000000000000000 - -18.0000000000000000 - -28.8000000000000007 - 72.0000000000000000 - -54.0000000000000000 - 12.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -32.3999999999999986 - 81.0000000000000000 - -60.7500000000000000 - 13.5000000000000000 - 21.6000000000000014 - -54.0000000000000000 - 40.5000000000000000 - -9.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 7.2000000000000002 - -18.0000000000000000 - 13.5000000000000000 - -3.0000000000000000 - -4.7999999999999998 - 12.0000000000000000 - -9.0000000000000000 - 2.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 80.8499999999999943 - -108.0000000000000000 - 45.0000000000000000 - -6.0000000000000000 - -53.9000000000000057 - 72.0000000000000000 - -30.0000000000000000 - 4.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -244.8000000000000114 - 324.0000000000000000 - -135.0000000000000000 - 18.0000000000000000 - 163.1999999999999886 - -216.0000000000000000 - 90.0000000000000000 - -12.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 183.5999999999999943 - -243.0000000000000000 - 101.2500000000000000 - -13.5000000000000000 - -122.4000000000000057 - 162.0000000000000000 - -67.5000000000000000 - 9.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -40.7999999999999972 - 54.0000000000000000 - -22.5000000000000000 - 3.0000000000000000 - 27.1999999999999993 - -36.0000000000000000 - 15.0000000000000000 - -2.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 60.6000000000000369 - -54.0000000000000284 - 15.7500000000000107 - -1.5000000000000011 - -40.4000000000000270 - 36.0000000000000213 - -10.5000000000000036 - 1.0000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.8000000000001068 - 0.0000000000000999 - -0.0000000000000306 - 0.0000000000000031 - 1.2000000000000515 - -0.0000000000000426 - 0.0000000000000111 - -0.0000000000000009 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3500000000000831 - -0.0000000000000759 - 0.0000000000000226 - -0.0000000000000022 - -0.9000000000000317 - 0.0000000000000253 - -0.0000000000000062 - 0.0000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3000000000000198 - 0.0000000000000173 - -0.0000000000000049 - 0.0000000000000004 - 0.2000000000000040 - -0.0000000000000027 - 0.0000000000000004 - 0.0000000000000000 - -3.9810265070966766 - 2.7143362548386434 - -0.6107256573386948 - 0.0452389375806441 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 12.5430795212900303 - -8.1430087645159297 - 1.8321769720160841 - -0.1357168127419322 - -8.3620530141933536 - 5.4286725096772868 - -1.2214513146773895 - 0.0904778751612881 - 9.5544636170320238 - -6.5144070116127439 - 1.4657415776128673 - -0.1085734501935457 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -30.4633908510960723 - 19.5432210348382327 - -4.3972247328386018 - 0.3257203505806372 - 20.3089272340640505 - -13.0288140232254879 - 2.9314831552257345 - -0.2171469003870915 - -7.1658477127740188 - 4.8858052587095582 - -1.0993061832096505 - 0.0814300876451593 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 22.8475431383220560 - -14.6574157761286745 - 3.2979185496289514 - -0.2442902629354779 - -15.2316954255480361 - 9.7716105174191163 - -2.1986123664193009 - 0.1628601752903186 - 1.5924106028386709 - -1.0857345019354574 - 0.2442902629354779 - -0.0180955750322576 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -5.0772318085160126 - 3.2572035058063720 - -0.7328707888064336 - 0.0542867250967729 - 3.3848212056773415 - -2.1714690038709148 - 0.4885805258709558 - -0.0361911500645152 - -0.0226194687903220 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.6678584063709662 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4452389375806441 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0542867250967729 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.9628601752903188 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3085734501935460 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0407150438225796 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.4721451314677392 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.9814300876451594 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0090477875161288 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3271433625483865 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2180955750322576 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0226194687903220 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.6678584063709662 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4452389375806441 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0542867250967729 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.9628601752903188 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3085734501935460 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0407150438225796 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.4721451314677392 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.9814300876451594 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0090477875161288 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3271433625483865 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2180955750322576 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0226194687903220 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.6678584063709662 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4452389375806441 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0542867250967729 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.9628601752903188 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3085734501935460 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0407150438225796 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.4721451314677392 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.9814300876451594 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0090477875161288 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3271433625483865 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2180955750322576 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0226194687903220 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.6678584063709662 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4452389375806441 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0542867250967729 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.9628601752903188 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.3085734501935460 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0407150438225796 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.4721451314677392 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.9814300876451594 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0090477875161288 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3271433625483865 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2180955750322576 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.4000000000000004 - 1.6000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 7.2000000000000011 - -4.8000000000000007 - 0.0000000000000000 - 0.0000000000000000 - -5.4000000000000004 - 3.6000000000000005 - 0.0000000000000000 - 0.0000000000000000 - 1.2000000000000002 - -0.8000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 7.2000000000000011 - -4.8000000000000007 - 0.0000000000000000 - 0.0000000000000000 - -21.6000000000000014 - 14.4000000000000021 - 0.0000000000000000 - 0.0000000000000000 - 16.2000000000000028 - -10.8000000000000007 - 0.0000000000000000 - 0.0000000000000000 - -3.6000000000000005 - 2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - -5.4000000000000004 - 3.6000000000000005 - 0.0000000000000000 - 0.0000000000000000 - 16.2000000000000028 - -10.8000000000000007 - 0.0000000000000000 - 0.0000000000000000 - -12.1500000000000021 - 8.1000000000000014 - 0.0000000000000000 - 0.0000000000000000 - 2.7000000000000002 - -1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - 1.2000000000000002 - -0.8000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.6000000000000005 - 2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 2.7000000000000002 - -1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - -0.6000000000000001 - 0.4000000000000000 - 49.2000000000000028 - -120.0000000000000000 - 90.0000000000000000 - -20.0000000000000000 - -132.6000000000000227 - 324.0000000000000000 - -243.0000000000000000 - 54.0000000000000000 - 99.4500000000000171 - -243.0000000000000000 - 182.2500000000000000 - -40.5000000000000000 - -22.1000000000000014 - 54.0000000000000000 - -40.5000000000000000 - 9.0000000000000000 - -132.5999999999999943 - 324.0000000000000000 - -243.0000000000000000 - 54.0000000000000000 - 352.8000000000000114 - -864.0000000000000000 - 648.0000000000000000 - -144.0000000000000000 - -264.6000000000000227 - 648.0000000000000000 - -486.0000000000000000 - 108.0000000000000000 - 58.7999999999999972 - -144.0000000000000000 - 108.0000000000000000 - -24.0000000000000000 - 99.4500000000000028 - -243.0000000000000000 - 182.2500000000000000 - -40.5000000000000000 - -264.6000000000000227 - 648.0000000000000000 - -486.0000000000000000 - 108.0000000000000000 - 198.4499999999999886 - -486.0000000000000000 - 364.5000000000000000 - -81.0000000000000000 - -44.1000000000000014 - 108.0000000000000000 - -81.0000000000000000 - 18.0000000000000000 - -22.1000000000000014 - 54.0000000000000000 - -40.5000000000000000 - 9.0000000000000000 - 58.7999999999999972 - -144.0000000000000000 - 108.0000000000000000 - -24.0000000000000000 - -44.1000000000000014 - 108.0000000000000000 - -81.0000000000000000 - 18.0000000000000000 - 9.8000000000000007 - -24.0000000000000000 - 18.0000000000000000 - -4.0000000000000000 - -102.7999999999999972 - 144.0000000000000000 - -60.0000000000000000 - 8.0000000000000000 - 311.3999999999999773 - -432.0000000000000000 - 180.0000000000000000 - -24.0000000000000000 - -233.5499999999999829 - 324.0000000000000000 - -135.0000000000000000 - 18.0000000000000000 - 51.8999999999999986 - -72.0000000000000000 - 30.0000000000000000 - -4.0000000000000000 - 311.3999999999999773 - -432.0000000000000000 - 180.0000000000000000 - -24.0000000000000000 - -943.2000000000000455 - 1296.0000000000000000 - -540.0000000000000000 - 72.0000000000000000 - 707.3999999999999773 - -972.0000000000000000 - 405.0000000000000000 - -54.0000000000000000 - -157.1999999999999886 - 216.0000000000000000 - -90.0000000000000000 - 12.0000000000000000 - -233.5499999999999829 - 324.0000000000000000 - -135.0000000000000000 - 18.0000000000000000 - 707.4000000000000909 - -972.0000000000000000 - 405.0000000000000000 - -54.0000000000000000 - -530.5499999999999545 - 729.0000000000000000 - -303.7500000000000000 - 40.5000000000000000 - 117.9000000000000057 - -162.0000000000000000 - 67.5000000000000000 - -9.0000000000000000 - 51.8999999999999986 - -72.0000000000000000 - 30.0000000000000000 - -4.0000000000000000 - -157.1999999999999886 - 216.0000000000000000 - -90.0000000000000000 - 12.0000000000000000 - 117.9000000000000057 - -162.0000000000000000 - 67.5000000000000000 - -9.0000000000000000 - -26.1999999999999993 - 36.0000000000000000 - -15.0000000000000000 - 2.0000000000000000 - -480.8000000000000114 - 432.0000000000000000 - -126.0000000000000000 - 12.0000000000000000 - 1202.4000000000000909 - -1080.0000000000000000 - 315.0000000000000568 - -30.0000000000000036 - -901.8000000000000682 - 810.0000000000001137 - -236.2500000000000000 - 22.5000000000000036 - 200.4000000000000341 - -180.0000000000000284 - 52.5000000000000071 - -5.0000000000000000 - 1202.4000000000003183 - -1080.0000000000002274 - 315.0000000000000568 - -30.0000000000000071 - -2887.2000000000007276 - 2592.0000000000004547 - -756.0000000000001137 - 72.0000000000000142 - 2165.4000000000005457 - -1944.0000000000002274 - 567.0000000000000000 - -54.0000000000000071 - -481.2000000000000455 - 432.0000000000000568 - -126.0000000000000142 - 12.0000000000000000 - -901.8000000000000682 - 810.0000000000002274 - -236.2500000000000284 - 22.5000000000000036 - 2165.4000000000005457 - -1944.0000000000004547 - 567.0000000000000000 - -54.0000000000000071 - -1624.0500000000001819 - 1458.0000000000002274 - -425.2500000000000568 - 40.5000000000000071 - 360.9000000000000341 - -324.0000000000000568 - 94.5000000000000000 - -9.0000000000000000 - 200.4000000000000341 - -180.0000000000000284 - 52.5000000000000071 - -5.0000000000000000 - -481.2000000000000455 - 432.0000000000000568 - -126.0000000000000142 - 12.0000000000000000 - 360.9000000000000341 - -324.0000000000000568 - 94.5000000000000000 - -9.0000000000000000 - -80.2000000000000028 - 72.0000000000000000 - -21.0000000000000000 - 2.0000000000000000 - -0.8000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -7.2000000000000011 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.2000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.0500000000000007 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.2000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.8000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -7.2000000000000011 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.2000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.0500000000000007 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.2000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.8000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -7.2000000000000011 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.2000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.0500000000000007 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.2000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.8000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -7.2000000000000011 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.2000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.0500000000000007 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.2000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.8000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -7.2000000000000011 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.2000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.0500000000000007 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.2000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 33.6000000000000014 - -22.3999999999999986 - 0.0000000000000000 - 0.0000000000000000 - -43.2000000000000028 - 28.8000000000000043 - 0.0000000000000000 - 0.0000000000000000 - 18.0000000000000000 - -12.0000000000000018 - 0.0000000000000000 - 0.0000000000000000 - -2.4000000000000004 - 1.6000000000000001 - 0.0000000000000000 - 0.0000000000000000 - -100.8000000000000114 - 67.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 129.6000000000000227 - -86.4000000000000057 - 0.0000000000000000 - 0.0000000000000000 - -54.0000000000000000 - 36.0000000000000071 - 0.0000000000000000 - 0.0000000000000000 - 7.2000000000000011 - -4.8000000000000007 - 0.0000000000000000 - 0.0000000000000000 - 75.6000000000000085 - -50.4000000000000057 - 0.0000000000000000 - 0.0000000000000000 - -97.2000000000000171 - 64.8000000000000114 - 0.0000000000000000 - 0.0000000000000000 - 40.5000000000000000 - -27.0000000000000036 - 0.0000000000000000 - 0.0000000000000000 - -5.4000000000000004 - 3.6000000000000005 - 0.0000000000000000 - 0.0000000000000000 - -16.8000000000000007 - 11.2000000000000011 - 0.0000000000000000 - 0.0000000000000000 - 21.6000000000000014 - -14.4000000000000021 - 0.0000000000000000 - 0.0000000000000000 - -9.0000000000000018 - 6.0000000000000009 - 0.0000000000000000 - 0.0000000000000000 - 1.2000000000000002 - -0.8000000000000000 - -109.8000000000000114 - 290.3999999999999773 - -217.7999999999999829 - 48.3999999999999986 - 147.5999999999999943 - -388.8000000000000114 - 291.6000000000000227 - -64.7999999999999972 - -61.5000000000000000 - 162.0000000000000000 - -121.5000000000000000 - 27.0000000000000000 - 8.1999999999999993 - -21.6000000000000014 - 16.1999999999999993 - -3.6000000000000001 - 329.4000000000000341 - -871.2000000000000455 - 653.3999999999999773 - -145.1999999999999886 - -442.8000000000000114 - 1166.4000000000000909 - -874.8000000000000682 - 194.4000000000000341 - 184.5000000000000000 - -486.0000000000000568 - 364.5000000000000000 - -81.0000000000000000 - -24.6000000000000014 - 64.8000000000000114 - -48.6000000000000085 - 10.8000000000000007 - -247.0499999999999829 - 653.4000000000000909 - -490.0499999999999545 - 108.9000000000000057 - 332.0999999999999659 - -874.8000000000000682 - 656.1000000000000227 - -145.8000000000000114 - -138.3750000000000000 - 364.5000000000000568 - -273.3750000000000000 - 60.7500000000000000 - 18.4499999999999993 - -48.6000000000000085 - 36.4500000000000028 - -8.0999999999999996 - 54.8999999999999986 - -145.1999999999999886 - 108.9000000000000057 - -24.1999999999999993 - -73.7999999999999972 - 194.4000000000000341 - -145.8000000000000114 - 32.3999999999999986 - 30.7500000000000000 - -81.0000000000000000 - 60.7500000000000000 - -13.5000000000000000 - -4.0999999999999996 - 10.8000000000000007 - -8.0999999999999996 - 1.7999999999999998 - -13.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 18.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -7.5000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 39.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -54.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 22.5000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -29.2500000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 40.5000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -16.8750000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2500000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 6.5000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -9.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 3.7500000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.5000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1947.2000000000000455 - -1742.3999999999998636 - 508.1999999999999318 - -48.3999999999999986 - -2606.4000000000005457 - 2332.8000000000001819 - -680.3999999999999773 - 64.8000000000000114 - 1086.0000000000000000 - -972.0000000000001137 - 283.5000000000000000 - -27.0000000000000036 - -144.8000000000000114 - 129.5999999999999943 - -37.7999999999999972 - 3.6000000000000005 - -5841.6000000000003638 - 5227.2000000000007276 - -1524.5999999999999091 - 145.1999999999999886 - 7819.2000000000007276 - -6998.4000000000005457 - 2041.2000000000002728 - -194.4000000000000341 - -3258.0000000000004547 - 2916.0000000000004547 - -850.5000000000000000 - 81.0000000000000142 - 434.4000000000000341 - -388.8000000000000114 - 113.4000000000000057 - -10.8000000000000007 - 4381.2000000000007276 - -3920.4000000000005457 - 1143.4500000000000455 - -108.9000000000000057 - -5864.4000000000014552 - 5248.8000000000001819 - -1530.9000000000000909 - 145.8000000000000114 - 2443.5000000000004547 - -2187.0000000000004547 - 637.8750000000000000 - -60.7500000000000142 - -325.8000000000000114 - 291.6000000000000227 - -85.0500000000000114 - 8.1000000000000014 - -973.5999999999999091 - 871.2000000000000455 - -254.0999999999999943 - 24.2000000000000028 - 1303.2000000000000455 - -1166.4000000000000909 - 340.2000000000000455 - -32.4000000000000057 - -543.0000000000000000 - 486.0000000000000568 - -141.7500000000000000 - 13.5000000000000000 - 72.4000000000000057 - -64.8000000000000114 - 18.8999999999999986 - -1.8000000000000000 - 11.1999999999999993 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -14.4000000000000021 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 6.0000000000000009 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.8000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -33.6000000000000014 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 43.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -18.0000000000000036 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 25.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -32.4000000000000057 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 13.5000000000000018 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -5.6000000000000005 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 7.2000000000000011 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.0000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.1999999999999993 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -14.4000000000000021 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 6.0000000000000009 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.8000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -33.6000000000000014 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 43.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -18.0000000000000036 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 25.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -32.4000000000000057 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 13.5000000000000018 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -5.6000000000000005 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 7.2000000000000011 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.0000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.1999999999999993 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -14.4000000000000021 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 6.0000000000000009 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.8000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -33.6000000000000014 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 43.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -18.0000000000000036 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 25.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -32.4000000000000057 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 13.5000000000000018 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -5.6000000000000005 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 7.2000000000000011 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.0000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.1999999999999993 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -14.4000000000000021 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 6.0000000000000009 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.8000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -33.6000000000000014 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 43.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -18.0000000000000036 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 25.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -32.4000000000000057 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 13.5000000000000018 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -5.6000000000000005 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 7.2000000000000011 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.0000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.1999999999999993 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -14.4000000000000021 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 6.0000000000000009 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.8000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -33.6000000000000014 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 43.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -18.0000000000000036 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 25.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -32.4000000000000057 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 13.5000000000000018 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -5.6000000000000005 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 7.2000000000000011 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.0000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.2000000000000002 - -0.8000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.6000000000000005 - 2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.7000000000000002 - -1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6000000000000001 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.8999999999999998 - -1.1999999999999997 - 0.8999999999999996 - -0.1999999999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.6999999999999993 - 3.5999999999999988 - -2.6999999999999988 - 0.5999999999999998 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.0249999999999995 - -2.6999999999999988 - 2.0249999999999995 - -0.4499999999999998 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4499999999999999 - 0.5999999999999998 - -0.4499999999999998 - 0.1000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.5000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.5000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.1250000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2500000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -7.5999999999999961 - 7.1999999999999966 - -2.0999999999999992 - 0.1999999999999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 22.7999999999999901 - -21.5999999999999908 - 6.2999999999999972 - -0.5999999999999998 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -17.0999999999999943 - 16.1999999999999922 - -4.7249999999999979 - 0.4499999999999998 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 3.7999999999999985 - -3.5999999999999988 - 1.0499999999999998 - -0.1000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.2000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.2000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.2000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.2000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.2000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -25.2000000000000028 - 16.8000000000000007 - 0.0000000000000000 - 0.0000000000000000 - 16.8000000000000007 - -11.2000000000000011 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 32.4000000000000057 - -21.6000000000000014 - 0.0000000000000000 - 0.0000000000000000 - -21.6000000000000014 - 14.4000000000000021 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -13.5000000000000000 - 9.0000000000000018 - 0.0000000000000000 - 0.0000000000000000 - 9.0000000000000018 - -6.0000000000000009 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.8000000000000000 - -1.2000000000000002 - 0.0000000000000000 - 0.0000000000000000 - -1.2000000000000002 - 0.8000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 82.3499999999999943 - -217.8000000000000114 - 163.3499999999999943 - -36.2999999999999972 - -54.8999999999999986 - 145.1999999999999886 - -108.9000000000000057 - 24.1999999999999993 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -110.6999999999999886 - 291.6000000000000227 - -218.6999999999999886 - 48.6000000000000085 - 73.7999999999999972 - -194.4000000000000341 - 145.8000000000000114 - -32.3999999999999986 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 46.1250000000000000 - -121.5000000000000000 - 91.1250000000000000 - -20.2500000000000036 - -30.7500000000000000 - 81.0000000000000000 - -60.7500000000000000 - 13.5000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -6.1500000000000004 - 16.2000000000000028 - -12.1500000000000021 - 2.7000000000000002 - 4.0999999999999996 - -10.8000000000000007 - 8.0999999999999996 - -1.7999999999999998 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 9.7500000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -6.5000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -13.5000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 9.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.6250000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.7500000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.7500000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.5000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1460.4000000000000909 - 1306.8000000000001819 - -381.1499999999999773 - 36.2999999999999972 - 973.5999999999999091 - -871.2000000000000455 - 254.0999999999999943 - -24.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1954.8000000000001819 - -1749.6000000000001364 - 510.3000000000000114 - -48.6000000000000085 - -1303.2000000000000455 - 1166.4000000000000909 - -340.2000000000000455 - 32.4000000000000057 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -814.5000000000001137 - 729.0000000000001137 - -212.6250000000000000 - 20.2500000000000036 - 543.0000000000000000 - -486.0000000000000568 - 141.7500000000000000 - -13.5000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 108.5999999999999943 - -97.2000000000000028 - 28.3500000000000014 - -2.7000000000000002 - -72.4000000000000057 - 64.8000000000000114 - -18.8999999999999986 - 1.8000000000000000 - 21.4975431383220581 - -14.6574157761286745 - 3.2979185496289514 - -0.2442902629354779 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -72.8926294149661658 - 43.9722473283860253 - -9.8937556488868559 - 0.7328707888064337 - 48.5950862766441105 - -29.3148315522573526 - 6.5958370992579045 - -0.4885805258709559 - -28.6633908510960751 - 19.5432210348382327 - -4.3972247328386018 - 0.3257203505806372 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 96.7901725532882438 - -58.6296631045147052 - 13.1916741985158090 - -0.9771610517419118 - -64.5267817021921530 - 39.0864420696764654 - -8.7944494656772036 - 0.6514407011612744 - 11.9430795212900307 - -8.1430087645159297 - 1.8321769720160841 - -0.1357168127419322 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -40.3292385638700992 - 24.4290262935477962 - -5.4965309160482541 - 0.4071504382257967 - 26.8861590425800614 - -16.2860175290318594 - 3.6643539440321682 - -0.2714336254838643 - -1.5924106028386709 - 1.0857345019354574 - -0.2442902629354779 - 0.0180955750322576 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.3772318085160133 - -3.2572035058063733 - 0.7328707888064341 - -0.0542867250967729 - -3.5848212056773412 - 2.1714690038709143 - -0.4885805258709557 - 0.0361911500645152 - 0.1221451314677389 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -8.7664353944032172 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.8442902629354787 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1628601752903186 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.2885805258709571 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -7.5257203505806380 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0678584063709661 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.7035752191128983 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 3.1357168127419324 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0090477875161288 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.6271433625483865 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4180955750322576 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1221451314677389 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -8.7664353944032172 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.8442902629354787 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1628601752903186 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.2885805258709571 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -7.5257203505806380 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0678584063709661 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.7035752191128983 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 3.1357168127419324 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0090477875161288 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.6271433625483865 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4180955750322576 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1221451314677389 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -8.7664353944032172 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.8442902629354787 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1628601752903186 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.2885805258709571 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -7.5257203505806380 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0678584063709661 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.7035752191128983 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 3.1357168127419324 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0090477875161288 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.6271433625483865 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4180955750322576 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.1221451314677389 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -8.7664353944032172 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.8442902629354787 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.1628601752903186 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.2885805258709571 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -7.5257203505806380 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0678584063709661 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.7035752191128983 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 3.1357168127419324 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.0090477875161288 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.6271433625483865 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.4180955750322576 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 33.6000000000000014 - -22.4000000000000057 - 0.0000000000000000 - 0.0000000000000000 - -100.8000000000000114 - 67.2000000000000171 - 0.0000000000000000 - 0.0000000000000000 - 75.6000000000000085 - -50.4000000000000057 - 0.0000000000000000 - 0.0000000000000000 - -16.8000000000000007 - 11.2000000000000011 - 0.0000000000000000 - 0.0000000000000000 - -43.2000000000000028 - 28.8000000000000043 - 0.0000000000000000 - 0.0000000000000000 - 129.6000000000000227 - -86.4000000000000057 - 0.0000000000000000 - 0.0000000000000000 - -97.2000000000000171 - 64.8000000000000114 - 0.0000000000000000 - 0.0000000000000000 - 21.6000000000000014 - -14.4000000000000021 - 0.0000000000000000 - 0.0000000000000000 - 18.0000000000000000 - -12.0000000000000018 - 0.0000000000000000 - 0.0000000000000000 - -54.0000000000000071 - 36.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 40.5000000000000000 - -27.0000000000000036 - 0.0000000000000000 - 0.0000000000000000 - -9.0000000000000018 - 6.0000000000000009 - 0.0000000000000000 - 0.0000000000000000 - -2.4000000000000004 - 1.6000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 7.2000000000000011 - -4.8000000000000007 - 0.0000000000000000 - 0.0000000000000000 - -5.4000000000000004 - 3.6000000000000005 - 0.0000000000000000 - 0.0000000000000000 - 1.2000000000000002 - -0.8000000000000000 - -109.7999999999999829 - 290.3999999999999773 - -217.7999999999999829 - 48.3999999999999986 - 329.4000000000000341 - -871.2000000000000455 - 653.4000000000000909 - -145.1999999999999886 - -247.0499999999999829 - 653.4000000000000909 - -490.0499999999999545 - 108.9000000000000057 - 54.8999999999999986 - -145.1999999999999886 - 108.9000000000000057 - -24.1999999999999993 - 147.5999999999999943 - -388.8000000000000114 - 291.6000000000000227 - -64.8000000000000114 - -442.8000000000000114 - 1166.4000000000000909 - -874.8000000000000682 - 194.4000000000000341 - 332.0999999999999659 - -874.8000000000000682 - 656.1000000000000227 - -145.8000000000000114 - -73.7999999999999972 - 194.4000000000000341 - -145.8000000000000114 - 32.3999999999999986 - -61.4999999999999929 - 162.0000000000000284 - -121.5000000000000000 - 27.0000000000000000 - 184.5000000000000000 - -486.0000000000000568 - 364.5000000000000000 - -81.0000000000000000 - -138.3750000000000000 - 364.5000000000000568 - -273.3750000000000000 - 60.7500000000000000 - 30.7500000000000000 - -81.0000000000000000 - 60.7500000000000000 - -13.5000000000000000 - 8.1999999999999993 - -21.6000000000000014 - 16.1999999999999993 - -3.6000000000000001 - -24.6000000000000014 - 64.8000000000000114 - -48.6000000000000085 - 10.8000000000000007 - 18.4499999999999993 - -48.6000000000000085 - 36.4500000000000028 - -8.0999999999999996 - -4.0999999999999996 - 10.8000000000000007 - -8.0999999999999996 - 1.7999999999999998 - -13.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 39.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -29.2500000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 6.5000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 18.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -54.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 40.5000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -9.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -7.5000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 22.5000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -16.8750000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 3.7500000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2500000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.5000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1947.2000000000000455 - -1742.3999999999998636 - 508.2000000000000455 - -48.3999999999999986 - -5841.6000000000003638 - 5227.2000000000007276 - -1524.5999999999999091 - 145.1999999999999886 - 4381.2000000000007276 - -3920.4000000000000909 - 1143.4500000000000455 - -108.9000000000000199 - -973.5999999999999091 - 871.2000000000000455 - -254.0999999999999943 - 24.2000000000000028 - -2606.4000000000005457 - 2332.8000000000001819 - -680.3999999999999773 - 64.8000000000000114 - 7819.2000000000007276 - -6998.4000000000005457 - 2041.2000000000000455 - -194.4000000000000341 - -5864.4000000000014552 - 5248.8000000000001819 - -1530.9000000000000909 - 145.8000000000000114 - 1303.2000000000000455 - -1166.4000000000000909 - 340.2000000000000455 - -32.4000000000000057 - 1086.0000000000000000 - -972.0000000000001137 - 283.5000000000000000 - -27.0000000000000036 - -3258.0000000000004547 - 2916.0000000000004547 - -850.5000000000000000 - 81.0000000000000142 - 2443.5000000000004547 - -2187.0000000000004547 - 637.8750000000000000 - -60.7500000000000142 - -543.0000000000000000 - 486.0000000000000568 - -141.7500000000000000 - 13.5000000000000000 - -144.8000000000000114 - 129.5999999999999943 - -37.7999999999999972 - 3.6000000000000005 - 434.4000000000000341 - -388.8000000000000114 - 113.4000000000000057 - -10.8000000000000007 - -325.8000000000000114 - 291.6000000000000227 - -85.0500000000000114 - 8.1000000000000014 - 72.4000000000000057 - -64.8000000000000114 - 18.8999999999999986 - -1.8000000000000000 - 11.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -33.6000000000000085 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 25.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -5.6000000000000005 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -14.4000000000000021 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 43.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -32.4000000000000057 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 7.2000000000000011 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 6.0000000000000009 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -18.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 13.5000000000000018 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.0000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.8000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -33.6000000000000085 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 25.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -5.6000000000000005 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -14.4000000000000021 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 43.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -32.4000000000000057 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 7.2000000000000011 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 6.0000000000000009 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -18.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 13.5000000000000018 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.0000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.8000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -33.6000000000000085 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 25.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -5.6000000000000005 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -14.4000000000000021 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 43.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -32.4000000000000057 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 7.2000000000000011 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 6.0000000000000009 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -18.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 13.5000000000000018 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.0000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.8000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -33.6000000000000085 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 25.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -5.6000000000000005 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -14.4000000000000021 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 43.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -32.4000000000000057 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 7.2000000000000011 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 6.0000000000000009 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -18.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 13.5000000000000018 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.0000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.8000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 11.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -33.6000000000000085 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 25.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -5.6000000000000005 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -14.4000000000000021 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 43.2000000000000028 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -32.4000000000000057 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 7.2000000000000011 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 6.0000000000000009 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -18.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 13.5000000000000018 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.0000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.8000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.9000000000000000 - 0.6000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.6000000000000001 - -0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.6749999999999999 - 0.8999999999999997 - -0.6749999999999997 - 0.1499999999999999 - 0.4499999999999999 - -0.5999999999999998 - 0.4499999999999998 - -0.1000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3750000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2500000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.6999999999999975 - -5.3999999999999968 - 1.5749999999999993 - -0.1499999999999999 - -3.7999999999999985 - 3.5999999999999988 - -1.0499999999999998 - 0.1000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.3000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.2000000000000002 - -0.8000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -3.6000000000000005 - 2.4000000000000004 - 0.0000000000000000 - 0.0000000000000000 - 2.7000000000000002 - -1.8000000000000003 - 0.0000000000000000 - 0.0000000000000000 - -0.6000000000000001 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.8999999999999998 - -1.1999999999999997 - 0.8999999999999996 - -0.1999999999999999 - -2.6999999999999993 - 3.5999999999999988 - -2.6999999999999988 - 0.5999999999999998 - 2.0249999999999995 - -2.6999999999999988 - 2.0249999999999995 - -0.4499999999999998 - -0.4499999999999999 - 0.5999999999999998 - -0.4499999999999998 - 0.1000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.5000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.5000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 1.1250000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2500000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -7.5999999999999961 - 7.1999999999999966 - -2.0999999999999992 - 0.1999999999999999 - 22.7999999999999901 - -21.5999999999999908 - 6.2999999999999972 - -0.5999999999999998 - -17.0999999999999943 - 16.1999999999999922 - -4.7249999999999979 - 0.4499999999999998 - 3.7999999999999985 - -3.5999999999999988 - 1.0499999999999998 - -0.1000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.2000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.2000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.2000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.2000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.4000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -1.2000000000000002 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.9000000000000001 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -0.2000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -# piHH - -6 -0.0 -4.0 -0.0 -4.0 -0.0 -9.0 - - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 3.3727308659999999 - -2.2484872439999997 - 0.0000000000000000 - 0.0000000000000000 - -2.2484872439999997 - 1.4989914959999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.2484872439999997 - 1.4989914959999999 - 0.0000000000000000 - 0.0000000000000000 - 1.4989914959999999 - -0.9993276639999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.4969744879999993 - 13.4909234639999980 - -10.1181925979999985 - 2.2484872439999997 - 2.9979829919999998 - -8.9939489759999987 - 6.7454617319999990 - -1.4989914959999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.9979829919999998 - -8.9939489759999987 - 6.7454617319999990 - -1.4989914959999999 - -1.9986553279999999 - 5.9959659839999997 - -4.4969744879999993 - 0.9993276639999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.4969744879999993 - 2.9979829919999998 - 0.0000000000000000 - 0.0000000000000000 - 13.4909234639999980 - -8.9939489759999987 - 0.0000000000000000 - 0.0000000000000000 - -10.1181925979999985 - 6.7454617319999990 - 0.0000000000000000 - 0.0000000000000000 - 2.2484872439999997 - -1.4989914959999999 - 0.0000000000000000 - 0.0000000000000000 - 2.9979829919999998 - -1.9986553279999999 - 0.0000000000000000 - 0.0000000000000000 - -8.9939489759999987 - 5.9959659839999997 - 0.0000000000000000 - 0.0000000000000000 - 6.7454617319999990 - -4.4969744879999993 - 0.0000000000000000 - 0.0000000000000000 - -1.4989914959999999 - 0.9993276639999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.9959659839999997 - -17.9878979519999973 - 13.4909234639999980 - -2.9979829919999998 - -17.9878979519999973 - 53.9636938559999919 - -40.4727703919999939 - 8.9939489759999987 - 13.4909234639999980 - -40.4727703919999939 - 30.3545777939999937 - -6.7454617319999990 - -2.9979829919999998 - 8.9939489759999987 - -6.7454617319999990 - 1.4989914959999999 - -3.9973106559999998 - 11.9919319679999994 - -8.9939489759999987 - 1.9986553279999999 - 11.9919319679999994 - -35.9757959039999946 - 26.9818469279999960 - -5.9959659839999997 - -8.9939489759999987 - 26.9818469279999960 - -20.2363851959999970 - 4.4969744879999993 - 1.9986553279999999 - -5.9959659839999997 - 4.4969744879999993 - -0.9993276639999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -4.4969744879999993 - 2.9979829919999998 - 0.0000000000000000 - 0.0000000000000000 - 2.9979829919999998 - -1.9986553279999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 13.4909234639999980 - -8.9939489759999987 - 0.0000000000000000 - 0.0000000000000000 - -8.9939489759999987 - 5.9959659839999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -10.1181925979999985 - 6.7454617319999990 - 0.0000000000000000 - 0.0000000000000000 - 6.7454617319999990 - -4.4969744879999993 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 2.2484872439999997 - -1.4989914959999999 - 0.0000000000000000 - 0.0000000000000000 - -1.4989914959999999 - 0.9993276639999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.9959659839999997 - -17.9878979519999973 - 13.4909234639999980 - -2.9979829919999998 - -3.9973106559999998 - 11.9919319679999994 - -8.9939489759999987 - 1.9986553279999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -17.9878979519999973 - 53.9636938559999919 - -40.4727703919999939 - 8.9939489759999987 - 11.9919319679999994 - -35.9757959039999946 - 26.9818469279999960 - -5.9959659839999997 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 13.4909234639999980 - -40.4727703919999939 - 30.3545777939999937 - -6.7454617319999990 - -8.9939489759999987 - 26.9818469279999960 - -20.2363851959999970 - 4.4969744879999993 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -2.9979829919999998 - 8.9939489759999987 - -6.7454617319999990 - 1.4989914959999999 - 1.9986553279999999 - -5.9959659839999997 - 4.4969744879999993 - -0.9993276639999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 5.9959659839999997 - -3.9973106559999998 - 0.0000000000000000 - 0.0000000000000000 - -17.9878979519999973 - 11.9919319679999994 - 0.0000000000000000 - 0.0000000000000000 - 13.4909234639999980 - -8.9939489759999987 - 0.0000000000000000 - 0.0000000000000000 - -2.9979829919999998 - 1.9986553279999999 - 0.0000000000000000 - 0.0000000000000000 - -17.9878979519999973 - 11.9919319679999994 - 0.0000000000000000 - 0.0000000000000000 - 53.9636938559999919 - -35.9757959039999946 - 0.0000000000000000 - 0.0000000000000000 - -40.4727703919999939 - 26.9818469279999960 - 0.0000000000000000 - 0.0000000000000000 - 8.9939489759999987 - -5.9959659839999997 - 0.0000000000000000 - 0.0000000000000000 - 13.4909234639999980 - -8.9939489759999987 - 0.0000000000000000 - 0.0000000000000000 - -40.4727703919999939 - 26.9818469279999960 - 0.0000000000000000 - 0.0000000000000000 - 30.3545777939999937 - -20.2363851959999970 - 0.0000000000000000 - 0.0000000000000000 - -6.7454617319999990 - 4.4969744879999993 - 0.0000000000000000 - 0.0000000000000000 - -2.9979829919999998 - 1.9986553279999999 - 0.0000000000000000 - 0.0000000000000000 - 8.9939489759999987 - -5.9959659839999997 - 0.0000000000000000 - 0.0000000000000000 - -6.7454617319999990 - 4.4969744879999993 - 0.0000000000000000 - 0.0000000000000000 - 1.4989914959999999 - -0.9993276639999999 - -7.9946213120000005 - 23.9838639359999988 - -17.9878979519999973 - 3.9973106559999998 - 23.9838639359999988 - -71.9515918079999892 - 53.9636938559999919 - -11.9919319679999994 - -17.9878979519999973 - 53.9636938559999919 - -40.4727703919999939 - 8.9939489759999987 - 3.9973106559999998 - -11.9919319679999994 - 8.9939489759999987 - -1.9986553279999999 - 23.9838639359999988 - -71.9515918079999892 - 53.9636938559999919 - -11.9919319679999994 - -71.9515918079999892 - 215.8547754239999108 - -161.8910815680000042 - 35.9757959039999946 - 53.9636938559999919 - -161.8910815679999473 - 121.4183111759999605 - -26.9818469279999960 - -11.9919319679999994 - 35.9757959039999946 - -26.9818469279999960 - 5.9959659839999997 - -17.9878979519999973 - 53.9636938559999919 - -40.4727703919999939 - 8.9939489759999987 - 53.9636938559999919 - -161.8910815679999473 - 121.4183111759999889 - -26.9818469279999960 - -40.4727703919999939 - 121.4183111759999747 - -91.0637333819999810 - 20.2363851959999970 - 8.9939489759999987 - -26.9818469279999960 - 20.2363851959999970 - -4.4969744879999993 - 3.9973106559999998 - -11.9919319679999994 - 8.9939489759999987 - -1.9986553279999999 - -11.9919319679999994 - 35.9757959039999946 - -26.9818469279999960 - 5.9959659839999997 - 8.9939489759999987 - -26.9818469279999960 - 20.2363851959999970 - -4.4969744879999993 - -1.9986553279999999 - 5.9959659839999997 - -4.4969744879999993 - 0.9993276639999999 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - 0.0000000000000000 - -# Tij - -6 -0.0 -4.0 -0.0 -4.0 -0.0 -9.0 - - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -2.6355000000 - 1.7570000000 - 0.0000000000 - 0.0000000000 - 6.3252000000 - -4.2168000000 - 0.0000000000 - 0.0000000000 - -4.7439000000 - 3.1626000000 - 0.0000000000 - 0.0000000000 - 1.0542000000 - -0.7028000000 - 0.0000000000 - 0.0000000000 - 6.3252000000 - -4.2168000000 - 0.0000000000 - 0.0000000000 - -15.1804800000 - 10.1203200000 - 0.0000000000 - 0.0000000000 - 11.3853600000 - -7.5902400000 - 0.0000000000 - 0.0000000000 - -2.5300800000 - 1.6867200000 - 0.0000000000 - 0.0000000000 - -4.7439000000 - 3.1626000000 - 0.0000000000 - 0.0000000000 - 11.3853600000 - -7.5902400000 - 0.0000000000 - 0.0000000000 - -8.5390200000 - 5.6926800000 - 0.0000000000 - 0.0000000000 - 1.8975600000 - -1.2650400000 - 0.0000000000 - 0.0000000000 - 1.0542000000 - -0.7028000000 - 0.0000000000 - 0.0000000000 - -2.5300800000 - 1.6867200000 - 0.0000000000 - 0.0000000000 - 1.8975600000 - -1.2650400000 - 0.0000000000 - 0.0000000000 - -0.4216800000 - 0.2811200000 - 3.0080000000 - -9.3276000000 - 6.9957000000 - -1.5546000000 - -7.2192000000 - 22.3862400000 - -16.7896800000 - 3.7310400000 - 5.4144000000 - -16.7896800000 - 12.5922600000 - -2.7982800000 - -1.2032000000 - 3.7310400000 - -2.7982800000 - 0.6218400000 - -7.2192000000 - 22.3862400000 - -16.7896800000 - 3.7310400000 - 17.3260800000 - -53.7269760000 - 40.2952320000 - -8.9544960000 - -12.9945600000 - 40.2952320000 - -30.2214240000 - 6.7158720000 - 2.8876800000 - -8.9544960000 - 6.7158720000 - -1.4924160000 - 5.4144000000 - -16.7896800000 - 12.5922600000 - -2.7982800000 - -12.9945600000 - 40.2952320000 - -30.2214240000 - 6.7158720000 - 9.7459200000 - -30.2214240000 - 22.6660680000 - -5.0369040000 - -2.1657600000 - 6.7158720000 - -5.0369040000 - 1.1193120000 - -1.2032000000 - 3.7310400000 - -2.7982800000 - 0.6218400000 - 2.8876800000 - -8.9544960000 - 6.7158720000 - -1.4924160000 - -2.1657600000 - 6.7158720000 - -5.0369040000 - 1.1193120000 - 0.4812800000 - -1.4924160000 - 1.1193120000 - -0.2487360000 - -0.1012000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2428800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1821600000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2428800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.5829120000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.4371840000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1821600000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.4371840000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.3278880000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1012000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2428800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1821600000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2428800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.5829120000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.4371840000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1821600000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.4371840000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.3278880000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1012000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2428800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1821600000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2428800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.5829120000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.4371840000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1821600000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.4371840000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.3278880000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1012000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2428800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1821600000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2428800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.5829120000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.4371840000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1821600000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.4371840000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.3278880000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1012000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2428800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1821600000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2428800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.5829120000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.4371840000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1821600000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.4371840000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.3278880000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1012000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2428800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1821600000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2428800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.5829120000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.4371840000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1821600000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.4371840000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.3278880000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1012000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2428800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1821600000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2428800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.5829120000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.4371840000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1821600000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.4371840000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.3278880000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 14.2317000000 - -9.4878000000 - 0.0000000000 - 0.0000000000 - -18.9756000000 - 12.6504000000 - 0.0000000000 - 0.0000000000 - 7.9065000000 - -5.2710000000 - 0.0000000000 - 0.0000000000 - -1.0542000000 - 0.7028000000 - 0.0000000000 - 0.0000000000 - -34.1560800000 - 22.7707200000 - 0.0000000000 - 0.0000000000 - 45.5414400000 - -30.3609600000 - 0.0000000000 - 0.0000000000 - -18.9756000000 - 12.6504000000 - 0.0000000000 - 0.0000000000 - 2.5300800000 - -1.6867200000 - 0.0000000000 - 0.0000000000 - 25.6170600000 - -17.0780400000 - 0.0000000000 - 0.0000000000 - -34.1560800000 - 22.7707200000 - 0.0000000000 - 0.0000000000 - 14.2317000000 - -9.4878000000 - 0.0000000000 - 0.0000000000 - -1.8975600000 - 1.2650400000 - 0.0000000000 - 0.0000000000 - -5.6926800000 - 3.7951200000 - 0.0000000000 - 0.0000000000 - 7.5902400000 - -5.0601600000 - 0.0000000000 - 0.0000000000 - -3.1626000000 - 2.1084000000 - 0.0000000000 - 0.0000000000 - 0.4216800000 - -0.2811200000 - -16.2432000000 - 50.3690400000 - -37.7767800000 - 8.3948400000 - 21.6576000000 - -67.1587200000 - 50.3690400000 - -11.1931200000 - -9.0240000000 - 27.9828000000 - -20.9871000000 - 4.6638000000 - 1.2032000000 - -3.7310400000 - 2.7982800000 - -0.6218400000 - 38.9836800000 - -120.8856960000 - 90.6642720000 - -20.1476160000 - -51.9782400000 - 161.1809280000 - -120.8856960000 - 26.8634880000 - 21.6576000000 - -67.1587200000 - 50.3690400000 - -11.1931200000 - -2.8876800000 - 8.9544960000 - -6.7158720000 - 1.4924160000 - -29.2377600000 - 90.6642720000 - -67.9982040000 - 15.1107120000 - 38.9836800000 - -120.8856960000 - 90.6642720000 - -20.1476160000 - -16.2432000000 - 50.3690400000 - -37.7767800000 - 8.3948400000 - 2.1657600000 - -6.7158720000 - 5.0369040000 - -1.1193120000 - 6.4972800000 - -20.1476160000 - 15.1107120000 - -3.3579360000 - -8.6630400000 - 26.8634880000 - -20.1476160000 - 4.4772480000 - 3.6096000000 - -11.1931200000 - 8.3948400000 - -1.8655200000 - -0.4812800000 - 1.4924160000 - -1.1193120000 - 0.2487360000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.3036000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 1.7487360000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.9836640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.3036000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 1.7487360000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.9836640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.3036000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 1.7487360000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.9836640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.3036000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 1.7487360000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.9836640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.3036000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 1.7487360000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.9836640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.3036000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 1.7487360000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.9836640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.3036000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 1.7487360000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.9836640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 14.2317000000 - -9.4878000000 - 0.0000000000 - 0.0000000000 - -34.1560800000 - 22.7707200000 - 0.0000000000 - 0.0000000000 - 25.6170600000 - -17.0780400000 - 0.0000000000 - 0.0000000000 - -5.6926800000 - 3.7951200000 - 0.0000000000 - 0.0000000000 - -18.9756000000 - 12.6504000000 - 0.0000000000 - 0.0000000000 - 45.5414400000 - -30.3609600000 - 0.0000000000 - 0.0000000000 - -34.1560800000 - 22.7707200000 - 0.0000000000 - 0.0000000000 - 7.5902400000 - -5.0601600000 - 0.0000000000 - 0.0000000000 - 7.9065000000 - -5.2710000000 - 0.0000000000 - 0.0000000000 - -18.9756000000 - 12.6504000000 - 0.0000000000 - 0.0000000000 - 14.2317000000 - -9.4878000000 - 0.0000000000 - 0.0000000000 - -3.1626000000 - 2.1084000000 - 0.0000000000 - 0.0000000000 - -1.0542000000 - 0.7028000000 - 0.0000000000 - 0.0000000000 - 2.5300800000 - -1.6867200000 - 0.0000000000 - 0.0000000000 - -1.8975600000 - 1.2650400000 - 0.0000000000 - 0.0000000000 - 0.4216800000 - -0.2811200000 - -16.2432000000 - 50.3690400000 - -37.7767800000 - 8.3948400000 - 38.9836800000 - -120.8856960000 - 90.6642720000 - -20.1476160000 - -29.2377600000 - 90.6642720000 - -67.9982040000 - 15.1107120000 - 6.4972800000 - -20.1476160000 - 15.1107120000 - -3.3579360000 - 21.6576000000 - -67.1587200000 - 50.3690400000 - -11.1931200000 - -51.9782400000 - 161.1809280000 - -120.8856960000 - 26.8634880000 - 38.9836800000 - -120.8856960000 - 90.6642720000 - -20.1476160000 - -8.6630400000 - 26.8634880000 - -20.1476160000 - 4.4772480000 - -9.0240000000 - 27.9828000000 - -20.9871000000 - 4.6638000000 - 21.6576000000 - -67.1587200000 - 50.3690400000 - -11.1931200000 - -16.2432000000 - 50.3690400000 - -37.7767800000 - 8.3948400000 - 3.6096000000 - -11.1931200000 - 8.3948400000 - -1.8655200000 - 1.2032000000 - -3.7310400000 - 2.7982800000 - -0.6218400000 - -2.8876800000 - 8.9544960000 - -6.7158720000 - 1.4924160000 - 2.1657600000 - -6.7158720000 - 5.0369040000 - -1.1193120000 - -0.4812800000 - 1.4924160000 - -1.1193120000 - 0.2487360000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.9836640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 1.7487360000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.3036000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.9836640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 1.7487360000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.3036000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.9836640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 1.7487360000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.3036000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.9836640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 1.7487360000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.3036000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.9836640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 1.7487360000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.3036000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.9836640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 1.7487360000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.3036000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.9836640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 1.7487360000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.3115520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.3036000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.7286400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.5464800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0404800000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0971520000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0728640000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -76.8511800000 - 51.2341200000 - 0.0000000000 - 0.0000000000 - 102.4682400000 - -68.3121600000 - 0.0000000000 - 0.0000000000 - -42.6951000000 - 28.4634000000 - 0.0000000000 - 0.0000000000 - 5.6926800000 - -3.7951200000 - 0.0000000000 - 0.0000000000 - 102.4682400000 - -68.3121600000 - 0.0000000000 - 0.0000000000 - -136.6243200000 - 91.0828800000 - 0.0000000000 - 0.0000000000 - 56.9268000000 - -37.9512000000 - 0.0000000000 - 0.0000000000 - -7.5902400000 - 5.0601600000 - 0.0000000000 - 0.0000000000 - -42.6951000000 - 28.4634000000 - 0.0000000000 - 0.0000000000 - 56.9268000000 - -37.9512000000 - 0.0000000000 - 0.0000000000 - -23.7195000000 - 15.8130000000 - 0.0000000000 - 0.0000000000 - 3.1626000000 - -2.1084000000 - 0.0000000000 - 0.0000000000 - 5.6926800000 - -3.7951200000 - 0.0000000000 - 0.0000000000 - -7.5902400000 - 5.0601600000 - 0.0000000000 - 0.0000000000 - 3.1626000000 - -2.1084000000 - 0.0000000000 - 0.0000000000 - -0.4216800000 - 0.2811200000 - 87.7132800000 - -271.9928159999 - 203.9946120000 - -45.3321360000 - -116.9510400000 - 362.6570879999 - -271.9928159999 - 60.4428480000 - 48.7296000000 - -151.1071200000 - 113.3303400000 - -25.1845200000 - -6.4972800000 - 20.1476160000 - -15.1107120000 - 3.3579360000 - -116.9510400000 - 362.6570880000 - -271.9928160000 - 60.4428480000 - 155.9347200000 - -483.5427840000 - 362.6570880000 - -80.5904640000 - -64.9728000000 - 201.4761600000 - -151.1071200000 - 33.5793600000 - 8.6630400000 - -26.8634880000 - 20.1476160000 - -4.4772480000 - 48.7296000000 - -151.1071200000 - 113.3303400000 - -25.1845200000 - -64.9728000000 - 201.4761600000 - -151.1071200000 - 33.5793600000 - 27.0720000000 - -83.9484000000 - 62.9613000000 - -13.9914000000 - -3.6096000000 - 11.1931200000 - -8.3948400000 - 1.8655200000 - -6.4972800000 - 20.1476160000 - -15.1107120000 - 3.3579360000 - 8.6630400000 - -26.8634880000 - 20.1476160000 - -4.4772480000 - -3.6096000000 - 11.1931200000 - -8.3948400000 - 1.8655200000 - 0.4812800000 - -1.4924160000 - 1.1193120000 - -0.2487360000 - -2.9509920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 3.9346560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.6394400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 3.9346560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -5.2462080000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 2.1859200000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.6394400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 2.1859200000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.9108000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -2.9509920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 3.9346560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.6394400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 3.9346560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -5.2462080000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 2.1859200000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.6394400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 2.1859200000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.9108000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -2.9509920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 3.9346560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.6394400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 3.9346560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -5.2462080000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 2.1859200000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.6394400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 2.1859200000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.9108000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -2.9509920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 3.9346560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.6394400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 3.9346560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -5.2462080000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 2.1859200000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.6394400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 2.1859200000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.9108000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -2.9509920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 3.9346560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.6394400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 3.9346560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -5.2462080000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 2.1859200000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.6394400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 2.1859200000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.9108000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -2.9509920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 3.9346560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.6394400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 3.9346560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -5.2462080000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 2.1859200000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.6394400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 2.1859200000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.9108000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -2.9509920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 3.9346560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.6394400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 3.9346560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -5.2462080000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 2.1859200000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -1.6394400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 2.1859200000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.9108000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.2185920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.2914560000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.1214400000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - -0.0161920000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 - 0.0000000000 diff --git a/examples/USER/misc/drip/CH.rebo b/examples/USER/misc/drip/CH.rebo new file mode 120000 index 0000000000..c5a6a40100 --- /dev/null +++ b/examples/USER/misc/drip/CH.rebo @@ -0,0 +1 @@ +../../../../potentials/CH.rebo \ No newline at end of file diff --git a/examples/USER/misc/drip/in.CH_drip b/examples/USER/misc/drip/in.CH_drip index e7acd98bab..cf67fae639 100644 --- a/examples/USER/misc/drip/in.CH_drip +++ b/examples/USER/misc/drip/in.CH_drip @@ -12,7 +12,7 @@ read_data data.CH # potential pair_style hybrid/overlay drip rebo pair_coeff * * drip C.drip C NULL # only applies to species 1, i.e. C -pair_coeff * * rebo CH.airebo C H # species 1 is C and species 2 is H +pair_coeff * * rebo CH.rebo C H # species 1 is C and species 2 is H compute peratom all pe/atom diff --git a/examples/USER/misc/drip/in.C_drip b/examples/USER/misc/drip/in.C_drip index 5c277300ab..0b66d0b9f7 100644 --- a/examples/USER/misc/drip/in.C_drip +++ b/examples/USER/misc/drip/in.C_drip @@ -12,7 +12,7 @@ read_data data.C # potential pair_style hybrid/overlay drip rebo pair_coeff * * drip C.drip C -pair_coeff * * rebo CH.airebo C +pair_coeff * * rebo CH.rebo C compute peratom all pe/atom diff --git a/examples/USER/misc/drip/log.4May2019.g++.in.CH_drip b/examples/USER/misc/drip/log.30Apr19.CH_drip.g++.1 similarity index 60% rename from examples/USER/misc/drip/log.4May2019.g++.in.CH_drip rename to examples/USER/misc/drip/log.30Apr19.CH_drip.g++.1 index 466a8403ea..9aad2cd22f 100644 --- a/examples/USER/misc/drip/log.4May2019.g++.in.CH_drip +++ b/examples/USER/misc/drip/log.30Apr19.CH_drip.g++.1 @@ -1,4 +1,6 @@ -LAMMPS (29 Mar 2019) +LAMMPS (30 Apr 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) + using 1 OpenMP thread(s) per MPI task # Define unit set and class of atomic model units metal atom_style molecular @@ -16,16 +18,16 @@ read_data data.CH 0 = max # of 1-3 neighbors 0 = max # of 1-4 neighbors 1 = max # of special neighbors - special bonds CPU = 0.000221014 secs - read_data CPU = 0.00603986 secs + special bonds CPU = 0.000152826 secs + read_data CPU = 0.000973701 secs # potential pair_style hybrid/overlay drip rebo pair_coeff * * drip C.drip C NULL # only applies to species 1, i.e. C Reading potential file C.drip with DATE: 2019-04-19 -pair_coeff * * rebo CH.airebo C H # species 1 is C and species 2 is H -Reading potential file CH.airebo with DATE: 2011-10-25 +pair_coeff * * rebo CH.rebo C H # species 1 is C and species 2 is H +Reading potential file CH.rebo with DATE: 2018-7-3 compute peratom all pe/atom @@ -40,7 +42,7 @@ dump_modify id sort id # minimize energy minimize 1.0e-15 1.0e-15 100 100 -WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:168) +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -60,36 +62,36 @@ Neighbor list info ... bin: standard Per MPI rank memory allocation (min/avg/max) = 12.92 | 12.92 | 12.92 Mbytes Step Temp E_pair E_mol TotEng Press Volume - 0 0 -2883.1071 0 -2883.1071 366130.38 2779.5956 - 10 0 -3229.1892 0 -3229.1892 -19780.166 2779.5956 - 20 0 -3268.3574 0 -3268.3574 -15169.468 2779.5956 - 30 0 -3270.013 0 -3270.013 -19827.419 2779.5956 - 40 0 -3270.1341 0 -3270.1341 -20652.569 2779.5956 - 50 0 -3270.2612 0 -3270.2612 -22644.747 2779.5956 - 57 0 -3270.2819 0 -3270.2819 -23254.995 2779.5956 -Loop time of 3.06624 on 1 procs for 57 steps with 545 atoms + 0 0 -2884.3731 0 -2884.3731 366196.9 2779.5956 + 10 0 -3240.4807 0 -3240.4807 -20237.368 2779.5956 + 20 0 -3281.0671 0 -3281.0671 -13303.696 2779.5956 + 30 0 -3282.2176 0 -3282.2176 -19187.215 2779.5956 + 40 0 -3282.4004 0 -3282.4004 -21740.059 2779.5956 + 50 0 -3282.4755 0 -3282.4755 -22659.554 2779.5956 + 57 0 -3282.5011 0 -3282.5011 -23313.198 2779.5956 +Loop time of 3.04218 on 1 procs for 57 steps with 545 atoms -99.3% CPU use with 1 MPI tasks x no OpenMP threads +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = max force evaluations Energy initial, next-to-last, final = - -2883.10712045 -3270.28039929 -3270.28192718 - Force two-norm initial, final = 114.766 0.235428 - Force max component initial, final = 12.0195 0.0484347 - Final line search alpha, max atom move = 1 0.0484347 - Iterations, force evaluations = 57 101 + -2884.37307546 -3282.49993222 -3282.5010627 + Force two-norm initial, final = 115.342 0.193154 + Force max component initial, final = 12.0934 0.03617 + Final line search alpha, max atom move = 1 0.03617 + Iterations, force evaluations = 57 100 MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 3.0539 | 3.0539 | 3.0539 | 0.0 | 99.60 -Bond | 4.1485e-05 | 4.1485e-05 | 4.1485e-05 | 0.0 | 0.00 +Pair | 3.0291 | 3.0291 | 3.0291 | 0.0 | 99.57 +Bond | 1.8835e-05 | 1.8835e-05 | 1.8835e-05 | 0.0 | 0.00 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.0019863 | 0.0019863 | 0.0019863 | 0.0 | 0.06 -Output | 0.0070152 | 0.0070152 | 0.0070152 | 0.0 | 0.23 +Comm | 0.0016081 | 0.0016081 | 0.0016081 | 0.0 | 0.05 +Output | 0.0079796 | 0.0079796 | 0.0079796 | 0.0 | 0.26 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0.003321 | | | 0.11 +Other | | 0.003517 | | | 0.12 Nlocal: 545 ave 545 max 545 min Histogram: 1 0 0 0 0 0 0 0 0 0 diff --git a/examples/USER/misc/drip/log.30Apr19.CH_drip.g++.4 b/examples/USER/misc/drip/log.30Apr19.CH_drip.g++.4 new file mode 100644 index 0000000000..9d439bca45 --- /dev/null +++ b/examples/USER/misc/drip/log.30Apr19.CH_drip.g++.4 @@ -0,0 +1,111 @@ +LAMMPS (30 Apr 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) + using 1 OpenMP thread(s) per MPI task +# Define unit set and class of atomic model +units metal +atom_style molecular + +# BC +boundary p p s + +# read config +read_data data.CH + triclinic box = (0 0 0) to (24.65 21.3475 30) with tilt (12.325 0 0) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 545 atoms + 0 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors + special bonds CPU = 0.000135422 secs + read_data CPU = 0.00368595 secs + + +# potential +pair_style hybrid/overlay drip rebo +pair_coeff * * drip C.drip C NULL # only applies to species 1, i.e. C +Reading potential file C.drip with DATE: 2019-04-19 +pair_coeff * * rebo CH.rebo C H # species 1 is C and species 2 is H +Reading potential file CH.rebo with DATE: 2018-7-3 + + +compute peratom all pe/atom + +# set what thermodynamic information to print to log +thermo 10 # print every 1 timestep + +# set what information to write to dump file +dump id all custom 1 lammps.dump id type x y z fx fy fz c_peratom +dump_modify id every 10 format line "%d %d %13.5e %13.5e %13.5e %13.5e %13.5e %13.5e %13.5e" +dump_modify id sort id + +# minimize energy +minimize 1.0e-15 1.0e-15 100 100 +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 17.7 + ghost atom cutoff = 17.7 + binsize = 8.85, bins = 5 3 1 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair drip, perpetual, skip from (2) + attributes: full, newton on, ghost + pair build: skip/ghost + stencil: none + bin: none + (2) pair rebo, perpetual + attributes: full, newton on, ghost + pair build: full/bin/ghost + stencil: full/ghost/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 11.03 | 11.1 | 11.16 Mbytes +Step Temp E_pair E_mol TotEng Press Volume + 0 0 -2884.3731 0 -2884.3731 366196.9 2779.5956 + 10 0 -3240.4807 0 -3240.4807 -20237.368 2779.5956 + 20 0 -3281.0671 0 -3281.0671 -13303.696 2779.5956 + 30 0 -3282.2176 0 -3282.2176 -19187.216 2779.5956 + 40 0 -3282.4004 0 -3282.4004 -21740.027 2779.5956 + 50 0 -3282.4753 0 -3282.4753 -22682.604 2779.5956 + 57 0 -3282.5023 0 -3282.5023 -23355.081 2779.5956 +Loop time of 1.66218 on 4 procs for 57 steps with 545 atoms + +99.0% CPU use with 4 MPI tasks x 1 OpenMP threads + +Minimization stats: + Stopping criterion = max force evaluations + Energy initial, next-to-last, final = + -2884.37307546 -3282.50070864 -3282.50227121 + Force two-norm initial, final = 115.342 0.228488 + Force max component initial, final = 12.0934 0.03365 + Final line search alpha, max atom move = 1 0.03365 + Iterations, force evaluations = 57 100 + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.5571 | 1.5945 | 1.6314 | 2.3 | 95.93 +Bond | 2.265e-05 | 2.9087e-05 | 3.4571e-05 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.020248 | 0.05608 | 0.092328 | 11.8 | 3.37 +Output | 0.0053282 | 0.0054213 | 0.0056982 | 0.2 | 0.33 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 0.006172 | | | 0.37 + +Nlocal: 136.25 ave 177 max 100 min +Histogram: 2 0 0 0 0 0 0 0 1 1 +Nghost: 2874.75 ave 2912 max 2835 min +Histogram: 2 0 0 0 0 0 0 0 0 2 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 73530.5 ave 73544 max 73517 min +Histogram: 1 0 0 0 1 1 0 0 0 1 + +Total # of neighbors = 294122 +Ave neighs/atom = 539.673 +Ave special neighs/atom = 0 +Neighbor list builds = 0 +Dangerous builds = 0 + +Total wall time: 0:00:01 diff --git a/examples/USER/misc/drip/log.4May2019.g++.in.C_drip b/examples/USER/misc/drip/log.30Apr19.C_drip.g++.1 similarity index 79% rename from examples/USER/misc/drip/log.4May2019.g++.in.C_drip rename to examples/USER/misc/drip/log.30Apr19.C_drip.g++.1 index 44619014c1..6f19cee048 100644 --- a/examples/USER/misc/drip/log.4May2019.g++.in.C_drip +++ b/examples/USER/misc/drip/log.30Apr19.C_drip.g++.1 @@ -1,4 +1,6 @@ -LAMMPS (29 Mar 2019) +LAMMPS (30 Apr 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) + using 1 OpenMP thread(s) per MPI task # Define unit set and class of atomic model units metal atom_style molecular @@ -16,16 +18,16 @@ read_data data.C 0 = max # of 1-3 neighbors 0 = max # of 1-4 neighbors 1 = max # of special neighbors - special bonds CPU = 0.000164032 secs - read_data CPU = 0.00137401 secs + special bonds CPU = 0.000912905 secs + read_data CPU = 0.00252986 secs # potential pair_style hybrid/overlay drip rebo pair_coeff * * drip C.drip C Reading potential file C.drip with DATE: 2019-04-19 -pair_coeff * * rebo CH.airebo C -Reading potential file CH.airebo with DATE: 2011-10-25 +pair_coeff * * rebo CH.rebo C +Reading potential file CH.rebo with DATE: 2018-7-3 compute peratom all pe/atom @@ -39,7 +41,7 @@ dump_modify id sort id # minimize energy minimize 1.0e-15 1.0e-15 100 100 -WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (../min.cpp:168) +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) Neighbor list info ... update every 1 steps, delay 0 steps, check yes max neighbors/atom: 2000, page size: 100000 @@ -66,14 +68,14 @@ Step Temp E_pair E_mol TotEng Press Volume 40 0 -2967.0888 0 -2967.0888 -29997.486 2052.0534 50 0 -2967.0896 0 -2967.0896 -30072.387 2052.0534 51 0 -2967.0896 0 -2967.0896 -30076.548 2052.0534 -Loop time of 2.89944 on 1 procs for 51 steps with 400 atoms +Loop time of 2.93337 on 1 procs for 51 steps with 400 atoms -99.6% CPU use with 1 MPI tasks x no OpenMP threads +99.8% CPU use with 1 MPI tasks x 1 OpenMP threads Minimization stats: Stopping criterion = max force evaluations Energy initial, next-to-last, final = - -2941.05486168 -2967.08958346 -2967.08962043 + -2941.05486197 -2967.08958376 -2967.08962073 Force two-norm initial, final = 35.5666 0.0471918 Force max component initial, final = 6.23617 0.0050012 Final line search alpha, max atom move = 1 0.0050012 @@ -82,13 +84,13 @@ Minimization stats: MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 2.8899 | 2.8899 | 2.8899 | 0.0 | 99.67 -Bond | 3.171e-05 | 3.171e-05 | 3.171e-05 | 0.0 | 0.00 +Pair | 2.9239 | 2.9239 | 2.9239 | 0.0 | 99.68 +Bond | 1.2398e-05 | 1.2398e-05 | 1.2398e-05 | 0.0 | 0.00 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.001483 | 0.001483 | 0.001483 | 0.0 | 0.05 -Output | 0.0055339 | 0.0055339 | 0.0055339 | 0.0 | 0.19 +Comm | 0.0010808 | 0.0010808 | 0.0010808 | 0.0 | 0.04 +Output | 0.0059283 | 0.0059283 | 0.0059283 | 0.0 | 0.20 Modify | 0 | 0 | 0 | 0.0 | 0.00 -Other | | 0.002449 | | | 0.08 +Other | | 0.002466 | | | 0.08 Nlocal: 400 ave 400 max 400 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -105,4 +107,4 @@ Ave special neighs/atom = 0 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:00:02 +Total wall time: 0:00:03 diff --git a/examples/USER/misc/drip/log.30Apr19.C_drip.g++.4 b/examples/USER/misc/drip/log.30Apr19.C_drip.g++.4 new file mode 100644 index 0000000000..54f9462b59 --- /dev/null +++ b/examples/USER/misc/drip/log.30Apr19.C_drip.g++.4 @@ -0,0 +1,111 @@ +LAMMPS (30 Apr 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) + using 1 OpenMP thread(s) per MPI task +# Define unit set and class of atomic model +units metal +atom_style molecular + +# BC +boundary p p s + +# read config +read_data data.C + triclinic box = (0 0 0) to (24.65 21.3475 30) with tilt (12.325 0 0) + 1 by 2 by 2 MPI processor grid + reading atoms ... + 400 atoms + 0 = max # of 1-2 neighbors + 0 = max # of 1-3 neighbors + 0 = max # of 1-4 neighbors + 1 = max # of special neighbors + special bonds CPU = 0.0003407 secs + read_data CPU = 0.00411105 secs + + +# potential +pair_style hybrid/overlay drip rebo +pair_coeff * * drip C.drip C +Reading potential file C.drip with DATE: 2019-04-19 +pair_coeff * * rebo CH.rebo C +Reading potential file CH.rebo with DATE: 2018-7-3 + +compute peratom all pe/atom + +# set what thermodynamic information to print to log +thermo 10 # print every 1 timestep + +# set what information to write to dump file +dump id all custom 1 lammps.dump id type x y z fx fy fz c_peratom +dump_modify id every 10 format line "%d %d %13.5e %13.5e %13.5e %13.5e %13.5e %13.5e %13.5e" +dump_modify id sort id + +# minimize energy +minimize 1.0e-15 1.0e-15 100 100 +WARNING: Using 'neigh_modify every 1 delay 0 check yes' setting during minimization (src/min.cpp:168) +Neighbor list info ... + update every 1 steps, delay 0 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 17.7 + ghost atom cutoff = 17.7 + binsize = 8.85, bins = 5 3 1 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair drip, perpetual + attributes: full, newton on, ghost + pair build: full/bin/ghost + stencil: full/ghost/bin/3d + bin: standard + (2) pair rebo, perpetual, copy from (1) + attributes: full, newton on, ghost + pair build: copy + stencil: none + bin: none +WARNING: Proc sub-domain size < neighbor skin, could lead to lost atoms (src/domain.cpp:934) +Per MPI rank memory allocation (min/avg/max) = 10.7 | 10.77 | 10.83 Mbytes +Step Temp E_pair E_mol TotEng Press Volume + 0 0 -2941.0549 0 -2941.0549 -52204.715 2052.0534 + 10 0 -2966.9787 0 -2966.9787 -29717.01 2052.0534 + 20 0 -2967.0695 0 -2967.0695 -29614.636 2052.0534 + 30 0 -2967.0859 0 -2967.0859 -29867.385 2052.0534 + 40 0 -2967.0888 0 -2967.0888 -29997.486 2052.0534 + 50 0 -2967.0896 0 -2967.0896 -30072.387 2052.0534 + 51 0 -2967.0896 0 -2967.0896 -30076.548 2052.0534 +Loop time of 1.47901 on 4 procs for 51 steps with 400 atoms + +99.1% CPU use with 4 MPI tasks x 1 OpenMP threads + +Minimization stats: + Stopping criterion = max force evaluations + Energy initial, next-to-last, final = + -2941.05486197 -2967.08958376 -2967.08962073 + Force two-norm initial, final = 35.5666 0.0471918 + Force max component initial, final = 6.23617 0.0050012 + Final line search alpha, max atom move = 1 0.0050012 + Iterations, force evaluations = 51 101 + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 1.4314 | 1.4405 | 1.4548 | 0.8 | 97.40 +Bond | 1.955e-05 | 2.265e-05 | 2.4796e-05 | 0.0 | 0.00 +Neigh | 0 | 0 | 0 | 0.0 | 0.00 +Comm | 0.014506 | 0.029363 | 0.038964 | 5.5 | 1.99 +Output | 0.00424 | 0.0043345 | 0.0046172 | 0.2 | 0.29 +Modify | 0 | 0 | 0 | 0.0 | 0.00 +Other | | 0.004772 | | | 0.32 + +Nlocal: 100 ave 100 max 100 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Nghost: 2132 ave 2132 max 2132 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +Neighs: 0 ave 0 max 0 min +Histogram: 4 0 0 0 0 0 0 0 0 0 +FullNghs: 73530.5 ave 73544 max 73517 min +Histogram: 1 0 0 0 1 1 0 0 0 1 + +Total # of neighbors = 294122 +Ave neighs/atom = 735.305 +Ave special neighs/atom = 0 +Neighbor list builds = 0 +Dangerous builds = 0 + +Total wall time: 0:00:01 From 2bc089db27092736d79417f14dc058f0d06ec695 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Fri, 10 May 2019 07:42:11 -0600 Subject: [PATCH 131/311] mis-labeling of some rigid fixes --- doc/src/fix.txt | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/doc/src/fix.txt b/doc/src/fix.txt index c424e56074..294802c4fa 100644 --- a/doc/src/fix.txt +++ b/doc/src/fix.txt @@ -321,20 +321,16 @@ accelerated styles exist. "restrain"_fix_restrain.html - constrain a bond, angle, dihedral "rhok"_fix_rhok.html - "rigid"_fix_rigid.html - constrain one or more clusters of atoms to move as a rigid body with NVE integration -"rigid/nph"_fix_rigid.html - constrain one or more clusters of atoms to move as a rigid body with NPH integration -"rigid/nph/small"_fix_rigid.html - -"rigid/npt"_fix_rigid.html - constrain one or more clusters of atoms to move as a rigid body with NPT integration -"rigid/npt/small"_fix_rigid.html - -"rigid/nve"_fix_rigid.html - constrain one or more clusters of atoms to move as a rigid body with alternate NVE integration -"rigid/nve/small"_fix_rigid.html - -"rigid/nvt"_fix_rigid.html - constrain one or more clusters of atoms to move as a rigid body with NVT integration -"rigid/nvt/small"_fix_rigid.html - -"rigid/small"_fix_rigid.html - constrain many small clusters of atoms to move as a rigid body with NVE integration -"rigid/small/nph"_fix_rigid.html - constrain many small clusters of atoms to move as a rigid body with NPH integration -"rigid/small/npt"_fix_rigid.html - constrain many small clusters of atoms to move as a rigid body with NPT integration -"rigid/small/nve"_fix_rigid.html - constrain many small clusters of atoms to move as a rigid body with alternate NVE integration -"rigid/small/nvt"_fix_rigid.html - constrain many small clusters of atoms to move as a rigid body with NVT integration "rigid/meso"_fix_rigid_meso.html - constrain clusters of mesoscopic SPH/SDPD particles to move as a rigid body +"rigid/nph"_fix_rigid.html - constrain one or more clusters of atoms to move as a rigid body with NPH integration +"rigid/nph/small"_fix_rigid.html - constrain many small clusters of atoms to move as a rigid body with NPH integration +"rigid/npt"_fix_rigid.html - constrain one or more clusters of atoms to move as a rigid body with NPT integration +"rigid/npt/small"_fix_rigid.html - constrain many small clusters of atoms to move as a rigid body with NPT integration +"rigid/nve"_fix_rigid.html - constrain one or more clusters of atoms to move as a rigid body with alternate NVE integration +"rigid/nve/small"_fix_rigid.html - constrain many small clusters of atoms to move as a rigid body with alternate NVE integration +"rigid/nvt"_fix_rigid.html - constrain one or more clusters of atoms to move as a rigid body with NVT integration +"rigid/nvt/small"_fix_rigid.html - constrain many small clusters of atoms to move as a rigid body with NVT integration +"rigid/small"_fix_rigid.html - constrain many small clusters of atoms to move as a rigid body with NVE integration "rx"_fix_rx.html - "saed/vtk"_fix_saed_vtk.html - "setforce"_fix_setforce.html - set the force on each atom From 238382e0cac9516d8925fbfe2b665133665de5a7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 10 May 2019 10:26:33 -0400 Subject: [PATCH 132/311] fix handline of setflag and coeffs to correctly work with system, that have extra atom types. --- src/USER-MISC/pair_kolmogorov_crespi_full.cpp | 34 ++++++++++++------- src/USER-MISC/pair_kolmogorov_crespi_z.cpp | 30 ++++++++++------ 2 files changed, 40 insertions(+), 24 deletions(-) diff --git a/src/USER-MISC/pair_kolmogorov_crespi_full.cpp b/src/USER-MISC/pair_kolmogorov_crespi_full.cpp index 39535109cd..c6d5909a01 100644 --- a/src/USER-MISC/pair_kolmogorov_crespi_full.cpp +++ b/src/USER-MISC/pair_kolmogorov_crespi_full.cpp @@ -256,7 +256,7 @@ void PairKolmogorovCrespiFull::compute(int eflag, int vflag) // calculate the forces acted on the neighbors of atom i from atom j KC_neighs_i = KC_firstneigh[i]; - for (kk = 0; kk < KC_numneigh[i]; kk++) { + for (kk = 0; kk < KC_numneigh[i]; kk++) { k = KC_neighs_i[kk]; if (k == i) continue; // derivatives of the product of rij and ni respect to rk, k=0,1,2, where atom k is the neighbors of atom i @@ -277,7 +277,7 @@ void PairKolmogorovCrespiFull::compute(int eflag, int vflag) // calculate the forces acted on the neighbors of atom j from atom i KC_neighs_j = KC_firstneigh[j]; - for (ll = 0; ll < KC_numneigh[j]; ll++) { + for (ll = 0; ll < KC_numneigh[j]; ll++) { l = KC_neighs_j[ll]; if (l == j) continue; // derivatives of the product of rji and nj respect to rl, l=0,1,2, where atom l is the neighbors of atom j @@ -805,9 +805,10 @@ void PairKolmogorovCrespiFull::coeff(int narg, char **arg) error->all(FLERR,"Incorrect args for pair coefficients"); if (!allocated) allocate(); - int ilo,ihi,jlo,jhi; - force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); - force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); + // insure I,J args are * * + + if (strcmp(arg[0],"*") != 0 || strcmp(arg[1],"*") != 0) + error->all(FLERR,"Incorrect args for pair coefficients"); // read args that map atom types to elements in potential file // map[i] = which element the Ith atom type is, -1 if NULL @@ -841,16 +842,23 @@ void PairKolmogorovCrespiFull::coeff(int narg, char **arg) read_file(arg[2]); - double cut_one = cut_global; + // clear setflag since coeff() called once with I,J = * * + + n = atom->ntypes; + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + setflag[i][j] = 0; + + // set setflag i,j for type pairs where both are mapped to elements int count = 0; - for (int i = ilo; i <= ihi; i++) { - for (int j = MAX(jlo,i); j <= jhi; j++) { - cut[i][j] = cut_one; - setflag[i][j] = 1; - count++; - } - } + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + if (map[i] >= 0 && map[j] >= 0) { + setflag[i][j] = 1; + cut[i][j] = cut_global; + count++; + } if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); } diff --git a/src/USER-MISC/pair_kolmogorov_crespi_z.cpp b/src/USER-MISC/pair_kolmogorov_crespi_z.cpp index dcea990a3b..5a689f8ae2 100644 --- a/src/USER-MISC/pair_kolmogorov_crespi_z.cpp +++ b/src/USER-MISC/pair_kolmogorov_crespi_z.cpp @@ -226,9 +226,10 @@ void PairKolmogorovCrespiZ::coeff(int narg, char **arg) error->all(FLERR,"Incorrect args for pair coefficients"); if (!allocated) allocate(); - int ilo,ihi,jlo,jhi; - force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); - force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); + // insure I,J args are * * + + if (strcmp(arg[0],"*") != 0 || strcmp(arg[1],"*") != 0) + error->all(FLERR,"Incorrect args for pair coefficients"); // read args that map atom types to elements in potential file // map[i] = which element the Ith atom type is, -1 if NULL @@ -262,16 +263,23 @@ void PairKolmogorovCrespiZ::coeff(int narg, char **arg) read_file(arg[2]); - double cut_one = cut_global; + // clear setflag since coeff() called once with I,J = * * + + n = atom->ntypes; + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + setflag[i][j] = 0; + + // set setflag i,j for type pairs where both are mapped to elements int count = 0; - for (int i = ilo; i <= ihi; i++) { - for (int j = MAX(jlo,i); j <= jhi; j++) { - cut[i][j] = cut_one; - setflag[i][j] = 1; - count++; - } - } + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + if (map[i] >= 0 && map[j] >= 0) { + setflag[i][j] = 1; + cut[i][j] = cut_global; + count++; + } if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); } From 6d84bd6138fedd3738979e791244ccc4f38b6606 Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Fri, 10 May 2019 10:34:01 -0600 Subject: [PATCH 133/311] Added compute_beta() --- src/SNAP/pair_snap.cpp | 43 +++++++++++++++++++++--------------------- src/SNAP/pair_snap.h | 3 +++ src/SNAP/sna.cpp | 8 ++++---- 3 files changed, 29 insertions(+), 25 deletions(-) diff --git a/src/SNAP/pair_snap.cpp b/src/SNAP/pair_snap.cpp index 73faaa71f7..268e5663da 100644 --- a/src/SNAP/pair_snap.cpp +++ b/src/SNAP/pair_snap.cpp @@ -116,6 +116,7 @@ PairSNAP::~PairSNAP() memory->destroy(radelem); memory->destroy(wjelem); memory->destroy(coeffelem); + memory->destroy(beta); } // Need to set this because restart not handled by PairHybrid @@ -246,14 +247,15 @@ void PairSNAP::compute_regular(int eflag, int vflag) } // for neighbors of I within cutoff: - // compute dUi/drj and dBi/drj - // Fij = dEi/dRj = -dEi/dRi => add to Fi, subtract from Fj + // compute Fij = dEi/dRj = -dEi/dRi + // add to Fi, subtract from Fj - double* coeffi = coeffelem[ielem]; + // compute dE_i/dB_i = beta_i - // omit beta0 from beta vector + compute_betai(ielem); + + // compute beta_i*Z_i = Y_i - double* beta = coeffi+1; snaptr->compute_yi(beta); for (int jj = 0; jj < ninside; jj++) { @@ -261,22 +263,6 @@ void PairSNAP::compute_regular(int eflag, int vflag) snaptr->compute_duidrj(snaptr->rij[jj], snaptr->wj[jj],snaptr->rcutij[jj]); -// snaptr->compute_dbidrj(); -// snaptr->copy_dbi2dbvec(); - -// fij[0] = 0.0; -// fij[1] = 0.0; -// fij[2] = 0.0; - -// // linear contributions - -// for (int k = 1; k <= ncoeff; k++) { -// double bgb = coeffi[k]; -// fij[0] += bgb*snaptr->dbvec[k-1][0]; -// fij[1] += bgb*snaptr->dbvec[k-1][1]; -// fij[2] += bgb*snaptr->dbvec[k-1][2]; -// } - // // quadratic contributions // if (quadraticflag) { @@ -326,6 +312,7 @@ void PairSNAP::compute_regular(int eflag, int vflag) // evdwl = energy of atom I, sum over coeffs_k * Bi_k + double* coeffi = coeffelem[ielem]; evdwl = coeffi[0]; if (!quadraticflag) { snaptr->compute_bi(); @@ -1306,6 +1293,18 @@ void PairSNAP::build_per_atom_arrays() #endif } +/* ---------------------------------------------------------------------- + compute beta_i +------------------------------------------------------------------------- */ + +void PairSNAP::compute_betai(int ielem) +{ + double* coeffi = coeffelem[ielem]; + + for (int k = 1; k <= ncoeff; k++) + beta[k-1] = coeffi[k]; +} + /* ---------------------------------------------------------------------- allocate all arrays ------------------------------------------------------------------------- */ @@ -1434,6 +1433,7 @@ void PairSNAP::coeff(int narg, char **arg) memory->destroy(radelem); memory->destroy(wjelem); memory->destroy(coeffelem); + memory->destroy(beta); } char* type1 = arg[0]; @@ -1631,6 +1631,7 @@ void PairSNAP::read_files(char *coefffilename, char *paramfilename) memory->create(radelem,nelements,"pair:radelem"); memory->create(wjelem,nelements,"pair:wjelem"); memory->create(coeffelem,nelements,ncoeffall,"pair:coeffelem"); + memory->create(beta,ncoeffall,"pair:beta"); // Loop over nelements blocks in the SNAP coefficient file diff --git a/src/SNAP/pair_snap.h b/src/SNAP/pair_snap.h index 1fa065755c..33d1fb8bc9 100644 --- a/src/SNAP/pair_snap.h +++ b/src/SNAP/pair_snap.h @@ -55,6 +55,8 @@ protected: void set_sna_to_shared(int snaid,int i); void build_per_atom_arrays(); + void compute_betai(int); + int schedule_user; double schedule_time_guided; double schedule_time_dynamic; @@ -99,6 +101,7 @@ protected: double *radelem; // element radii double *wjelem; // elements weights double **coeffelem; // element bispectrum coefficients + double* beta; // beta for current atom int *map; // mapping from atom types to elements int twojmax, diagonalstyle, switchflag, bzeroflag; double rfac0, rmin0, wj1, wj2; diff --git a/src/SNAP/sna.cpp b/src/SNAP/sna.cpp index d30d94dc9d..b729e4d0d6 100644 --- a/src/SNAP/sna.cpp +++ b/src/SNAP/sna.cpp @@ -1653,10 +1653,10 @@ void SNA::create_twojmax_arrays() "sna:uarraytot"); memory->create(zarray_i, jdim, jdim, jdim, jdim, jdim, "sna:zarray"); - memory->create(yarray_r, jdim, jdim, jdim, - "sna:yarray"); - memory->create(yarray_i, jdim, jdim, jdim, - "sna:yarray"); + memory->create(yarray_r, jdim, jdim, jdim, + "sna:yarray"); + memory->create(yarray_i, jdim, jdim, jdim, + "sna:yarray"); } } From c86359966cd06edbde0f985e40c0e8c25affa37b Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 10 May 2019 21:07:05 -0400 Subject: [PATCH 134/311] error out when offset flag is unset via "pair_modify shift no" --- src/USER-MISC/pair_ilp_graphene_hbn.cpp | 7 ++++--- src/USER-MISC/pair_kolmogorov_crespi_full.cpp | 2 ++ src/USER-MISC/pair_kolmogorov_crespi_z.cpp | 2 ++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/USER-MISC/pair_ilp_graphene_hbn.cpp b/src/USER-MISC/pair_ilp_graphene_hbn.cpp index a8c9c686f1..958325857b 100644 --- a/src/USER-MISC/pair_ilp_graphene_hbn.cpp +++ b/src/USER-MISC/pair_ilp_graphene_hbn.cpp @@ -801,9 +801,10 @@ void PairILPGrapheneHBN::coeff(int narg, char **arg) error->all(FLERR,"Incorrect args for pair coefficients"); if (!allocated) allocate(); - int ilo,ihi,jlo,jhi; - force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); - force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); + // insure I,J args are * * + + if (strcmp(arg[0],"*") != 0 || strcmp(arg[1],"*") != 0) + error->all(FLERR,"Incorrect args for pair coefficients"); // read args that map atom types to elements in potential file // map[i] = which element the Ith atom type is, -1 if NULL diff --git a/src/USER-MISC/pair_kolmogorov_crespi_full.cpp b/src/USER-MISC/pair_kolmogorov_crespi_full.cpp index c6d5909a01..8c15f6fe75 100644 --- a/src/USER-MISC/pair_kolmogorov_crespi_full.cpp +++ b/src/USER-MISC/pair_kolmogorov_crespi_full.cpp @@ -871,6 +871,8 @@ void PairKolmogorovCrespiFull::coeff(int narg, char **arg) double PairKolmogorovCrespiFull::init_one(int i, int j) { if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (!offset_flag) + error->all(FLERR,"Must use 'pair_modify shift yes' with this pair style"); if (offset_flag && (cut[i][j] > 0.0)) { int iparam_ij = elem2param[map[i]][map[j]]; diff --git a/src/USER-MISC/pair_kolmogorov_crespi_z.cpp b/src/USER-MISC/pair_kolmogorov_crespi_z.cpp index 5a689f8ae2..5d6a98da61 100644 --- a/src/USER-MISC/pair_kolmogorov_crespi_z.cpp +++ b/src/USER-MISC/pair_kolmogorov_crespi_z.cpp @@ -292,6 +292,8 @@ void PairKolmogorovCrespiZ::coeff(int narg, char **arg) double PairKolmogorovCrespiZ::init_one(int i, int j) { if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (!offset_flag) + error->all(FLERR,"Must use 'pair_modify shift yes' with this pair style"); if (offset_flag && (cut[i][j] > 0.0)) { int iparam_ij = elem2param[map[i]][map[j]]; From b2942cbafae5c8a1c85975b43535f0a4cfa4fa20 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 10 May 2019 21:07:54 -0400 Subject: [PATCH 135/311] correctly handle coeff statement for ilp/graphene/hbn --- src/USER-MISC/pair_ilp_graphene_hbn.cpp | 27 ++++++++++++++-------- src/USER-MISC/pair_kolmogorov_crespi_z.cpp | 1 - 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/USER-MISC/pair_ilp_graphene_hbn.cpp b/src/USER-MISC/pair_ilp_graphene_hbn.cpp index 958325857b..0f0b8fa78f 100644 --- a/src/USER-MISC/pair_ilp_graphene_hbn.cpp +++ b/src/USER-MISC/pair_ilp_graphene_hbn.cpp @@ -71,7 +71,7 @@ PairILPGrapheneHBN::PairILPGrapheneHBN(LAMMPS *lmp) : Pair(lmp) // always compute energy offset offset_flag = 1; - // set comm size needed by this Pair + // set comm size needed by this pair style comm_forward = 39; tap_flag = 1; } @@ -838,16 +838,23 @@ void PairILPGrapheneHBN::coeff(int narg, char **arg) read_file(arg[2]); - double cut_one = cut_global; + // clear setflag since coeff() called once with I,J = * * + + n = atom->ntypes; + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + setflag[i][j] = 0; + + // set setflag i,j for type pairs where both are mapped to elements int count = 0; - for (int i = ilo; i <= ihi; i++) { - for (int j = MAX(jlo,i); j <= jhi; j++) { - cut[i][j] = cut_one; - setflag[i][j] = 1; - count++; - } - } + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + if (map[i] >= 0 && map[j] >= 0) { + setflag[i][j] = 1; + cut[i][j] = cut_global; + count++; + } if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); } @@ -860,6 +867,8 @@ void PairILPGrapheneHBN::coeff(int narg, char **arg) double PairILPGrapheneHBN::init_one(int i, int j) { if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (!offset_flag) + error->all(FLERR,"Must use 'pair_modify shift yes' with this pair style"); if (offset_flag && (cut[i][j] > 0.0)) { int iparam_ij = elem2param[map[i]][map[j]]; diff --git a/src/USER-MISC/pair_kolmogorov_crespi_z.cpp b/src/USER-MISC/pair_kolmogorov_crespi_z.cpp index 5d6a98da61..34217ba42c 100644 --- a/src/USER-MISC/pair_kolmogorov_crespi_z.cpp +++ b/src/USER-MISC/pair_kolmogorov_crespi_z.cpp @@ -260,7 +260,6 @@ void PairKolmogorovCrespiZ::coeff(int narg, char **arg) } } - read_file(arg[2]); // clear setflag since coeff() called once with I,J = * * From a1f421cd5400de9cb0c486cd7b32e936f09c9eb0 Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Sat, 11 May 2019 12:41:54 -0600 Subject: [PATCH 136/311] Moved compute_beta outside of main force loop --- src/SNAP/pair_snap.cpp | 37 +++++++++++++++++++++++++------------ src/SNAP/pair_snap.h | 5 +++-- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/SNAP/pair_snap.cpp b/src/SNAP/pair_snap.cpp index 268e5663da..0bf367b5dc 100644 --- a/src/SNAP/pair_snap.cpp +++ b/src/SNAP/pair_snap.cpp @@ -86,7 +86,7 @@ PairSNAP::PairSNAP(LAMMPS *lmp) : Pair(lmp) i_uarraytot_r = NULL; i_uarraytot_i = NULL; i_zarray_r = NULL; - i_zarray_i =NULL; + i_zarray_i = NULL; use_shared_arrays = 0; @@ -101,6 +101,7 @@ PairSNAP::PairSNAP(LAMMPS *lmp) : Pair(lmp) sna = NULL; + beta_max = 0; } /* ---------------------------------------------------------------------- */ @@ -189,6 +190,15 @@ void PairSNAP::compute_regular(int eflag, int vflag) int newton_pair = force->newton_pair; class SNA* snaptr = sna[0]; + if (beta_max < list->inum) { + memory->grow(beta,list->inum,ncoeff,"PairSNAP:beta"); + beta_max = list->inum; + } + + // compute dE_i/dB_i = beta_i for all i in list + + compute_beta(); + numneigh = list->numneigh; firstneigh = list->firstneigh; @@ -250,13 +260,9 @@ void PairSNAP::compute_regular(int eflag, int vflag) // compute Fij = dEi/dRj = -dEi/dRi // add to Fi, subtract from Fj - // compute dE_i/dB_i = beta_i - - compute_betai(ielem); - // compute beta_i*Z_i = Y_i - snaptr->compute_yi(beta); + snaptr->compute_yi(beta[ii]); for (int jj = 0; jj < ninside; jj++) { int j = snaptr->inside[jj]; @@ -1294,15 +1300,23 @@ void PairSNAP::build_per_atom_arrays() } /* ---------------------------------------------------------------------- - compute beta_i + compute beta ------------------------------------------------------------------------- */ -void PairSNAP::compute_betai(int ielem) +void PairSNAP::compute_beta() { - double* coeffi = coeffelem[ielem]; + int i; + int *type = atom->type; - for (int k = 1; k <= ncoeff; k++) - beta[k-1] = coeffi[k]; + for (int ii = 0; ii < list->inum; ii++) { + i = list->ilist[ii]; + const int itype = type[i]; + const int ielem = map[itype]; + double* coeffi = coeffelem[ielem]; + + for (int k = 1; k <= ncoeff; k++) + beta[ii][k-1] = coeffi[k]; + } } /* ---------------------------------------------------------------------- @@ -1631,7 +1645,6 @@ void PairSNAP::read_files(char *coefffilename, char *paramfilename) memory->create(radelem,nelements,"pair:radelem"); memory->create(wjelem,nelements,"pair:wjelem"); memory->create(coeffelem,nelements,ncoeffall,"pair:coeffelem"); - memory->create(beta,ncoeffall,"pair:beta"); // Loop over nelements blocks in the SNAP coefficient file diff --git a/src/SNAP/pair_snap.h b/src/SNAP/pair_snap.h index 33d1fb8bc9..94d21162e2 100644 --- a/src/SNAP/pair_snap.h +++ b/src/SNAP/pair_snap.h @@ -55,7 +55,7 @@ protected: void set_sna_to_shared(int snaid,int i); void build_per_atom_arrays(); - void compute_betai(int); + void compute_beta(); int schedule_user; double schedule_time_guided; @@ -101,11 +101,12 @@ protected: double *radelem; // element radii double *wjelem; // elements weights double **coeffelem; // element bispectrum coefficients - double* beta; // beta for current atom + double** beta; // betas for all atoms in list int *map; // mapping from atom types to elements int twojmax, diagonalstyle, switchflag, bzeroflag; double rfac0, rmin0, wj1, wj2; int rcutfacflag, twojmaxflag; // flags for required parameters + int beta_max; // length of beta }; } From e13c661f774ea40f39b042f46d540c703fb88c5d Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Sat, 11 May 2019 12:54:18 -0600 Subject: [PATCH 137/311] Added placeholder for neural network SNAP potential --- src/SNAP/pair_nn_snap.cpp | 1824 +++++++++++++++++++++++++++++++++++++ src/SNAP/pair_nn_snap.h | 184 ++++ 2 files changed, 2008 insertions(+) create mode 100644 src/SNAP/pair_nn_snap.cpp create mode 100644 src/SNAP/pair_nn_snap.h diff --git a/src/SNAP/pair_nn_snap.cpp b/src/SNAP/pair_nn_snap.cpp new file mode 100644 index 0000000000..e90f6d6b1b --- /dev/null +++ b/src/SNAP/pair_nn_snap.cpp @@ -0,0 +1,1824 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + 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. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include "pair_nn_snap.h" +#include "atom.h" +#include "atom_vec.h" +#include "force.h" +#include "comm.h" +#include "neighbor.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "sna.h" +#include "openmp_snap.h" +#include "domain.h" +#include "memory.h" +#include "error.h" + +#include + +using namespace LAMMPS_NS; + +#define MAXLINE 1024 +#define MAXWORD 3 + +// Outstanding issues with quadratic term +// 1. there seems to a problem with compute_optimized energy calc +// it does not match compute_regular, even when quadratic coeffs = 0 + +/* ---------------------------------------------------------------------- */ + +PairNNSNAP::PairNNSNAP(LAMMPS *lmp) : Pair(lmp) +{ + single_enable = 0; + restartinfo = 0; + one_coeff = 1; + manybody_flag = 1; + + nelements = 0; + elements = NULL; + radelem = NULL; + wjelem = NULL; + coeffelem = NULL; + + nmax = 0; + nthreads = 1; + + schedule_user = 0; + schedule_time_guided = -1; + schedule_time_dynamic = -1; + ncalls_neigh =-1; + + ilistmask_max = 0; + ilistmask = NULL; + ghostinum = 0; + ghostilist_max = 0; + ghostilist = NULL; + ghostnumneigh_max = 0; + ghostnumneigh = NULL; + ghostneighs = NULL; + ghostfirstneigh = NULL; + ghostneighs_total = 0; + ghostneighs_max = 0; + + i_max = 0; + i_neighmax = 0; + i_numpairs = 0; + i_rij = NULL; + i_inside = NULL; + i_wj = NULL; + i_rcutij = NULL; + i_ninside = NULL; + i_pairs = NULL; + i_uarraytot_r = NULL; + i_uarraytot_i = NULL; + i_zarray_r = NULL; + i_zarray_i = NULL; + + use_shared_arrays = 0; + +#ifdef TIMING_INFO + timers[0] = 0; + timers[1] = 0; + timers[2] = 0; + timers[3] = 0; +#endif + + // Need to set this because restart not handled by PairHybrid + + sna = NULL; + + beta_max = 0; +} + +/* ---------------------------------------------------------------------- */ + +PairNNSNAP::~PairNNSNAP() +{ + if (copymode) return; + + if (nelements) { + for (int i = 0; i < nelements; i++) + delete[] elements[i]; + delete[] elements; + memory->destroy(radelem); + memory->destroy(wjelem); + memory->destroy(coeffelem); + memory->destroy(beta); + } + + // Need to set this because restart not handled by PairHybrid + + if (sna) { + +#ifdef TIMING_INFO + double time[5]; + double timeave[5]; + double timeave_mpi[5]; + double timemax_mpi[5]; + + for (int i = 0; i < 5; i++) { + time[i] = 0; + timeave[i] = 0; + for (int tid = 0; tidtimers[i]>time[i]) + time[i] = sna[tid]->timers[i]; + timeave[i] += sna[tid]->timers[i]; + } + timeave[i] /= nthreads; + } + MPI_Reduce(timeave, timeave_mpi, 5, MPI_DOUBLE, MPI_SUM, 0, world); + MPI_Reduce(time, timemax_mpi, 5, MPI_DOUBLE, MPI_MAX, 0, world); +#endif + + for (int tid = 0; tiddestroy(setflag); + memory->destroy(cutsq); + memory->destroy(map); + } + +} + +void PairNNSNAP::compute(int eflag, int vflag) +{ +// if (use_optimized) +// compute_optimized(eflag, vflag); +// else + +// hard-code compute_regular() + + compute_regular(eflag, vflag); +} + +/* ---------------------------------------------------------------------- + This version is a straightforward implementation + ---------------------------------------------------------------------- */ + +void PairNNSNAP::compute_regular(int eflag, int vflag) +{ + int i,j,jnum,ninside; + double delx,dely,delz,evdwl,rsq; + double fij[3]; + int *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; + int newton_pair = force->newton_pair; + class SNA* snaptr = sna[0]; + + if (beta_max < list->inum) { + memory->grow(beta,list->inum,ncoeff,"PairNNSNAP:beta"); + beta_max = list->inum; + } + + // compute dE_i/dB_i = beta_i for all i in list + + compute_beta(); + + numneigh = list->numneigh; + firstneigh = list->firstneigh; + + for (int ii = 0; ii < list->inum; ii++) { + i = list->ilist[ii]; + + const double xtmp = x[i][0]; + const double ytmp = x[i][1]; + const double ztmp = x[i][2]; + const int itype = type[i]; + const int ielem = map[itype]; + const double radi = radelem[ielem]; + + jlist = firstneigh[i]; + jnum = numneigh[i]; + + // insure rij, inside, wj, and rcutij are of size jnum + + snaptr->grow_rij(jnum); + + // rij[][3] = displacements between atom I and those neighbors + // inside = indices of neighbors of I within cutoff + // wj = weights for neighbors of I within cutoff + // rcutij = cutoffs for neighbors of I within cutoff + // note Rij sign convention => dU/dRij = dU/dRj = -dU/dRi + + ninside = 0; + for (int jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + delx = x[j][0] - xtmp; + dely = x[j][1] - ytmp; + delz = x[j][2] - ztmp; + rsq = delx*delx + dely*dely + delz*delz; + int jtype = type[j]; + int jelem = map[jtype]; + + if (rsq < cutsq[itype][jtype]&&rsq>1e-20) { + snaptr->rij[ninside][0] = delx; + snaptr->rij[ninside][1] = dely; + snaptr->rij[ninside][2] = delz; + snaptr->inside[ninside] = j; + snaptr->wj[ninside] = wjelem[jelem]; + snaptr->rcutij[ninside] = (radi + radelem[jelem])*rcutfac; + ninside++; + } + } + + // compute Ui, Zi, and Bi for atom I + + snaptr->compute_ui(ninside); + snaptr->compute_zi(); + if (quadraticflag) { + snaptr->compute_bi(); + snaptr->copy_bi2bvec(); + } + + // for neighbors of I within cutoff: + // compute Fij = dEi/dRj = -dEi/dRi + // add to Fi, subtract from Fj + + // compute beta_i*Z_i = Y_i + + snaptr->compute_yi(beta[ii]); + + for (int jj = 0; jj < ninside; jj++) { + int j = snaptr->inside[jj]; + snaptr->compute_duidrj(snaptr->rij[jj], + snaptr->wj[jj],snaptr->rcutij[jj]); + +// // quadratic contributions + +// if (quadraticflag) { +// int k = ncoeff+1; +// for (int icoeff = 0; icoeff < ncoeff; icoeff++) { +// double bveci = snaptr->bvec[icoeff]; +// double fack = coeffi[k]*bveci; +// double* dbveci = snaptr->dbvec[icoeff]; +// fij[0] += fack*dbveci[0]; +// fij[1] += fack*dbveci[1]; +// fij[2] += fack*dbveci[2]; +// k++; +// for (int jcoeff = icoeff+1; jcoeff < ncoeff; jcoeff++) { +// double facki = coeffi[k]*bveci; +// double fackj = coeffi[k]*snaptr->bvec[jcoeff]; +// double* dbvecj = snaptr->dbvec[jcoeff]; + +// fij[0] += facki*dbvecj[0]+fackj*dbveci[0]; +// fij[1] += facki*dbvecj[1]+fackj*dbveci[1]; +// fij[2] += facki*dbvecj[2]+fackj*dbveci[2]; +// k++; +// } +// } +// } + + snaptr->compute_deidrj(fij); + + f[i][0] += fij[0]; + f[i][1] += fij[1]; + f[i][2] += fij[2]; + f[j][0] -= fij[0]; + f[j][1] -= fij[1]; + f[j][2] -= fij[2]; + + // tally per-atom virial contribution + + if (vflag) + ev_tally_xyz(i,j,nlocal,newton_pair,0.0,0.0, + fij[0],fij[1],fij[2], + -snaptr->rij[jj][0],-snaptr->rij[jj][1], + -snaptr->rij[jj][2]); + } + + // tally energy contribution + + if (eflag) { + + // evdwl = energy of atom I, sum over coeffs_k * Bi_k + + double* coeffi = coeffelem[ielem]; + evdwl = coeffi[0]; + if (!quadraticflag) { + snaptr->compute_bi(); + snaptr->copy_bi2bvec(); + } + + // E = beta.B + 0.5*B^t.alpha.B + // coeff[k] = beta[k-1] or + // coeff[k] = alpha_ii or + // coeff[k] = alpha_ij = alpha_ji, j != i + + // linear contributions + + for (int k = 1; k <= ncoeff; k++) + evdwl += coeffi[k]*snaptr->bvec[k-1]; + + // quadratic contributions + + if (quadraticflag) { + int k = ncoeff+1; + for (int icoeff = 0; icoeff < ncoeff; icoeff++) { + double bveci = snaptr->bvec[icoeff]; + evdwl += 0.5*coeffi[k++]*bveci*bveci; + for (int jcoeff = icoeff+1; jcoeff < ncoeff; jcoeff++) { + evdwl += coeffi[k++]*bveci*snaptr->bvec[jcoeff]; + } + } + } + ev_tally_full(i,2.0*evdwl,0.0,0.0,0.0,0.0,0.0); + } + + } + + if (vflag_fdotr) virial_fdotr_compute(); +} + + +/* ---------------------------------------------------------------------- + This version is optimized for threading, micro-load balancing + ---------------------------------------------------------------------- */ + +void PairNNSNAP::compute_optimized(int eflag, int vflag) +{ + // if reneighboring took place do load_balance if requested + if (do_load_balance > 0 && + (neighbor->ncalls != ncalls_neigh)) { + ghostinum = 0; + // reset local ghost neighbor lists + ncalls_neigh = neighbor->ncalls; + if (ilistmask_max < list->inum) { + memory->grow(ilistmask,list->inum,"PairSnap::ilistmask"); + ilistmask_max = list->inum; + } + for (int i = 0; i < list->inum; i++) + ilistmask[i] = 1; + + //multiple passes for loadbalancing + for (int i = 0; i < do_load_balance; i++) + load_balance(); + } + + int numpairs = 0; + for (int ii = 0; ii < list->inum; ii++) { + if ((do_load_balance <= 0) || ilistmask[ii]) { + int i = list->ilist[ii]; + int jnum = list->numneigh[i]; + numpairs += jnum; + } + } + + if (do_load_balance) + for (int ii = 0; ii < ghostinum; ii++) { + int i = ghostilist[ii]; + int jnum = ghostnumneigh[i]; + numpairs += jnum; + } + + // optimized schedule setting + + int time_dynamic = 0; + int time_guided = 0; + + if (schedule_user == 0) schedule_user = 4; + + switch (schedule_user) { + case 1: + omp_set_schedule(omp_sched_static,1); + break; + case 2: + omp_set_schedule(omp_sched_dynamic,1); + break; + case 3: + omp_set_schedule(omp_sched_guided,2); + break; + case 4: + omp_set_schedule(omp_sched_auto,0); + break; + case 5: + if (numpairs < 8*nthreads) omp_set_schedule(omp_sched_dynamic,1); + else if (schedule_time_guided < 0.0) { + omp_set_schedule(omp_sched_guided,2); + if (!eflag && !vflag) time_guided = 1; + } else if (schedule_time_dynamic<0.0) { + omp_set_schedule(omp_sched_dynamic,1); + if (!eflag && !vflag) time_dynamic = 1; + } else if (schedule_time_guidedcreate(pairs_tid_unique,numpairs,4,"numpairs"); + pairs = pairs_tid_unique; + } + + if (!use_shared_arrays) { + numpairs = 0; + for (int ii = 0; ii < list->inum; ii++) { + if ((do_load_balance <= 0) || ilistmask[ii]) { + int i = list->ilist[ii]; + int jnum = list->numneigh[i]; + for (int jj = 0; jjx; + double **f = atom->f; + int *type = atom->type; + int nlocal = atom->nlocal; + int newton_pair = force->newton_pair; + + numneigh = list->numneigh; + firstneigh = list->firstneigh; + +#ifdef TIMING_INFO + // only update micro timers after setup + static int count=0; + if (count<2) { + sna[tid]->timers[0] = 0; + sna[tid]->timers[1] = 0; + sna[tid]->timers[2] = 0; + sna[tid]->timers[3] = 0; + sna[tid]->timers[4] = 0; + } + count++; +#endif + + // did thread start working on interactions of new atom + int iold = -1; + + double starttime, endtime; + if (time_dynamic || time_guided) + starttime = MPI_Wtime(); + +#if defined(_OPENMP) +#pragma omp for schedule(runtime) +#endif + for (int iijj = 0; iijj < numpairs; iijj++) { + int i = 0; + if (use_shared_arrays) { + i = i_pairs[iijj][0]; + if (iold != i) { + set_sna_to_shared(tid,i_pairs[iijj][3]); + ielem = map[type[i]]; + } + iold = i; + } else { + i = pairs[iijj][0]; + if (iold != i) { + iold = i; + const double xtmp = x[i][0]; + const double ytmp = x[i][1]; + const double ztmp = x[i][2]; + const int itype = type[i]; + ielem = map[itype]; + const double radi = radelem[ielem]; + + if (i < nlocal) { + jlist = firstneigh[i]; + jnum = numneigh[i]; + } else { + jlist = ghostneighs+ghostfirstneigh[i]; + jnum = ghostnumneigh[i]; + } + + // insure rij, inside, wj, and rcutij are of size jnum + + sna[tid]->grow_rij(jnum); + + // rij[][3] = displacements between atom I and those neighbors + // inside = indices of neighbors of I within cutoff + // wj = weights of neighbors of I within cutoff + // rcutij = cutoffs of neighbors of I within cutoff + // note Rij sign convention => dU/dRij = dU/dRj = -dU/dRi + + ninside = 0; + for (jj = 0; jj < jnum; jj++) { + int j = jlist[jj]; + j &= NEIGHMASK; + delx = x[j][0] - xtmp; //unitialised + dely = x[j][1] - ytmp; + delz = x[j][2] - ztmp; + rsq = delx*delx + dely*dely + delz*delz; + jtype = type[j]; + int jelem = map[jtype]; + + if (rsq < cutsq[itype][jtype]&&rsq>1e-20) { //unitialised + sna[tid]->rij[ninside][0] = delx; + sna[tid]->rij[ninside][1] = dely; + sna[tid]->rij[ninside][2] = delz; + sna[tid]->inside[ninside] = j; + sna[tid]->wj[ninside] = wjelem[jelem]; + sna[tid]->rcutij[ninside] = (radi + radelem[jelem])*rcutfac; + ninside++; + + // update index list with inside index + pairs[iijj + (jj - pairs[iijj][1])][2] = + ninside-1; //unitialised + } + } + + // compute Ui and Zi for atom I + + sna[tid]->compute_ui(ninside); //unitialised + sna[tid]->compute_zi(); + } + } + if (quadraticflag) { + sna[tid]->compute_bi(); + sna[tid]->copy_bi2bvec(); + } + + // for neighbors of I within cutoff: + // compute dUi/drj and dBi/drj + // Fij = dEi/dRj = -dEi/dRi => add to Fi, subtract from Fj + + // entry into loop if inside index is set + + double* coeffi = coeffelem[ielem]; + + if (pairs[iijj][2] >= 0) { + jj = pairs[iijj][2]; + int j = sna[tid]->inside[jj]; + sna[tid]->compute_duidrj(sna[tid]->rij[jj], + sna[tid]->wj[jj],sna[tid]->rcutij[jj]); + + sna[tid]->compute_dbidrj(); + sna[tid]->copy_dbi2dbvec(); + + fij[0] = 0.0; + fij[1] = 0.0; + fij[2] = 0.0; + + // linear contributions + + for (k = 1; k <= ncoeff; k++) { + double bgb = coeffi[k]; + fij[0] += bgb*sna[tid]->dbvec[k-1][0]; + fij[1] += bgb*sna[tid]->dbvec[k-1][1]; + fij[2] += bgb*sna[tid]->dbvec[k-1][2]; + } + + // quadratic contributions + + if (quadraticflag) { + int k = ncoeff+1; + for (int icoeff = 0; icoeff < ncoeff; icoeff++) { + double bveci = sna[tid]->bvec[icoeff]; + double fack = coeffi[k]*bveci; + double* dbveci = sna[tid]->dbvec[icoeff]; + fij[0] += fack*sna[tid]->dbvec[icoeff][0]; + fij[1] += fack*sna[tid]->dbvec[icoeff][1]; + fij[2] += fack*sna[tid]->dbvec[icoeff][2]; + k++; + for (int jcoeff = icoeff+1; jcoeff < ncoeff; jcoeff++) { + double facki = coeffi[k]*bveci; + double fackj = coeffi[k]*sna[tid]->bvec[jcoeff]; + double* dbvecj = sna[tid]->dbvec[jcoeff]; + fij[0] += facki*dbvecj[0]+fackj*dbveci[0]; + fij[1] += facki*dbvecj[1]+fackj*dbveci[1]; + fij[2] += facki*dbvecj[2]+fackj*dbveci[2]; + k++; + } + } + } + +#if defined(_OPENMP) +#pragma omp critical +#endif + { + f[i][0] += fij[0]; + f[i][1] += fij[1]; + f[i][2] += fij[2]; + f[j][0] -= fij[0]; + f[j][1] -= fij[1]; + f[j][2] -= fij[2]; + + // tally per-atom virial contribution + + if (vflag) + ev_tally_xyz(i,j,nlocal,newton_pair,0.0,0.0, + fij[0],fij[1],fij[2], + -sna[tid]->rij[jj][0],-sna[tid]->rij[jj][1], + -sna[tid]->rij[jj][2]); + } + } + + // evdwl = energy of atom I, sum over coeffs_k * Bi_k + // only call this for first pair of each atom i + // if atom has no pairs, eatom=0, which is wrong + + if (eflag&&pairs[iijj][1] == 0) { + evdwl = coeffi[0]; + + if (!quadraticflag) { + sna[tid]->compute_bi(); + sna[tid]->copy_bi2bvec(); + } + + // E = beta.B + 0.5*B^t.alpha.B + // coeff[k] = beta[k-1] or + // coeff[k] = alpha_ii or + // coeff[k] = alpha_ij = alpha_ji, j != i + + // linear contributions + + for (int k = 1; k <= ncoeff; k++) + evdwl += coeffi[k]*sna[tid]->bvec[k-1]; + + // quadratic contributions + + if (quadraticflag) { + int k = ncoeff+1; + for (int icoeff = 0; icoeff < ncoeff; icoeff++) { + double bveci = sna[tid]->bvec[icoeff]; + evdwl += 0.5*coeffi[k++]*bveci*bveci; + for (int jcoeff = icoeff+1; jcoeff < ncoeff; jcoeff++) { + evdwl += coeffi[k++]*bveci*sna[tid]->bvec[jcoeff]; + } + } + } + +#if defined(_OPENMP) +#pragma omp critical +#endif + ev_tally_full(i,2.0*evdwl,0.0,0.0,0.0,0.0,0.0); + } + + } + if (time_dynamic || time_guided) + endtime = MPI_Wtime(); + if (time_dynamic) schedule_time_dynamic = endtime - starttime; + if (time_guided) schedule_time_guided = endtime - starttime; + if (!use_shared_arrays) memory->destroy(pairs); + + }// end of pragma omp parallel + + if (vflag_fdotr) virial_fdotr_compute(); + +} + +inline int PairNNSNAP::equal(double* x,double* y) +{ + double dist2 = + (x[0]-y[0])*(x[0]-y[0]) + + (x[1]-y[1])*(x[1]-y[1]) + + (x[2]-y[2])*(x[2]-y[2]); + if (dist2 < 1e-20) return 1; + return 0; +} + +inline double PairNNSNAP::dist2(double* x,double* y) +{ + return + (x[0]-y[0])*(x[0]-y[0]) + + (x[1]-y[1])*(x[1]-y[1]) + + (x[2]-y[2])*(x[2]-y[2]); +} + +// return extra communication cutoff +// extra_cutoff = max(subdomain_length) + +double PairNNSNAP::extra_cutoff() +{ + double sublo[3],subhi[3]; + + if (domain->triclinic == 0) { + for (int dim = 0 ; dim < 3 ; dim++) { + sublo[dim] = domain->sublo[dim]; + subhi[dim] = domain->subhi[dim]; + } + } else { + domain->lamda2x(domain->sublo_lamda,sublo); + domain->lamda2x(domain->subhi_lamda,subhi); + } + + double sub_size[3]; + for (int dim = 0; dim < 3; dim++) + sub_size[dim] = subhi[dim] - sublo[dim]; + + double max_sub_size = 0; + for (int dim = 0; dim < 3; dim++) + max_sub_size = MAX(max_sub_size,sub_size[dim]); + + // note: for triclinic, probably need something different + // see Comm::setup() + + return max_sub_size; +} + +// micro load_balancer: each MPI process will +// check with each of its 26 neighbors, +// whether an imbalance exists in the number +// of atoms to calculate forces for. +// If it does it will set ilistmask of one of +// its local atoms to zero, and send its Tag +// to the neighbor process. The neighboring process +// will check its ghost list for the +// ghost atom with the same Tag which is closest +// to its domain center, and build a +// neighborlist for this ghost atom. For this to work, +// the communication cutoff has to be +// as large as the neighbor cutoff + +// maximum subdomain length. + +// Note that at most one atom is exchanged per processor pair. + +// Also note that the local atom assignment +// doesn't change. This load balancer will cause +// some ghost atoms to have full neighborlists +// which are unique to PairNNSNAP. +// They are not part of the generally accessible neighborlist. +// At the same time corresponding local atoms on +// other MPI processes will not be +// included in the force computation since +// their ilistmask is 0. This does not effect +// any other classes which might +// access the same general neighborlist. +// Reverse communication (newton on) of forces is required. + +// Currently the load balancer does two passes, +// since its exchanging atoms upstream and downstream. + +void PairNNSNAP::load_balance() +{ + double sublo[3],subhi[3]; + if (domain->triclinic == 0) { + double* sublotmp = domain->sublo; + double* subhitmp = domain->subhi; + for (int dim = 0 ; dim<3 ; dim++) { + sublo[dim]=sublotmp[dim]; + subhi[dim]=subhitmp[dim]; + } + } else { + double* sublotmp = domain->sublo_lamda; + double* subhitmp = domain->subhi_lamda; + domain->lamda2x(sublotmp,sublo); + domain->lamda2x(subhitmp,subhi); + } + + //if (list->inum==0) list->grow(atom->nmax); + + int nlocal = ghostinum; + for (int i=0; i < list->inum; i++) + if (ilistmask[i]) nlocal++; + int ***grid2proc = comm->grid2proc; + int* procgrid = comm->procgrid; + + int nlocal_up,nlocal_down; + MPI_Request request; + + double sub_mid[3]; + for (int dim=0; dim<3; dim++) + sub_mid[dim] = (subhi[dim] + sublo[dim])/2; + + if (comm->cutghostuser < + neighbor->cutneighmax+extra_cutoff()) + error->all(FLERR,"Communication cutoff too small for SNAP micro load balancing"); + + int nrecv = ghostinum; + int totalsend = 0; + int nsend = 0; + int depth = 1; + + for (int dx = -depth; dx < depth+1; dx++) + for (int dy = -depth; dy < depth+1; dy++) + for (int dz = -depth; dz < depth+1; dz++) { + + if (dx == dy && dy == dz && dz == 0) continue; + + int sendloc[3] = {comm->myloc[0], + comm->myloc[1], comm->myloc[2] + }; + sendloc[0] += dx; + sendloc[1] += dy; + sendloc[2] += dz; + for (int dim = 0; dim < 3; dim++) + if (sendloc[dim] >= procgrid[dim]) + sendloc[dim] = sendloc[dim] - procgrid[dim]; + for (int dim = 0; dim < 3; dim++) + if (sendloc[dim] < 0) + sendloc[dim] = procgrid[dim] + sendloc[dim]; + int recvloc[3] = {comm->myloc[0], + comm->myloc[1], comm->myloc[2] + }; + recvloc[0] -= dx; + recvloc[1] -= dy; + recvloc[2] -= dz; + for (int dim = 0; dim < 3; dim++) + if (recvloc[dim] < 0) + recvloc[dim] = procgrid[dim] + recvloc[dim]; + for (int dim = 0; dim < 3; dim++) + if (recvloc[dim] >= procgrid[dim]) + recvloc[dim] = recvloc[dim] - procgrid[dim]; + + int sendproc = grid2proc[sendloc[0]][sendloc[1]][sendloc[2]]; + int recvproc = grid2proc[recvloc[0]][recvloc[1]][recvloc[2]]; + + // two stage process, first upstream movement, then downstream + + MPI_Sendrecv(&nlocal,1,MPI_INT,sendproc,0, + &nlocal_up,1,MPI_INT,recvproc,0,world,MPI_STATUS_IGNORE); + MPI_Sendrecv(&nlocal,1,MPI_INT,recvproc,0, + &nlocal_down,1,MPI_INT,sendproc,0,world,MPI_STATUS_IGNORE); + nsend = 0; + + // send upstream + + if (nlocal > nlocal_up+1) { + + int i = totalsend++; + while(i < list->inum && ilistmask[i] == 0) + i = totalsend++; + + if (i < list->inum) + MPI_Isend(&atom->tag[i],1,MPI_INT,recvproc,0,world,&request); + else { + int j = -1; + MPI_Isend(&j,1,MPI_INT,recvproc,0,world,&request); + } + + if (i < list->inum) { + for (int j = 0; j < list->inum; j++) + if (list->ilist[j] == i) + ilistmask[j] = 0; + nsend = 1; + } + } + + // recv downstream + + if (nlocal < nlocal_down-1) { + nlocal++; + int get_tag = -1; + MPI_Recv(&get_tag,1,MPI_INT,sendproc,0,world,MPI_STATUS_IGNORE); + + // if get_tag -1 the other process didnt have local atoms to send + + if (get_tag >= 0) { + if (ghostinum >= ghostilist_max) { + memory->grow(ghostilist,ghostinum+10, + "PairSnap::ghostilist"); + ghostilist_max = ghostinum+10; + } + if (atom->nlocal + atom->nghost >= ghostnumneigh_max) { + ghostnumneigh_max = atom->nlocal+atom->nghost+100; + memory->grow(ghostnumneigh,ghostnumneigh_max, + "PairSnap::ghostnumneigh"); + memory->grow(ghostfirstneigh,ghostnumneigh_max, + "PairSnap::ghostfirstneigh"); + } + + // find closest ghost image of the transfered particle + + double mindist = 1e200; + int closestghost = -1; + for (int j = 0; j < atom->nlocal + atom->nghost; j++) + if (atom->tag[j] == get_tag) + if (dist2(sub_mid, atom->x[j]) < mindist) { + closestghost = j; + mindist = dist2(sub_mid, atom->x[j]); + } + + // build neighborlist for this particular + // ghost atom, and add it to list->ilist + + if (ghostneighs_max - ghostneighs_total < + neighbor->oneatom) { + memory->grow(ghostneighs, + ghostneighs_total + neighbor->oneatom, + "PairSnap::ghostneighs"); + ghostneighs_max = ghostneighs_total + neighbor->oneatom; + } + + int j = closestghost; + + ghostilist[ghostinum] = j; + ghostnumneigh[j] = 0; + ghostfirstneigh[j] = ghostneighs_total; + + ghostinum++; + int* jlist = ghostneighs + ghostfirstneigh[j]; + + // find all neighbors by looping + // over all local and ghost atoms + + for (int k = 0; k < atom->nlocal + atom->nghost; k++) + if (dist2(atom->x[j],atom->x[k]) < + neighbor->cutneighmax*neighbor->cutneighmax) { + jlist[ghostnumneigh[j]] = k; + ghostnumneigh[j]++; + ghostneighs_total++; + } + } + + if (get_tag >= 0) nrecv++; + } + + // decrease nlocal later, so that it is the + // initial number both for receiving and sending + + if (nsend) nlocal--; + + // second pass through the grid + + MPI_Sendrecv(&nlocal,1,MPI_INT,sendproc,0, + &nlocal_up,1,MPI_INT,recvproc,0,world,MPI_STATUS_IGNORE); + MPI_Sendrecv(&nlocal,1,MPI_INT,recvproc,0, + &nlocal_down,1,MPI_INT,sendproc,0,world,MPI_STATUS_IGNORE); + + // send downstream + + nsend=0; + if (nlocal > nlocal_down+1) { + int i = totalsend++; + while(i < list->inum && ilistmask[i]==0) i = totalsend++; + + if (i < list->inum) + MPI_Isend(&atom->tag[i],1,MPI_INT,sendproc,0,world,&request); + else { + int j =- 1; + MPI_Isend(&j,1,MPI_INT,sendproc,0,world,&request); + } + + if (i < list->inum) { + for (int j=0; jinum; j++) + if (list->ilist[j] == i) ilistmask[j] = 0; + nsend = 1; + } + } + + // receive upstream + + if (nlocal < nlocal_up-1) { + nlocal++; + int get_tag = -1; + + MPI_Recv(&get_tag,1,MPI_INT,recvproc,0,world,MPI_STATUS_IGNORE); + + if (get_tag >= 0) { + if (ghostinum >= ghostilist_max) { + memory->grow(ghostilist,ghostinum+10, + "PairSnap::ghostilist"); + ghostilist_max = ghostinum+10; + } + if (atom->nlocal + atom->nghost >= ghostnumneigh_max) { + ghostnumneigh_max = atom->nlocal + atom->nghost + 100; + memory->grow(ghostnumneigh,ghostnumneigh_max, + "PairSnap::ghostnumneigh"); + memory->grow(ghostfirstneigh,ghostnumneigh_max, + "PairSnap::ghostfirstneigh"); + } + + // find closest ghost image of the transfered particle + + double mindist = 1e200; + int closestghost = -1; + for (int j = 0; j < atom->nlocal + atom->nghost; j++) + if (atom->tag[j] == get_tag) + if (dist2(sub_mid,atom->x[j])x[j]); + } + + // build neighborlist for this particular ghost atom + + if (ghostneighs_max-ghostneighs_total < neighbor->oneatom) { + memory->grow(ghostneighs,ghostneighs_total + neighbor->oneatom, + "PairSnap::ghostneighs"); + ghostneighs_max = ghostneighs_total + neighbor->oneatom; + } + + int j = closestghost; + + ghostilist[ghostinum] = j; + ghostnumneigh[j] = 0; + ghostfirstneigh[j] = ghostneighs_total; + + ghostinum++; + int* jlist = ghostneighs + ghostfirstneigh[j]; + + for (int k = 0; k < atom->nlocal + atom->nghost; k++) + if (dist2(atom->x[j],atom->x[k]) < + neighbor->cutneighmax*neighbor->cutneighmax) { + jlist[ghostnumneigh[j]] = k; + ghostnumneigh[j]++; + ghostneighs_total++; + } + } + + if (get_tag >= 0) nrecv++; + } + if (nsend) nlocal--; + } +} + +void PairNNSNAP::set_sna_to_shared(int snaid,int i) +{ + sna[snaid]->rij = i_rij[i]; + sna[snaid]->inside = i_inside[i]; + sna[snaid]->wj = i_wj[i]; + sna[snaid]->rcutij = i_rcutij[i]; + sna[snaid]->zarray_r = i_zarray_r[i]; + sna[snaid]->zarray_i = i_zarray_i[i]; + sna[snaid]->uarraytot_r = i_uarraytot_r[i]; + sna[snaid]->uarraytot_i = i_uarraytot_i[i]; +} + +void PairNNSNAP::build_per_atom_arrays() +{ + +#ifdef TIMING_INFO + clock_gettime(CLOCK_REALTIME,&starttime); +#endif + + int count = 0; + int neighmax = 0; + for (int ii = 0; ii < list->inum; ii++) + if ((do_load_balance <= 0) || ilistmask[ii]) { + neighmax=MAX(neighmax,list->numneigh[list->ilist[ii]]); + ++count; + } + for (int ii = 0; ii < ghostinum; ii++) { + neighmax=MAX(neighmax,ghostnumneigh[ghostilist[ii]]); + ++count; + } + + if (i_max < count || i_neighmax < neighmax) { + int i_maxt = MAX(count,i_max); + i_neighmax = MAX(neighmax,i_neighmax); + memory->destroy(i_rij); + memory->destroy(i_inside); + memory->destroy(i_wj); + memory->destroy(i_rcutij); + memory->destroy(i_ninside); + memory->destroy(i_pairs); + memory->create(i_rij,i_maxt,i_neighmax,3,"PairNNSNAP::i_rij"); + memory->create(i_inside,i_maxt,i_neighmax,"PairNNSNAP::i_inside"); + memory->create(i_wj,i_maxt,i_neighmax,"PairNNSNAP::i_wj"); + memory->create(i_rcutij,i_maxt,i_neighmax,"PairNNSNAP::i_rcutij"); + memory->create(i_ninside,i_maxt,"PairNNSNAP::i_ninside"); + memory->create(i_pairs,i_maxt*i_neighmax,4,"PairNNSNAP::i_pairs"); + } + + if (i_max < count) { + int jdim = sna[0]->twojmax+1; + memory->destroy(i_uarraytot_r); + memory->destroy(i_uarraytot_i); + memory->create(i_uarraytot_r,count,jdim,jdim,jdim, + "PairNNSNAP::i_uarraytot_r"); + memory->create(i_uarraytot_i,count,jdim,jdim,jdim, + "PairNNSNAP::i_uarraytot_i"); + if (i_zarray_r != NULL) + for (int i = 0; i < i_max; i++) { + memory->destroy(i_zarray_r[i]); + memory->destroy(i_zarray_i[i]); + } + + delete [] i_zarray_r; + delete [] i_zarray_i; + i_zarray_r = new double*****[count]; + i_zarray_i = new double*****[count]; + for (int i = 0; i < count; i++) { + memory->create(i_zarray_r[i],jdim,jdim,jdim,jdim,jdim, + "PairNNSNAP::i_zarray_r"); + memory->create(i_zarray_i[i],jdim,jdim,jdim,jdim,jdim, + "PairNNSNAP::i_zarray_i"); + } + } + + if (i_max < count) + i_max = count; + + count = 0; + i_numpairs = 0; + for (int ii = 0; ii < list->inum; ii++) { + if ((do_load_balance <= 0) || ilistmask[ii]) { + int i = list->ilist[ii]; + int jnum = list->numneigh[i]; + int* jlist = list->firstneigh[i]; + const double xtmp = atom->x[i][0]; + const double ytmp = atom->x[i][1]; + const double ztmp = atom->x[i][2]; + const int itype = atom->type[i]; + const int ielem = map[itype]; + const double radi = radelem[ielem]; + int ninside = 0; + for (int jj = 0; jj < jnum; jj++) { + int j = jlist[jj]; + j &= NEIGHMASK; + const double delx = atom->x[j][0] - xtmp; + const double dely = atom->x[j][1] - ytmp; + const double delz = atom->x[j][2] - ztmp; + const double rsq = delx*delx + dely*dely + delz*delz; + int jtype = atom->type[j]; + int jelem = map[jtype]; + + i_pairs[i_numpairs][0] = i; + i_pairs[i_numpairs][1] = jj; + i_pairs[i_numpairs][2] = -1; + i_pairs[i_numpairs][3] = count; + if (rsq < cutsq[itype][jtype]&&rsq>1e-20) { + i_rij[count][ninside][0] = delx; + i_rij[count][ninside][1] = dely; + i_rij[count][ninside][2] = delz; + i_inside[count][ninside] = j; + i_wj[count][ninside] = wjelem[jelem]; + i_rcutij[count][ninside] = (radi + radelem[jelem])*rcutfac; + + // update index list with inside index + i_pairs[i_numpairs][2] = ninside++; + } + i_numpairs++; + } + i_ninside[count] = ninside; + count++; + } + } + + for (int ii = 0; ii < ghostinum; ii++) { + int i = ghostilist[ii]; + int jnum = ghostnumneigh[i]; + int* jlist = ghostneighs+ghostfirstneigh[i]; + const double xtmp = atom->x[i][0]; + const double ytmp = atom->x[i][1]; + const double ztmp = atom->x[i][2]; + const int itype = atom->type[i]; + const int ielem = map[itype]; + const double radi = radelem[ielem]; + int ninside = 0; + + for (int jj = 0; jj < jnum; jj++) { + int j = jlist[jj]; + j &= NEIGHMASK; + const double delx = atom->x[j][0] - xtmp; + const double dely = atom->x[j][1] - ytmp; + const double delz = atom->x[j][2] - ztmp; + const double rsq = delx*delx + dely*dely + delz*delz; + int jtype = atom->type[j]; + int jelem = map[jtype]; + + i_pairs[i_numpairs][0] = i; + i_pairs[i_numpairs][1] = jj; + i_pairs[i_numpairs][2] = -1; + i_pairs[i_numpairs][3] = count; + if (rsq < cutsq[itype][jtype]&&rsq>1e-20) { + i_rij[count][ninside][0] = delx; + i_rij[count][ninside][1] = dely; + i_rij[count][ninside][2] = delz; + i_inside[count][ninside] = j; + i_wj[count][ninside] = wjelem[jelem]; + i_rcutij[count][ninside] = (radi + radelem[jelem])*rcutfac; + // update index list with inside index + i_pairs[i_numpairs][2] = ninside++; + } + i_numpairs++; + } + i_ninside[count] = ninside; + count++; + } +#ifdef TIMING_INFO + clock_gettime(CLOCK_REALTIME,&endtime); + timers[0]+=(endtime.tv_sec-starttime.tv_sec+1.0* + (endtime.tv_nsec-starttime.tv_nsec)/1000000000); +#endif +#ifdef TIMING_INFO + clock_gettime(CLOCK_REALTIME,&starttime); +#endif + +#if defined(_OPENMP) +#pragma omp parallel for shared(count) default(none) +#endif + for (int ii=0; ii < count; ii++) { + int tid = omp_get_thread_num(); + set_sna_to_shared(tid,ii); + //sna[tid]->compute_ui(i_ninside[ii]); +#ifdef TIMING_INFO + clock_gettime(CLOCK_REALTIME,&starttime); +#endif + sna[tid]->compute_ui_omp(i_ninside[ii],MAX(int(nthreads/count),1)); +#ifdef TIMING_INFO + clock_gettime(CLOCK_REALTIME,&endtime); + sna[tid]->timers[0]+=(endtime.tv_sec-starttime.tv_sec+1.0* + (endtime.tv_nsec-starttime.tv_nsec)/1000000000); +#endif + } + +#ifdef TIMING_INFO + clock_gettime(CLOCK_REALTIME,&starttime); +#endif + for (int ii=0; ii < count; ii++) { + int tid = 0;//omp_get_thread_num(); + set_sna_to_shared(tid,ii); + sna[tid]->compute_zi_omp(MAX(int(nthreads/count),1)); + } +#ifdef TIMING_INFO + clock_gettime(CLOCK_REALTIME,&endtime); + sna[0]->timers[1]+=(endtime.tv_sec-starttime.tv_sec+1.0* + (endtime.tv_nsec-starttime.tv_nsec)/1000000000); +#endif + +#ifdef TIMING_INFO + clock_gettime(CLOCK_REALTIME,&endtime); + timers[1]+=(endtime.tv_sec-starttime.tv_sec+1.0* + (endtime.tv_nsec-starttime.tv_nsec)/1000000000); +#endif +} + +/* ---------------------------------------------------------------------- + compute beta +------------------------------------------------------------------------- */ + +void PairNNSNAP::compute_beta() +{ + int i; + int *type = atom->type; + + for (int ii = 0; ii < list->inum; ii++) { + i = list->ilist[ii]; + const int itype = type[i]; + const int ielem = map[itype]; + double* coeffi = coeffelem[ielem]; + + for (int k = 1; k <= ncoeff; k++) + beta[ii][k-1] = coeffi[k]; + } +} + +/* ---------------------------------------------------------------------- + allocate all arrays +------------------------------------------------------------------------- */ + +void PairNNSNAP::allocate() +{ + allocated = 1; + int n = atom->ntypes; + + memory->create(setflag,n+1,n+1,"pair:setflag"); + memory->create(cutsq,n+1,n+1,"pair:cutsq"); + memory->create(map,n+1,"pair:map"); +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairNNSNAP::settings(int narg, char **arg) +{ + + // set default values for optional arguments + + nthreads = -1; + use_shared_arrays=-1; + do_load_balance = 0; + use_optimized = 1; + + // optional arguments + + for (int i=0; i < narg; i++) { + if (i+2>narg) error->all(FLERR,"Illegal pair_style command"); + if (strcmp(arg[i],"nthreads")==0) { + nthreads=force->inumeric(FLERR,arg[++i]); +#if defined(LMP_USER_OMP) + error->all(FLERR,"Must set number of threads via package omp command"); +#else + omp_set_num_threads(nthreads); + comm->nthreads=nthreads; +#endif + continue; + } + if (strcmp(arg[i],"optimized")==0) { + use_optimized=force->inumeric(FLERR,arg[++i]); + continue; + } + if (strcmp(arg[i],"shared")==0) { + use_shared_arrays=force->inumeric(FLERR,arg[++i]); + continue; + } + if (strcmp(arg[i],"loadbalance")==0) { + do_load_balance = force->inumeric(FLERR,arg[++i]); + if (do_load_balance) { + double mincutoff = extra_cutoff() + + rcutmax + neighbor->skin; + if (comm->cutghostuser < mincutoff) { + char buffer[255]; + + //apparently mincutoff is 0 after sprintf command ????? + + double tmp = mincutoff + 0.1; + sprintf(buffer, "Communication cutoff is too small " + "for SNAP micro load balancing, increased to %lf", + mincutoff+0.1); + if (comm->me==0) + error->warning(FLERR,buffer); + + comm->cutghostuser = tmp; + + } + } + continue; + } + if (strcmp(arg[i],"schedule")==0) { + i++; + if (strcmp(arg[i],"static")==0) + schedule_user = 1; + if (strcmp(arg[i],"dynamic")==0) + schedule_user = 2; + if (strcmp(arg[i],"guided")==0) + schedule_user = 3; + if (strcmp(arg[i],"auto")==0) + schedule_user = 4; + if (strcmp(arg[i],"determine")==0) + schedule_user = 5; + if (schedule_user == 0) + error->all(FLERR,"Illegal pair_style command"); + continue; + } + error->all(FLERR,"Illegal pair_style command"); + } + + if (nthreads < 0) + nthreads = comm->nthreads; + + if (use_shared_arrays < 0) { + if (nthreads > 1 && atom->nlocal <= 2*nthreads) + use_shared_arrays = 1; + else use_shared_arrays = 0; + } + + // check if running non-optimized code with + // optimization flags set + + if (!use_optimized) + if (nthreads > 1 || + use_shared_arrays || + do_load_balance || + schedule_user) + error->all(FLERR,"Illegal pair_style command"); +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more type pairs +------------------------------------------------------------------------- */ + +void PairNNSNAP::coeff(int narg, char **arg) +{ + if (narg < 5) error->all(FLERR,"Incorrect args for pair coefficients"); + if (!allocated) allocate(); + + if (nelements) { + for (int i = 0; i < nelements; i++) + delete[] elements[i]; + delete[] elements; + memory->destroy(radelem); + memory->destroy(wjelem); + memory->destroy(coeffelem); + memory->destroy(beta); + } + + char* type1 = arg[0]; + char* type2 = arg[1]; + char* coefffilename = arg[2]; + char* paramfilename = arg[3]; + char** elemtypes = &arg[4]; + + // insure I,J args are * * + + if (strcmp(type1,"*") != 0 || strcmp(type2,"*") != 0) + error->all(FLERR,"Incorrect args for pair coefficients"); + + // read snapcoeff and snapparam files + + read_files(coefffilename,paramfilename); + + if (!quadraticflag) + ncoeff = ncoeffall - 1; + else { + + // ncoeffall should be (ncoeff+2)*(ncoeff+1)/2 + // so, ncoeff = floor(sqrt(2*ncoeffall))-1 + + ncoeff = sqrt(2*ncoeffall)-1; + ncoeffq = (ncoeff*(ncoeff+1))/2; + int ntmp = 1+ncoeff+ncoeffq; + if (ntmp != ncoeffall) { + printf("ncoeffall = %d ntmp = %d ncoeff = %d \n",ncoeffall,ntmp,ncoeff); + error->all(FLERR,"Incorrect SNAP coeff file"); + } + } + + // read args that map atom types to SNAP elements + // map[i] = which element the Ith atom type is, -1 if not mapped + // map[0] is not used + + for (int i = 1; i <= atom->ntypes; i++) { + char* elemname = elemtypes[i-1]; + int jelem; + for (jelem = 0; jelem < nelements; jelem++) + if (strcmp(elemname,elements[jelem]) == 0) + break; + + if (jelem < nelements) + map[i] = jelem; + else if (strcmp(elemname,"NULL") == 0) map[i] = -1; + else error->all(FLERR,"Incorrect args for pair coefficients"); + } + + // clear setflag since coeff() called once with I,J = * * + + int n = atom->ntypes; + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + setflag[i][j] = 0; + + // set setflag i,j for type pairs where both are mapped to elements + + int count = 0; + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + if (map[i] >= 0 && map[j] >= 0) { + setflag[i][j] = 1; + count++; + } + + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); + + sna = new SNA*[nthreads]; + + // allocate memory for per OpenMP thread data which + // is wrapped into the sna class + +#if defined(_OPENMP) +#pragma omp parallel default(none) +#endif + { + int tid = omp_get_thread_num(); + sna[tid] = new SNA(lmp,rfac0,twojmax, + diagonalstyle,use_shared_arrays, + rmin0,switchflag,bzeroflag); + if (!use_shared_arrays) + sna[tid]->grow_rij(nmax); + } + + if (ncoeff != sna[0]->ncoeff) { + if (comm->me == 0) + printf("ncoeff = %d snancoeff = %d \n",ncoeff,sna[0]->ncoeff); + error->all(FLERR,"Incorrect SNAP parameter file"); + } + + // Calculate maximum cutoff for all elements + + rcutmax = 0.0; + for (int ielem = 0; ielem < nelements; ielem++) + rcutmax = MAX(2.0*radelem[ielem]*rcutfac,rcutmax); + +} + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairNNSNAP::init_style() +{ + if (force->newton_pair == 0) + error->all(FLERR,"Pair style SNAP requires newton pair on"); + + // need a full neighbor list + + int irequest = neighbor->request(this,instance_me); + neighbor->requests[irequest]->half = 0; + neighbor->requests[irequest]->full = 1; + +#if defined(_OPENMP) +#pragma omp parallel default(none) +#endif + { + int tid = omp_get_thread_num(); + sna[tid]->init(); + } + +} + +/* ---------------------------------------------------------------------- + init for one type pair i,j and corresponding j,i +------------------------------------------------------------------------- */ + +double PairNNSNAP::init_one(int i, int j) +{ + if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + return (radelem[map[i]] + + radelem[map[j]])*rcutfac; +} + +/* ---------------------------------------------------------------------- */ + +void PairNNSNAP::read_files(char *coefffilename, char *paramfilename) +{ + + // open SNAP coefficient file on proc 0 + + FILE *fpcoeff; + if (comm->me == 0) { + fpcoeff = force->open_potential(coefffilename); + if (fpcoeff == NULL) { + char str[128]; + snprintf(str,128,"Cannot open SNAP coefficient file %s",coefffilename); + error->one(FLERR,str); + } + } + + char line[MAXLINE],*ptr; + int eof = 0; + + int n; + int nwords = 0; + while (nwords == 0) { + if (comm->me == 0) { + ptr = fgets(line,MAXLINE,fpcoeff); + if (ptr == NULL) { + eof = 1; + fclose(fpcoeff); + } else n = strlen(line) + 1; + } + MPI_Bcast(&eof,1,MPI_INT,0,world); + if (eof) break; + MPI_Bcast(&n,1,MPI_INT,0,world); + MPI_Bcast(line,n,MPI_CHAR,0,world); + + // strip comment, skip line if blank + + if ((ptr = strchr(line,'#'))) *ptr = '\0'; + nwords = atom->count_words(line); + } + if (nwords != 2) + error->all(FLERR,"Incorrect format in SNAP coefficient file"); + + // words = ptrs to all words in line + // strip single and double quotes from words + + char* words[MAXWORD]; + int iword = 0; + words[iword] = strtok(line,"' \t\n\r\f"); + iword = 1; + words[iword] = strtok(NULL,"' \t\n\r\f"); + + nelements = atoi(words[0]); + ncoeffall = atoi(words[1]); + + // set up element lists + + elements = new char*[nelements]; + memory->create(radelem,nelements,"pair:radelem"); + memory->create(wjelem,nelements,"pair:wjelem"); + memory->create(coeffelem,nelements,ncoeffall,"pair:coeffelem"); + + // Loop over nelements blocks in the SNAP coefficient file + + for (int ielem = 0; ielem < nelements; ielem++) { + + if (comm->me == 0) { + ptr = fgets(line,MAXLINE,fpcoeff); + if (ptr == NULL) { + eof = 1; + fclose(fpcoeff); + } else n = strlen(line) + 1; + } + MPI_Bcast(&eof,1,MPI_INT,0,world); + if (eof) + error->all(FLERR,"Incorrect format in SNAP coefficient file"); + MPI_Bcast(&n,1,MPI_INT,0,world); + MPI_Bcast(line,n,MPI_CHAR,0,world); + + nwords = atom->count_words(line); + if (nwords != 3) + error->all(FLERR,"Incorrect format in SNAP coefficient file"); + + iword = 0; + words[iword] = strtok(line,"' \t\n\r\f"); + iword = 1; + words[iword] = strtok(NULL,"' \t\n\r\f"); + iword = 2; + words[iword] = strtok(NULL,"' \t\n\r\f"); + + char* elemtmp = words[0]; + int n = strlen(elemtmp) + 1; + elements[ielem] = new char[n]; + strcpy(elements[ielem],elemtmp); + + radelem[ielem] = atof(words[1]); + wjelem[ielem] = atof(words[2]); + + + if (comm->me == 0) { + if (screen) fprintf(screen,"SNAP Element = %s, Radius %g, Weight %g \n", + elements[ielem], radelem[ielem], wjelem[ielem]); + if (logfile) fprintf(logfile,"SNAP Element = %s, Radius %g, Weight %g \n", + elements[ielem], radelem[ielem], wjelem[ielem]); + } + + for (int icoeff = 0; icoeff < ncoeffall; icoeff++) { + if (comm->me == 0) { + ptr = fgets(line,MAXLINE,fpcoeff); + if (ptr == NULL) { + eof = 1; + fclose(fpcoeff); + } else n = strlen(line) + 1; + } + + MPI_Bcast(&eof,1,MPI_INT,0,world); + if (eof) + error->all(FLERR,"Incorrect format in SNAP coefficient file"); + MPI_Bcast(&n,1,MPI_INT,0,world); + MPI_Bcast(line,n,MPI_CHAR,0,world); + + nwords = atom->count_words(line); + if (nwords != 1) + error->all(FLERR,"Incorrect format in SNAP coefficient file"); + + iword = 0; + words[iword] = strtok(line,"' \t\n\r\f"); + + coeffelem[ielem][icoeff] = atof(words[0]); + + } + } + + // set flags for required keywords + + rcutfacflag = 0; + twojmaxflag = 0; + + // Set defaults for optional keywords + + rfac0 = 0.99363; + rmin0 = 0.0; + diagonalstyle = 3; + switchflag = 1; + bzeroflag = 1; + quadraticflag = 0; + + // open SNAP parameter file on proc 0 + + FILE *fpparam; + if (comm->me == 0) { + fpparam = force->open_potential(paramfilename); + if (fpparam == NULL) { + char str[128]; + snprintf(str,128,"Cannot open SNAP parameter file %s",paramfilename); + error->one(FLERR,str); + } + } + + eof = 0; + while (1) { + if (comm->me == 0) { + ptr = fgets(line,MAXLINE,fpparam); + if (ptr == NULL) { + eof = 1; + fclose(fpparam); + } else n = strlen(line) + 1; + } + MPI_Bcast(&eof,1,MPI_INT,0,world); + if (eof) break; + MPI_Bcast(&n,1,MPI_INT,0,world); + MPI_Bcast(line,n,MPI_CHAR,0,world); + + // strip comment, skip line if blank + + if ((ptr = strchr(line,'#'))) *ptr = '\0'; + nwords = atom->count_words(line); + if (nwords == 0) continue; + + if (nwords != 2) + error->all(FLERR,"Incorrect format in SNAP parameter file"); + + // words = ptrs to all words in line + // strip single and double quotes from words + + char* keywd = strtok(line,"' \t\n\r\f"); + char* keyval = strtok(NULL,"' \t\n\r\f"); + + if (comm->me == 0) { + if (screen) fprintf(screen,"SNAP keyword %s %s \n",keywd,keyval); + if (logfile) fprintf(logfile,"SNAP keyword %s %s \n",keywd,keyval); + } + + if (strcmp(keywd,"rcutfac") == 0) { + rcutfac = atof(keyval); + rcutfacflag = 1; + } else if (strcmp(keywd,"twojmax") == 0) { + twojmax = atoi(keyval); + twojmaxflag = 1; + } else if (strcmp(keywd,"rfac0") == 0) + rfac0 = atof(keyval); + else if (strcmp(keywd,"rmin0") == 0) + rmin0 = atof(keyval); + else if (strcmp(keywd,"diagonalstyle") == 0) + diagonalstyle = atoi(keyval); + else if (strcmp(keywd,"switchflag") == 0) + switchflag = atoi(keyval); + else if (strcmp(keywd,"bzeroflag") == 0) + bzeroflag = atoi(keyval); + else if (strcmp(keywd,"quadraticflag") == 0) + quadraticflag = atoi(keyval); + else + error->all(FLERR,"Incorrect SNAP parameter file"); + } + + if (rcutfacflag == 0 || twojmaxflag == 0) + error->all(FLERR,"Incorrect SNAP parameter file"); + +} + +/* ---------------------------------------------------------------------- + memory usage +------------------------------------------------------------------------- */ + +double PairNNSNAP::memory_usage() +{ + double bytes = Pair::memory_usage(); + int n = atom->ntypes+1; + bytes += n*n*sizeof(int); + bytes += n*n*sizeof(double); + bytes += 3*nmax*sizeof(double); + bytes += nmax*sizeof(int); + bytes += (2*ncoeffall)*sizeof(double); + bytes += (ncoeff*3)*sizeof(double); + bytes += sna[0]->memory_usage()*nthreads; + return bytes; +} + diff --git a/src/SNAP/pair_nn_snap.h b/src/SNAP/pair_nn_snap.h new file mode 100644 index 0000000000..f77ddee207 --- /dev/null +++ b/src/SNAP/pair_nn_snap.h @@ -0,0 +1,184 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + + 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 + +PairStyle(nn/snap,PairNNSNAP) + +#else + +#ifndef LMP_PAIR_NN_SNAP_H +#define LMP_PAIR_NN_SNAP_H + +#include "pair.h" + +namespace LAMMPS_NS { + +class PairNNSNAP : public Pair { +public: + PairNNSNAP(class LAMMPS *); + ~PairNNSNAP(); + virtual void compute(int, int); + void compute_regular(int, int); + void compute_optimized(int, int); + void settings(int, char **); + virtual void coeff(int, char **); + virtual void init_style(); + virtual double init_one(int, int); + virtual double memory_usage(); + + double rcutfac, quadraticflag; // declared public to workaround gcc 4.9 + int ncoeff; // compiler bug, manifest in KOKKOS package + +protected: + int ncoeffq, ncoeffall; + double **bvec, ***dbvec; + class SNA** sna; + int nmax; + int nthreads; + virtual void allocate(); + void read_files(char *, char *); + inline int equal(double* x,double* y); + inline double dist2(double* x,double* y); + double extra_cutoff(); + void load_balance(); + void set_sna_to_shared(int snaid,int i); + void build_per_atom_arrays(); + + void compute_beta(); + + int schedule_user; + double schedule_time_guided; + double schedule_time_dynamic; + + int ncalls_neigh; + int do_load_balance; + int ilistmask_max; + int* ilistmask; + int ghostinum; + int ghostilist_max; + int* ghostilist; + int ghostnumneigh_max; + int* ghostnumneigh; + int* ghostneighs; + int* ghostfirstneigh; + int ghostneighs_total; + int ghostneighs_max; + + int use_optimized; + int use_shared_arrays; + + int i_max; + int i_neighmax; + int i_numpairs; + int **i_pairs; + double ***i_rij; + int **i_inside; + double **i_wj; + double **i_rcutij; + int *i_ninside; + double ****i_uarraytot_r, ****i_uarraytot_i; + double ******i_zarray_r, ******i_zarray_i; + +#ifdef TIMING_INFO + // timespec starttime, endtime; + double timers[4]; +#endif + + double rcutmax; // max cutoff for all elements + int nelements; // # of unique elements + char **elements; // names of unique elements + double *radelem; // element radii + double *wjelem; // elements weights + double **coeffelem; // element bispectrum coefficients + double** beta; // betas for all atoms in list + int *map; // mapping from atom types to elements + int twojmax, diagonalstyle, switchflag, bzeroflag; + double rfac0, rmin0, wj1, wj2; + int rcutfacflag, twojmaxflag; // flags for required parameters + int beta_max; // length of beta +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: + +E: Communication cutoff too small for SNAP micro load balancing + +This can happen if you change the neighbor skin after your pair_style +command or if your box dimensions grow during a run. You can set the +cutoff explicitly via the comm_modify cutoff command. + +E: Illegal ... command + +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. + +E: Must set number of threads via package omp command + +Because you are using the USER-OMP package, set the number of threads +via its settings, not by the pair_style snap nthreads setting. + +W: Communication cutoff is too small for SNAP micro load balancing, increased to %lf + +Self-explanatory. + +E: Incorrect args for pair coefficients + +Self-explanatory. Check the input script or data file. + +E: Incorrect SNAP coeff file + +UNDOCUMENTED + +E: Incorrect SNAP parameter file + +The file cannot be parsed correctly, check its internal syntax. + +E: Pair style SNAP requires newton pair on + +See the newton command. This is a restriction to use the SNAP +potential. + +E: All pair coeffs are not set + +All pair coefficients must be set in the data file or by the +pair_coeff command before running a simulation. + +E: Cannot open SNAP coefficient file %s + +The specified SNAP coefficient file cannot be opened. Check that the +path and name are correct. + +E: Incorrect format in SNAP coefficient file + +Incorrect number of words per line in the coefficient file. + +E: Cannot open SNAP parameter file %s + +The specified SNAP parameter file cannot be opened. Check that the +path and name are correct. + +E: Incorrect format in SNAP parameter file + +Incorrect number of words per line in the parameter file. + +E: Did not find all elements in SNAP coefficient file. + +One or more elements listed in the pair_coeff command were not found in the coefficient file. + +*/ From f2d881470d0edfbe68adc12204ddd1f44621d069 Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Sat, 11 May 2019 12:55:11 -0600 Subject: [PATCH 138/311] Added placeholder for neural network SNAP potential --- examples/snap/W.nnsnap | 16 +++++++++++++++ examples/snap/in.nnsnap | 45 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 examples/snap/W.nnsnap create mode 100644 examples/snap/in.nnsnap diff --git a/examples/snap/W.nnsnap b/examples/snap/W.nnsnap new file mode 100644 index 0000000000..93c2bf866a --- /dev/null +++ b/examples/snap/W.nnsnap @@ -0,0 +1,16 @@ +# DATE: 2017-02-20 CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. "Quantum-Accurate Molecular Dynamics Potential for Tungsten" arXiv:1702.07042 [physics.comp-ph] +# +# Definition of SNAP+ZBL potential. +variable zblcutinner equal 4 +variable zblcutouter equal 4.8 +variable zblz equal 74 + +# Specify hybrid with SNAP and ZBL + +pair_style hybrid/overlay & +zbl ${zblcutinner} ${zblcutouter} & +snap +pair_coeff 1 1 zbl ${zblz} ${zblz} +pair_coeff * * snap W_2940_2017_2.snapcoeff W_2940_2017_2.snapparam W + +#Nomenclature on the snap files are Element_DakotaID_Year_Month diff --git a/examples/snap/in.nnsnap b/examples/snap/in.nnsnap new file mode 100644 index 0000000000..d575757d56 --- /dev/null +++ b/examples/snap/in.nnsnap @@ -0,0 +1,45 @@ +# Demonstrate SNAP Ta potential + +# Initialize simulation + +variable nsteps index 100 +variable nrep equal 4 +variable a equal 3.1803 +units metal + +# generate the box and atom positions using a BCC lattice + +variable nx equal ${nrep} +variable ny equal ${nrep} +variable nz equal ${nrep} + +boundary p p p + +lattice bcc $a +region box block 0 ${nx} 0 ${ny} 0 ${nz} +create_box 1 box +create_atoms 1 box + +mass 1 183.84 + +# choose potential + +include W.nnsnap + +# Setup output + +thermo 10 +thermo_modify norm yes + +# Set up NVE run + +timestep 0.5e-3 +neighbor 1.0 bin +neigh_modify once no every 1 delay 0 check yes + +# Run MD + +velocity all create 300.0 4928459 +fix 1 all nve +run ${nsteps} + From a0cc6b5b59a41b24f646d218551cac1ff47b7566 Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Sat, 11 May 2019 14:04:21 -0600 Subject: [PATCH 139/311] Forgot to change pair style to nn/snap --- examples/snap/W.nnsnap | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/snap/W.nnsnap b/examples/snap/W.nnsnap index 93c2bf866a..6ca97a701a 100644 --- a/examples/snap/W.nnsnap +++ b/examples/snap/W.nnsnap @@ -9,8 +9,8 @@ variable zblz equal 74 pair_style hybrid/overlay & zbl ${zblcutinner} ${zblcutouter} & -snap +nn/snap pair_coeff 1 1 zbl ${zblz} ${zblz} -pair_coeff * * snap W_2940_2017_2.snapcoeff W_2940_2017_2.snapparam W +pair_coeff * * nn/snap W_2940_2017_2.snapcoeff W_2940_2017_2.snapparam W #Nomenclature on the snap files are Element_DakotaID_Year_Month From c581e9349adea8176de5033b5febe534f3e4aeb8 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 May 2019 16:46:21 -0400 Subject: [PATCH 140/311] update interlayer potential examples for now requiring CH.rebo potential file with rebo pair style --- doc/src/pair_ilp_graphene_hbn.txt | 2 +- doc/src/pair_kolmogorov_crespi_full.txt | 2 +- doc/src/pair_kolmogorov_crespi_z.txt | 2 +- doc/src/pair_lebedeva_z.txt | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/src/pair_ilp_graphene_hbn.txt b/doc/src/pair_ilp_graphene_hbn.txt index 3a5d4accd5..05bafd4c3c 100644 --- a/doc/src/pair_ilp_graphene_hbn.txt +++ b/doc/src/pair_ilp_graphene_hbn.txt @@ -21,7 +21,7 @@ pair_style hybrid/overlay ilp/graphene/hbn 16.0 1 pair_coeff * * ilp/graphene/hbn BNCH.ILP B N C :pre pair_style hybrid/overlay rebo tersoff ilp/graphene/hbn 16.0 coul/shield 16.0 -pair_coeff * * rebo CH.airebo NULL NULL C +pair_coeff * * rebo CH.rebo NULL NULL C pair_coeff * * tersoff BNC.tersoff B N NULL pair_coeff * * ilp/graphene/hbn BNCH.ILP B N C pair_coeff 1 1 coul/shield 0.70 diff --git a/doc/src/pair_kolmogorov_crespi_full.txt b/doc/src/pair_kolmogorov_crespi_full.txt index 05effc5620..696f2c036c 100644 --- a/doc/src/pair_kolmogorov_crespi_full.txt +++ b/doc/src/pair_kolmogorov_crespi_full.txt @@ -22,7 +22,7 @@ pair_coeff * * none pair_coeff * * kolmogorov/crespi/full CH.KC C C :pre pair_style hybrid/overlay rebo kolmogorov/crespi/full 16.0 1 -pair_coeff * * rebo CH.airebo C H +pair_coeff * * rebo CH.rebo C H pair_coeff * * kolmogorov/crespi/full CH_taper.KC C H :pre [Description:] diff --git a/doc/src/pair_kolmogorov_crespi_z.txt b/doc/src/pair_kolmogorov_crespi_z.txt index aabb3460e7..77c2868b77 100644 --- a/doc/src/pair_kolmogorov_crespi_z.txt +++ b/doc/src/pair_kolmogorov_crespi_z.txt @@ -19,7 +19,7 @@ pair_coeff * * none pair_coeff 1 2 kolmogorov/crespi/z CC.KC C C :pre pair_style hybrid/overlay rebo kolmogorov/crespi/z 14.0 -pair_coeff * * rebo CH.airebo C C +pair_coeff * * rebo CH.rebo C C pair_coeff 1 2 kolmogorov/crespi/z CC.KC C C :pre [Description:] diff --git a/doc/src/pair_lebedeva_z.txt b/doc/src/pair_lebedeva_z.txt index 9eab56d0d9..96494e46ce 100644 --- a/doc/src/pair_lebedeva_z.txt +++ b/doc/src/pair_lebedeva_z.txt @@ -19,8 +19,8 @@ pair_coeff * * none pair_coeff 1 2 lebedeva/z CC.Lebedeva C C :pre pair_style hybrid/overlay rebo lebedeva/z 14.0 -pair_coeff * * rebo CH.airebo C C -pair_coeff 1 2 lebedeva/z CC.Lebedeva C C :pre +pair_coeff * * rebo CH.rebo C C +pair_coeff 1 2 lebedeva/z CC.Lebedeva C C :pre [Description:] From 8eeb92b82b542ff4e320494786f582472f1ab32c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 May 2019 17:04:57 -0400 Subject: [PATCH 141/311] restore original coeff() code with one modification. now setflag is only set for pairs of types that both are mapped to elements (and thus not NULL) --- src/USER-MISC/pair_kolmogorov_crespi_z.cpp | 26 +++++++++------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/src/USER-MISC/pair_kolmogorov_crespi_z.cpp b/src/USER-MISC/pair_kolmogorov_crespi_z.cpp index 34217ba42c..79d6aa3daf 100644 --- a/src/USER-MISC/pair_kolmogorov_crespi_z.cpp +++ b/src/USER-MISC/pair_kolmogorov_crespi_z.cpp @@ -226,10 +226,9 @@ void PairKolmogorovCrespiZ::coeff(int narg, char **arg) error->all(FLERR,"Incorrect args for pair coefficients"); if (!allocated) allocate(); - // insure I,J args are * * - - if (strcmp(arg[0],"*") != 0 || strcmp(arg[1],"*") != 0) - error->all(FLERR,"Incorrect args for pair coefficients"); + int ilo,ihi,jlo,jhi; + force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); + force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); // read args that map atom types to elements in potential file // map[i] = which element the Ith atom type is, -1 if NULL @@ -262,23 +261,18 @@ void PairKolmogorovCrespiZ::coeff(int narg, char **arg) read_file(arg[2]); - // clear setflag since coeff() called once with I,J = * * - - n = atom->ntypes; - for (int i = 1; i <= n; i++) - for (int j = i; j <= n; j++) - setflag[i][j] = 0; - - // set setflag i,j for type pairs where both are mapped to elements + // set setflag only for i,j pairs where both are mapped to elements int count = 0; - for (int i = 1; i <= n; i++) - for (int j = i; j <= n; j++) - if (map[i] >= 0 && map[j] >= 0) { - setflag[i][j] = 1; + for (int i = ilo; i <= ihi; i++) { + for (int j = MAX(jlo,i); j <= jhi; j++) { + if ((map[i] >=0) && (map[j] >= 0)) { cut[i][j] = cut_global; + setflag[i][j] = 1; count++; } + } + } if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); } From e228555aeda9c1ec8f61b44df7f5e8fc0e19fc5a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 11 May 2019 17:05:27 -0400 Subject: [PATCH 142/311] more consistency changes for interlayer potentials --- src/USER-MISC/pair_kolmogorov_crespi_full.cpp | 2 ++ src/USER-MISC/pair_lebedeva_z.cpp | 14 +++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/USER-MISC/pair_kolmogorov_crespi_full.cpp b/src/USER-MISC/pair_kolmogorov_crespi_full.cpp index 8c15f6fe75..ee7071b1c7 100644 --- a/src/USER-MISC/pair_kolmogorov_crespi_full.cpp +++ b/src/USER-MISC/pair_kolmogorov_crespi_full.cpp @@ -46,6 +46,8 @@ using namespace LAMMPS_NS; PairKolmogorovCrespiFull::PairKolmogorovCrespiFull(LAMMPS *lmp) : Pair(lmp) { + restartinfo = 0; + // initialize element to parameter maps nelements = 0; elements = NULL; diff --git a/src/USER-MISC/pair_lebedeva_z.cpp b/src/USER-MISC/pair_lebedeva_z.cpp index 0ab22e04c1..c9d90e2850 100644 --- a/src/USER-MISC/pair_lebedeva_z.cpp +++ b/src/USER-MISC/pair_lebedeva_z.cpp @@ -44,6 +44,7 @@ using namespace LAMMPS_NS; PairLebedevaZ::PairLebedevaZ(LAMMPS *lmp) : Pair(lmp) { single_enable = 0; + restartinfo = 0; // initialize element to parameter maps nelements = 0; @@ -254,17 +255,18 @@ void PairLebedevaZ::coeff(int narg, char **arg) } } - read_file(arg[2]); - double cut_one = cut_global; + // set setflag only for i,j pairs where both are mapped to elements int count = 0; for (int i = ilo; i <= ihi; i++) { for (int j = MAX(jlo,i); j <= jhi; j++) { - cut[i][j] = cut_one; - setflag[i][j] = 1; - count++; + if ((map[i] >= 0) && (map[j] >= 0)) { + cut[i][j] = cut_global; + setflag[i][j] = 1; + count++; + } } } @@ -279,6 +281,8 @@ void PairLebedevaZ::coeff(int narg, char **arg) double PairLebedevaZ::init_one(int i, int j) { if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); + if (!offset_flag) + error->all(FLERR,"Must use 'pair_modify shift yes' with this pair style"); if (offset_flag && (cut[i][j] > 0.0)) { int iparam_ij = elem2param[map[i]][map[j]]; From d3d4b420bac708c0959b9a750ea13495dfa1f8fa Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Mon, 13 May 2019 05:02:46 -0700 Subject: [PATCH 143/311] USER-INTEL: Changes to support LAMMPS_BIGBIG in USER-INTEL + fixed check for per-atom virials + fixed check for exclusion with offload. --- src/USER-INTEL/fix_intel.cpp | 12 ++++-------- src/USER-INTEL/fix_intel.h | 4 ++-- src/USER-INTEL/intel_buffers.cpp | 13 +++++++------ src/USER-INTEL/intel_buffers.h | 9 +++++---- src/USER-INTEL/npair_full_bin_ghost_intel.cpp | 6 +++--- src/USER-INTEL/npair_intel.cpp | 6 +++--- 6 files changed, 24 insertions(+), 26 deletions(-) diff --git a/src/USER-INTEL/fix_intel.cpp b/src/USER-INTEL/fix_intel.cpp index 67bf33e751..bdc47827ab 100644 --- a/src/USER-INTEL/fix_intel.cpp +++ b/src/USER-INTEL/fix_intel.cpp @@ -34,10 +34,6 @@ #include #include -#ifdef LAMMPS_BIGBIG -#error "The USER-INTEL package is not compatible with -DLAMMPS_BIGBIG" -#endif - #ifdef _LMP_INTEL_OFFLOAD #ifndef INTEL_OFFLOAD_NOAFFINITY #include @@ -378,13 +374,13 @@ void FixIntel::setup(int vflag) if (neighbor->style != Neighbor::BIN) error->all(FLERR, "Currently, neighbor style BIN must be used with Intel package."); - if (neighbor->exclude_setting() != 0) - error->all(FLERR, - "Currently, cannot use neigh_modify exclude with Intel package."); - if (vflag_atom) + if (vflag > 3) error->all(FLERR, "Cannot currently get per-atom virials with Intel package."); #ifdef _LMP_INTEL_OFFLOAD + if (neighbor->exclude_setting() != 0) + error->all(FLERR, + "Currently, cannot use neigh_modify exclude with Intel package offload."); post_force(vflag); #endif } diff --git a/src/USER-INTEL/fix_intel.h b/src/USER-INTEL/fix_intel.h index 3810b57355..f23e305ca7 100644 --- a/src/USER-INTEL/fix_intel.h +++ b/src/USER-INTEL/fix_intel.h @@ -495,9 +495,9 @@ E: Currently, neighbor style BIN must be used with Intel package. This is the only neighbor style that has been implemented for the Intel package. -E: Currently, cannot use neigh_modify exclude with Intel package. +E: Currently, cannot use neigh_modify exclude with Intel package offload. -This is a current restriction of the Intel package. +This is a current restriction of the Intel package when built for offload. W: Unknown Intel Compiler Version diff --git a/src/USER-INTEL/intel_buffers.cpp b/src/USER-INTEL/intel_buffers.cpp index c0995b6a9c..ec3c233542 100644 --- a/src/USER-INTEL/intel_buffers.cpp +++ b/src/USER-INTEL/intel_buffers.cpp @@ -186,8 +186,8 @@ void IntelBuffers::free_nmax() { #ifdef _LMP_INTEL_OFFLOAD if (_off_map_nmax > 0) { - const int * tag = _off_map_tag; - const int * special = _off_map_special; + const tagint * tag = _off_map_tag; + const tagint * special = _off_map_special; const int * nspecial = _off_map_nspecial; #pragma offload_transfer target(mic:_cop) \ nocopy(tag:alloc_if(0) free_if(1)) \ @@ -209,7 +209,8 @@ void IntelBuffers::_grow_nmax(const int offload_end) _host_nmax = size; if (!offload_end) return; - int *special, *nspecial; + tagint *special; + int *nspecial; int tag_length, special_length, nspecial_length; if (lmp->atom->molecular) { special = lmp->atom->special[0]; @@ -226,7 +227,7 @@ void IntelBuffers::_grow_nmax(const int offload_end) tag_length = size; else tag_length = 1; - int *tag = lmp->atom->tag; + tagint *tag = lmp->atom->tag; #pragma offload_transfer target(mic:_cop) \ nocopy(tag:length(tag_length) alloc_if(1) free_if(0)) \ nocopy(special:length(special_length) alloc_if(1) free_if(0)) \ @@ -523,7 +524,7 @@ void IntelBuffers::free_ncache() flt_t *ncachez = _ncachez; int *ncachej = _ncachej; int *ncachejtype = _ncachejtype; - int *ncachetag = _ncachetag; + tagint *ncachetag = _ncachetag; #ifdef _LMP_INTEL_OFFLOAD if (_off_ncache) { @@ -603,7 +604,7 @@ void IntelBuffers::grow_ncache(const int off_flag, tsize = 16; lmp->memory->create(_ncachetag, tsize, "_ncachetag"); } - int *ncachetag = _ncachetag; + tagint *ncachetag = _ncachetag; #pragma offload_transfer target(mic:_cop) \ nocopy(ncachetag:length(tsize) alloc_if(1) free_if(0)) _off_ncache = 1; diff --git a/src/USER-INTEL/intel_buffers.h b/src/USER-INTEL/intel_buffers.h index 276b87ec5f..f3c07da7c2 100644 --- a/src/USER-INTEL/intel_buffers.h +++ b/src/USER-INTEL/intel_buffers.h @@ -132,7 +132,7 @@ class IntelBuffers { inline flt_t * get_ncachez() { return _ncachez; } inline int * get_ncachej() { return _ncachej; } inline int * get_ncachejtype() { return _ncachejtype; } - inline int * get_ncachetag() { return _ncachetag; } + inline tagint * get_ncachetag() { return _ncachetag; } inline int get_max_nbors() { int mn = lmp->neighbor->oneatom * sizeof(int) / @@ -336,7 +336,8 @@ class IntelBuffers { int _ncache_stride, _ncache_alloc; flt_t *_ncachex, *_ncachey, *_ncachez; - int *_ncachej, *_ncachejtype, *_ncachetag; + int *_ncachej, *_ncachejtype; + tagint *_ncachetag; int _need_tag, _host_nmax; @@ -352,8 +353,8 @@ class IntelBuffers { quat_t *_host_quat; vec3_acc_t *_off_f; int _off_map_nmax, _cop, _off_ccache, _off_ncache; - int *_off_map_ilist; - int *_off_map_special, *_off_map_nspecial, *_off_map_tag; + int *_off_map_ilist, *_off_map_nspecial; + tagint *_off_map_tag, *_off_map_special; int **_off_map_firstneigh, *_off_map_numneigh; bool _off_list_alloc; #endif diff --git a/src/USER-INTEL/npair_full_bin_ghost_intel.cpp b/src/USER-INTEL/npair_full_bin_ghost_intel.cpp index db4b0c50a4..e1e09fd3da 100644 --- a/src/USER-INTEL/npair_full_bin_ghost_intel.cpp +++ b/src/USER-INTEL/npair_full_bin_ghost_intel.cpp @@ -194,7 +194,7 @@ void NPairFullBinGhostIntel::fbi(const int offload, NeighList * list, flt_t * _noalias const ncachez = buffers->get_ncachez(); int * _noalias const ncachej = buffers->get_ncachej(); int * _noalias const ncachejtype = buffers->get_ncachejtype(); - int * _noalias const ncachetag = buffers->get_ncachetag(); + tagint * _noalias const ncachetag = buffers->get_ncachetag(); const int ncache_stride = buffers->ncache_stride(); const int mbinx = this->mbinx; @@ -304,7 +304,7 @@ void NPairFullBinGhostIntel::fbi(const int offload, NeighList * list, flt_t * _noalias const tz = ncachez + toffs; int * _noalias const tj = ncachej + toffs; int * _noalias const tjtype = ncachejtype + toffs; - int * _noalias const ttag = ncachetag + toffs; + tagint * _noalias const ttag = ncachetag + toffs; // loop over all atoms in other bins in stencil, store every pair int ncount, oldbin = -9999999; @@ -392,7 +392,7 @@ void NPairFullBinGhostIntel::fbi(const int offload, NeighList * list, const flt_t dely = ytmp - ty[u]; const flt_t delz = ztmp - tz[u]; const int jtype = tjtype[u]; - const int jtag = ttag[u]; + const tagint jtag = ttag[u]; const flt_t rsq = delx * delx + dely * dely + delz * delz; if (rsq > cutsq[ioffset + jtype]) addme = 0; diff --git a/src/USER-INTEL/npair_intel.cpp b/src/USER-INTEL/npair_intel.cpp index e20c437cb7..ad9ec6e7d3 100644 --- a/src/USER-INTEL/npair_intel.cpp +++ b/src/USER-INTEL/npair_intel.cpp @@ -191,7 +191,7 @@ void NPairIntel::bin_newton(const int offload, NeighList *list, flt_t * _noalias const ncachez = buffers->get_ncachez(); int * _noalias const ncachej = buffers->get_ncachej(); int * _noalias const ncachejtype = buffers->get_ncachejtype(); - int * _noalias const ncachetag = buffers->get_ncachetag(); + tagint * _noalias const ncachetag = buffers->get_ncachetag(); const int ncache_stride = buffers->ncache_stride(); int sb = 1; @@ -308,7 +308,7 @@ void NPairIntel::bin_newton(const int offload, NeighList *list, flt_t * _noalias const tz = ncachez + toffs; int * _noalias const tj = ncachej + toffs; int * _noalias const tjtype = ncachejtype + toffs; - int * _noalias const ttag = ncachetag + toffs; + tagint * _noalias const ttag = ncachetag + toffs; flt_t * _noalias itx; flt_t * _noalias ity; @@ -501,7 +501,7 @@ void NPairIntel::bin_newton(const int offload, NeighList *list, } if (THREE) { - const int jtag = ttag[u]; + const tagint jtag = ttag[u]; int flist = 0; if (itag > jtag) { if (((itag+jtag) & 1) == 0) flist = 1; From 11f223416c8b3e2a1a3cbdbbd25214b988663311 Mon Sep 17 00:00:00 2001 From: julient31 Date: Mon, 13 May 2019 16:59:39 -0600 Subject: [PATCH 144/311] Commit JT 051319 - added a cubic anisotropy in fix_precession_spin - added associated doc and examples - corrected neb/spin commands in doc/src/ - added tools/spin/ description --- doc/src/Commands_all.txt | 2 +- doc/src/Eqs/fix_spin_cubic.jpg | Bin 0 -> 25265 bytes doc/src/Eqs/fix_spin_cubic.tex | 21 +++ doc/src/Tools.txt | 15 ++ doc/src/commands_list.txt | 4 +- doc/src/fix_precession_spin.txt | 39 +++- doc/src/neb_spin.txt | 2 +- examples/SPIN/iron/in.spin.iron_cubic | 60 ++++++ examples/SPIN/nickel/in.spin.nickel_cubic | 60 ++++++ src/.gitignore | 2 + src/SPIN/fix_precession_spin.cpp | 215 +++++++++++++++++----- src/SPIN/fix_precession_spin.h | 26 ++- tools/README | 1 + 13 files changed, 392 insertions(+), 55 deletions(-) create mode 100644 doc/src/Eqs/fix_spin_cubic.jpg create mode 100644 doc/src/Eqs/fix_spin_cubic.tex create mode 100644 examples/SPIN/iron/in.spin.iron_cubic create mode 100644 examples/SPIN/nickel/in.spin.nickel_cubic diff --git a/doc/src/Commands_all.txt b/doc/src/Commands_all.txt index 52c2e67e2e..58ca148555 100644 --- a/doc/src/Commands_all.txt +++ b/doc/src/Commands_all.txt @@ -83,7 +83,7 @@ An alphabetic list of all general LAMMPS commands. "molecule"_molecule.html, "ndx2group"_group2ndx.html, "neb"_neb.html, -"neb_spin"_neb_spin.html, +"neb/spin"_neb_spin.html, "neigh_modify"_neigh_modify.html, "neighbor"_neighbor.html, "newton"_newton.html, diff --git a/doc/src/Eqs/fix_spin_cubic.jpg b/doc/src/Eqs/fix_spin_cubic.jpg new file mode 100644 index 0000000000000000000000000000000000000000..871641111c9e43edfd878c4fa138da7231b5bbd9 GIT binary patch literal 25265 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 WoxJv>LVj6aouHM1&Gt%ukNp?f^sWQ| literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/fix_spin_cubic.tex b/doc/src/Eqs/fix_spin_cubic.tex new file mode 100644 index 0000000000..9c402294d7 --- /dev/null +++ b/doc/src/Eqs/fix_spin_cubic.tex @@ -0,0 +1,21 @@ +\documentclass[preview]{standalone} +\usepackage{varwidth} +\usepackage[utf8x]{inputenc} +\usepackage{amsmath,amssymb,amsthm,bm} +\begin{document} +\begin{varwidth}{50in} + \begin{equation} + \bm{H}_{cubic} = -\sum_{{ i}=1}^{N} K_{1} + \Big[ + \left(\vec{s}_{i} \cdot \vec{n1} \right)^2 + \left(\vec{s}_{i} \cdot \vec{n2} \right)^2 + + \left(\vec{s}_{i} \cdot \vec{n2} \right)^2 + \left(\vec{s}_{i} \cdot \vec{n3} \right)^2 + + \left(\vec{s}_{i} \cdot \vec{n1} \right)^2 + \left(\vec{s}_{i} \cdot \vec{n3} \right)^2 \Big] + +K_{2}^{(c)} \left(\vec{s}_{i} \cdot \vec{n1} \right)^2 + \left(\vec{s}_{i} \cdot \vec{n2} \right)^2 + \left(\vec{s}_{i} \cdot \vec{n3} \right)^2 \nonumber + \end{equation} +\end{varwidth} +\end{document} diff --git a/doc/src/Tools.txt b/doc/src/Tools.txt index af9fd4298c..eb7b6d81b8 100644 --- a/doc/src/Tools.txt +++ b/doc/src/Tools.txt @@ -77,6 +77,7 @@ Post-processing tools :h3 "python"_#pythontools, "reax"_#reax_tool, "smd"_#smd, +"spin"_#spin, "xmgrace"_#xmgrace :tb(c=6,ea=c,a=l) Miscellaneous tools :h3 @@ -511,6 +512,20 @@ Ernst Mach Institute in Germany (georg.ganzenmueller at emi.fhg.de). :line +spin tool :h4,link(spin) + +The spin sub-directory contains a C file interpolate.c which can +be compiled and used to perform a cubic polynomial interpolation of +the MEP following a GNEB calculation. + +See the README file in tools/spin/interpolate_gneb for more details. + +This tool was written by the SPIN package author, Julien +Tranchida at Sandia National Labs (jtranch at sandia.gov, and by Aleksei +Ivanov, at University of Iceland (ali5 at hi.is). + +:line + vim tool :h4,link(vim) The files in the tools/vim directory are add-ons to the VIM editor diff --git a/doc/src/commands_list.txt b/doc/src/commands_list.txt index cf716df9ac..e224dc8096 100644 --- a/doc/src/commands_list.txt +++ b/doc/src/commands_list.txt @@ -62,12 +62,12 @@ Commands :h1 mass message min_modify - min_spin + min/spin min_style minimize molecule neb - neb_spin + neb/spin neigh_modify neighbor newton diff --git a/doc/src/fix_precession_spin.txt b/doc/src/fix_precession_spin.txt index 05814931ea..708b2bd7aa 100644 --- a/doc/src/fix_precession_spin.txt +++ b/doc/src/fix_precession_spin.txt @@ -14,19 +14,23 @@ fix ID group precession/spin style args :pre ID, group are documented in "fix"_fix.html command :ulb,l precession/spin = style name of this fix command :l -style = {zeeman} or {anisotropy} :l +style = {zeeman} or {anisotropy} or {cubic} :l {zeeman} args = H x y z H = intensity of the magnetic field (in Tesla) x y z = vector direction of the field {anisotropy} args = K x y z K = intensity of the magnetic anisotropy (in eV) x y z = vector direction of the anisotropy :pre + {cubic} args = K1 K2c n1x n1y n1x n2x n2y n2z n3x n3y n3z + K1 and K2c = intensity of the magnetic anisotropy (in eV) + n1x to n3z = three direction vectors of the cubic anisotropy :pre :ule [Examples:] fix 1 all precession/spin zeeman 0.1 0.0 0.0 1.0 -fix 1 all precession/spin anisotropy 0.001 0.0 0.0 1.0 +fix 1 3 precession/spin anisotropy 0.001 0.0 0.0 1.0 +fix 1 iron precession/spin cubic 0.001 0.0005 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 fix 1 all precession/spin zeeman 0.1 0.0 0.0 1.0 anisotropy 0.001 0.0 0.0 1.0 :pre [Description:] @@ -50,10 +54,29 @@ for the magnetic spins in the defined group: with n defining the direction of the anisotropy, and K (in eV) its intensity. If K>0, an easy axis is defined, and if K<0, an easy plane is defined. -In both cases, the choice of (x y z) imposes the vector direction for the force. -Only the direction of the vector is important; it's length is ignored. +Style {cubic} is used to simulate a cubic anisotropy, with three +possible easy axis for the magnetic spins in the defined group: -Both styles can be combined within one single command line. +:c,image(Eqs/fix_spin_cubic.jpg) + +with K1 and K2c (in eV) the intensity coefficients and +n1, n2 and n3 defining the three anisotropic directions +defined by the command (from n1x to n3z). +For n1 = (100), n2 = (010), and n3 = (001), K1 < 0 defines an +iron type anisotropy (easy axis along the (001)-type cube +edges), and K1 > 0 defines a nickel type anisotropy (easy axis +along the (111)-type cube diagonals). +K2^c > 0 also defines easy axis along the (111)-type cube +diagonals. +See chapter 2 of "(Skomski)"_#Skomski1 for more details on cubic +anisotropies. + +In all cases, the choice of (x y z) only imposes the vector +directions for the forces. Only the direction of the vector is +important; it's length is ignored (the entered vectors are +normalized). + +Those styles can be combined within one single command line. :line @@ -85,3 +108,9 @@ package"_Build_package.html doc page for more info. "atom_style spin"_atom_style.html [Default:] none + +:line + +:link(Skomski1) +[(Skomski)] Skomski, R. (2008). Simple models of magnetism. +Oxford University Press. diff --git a/doc/src/neb_spin.txt b/doc/src/neb_spin.txt index 70c0fe2ab5..7dbd924cd2 100644 --- a/doc/src/neb_spin.txt +++ b/doc/src/neb_spin.txt @@ -6,7 +6,7 @@ :line -neb command :h3 +neb/spin command :h3 [Syntax:] diff --git a/examples/SPIN/iron/in.spin.iron_cubic b/examples/SPIN/iron/in.spin.iron_cubic new file mode 100644 index 0000000000..d4703a2959 --- /dev/null +++ b/examples/SPIN/iron/in.spin.iron_cubic @@ -0,0 +1,60 @@ +# bcc iron in a 3d periodic box + +clear +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice bcc 2.8665 +region box block 0.0 5.0 0.0 5.0 0.0 5.0 +create_box 1 box +create_atoms 1 box + +# setting mass, mag. moments, and interactions for bcc iron + +mass 1 55.845 +set group all spin 2.2 -1.0 0.0 0.0 +velocity all create 100 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 3.5 +pair_coeff * * eam/alloy Fe_Mishin2006.eam.alloy Fe +pair_coeff * * spin/exchange exchange 3.4 0.02726 0.2171 1.841 +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin cubic 0.001 0.0005 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.0 21 + +fix 3 all nve/spin lattice yes +timestep 0.0001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magx equal c_out_mag[1] +variable magy equal c_out_mag[2] +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magx v_magy v_magz v_magnorm v_tmag v_emag pe etotal +thermo 50 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 100 all custom 1 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +run 2000 +# min_style spin +# min_modify alpha_damp 1.0 discrete_factor 10 +# minimize 1.0e-16 1.0e-16 10000 10000 diff --git a/examples/SPIN/nickel/in.spin.nickel_cubic b/examples/SPIN/nickel/in.spin.nickel_cubic new file mode 100644 index 0000000000..3c97b284ae --- /dev/null +++ b/examples/SPIN/nickel/in.spin.nickel_cubic @@ -0,0 +1,60 @@ +# fcc nickel in a 3d periodic box + +clear +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice fcc 3.524 +region box block 0.0 5.0 0.0 5.0 0.0 5.0 +create_box 1 box +create_atoms 1 box + +# setting mass, mag. moments, and interactions for cobalt + +mass 1 58.69 + +set group all spin/random 31 0.63 +#set group all spin 0.63 0.0 0.0 1.0 +velocity all create 100 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 4.0 +pair_coeff * * eam/alloy Ni99.eam.alloy Ni +pair_coeff * * spin/exchange exchange 4.0 0.50 0.2280246862 1.229983475 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin cubic -0.0001 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 & + zeeman 0.0 0.0 0.0 1.0 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.0 21 + +fix 3 all nve/spin lattice yes +timestep 0.0001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magnorm v_emag temp v_tmag etotal +thermo 50 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 50 all custom 1 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] + +run 2000 + diff --git a/src/.gitignore b/src/.gitignore index 9e10059ddb..764bc8c2f3 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -156,6 +156,8 @@ /fix_nve_spin.h /fix_precession_spin.cpp /fix_precession_spin.h +/fix_setforce_spin.cpp +/fix_setforce_spin.h /min_spin.cpp /min_spin.h /neb_spin.cpp diff --git a/src/SPIN/fix_precession_spin.cpp b/src/SPIN/fix_precession_spin.cpp index 9ee691c227..1ea134d367 100644 --- a/src/SPIN/fix_precession_spin.cpp +++ b/src/SPIN/fix_precession_spin.cpp @@ -25,8 +25,8 @@ #include #include #include - #include "atom.h" +#include "error.h" #include "domain.h" #include "error.h" #include "fix_precession_spin.h" @@ -35,6 +35,7 @@ #include "math_const.h" #include "memory.h" #include "modify.h" +#include "neigh_list.h" #include "respa.h" #include "update.h" #include "variable.h" @@ -71,8 +72,12 @@ FixPrecessionSpin::FixPrecessionSpin(LAMMPS *lmp, int narg, char **arg) : Fix(lm Ka = 0.0; nax = nay = naz = 0.0; Kax = Kay = Kaz = 0.0; + k1c = k2c = 0.0; + nc1x = nc1y = nc1z = 0.0; + nc2x = nc2y = nc2z = 0.0; + nc3x = nc3y = nc3z = 0.0; - zeeman_flag = aniso_flag = 0; + zeeman_flag = aniso_flag = cubic_flag = 0; int iarg = 3; while (iarg < narg) { @@ -92,14 +97,61 @@ FixPrecessionSpin::FixPrecessionSpin(LAMMPS *lmp, int narg, char **arg) : Fix(lm nay = force->numeric(FLERR,arg[iarg+3]); naz = force->numeric(FLERR,arg[iarg+4]); iarg += 5; + } else if (strcmp(arg[iarg],"cubic") == 0) { + if (iarg+2 > narg) error->all(FLERR,"Illegal fix precession/spin command"); + cubic_flag = 1; + k1c = force->numeric(FLERR,arg[iarg+1]); + k2c = force->numeric(FLERR,arg[iarg+2]); + nc1x = force->numeric(FLERR,arg[iarg+3]); + nc1y = force->numeric(FLERR,arg[iarg+4]); + nc1z = force->numeric(FLERR,arg[iarg+5]); + nc2x = force->numeric(FLERR,arg[iarg+6]); + nc2y = force->numeric(FLERR,arg[iarg+7]); + nc2z = force->numeric(FLERR,arg[iarg+8]); + nc3x = force->numeric(FLERR,arg[iarg+9]); + nc3y = force->numeric(FLERR,arg[iarg+10]); + nc3z = force->numeric(FLERR,arg[iarg+11]); + iarg += 12; } else error->all(FLERR,"Illegal precession/spin command"); } + // normalize vectors + + double inorm; + if (zeeman_flag) { + inorm = 1.0/sqrt(nhx*nhx + nhy*nhy + nhz*nhz); + nhx *= inorm; + nhy *= inorm; + nhz *= inorm; + } + + if (aniso_flag) { + inorm = 1.0/sqrt(nax*nax + nay*nay + naz*naz); + nax *= inorm; + nay *= inorm; + naz *= inorm; + } + + if (cubic_flag) { + inorm = 1.0/sqrt(nc1x*nc1x + nc1y*nc1y + nc1z*nc1z); + nc1x *= inorm; + nc1y *= inorm; + nc1z *= inorm; + inorm = 1.0/sqrt(nc2x*nc2x + nc2y*nc2y + nc2z*nc2z); + nc2x *= inorm; + nc2y *= inorm; + nc2z *= inorm; + inorm = 1.0/sqrt(nc3x*nc3x + nc3y*nc3y + nc3z*nc3z); + nc3x *= inorm; + nc3y *= inorm; + nc3z *= inorm; + } + degree2rad = MY_PI/180.0; time_origin = update->ntimestep; eflag = 0; - emag = 0.0; + eprec = 0.0; } /* ---------------------------------------------------------------------- */ @@ -130,8 +182,12 @@ void FixPrecessionSpin::init() const double mub = 5.78901e-5; // in eV/T const double gyro = mub/hbar; // in rad.THz/T - H_field *= gyro; // in rad.THz - Ka /= hbar; // in rad.THz + // convert field quantities to rad.THz + + H_field *= gyro; + Kah = Ka/hbar; + k1ch = k1c/hbar; + k2ch = k2c/hbar; if (strstr(update->integrate_style,"respa")) { ilevel_respa = ((Respa *) update->integrate)->nlevels-1; @@ -185,53 +241,60 @@ void FixPrecessionSpin::post_force(int /* vflag */) if (varflag != CONSTANT) { modify->clearstep_compute(); modify->addstep_compute(update->ntimestep + 1); - set_magneticprecession(); // update mag. field if time-dep. + set_magneticprecession(); // update mag. field if time-dep. } - double **sp = atom->sp; + int *mask = atom->mask; double **fm = atom->fm; - double spi[3], fmi[3]; + double **sp = atom->sp; const int nlocal = atom->nlocal; - + double spi[3], fmi[3], epreci; + eflag = 0; - emag = 0.0; - + eprec = 0.0; for (int i = 0; i < nlocal; i++) { - spi[0] = sp[i][0]; - spi[1] = sp[i][1]; - spi[2] = sp[i][2]; - fmi[0] = fmi[1] = fmi[2] = 0.0; + if (mask[i] & groupbit) { + epreci = 0.0; + spi[0] = sp[i][0]; + spi[1] = sp[i][1]; + spi[2] = sp[i][2]; + fmi[0] = fmi[1] = fmi[2] = 0.0; - if (zeeman_flag) { // compute Zeeman interaction - compute_zeeman(i,fmi); - emag -= (spi[0]*fmi[0] + spi[1]*fmi[1] + spi[2]*fmi[2]); + if (zeeman_flag) { // compute Zeeman interaction + compute_zeeman(i,fmi); + epreci -= hbar*(spi[0]*fmi[0] + spi[1]*fmi[1] + spi[2]*fmi[2]); + } + + if (aniso_flag) { // compute magnetic anisotropy + compute_anisotropy(spi,fmi); + epreci -= compute_anisotropy_energy(spi); + } + + if (cubic_flag) { // compute cubic anisotropy + compute_cubic(spi,fmi); + epreci -= compute_cubic_energy(spi); + } + + eprec += epreci; + fm[i][0] += fmi[0]; + fm[i][1] += fmi[1]; + fm[i][2] += fmi[2]; } - - if (aniso_flag) { // compute magnetic anisotropy - compute_anisotropy(spi,fmi); - emag -= 0.5*(spi[0]*fmi[0] + spi[1]*fmi[1] + spi[2]*fmi[2]); - } - - fm[i][0] += fmi[0]; - fm[i][1] += fmi[1]; - fm[i][2] += fmi[2]; } - emag *= hbar; } /* ---------------------------------------------------------------------- */ void FixPrecessionSpin::compute_single_precession(int i, double spi[3], double fmi[3]) { - if (zeeman_flag) { - compute_zeeman(i,fmi); - } - if (aniso_flag) { - compute_anisotropy(spi,fmi); + int *mask = atom->mask; + if (mask[i] & groupbit) { + if (zeeman_flag) compute_zeeman(i,fmi); + if (aniso_flag) compute_anisotropy(spi,fmi); + if (cubic_flag) compute_cubic(spi,fmi); } } - /* ---------------------------------------------------------------------- */ void FixPrecessionSpin::compute_zeeman(int i, double fmi[3]) @@ -254,6 +317,16 @@ void FixPrecessionSpin::compute_anisotropy(double spi[3], double fmi[3]) /* ---------------------------------------------------------------------- */ +double FixPrecessionSpin::compute_anisotropy_energy(double spi[3]) +{ + double energy = 0.0; + double scalar = nax*spi[0] + nay*spi[1] + naz*spi[2]; + energy = Ka*scalar*scalar; + return energy; +} + +/* ---------------------------------------------------------------------- */ + void FixPrecessionSpin::post_force_respa(int vflag, int ilevel, int /*iloop*/) { if (ilevel == ilevel_respa) post_force(vflag); @@ -264,17 +337,75 @@ void FixPrecessionSpin::post_force_respa(int vflag, int ilevel, int /*iloop*/) void FixPrecessionSpin::set_magneticprecession() { if (zeeman_flag) { - hx = H_field*nhx; - hy = H_field*nhy; - hz = H_field*nhz; + hx = H_field*nhx; + hy = H_field*nhy; + hz = H_field*nhz; } if (aniso_flag) { - Kax = 2.0*Ka*nax; - Kay = 2.0*Ka*nay; - Kaz = 2.0*Ka*naz; + Kax = 2.0*Kah*nax; + Kay = 2.0*Kah*nay; + Kaz = 2.0*Kah*naz; } } +/* ---------------------------------------------------------------------- + compute cubic aniso energy of spin i +------------------------------------------------------------------------- */ + +double FixPrecessionSpin::compute_cubic_energy(double spi[3]) +{ + double energy = 0.0; + double skx,sky,skz; + + skx = spi[0]*nc1x+spi[1]*nc1y+spi[2]*nc1z; + sky = spi[0]*nc2x+spi[1]*nc2y+spi[2]*nc2z; + skz = spi[0]*nc3x+spi[1]*nc3y+spi[2]*nc3z; + + energy = k1c*(skx*skx*sky*sky + sky*sky*skz*skz + skx*skx*skz*skz); + energy += k2c*skx*skx*sky*sky*skz*skz; + + return energy; +} + +/* ---------------------------------------------------------------------- + compute cubic anisotropy interaction for spin i +------------------------------------------------------------------------- */ + +void FixPrecessionSpin::compute_cubic(double spi[3], double fmi[3]) +{ + double skx,sky,skz,skx2,sky2,skz2; + double four1,four2,four3,fourx,foury,fourz; + double six1,six2,six3,sixx,sixy,sixz; + + skx = spi[0]*nc1x+spi[1]*nc1y+spi[2]*nc1z; + sky = spi[0]*nc2x+spi[1]*nc2y+spi[2]*nc2z; + skz = spi[0]*nc3x+spi[1]*nc3y+spi[2]*nc3z; + + skx2 = skx*skx; + sky2 = sky*sky; + skz2 = skz*skz; + + four1 = 2.0*skx*(sky2+skz2); + four2 = 2.0*sky*(skx2+skz2); + four3 = 2.0*skz*(skx2+sky2); + + fourx = k1ch*(nc1x*four1 + nc2x*four2 + nc3x*four3); + foury = k1ch*(nc1y*four1 + nc2y*four2 + nc3y*four3); + fourz = k1ch*(nc1z*four1 + nc2z*four2 + nc3z*four3); + + six1 = 2.0*skx*sky2*skz2; + six2 = 2.0*sky*skx2*skz2; + six3 = 2.0*skz*skx2*sky2; + + sixx = k2ch*(nc1x*six1 + nc2x*six2 + nc3x*six3); + sixy = k2ch*(nc1y*six1 + nc2y*six2 + nc3y*six3); + sixz = k2ch*(nc1z*six1 + nc2z*six2 + nc3z*six3); + + fmi[0] += fourx + sixx; + fmi[1] += foury + sixy; + fmi[2] += fourz + sixz; +} + /* ---------------------------------------------------------------------- potential energy in magnetic field ------------------------------------------------------------------------- */ @@ -284,10 +415,10 @@ double FixPrecessionSpin::compute_scalar() // only sum across procs one time if (eflag == 0) { - MPI_Allreduce(&emag,&emag_all,1,MPI_DOUBLE,MPI_SUM,world); + MPI_Allreduce(&eprec,&eprec_all,1,MPI_DOUBLE,MPI_SUM,world); eflag = 1; } - return emag_all; + return eprec_all; } /* ---------------------------------------------------------------------- */ diff --git a/src/SPIN/fix_precession_spin.h b/src/SPIN/fix_precession_spin.h index 1db4d32ae9..0037784a48 100644 --- a/src/SPIN/fix_precession_spin.h +++ b/src/SPIN/fix_precession_spin.h @@ -39,11 +39,20 @@ class FixPrecessionSpin : public Fix { void min_post_force(int); double compute_scalar(); - int zeeman_flag, aniso_flag; + int zeeman_flag, aniso_flag, cubic_flag; void compute_single_precession(int, double *, double *); void compute_zeeman(int, double *); - void compute_anisotropy(double *, double *); + + // uniaxial aniso calculations + void compute_anisotropy(double *, double *); + double compute_anisotropy_energy(double *); + + // cubic aniso calculations + + void compute_cubic(double *, double *); + double compute_cubic_energy(double *); + protected: int style; // style of the magnetic precession @@ -52,7 +61,7 @@ class FixPrecessionSpin : public Fix { int ilevel_respa; int time_origin; int eflag; - double emag, emag_all; + double eprec, eprec_all; int varflag; int magfieldstyle; @@ -67,10 +76,19 @@ class FixPrecessionSpin : public Fix { // magnetic anisotropy intensity and direction - double Ka; + double Ka; // aniso const. in eV + double Kah; // aniso const. in rad.THz double nax, nay, naz; double Kax, Kay, Kaz; // temp. force variables + // cubic anisotropy intensity + + double k1c,k2c; // cubic const. in eV + double k1ch,k2ch; // cubic const. in rad.THz + double nc1x,nc1y,nc1z; + double nc2x,nc2y,nc2z; + double nc3x,nc3y,nc3z; + void set_magneticprecession(); }; diff --git a/tools/README b/tools/README index 6bf7d6b878..54f8d86898 100644 --- a/tools/README +++ b/tools/README @@ -39,6 +39,7 @@ pymol_asphere convert LAMMPS output of ellipsoids to PyMol format python Python scripts for post-processing LAMMPS output reax Tools for analyzing output of ReaxFF simulations smd convert Smooth Mach Dynamics triangles to VTK +spin perform a cubic polynomial interpolation of a GNEB MEP vim add-ons to VIM editor for editing LAMMPS input scripts xmgrace a collection of scripts to generate xmgrace plots From 8e18f2bf7eb0bd8bbaeb8dd1bc2784ce8d54dafb Mon Sep 17 00:00:00 2001 From: julient31 Date: Mon, 13 May 2019 17:32:44 -0600 Subject: [PATCH 145/311] Commit2 JT 051319 - corrected doc issues --- doc/src/Packages_details.txt | 2 +- doc/utils/sphinx-config/false_positives.txt | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/doc/src/Packages_details.txt b/doc/src/Packages_details.txt index 352a38af84..ae967c0927 100644 --- a/doc/src/Packages_details.txt +++ b/doc/src/Packages_details.txt @@ -905,7 +905,7 @@ SPIN package :link(PKG-SPIN),h4 Model atomic magnetic spins classically, coupled to atoms moving in the usual manner via MD. Various pair, fix, and compute styles. -[Author:] Julian Tranchida (Sandia). +[Author:] Julien Tranchida (Sandia). [Supporting info:] diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 8259873222..7ee134bf3e 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -57,8 +57,10 @@ alchemical AlCu Alderton Alejandre +Aleksei alessandro Alessandro +ali aliceblue Allinger allocaters @@ -87,6 +89,7 @@ anharmonic anharmonicity aniso anisotropic +anisotropies anisotropy ansi antiquewhite @@ -1193,6 +1196,7 @@ Itsets itype itypeN iva +Ivanov Ivector Iw ixcm @@ -1249,6 +1253,7 @@ jpg JPG jpl Jth +jtranch jtype jtypeN Juelich @@ -2499,6 +2504,7 @@ sizex sj sjplimp sjtu +Skomski skyblue Skylake slateblue From 52e3aeab3307d8d4351d47937232e2b56e5b2f97 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 13 May 2019 21:05:26 -0400 Subject: [PATCH 146/311] revert incorrect changes in commands_list.txt --- doc/src/commands_list.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/commands_list.txt b/doc/src/commands_list.txt index e224dc8096..cf716df9ac 100644 --- a/doc/src/commands_list.txt +++ b/doc/src/commands_list.txt @@ -62,12 +62,12 @@ Commands :h1 mass message min_modify - min/spin + min_spin min_style minimize molecule neb - neb/spin + neb_spin neigh_modify neighbor newton From d8fb17e2cb2f53a295f4c7f9f074c723405574ac Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 14 May 2019 10:01:43 -0400 Subject: [PATCH 147/311] Step version string for next patch release --- doc/lammps.1 | 2 +- doc/src/Manual.txt | 4 ++-- src/version.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/lammps.1 b/doc/lammps.1 index db2cc16b67..ac23e7abf8 100644 --- a/doc/lammps.1 +++ b/doc/lammps.1 @@ -1,4 +1,4 @@ -.TH LAMMPS "30 April 2019" "2019-04-30" +.TH LAMMPS "15 May 2019" "2019-05-15" .SH NAME .B LAMMPS \- Molecular Dynamics Simulator. diff --git a/doc/src/Manual.txt b/doc/src/Manual.txt index b4cf8487a3..396155cc45 100644 --- a/doc/src/Manual.txt +++ b/doc/src/Manual.txt @@ -1,7 +1,7 @@ LAMMPS Users Manual - + @@ -21,7 +21,7 @@ :line LAMMPS Documentation :c,h1 -30 Apr 2019 version :c,h2 +15 May 2019 version :c,h2 "What is a LAMMPS version?"_Manual_version.html diff --git a/src/version.h b/src/version.h index 7220b2c277..0377cb9b35 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "30 Apr 2019" +#define LAMMPS_VERSION "15 May 2019" From a26dc1b356e914ed185e3a24316481c945de1578 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 14 May 2019 14:35:41 -0400 Subject: [PATCH 148/311] allow using -DLAMMPS_BIGBIG also with CMake --- cmake/CMakeLists.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 63bc168271..f4312de0fd 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1124,9 +1124,6 @@ if(PKG_OPT) endif() if(PKG_USER-INTEL) - if(LAMMPS_SIZES STREQUAL BIGBIG) - message(FATAL_ERROR "The USER-INTEL Package is not compatible with -DLAMMPS_BIGBIG") - endif() add_definitions(-DLMP_USER_INTEL) set(INTEL_ARCH "cpu" CACHE STRING "Architectures used by USER-INTEL (cpu or knl)") From 4a4dcef7b73f2f6892c2557004969f0eb11d7202 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 13 May 2019 21:51:03 -0400 Subject: [PATCH 149/311] whitespace cleanup in pair style e3b --- src/USER-MISC/pair_e3b.cpp | 280 ++++++++++++++++++------------------- 1 file changed, 140 insertions(+), 140 deletions(-) diff --git a/src/USER-MISC/pair_e3b.cpp b/src/USER-MISC/pair_e3b.cpp index 1be5f5100d..43b472594a 100644 --- a/src/USER-MISC/pair_e3b.cpp +++ b/src/USER-MISC/pair_e3b.cpp @@ -14,6 +14,11 @@ contact: stevene.strong at gmail dot com ------------------------------------------------------------------------- */ +#include +#include +#include +#include + #include "pair_e3b.h" #include "atom.h" @@ -28,11 +33,6 @@ #include "domain.h" #include "citeme.h" -#include -#include -#include -#include - //these are defined here to avoid confusing hardcoded indicies, but //they do not allow flexibility. If they are changed the code will break #define DIM 3 @@ -149,92 +149,92 @@ void PairE3B::compute(int eflag, int vflag) //two body interaction //not shifted b/c k2=4.87/A, so at cutoff (5.2A) e^(-kr) = 1e-11 if (rsq < rc2sq) { - tmpr = sqrt(rsq); - tmpexp = e2 * exp(-k2*tmpr); - fpair = k2 * tmpexp / tmpr; + tmpr = sqrt(rsq); + tmpexp = e2 * exp(-k2*tmpr); + fpair = k2 * tmpexp / tmpr; - fxtmp = delx*fpair; - fytmp = dely*fpair; - fztmp = delz*fpair; - fix += fxtmp; - fiy += fytmp; - fiz += fztmp; - f[j][0] -= fxtmp; - f[j][1] -= fytmp; - f[j][2] -= fztmp; + fxtmp = delx*fpair; + fytmp = dely*fpair; + fztmp = delz*fpair; + fix += fxtmp; + fiy += fytmp; + fiz += fztmp; + f[j][0] -= fxtmp; + f[j][1] -= fytmp; + f[j][2] -= fztmp; - if (evflag) { - ev_tally(i,j,nlocal,newton_pair,tmpexp,0.0,fpair,delx,dely,delz); - pvector[0] += tmpexp; - } + if (evflag) { + ev_tally(i,j,nlocal,newton_pair,tmpexp,0.0,fpair,delx,dely,delz); + pvector[0] += tmpexp; + } } //end if rsqmap(tag[otherO]+hh+1); - //if hydrogen atom is missing, bond potential or shake will - //catch this, so don't need to check here - //if (h<0) - // error->one(FLERR,"hydrogen atom missing"); - h = domain->closest_image(otherO,h); - pairH[npair][kk][hh] = h; + for (kk=0; kkmap(tag[otherO]+hh+1); + //if hydrogen atom is missing, bond potential or shake will + //catch this, so don't need to check here + //if (h<0) + // error->one(FLERR,"hydrogen atom missing"); + h = domain->closest_image(otherO,h); + pairH[npair][kk][hh] = h; - delxh = x[k][0] - x[h][0]; - delyh = x[k][1] - x[h][1]; - delzh = x[k][2] - x[h][2]; - rsqh = delxh*delxh + delyh*delyh + delzh*delzh; + delxh = x[k][0] - x[h][0]; + delyh = x[k][1] - x[h][1]; + delzh = x[k][2] - x[h][2]; + rsqh = delxh*delxh + delyh*delyh + delzh*delzh; - if (rsqh < rc3sq) { + if (rsqh < rc3sq) { - tmpr = sqrt(rsqh); - tmpexp = exp(-k3*tmpr); - if (tmpr > rs) { - scFact1 = rc3-tmpr; - scFact2 = sc_num + 2*tmpr; - scEng = scFact1*scFact1*scFact2*sc_denom; - scDer = k3*scEng - 6*scFact1*(rs-tmpr)*sc_denom; - } else { - scDer = k3; - scEng = 1.0; - } + tmpr = sqrt(rsqh); + tmpexp = exp(-k3*tmpr); + if (tmpr > rs) { + scFact1 = rc3-tmpr; + scFact2 = sc_num + 2*tmpr; + scEng = scFact1*scFact1*scFact2*sc_denom; + scDer = k3*scEng - 6*scFact1*(rs-tmpr)*sc_denom; + } else { + scDer = k3; + scEng = 1.0; + } - //need to keep fpair3 separate from del3 for virial - fpair3[npair][kk][hh] = scDer*tmpexp/tmpr; - tmpexp *= scEng; - exps[npair][kk][hh] = tmpexp; - del3[npair][kk][hh][0] = delxh; - del3[npair][kk][hh][1] = delyh; - del3[npair][kk][hh][2] = delzh; + //need to keep fpair3 separate from del3 for virial + fpair3[npair][kk][hh] = scDer*tmpexp/tmpr; + tmpexp *= scEng; + exps[npair][kk][hh] = tmpexp; + del3[npair][kk][hh][0] = delxh; + del3[npair][kk][hh][1] = delyh; + del3[npair][kk][hh][2] = delzh; - //accumulate global vector of sum(e^kr) - //tags start at 1, so subtract one to index sumExp - sumExp[tag[k]-1] += tmpexp; - sumExp[tag[h]-1] += tmpexp; + //accumulate global vector of sum(e^kr) + //tags start at 1, so subtract one to index sumExp + sumExp[tag[k]-1] += tmpexp; + sumExp[tag[h]-1] += tmpexp; - addedH = true; - } else { - exps [npair][kk][hh] = 0.0; - fpair3[npair][kk][hh] = 0.0; - } //if < rc3sq - } //end loop through 2 Hs - } //end for kk in NUMO - //if added a pair, check if array is too small and grow - if (addedH) { - npair++; - if (npair >= pairmax) - error->one(FLERR,"neigh is too small"); - } + addedH = true; + } else { + exps [npair][kk][hh] = 0.0; + fpair3[npair][kk][hh] = 0.0; + } //if < rc3sq + } //end loop through 2 Hs + } //end for kk in NUMO + //if added a pair, check if array is too small and grow + if (addedH) { + npair++; + if (npair >= pairmax) + error->one(FLERR,"neigh is too small"); + } } //end if < rc3deltaSq } //end for jj neigh @@ -257,77 +257,77 @@ void PairE3B::compute(int eflag, int vflag) i = pairO[ii][kk]; otherO = (kk+1)%2; partB = eb*( sumExp[tag[pairO[ii][otherO] ]-1] - + sumExp[tag[pairH[ii][otherO][0]]-1] - + sumExp[tag[pairH[ii][otherO][1]]-1] - - 2*(exps[ii][otherO][0] + exps[ii][otherO][1])); + + sumExp[tag[pairH[ii][otherO][0]]-1] + + sumExp[tag[pairH[ii][otherO][1]]-1] + - 2*(exps[ii][otherO][0] + exps[ii][otherO][1])); partC = ec*(sumExp[tag[i]-1] - exps[ii][kk][0] - exps[ii][kk][1]); for (hh=0; hhnatoms; maxID=find_maxID(); @@ -532,7 +532,7 @@ static const char cite_E3B3[] = void PairE3B::presetParam(const int flag,bool &repeatFlag,double &bondL) { if (repeatFlag) { error->all(FLERR, - "Cannot request two different sets of preset parameters"); + "Cannot request two different sets of preset parameters"); } repeatFlag=true; @@ -557,8 +557,8 @@ void PairE3B::presetParam(const int flag,bool &repeatFlag,double &bondL) { } else { char str[256]; snprintf(str,256, - "Pre-defined E3B parameters have not been set for %s units.", - update->unit_style); + "Pre-defined E3B parameters have not been set for %s units.", + update->unit_style); error->all(FLERR,str); } From 1d5ada136a8021c34f2aad7223f394a1b49b2ac1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 13 May 2019 21:51:45 -0400 Subject: [PATCH 150/311] should set one_coeff flag to 1 in potentials requiring 'pair_coeff * *' --- src/USER-MISC/pair_ilp_graphene_hbn.cpp | 1 + src/USER-MISC/pair_kolmogorov_crespi_full.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/src/USER-MISC/pair_ilp_graphene_hbn.cpp b/src/USER-MISC/pair_ilp_graphene_hbn.cpp index 0f0b8fa78f..a41c660b7b 100644 --- a/src/USER-MISC/pair_ilp_graphene_hbn.cpp +++ b/src/USER-MISC/pair_ilp_graphene_hbn.cpp @@ -47,6 +47,7 @@ using namespace LAMMPS_NS; PairILPGrapheneHBN::PairILPGrapheneHBN(LAMMPS *lmp) : Pair(lmp) { restartinfo = 0; + one_coeff = 1; // initialize element to parameter maps nelements = 0; diff --git a/src/USER-MISC/pair_kolmogorov_crespi_full.cpp b/src/USER-MISC/pair_kolmogorov_crespi_full.cpp index ee7071b1c7..e73278968d 100644 --- a/src/USER-MISC/pair_kolmogorov_crespi_full.cpp +++ b/src/USER-MISC/pair_kolmogorov_crespi_full.cpp @@ -47,6 +47,7 @@ using namespace LAMMPS_NS; PairKolmogorovCrespiFull::PairKolmogorovCrespiFull(LAMMPS *lmp) : Pair(lmp) { restartinfo = 0; + one_coeff = 1; // initialize element to parameter maps nelements = 0; From 2c51511325f0486955ae2e9eb31b074543e7cce3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 14 May 2019 15:49:41 -0400 Subject: [PATCH 151/311] update logfiles for SPIN package with cubic anisotropy --- .../SPIN/iron/log.11May18.spin.iron.g++.1 | 1115 ---------------- .../SPIN/iron/log.11May18.spin.iron.g++.4 | 1115 ---------------- .../SPIN/iron/log.30Apr19.spin.iron.g++.1 | 1117 +++++++++++++++++ .../SPIN/iron/log.30Apr19.spin.iron.g++.4 | 1117 +++++++++++++++++ .../iron/log.30Apr19.spin.iron_cubic.g++.1 | 161 +++ .../iron/log.30Apr19.spin.iron_cubic.g++.4 | 161 +++ ...el.g++.1 => log.30Apr19.spin.nickel.g++.1} | 28 +- ...el.g++.4 => log.30Apr19.spin.nickel.g++.4} | 28 +- .../log.30Apr19.spin.nickel_cubic.g++.1 | 160 +++ .../log.30Apr19.spin.nickel_cubic.g++.4 | 160 +++ 10 files changed, 2906 insertions(+), 2256 deletions(-) delete mode 100644 examples/SPIN/iron/log.11May18.spin.iron.g++.1 delete mode 100644 examples/SPIN/iron/log.11May18.spin.iron.g++.4 create mode 100644 examples/SPIN/iron/log.30Apr19.spin.iron.g++.1 create mode 100644 examples/SPIN/iron/log.30Apr19.spin.iron.g++.4 create mode 100644 examples/SPIN/iron/log.30Apr19.spin.iron_cubic.g++.1 create mode 100644 examples/SPIN/iron/log.30Apr19.spin.iron_cubic.g++.4 rename examples/SPIN/nickel/{log.11May18.spin.nickel.g++.1 => log.30Apr19.spin.nickel.g++.1} (89%) rename examples/SPIN/nickel/{log.11May18.spin.nickel.g++.4 => log.30Apr19.spin.nickel.g++.4} (89%) create mode 100644 examples/SPIN/nickel/log.30Apr19.spin.nickel_cubic.g++.1 create mode 100644 examples/SPIN/nickel/log.30Apr19.spin.nickel_cubic.g++.4 diff --git a/examples/SPIN/iron/log.11May18.spin.iron.g++.1 b/examples/SPIN/iron/log.11May18.spin.iron.g++.1 deleted file mode 100644 index 1b27478002..0000000000 --- a/examples/SPIN/iron/log.11May18.spin.iron.g++.1 +++ /dev/null @@ -1,1115 +0,0 @@ -LAMMPS (11 May 2018) -# bcc iron in a 3d periodic box - -clear -units metal -atom_style spin - -dimension 3 -boundary p p p - -# necessary for the serial algorithm (sametag) -atom_modify map array - -lattice bcc 2.8665 -Lattice spacing in x,y,z = 2.8665 2.8665 2.8665 -region box block 0.0 5.0 0.0 5.0 0.0 5.0 -create_box 1 box -Created orthogonal box = (0 0 0) to (14.3325 14.3325 14.3325) - 1 by 1 by 1 MPI processor grid -create_atoms 1 box -Created 250 atoms - Time spent = 0.000727415 secs - -# setting mass, mag. moments, and interactions for bcc iron - -mass 1 55.845 - -set group all spin/random 31 2.2 - 250 settings made for spin/random -velocity all create 100 4928459 rot yes dist gaussian - -pair_style hybrid/overlay eam/alloy spin/exchange 3.5 -pair_coeff * * eam/alloy Fe_Mishin2006.eam.alloy Fe -pair_coeff * * spin/exchange exchange 3.4 0.02726 0.2171 1.841 - -neighbor 0.1 bin -neigh_modify every 10 check yes delay 20 - -fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 -fix 2 all langevin/spin 0.0 0.0 21 - -fix 3 all nve/spin lattice yes -timestep 0.0001 - -# compute and output options - -compute out_mag all compute/spin -compute out_pe all pe -compute out_ke all ke -compute out_temp all temp - -variable magz equal c_out_mag[3] -variable magnorm equal c_out_mag[4] -variable emag equal c_out_mag[5] -variable tmag equal c_out_mag[6] - -thermo_style custom step time v_magnorm v_tmag temp v_emag ke pe etotal -thermo 50 - -compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 100 all custom 1 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] - -run 50000 -Neighbor list info ... - update every 10 steps, delay 20 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.77337 - ghost atom cutoff = 5.77337 - binsize = 2.88668, bins = 5 5 5 - 2 neighbor lists, perpetual/occasional/extra = 2 0 0 - (1) pair eam/alloy, perpetual, half/full from (2) - attributes: half, newton on - pair build: halffull/newton - stencil: none - bin: none - (2) pair spin/exchange, perpetual - attributes: full, newton on - pair build: full/bin/atomonly - stencil: full/bin/3d - bin: standard -Per MPI rank memory allocation (min/avg/max) = 7.319 | 7.319 | 7.319 Mbytes -Step Time v_magnorm v_tmag Temp v_emag KinEng PotEng TotEng - 0 0 0.076456975 9109.0924 100.00358 -0.85791269 3.2186929 -1070.8579 -1067.6392 - 50 0.005 0.076456974 9316.7659 96.663685 -0.86504718 3.1111957 -1070.7504 -1067.6392 - 100 0.01 0.076456983 9488.3743 86.965803 -0.88035771 2.7990619 -1070.4383 -1067.6392 - 150 0.015 0.076456973 9589.0566 72.421197 -0.8996913 2.3309324 -1069.9702 -1067.6392 - 200 0.02 0.076456944 9415.3095 55.633188 -0.921682 1.7905973 -1069.4298 -1067.6392 - 250 0.025 0.076456953 8878.9394 39.802206 -0.94649004 1.2810649 -1068.9203 -1067.6392 - 300 0.03 0.076457027 8203.3388 27.882295 -0.97253854 0.8974133 -1068.5366 -1067.6392 - 350 0.035 0.076457103 7720.309 21.776538 -0.99708692 0.70089477 -1068.3401 -1067.6392 - 400 0.04 0.076457117 7531.0683 21.857102 -1.0190244 0.70348778 -1068.3427 -1067.6392 - 450 0.045 0.076457072 7479.8073 26.959407 -1.0389343 0.86770942 -1068.5069 -1067.6392 - 500 0.05 0.076457001 7461.6683 34.92521 -1.0582008 1.124095 -1068.7633 -1067.6392 - 550 0.055 0.076456962 7396.1112 43.405912 -1.0785156 1.397053 -1069.0363 -1067.6392 - 600 0.06 0.076456997 7121.894 50.544844 -1.102048 1.626825 -1069.2661 -1067.6392 - 650 0.065 0.076457079 6683.4805 55.261218 -1.1296588 1.7786252 -1069.4179 -1067.6392 - 700 0.07 0.076457136 6313.6896 57.25083 -1.1595102 1.8426624 -1069.4819 -1067.6392 - 750 0.075 0.076457132 6199.0363 56.934336 -1.1893875 1.8324758 -1069.4717 -1067.6392 - 800 0.08 0.076457116 6265.997 55.266343 -1.2181223 1.7787901 -1069.418 -1067.6392 - 850 0.085 0.076457116 6326.5886 53.376453 -1.2443326 1.7179626 -1069.3572 -1067.6392 - 900 0.09 0.076457121 6336.1261 52.279557 -1.2676425 1.6826581 -1069.3219 -1067.6392 - 950 0.095 0.076457122 6288.4204 52.667743 -1.2902335 1.6951522 -1069.3344 -1067.6392 - 1000 0.1 0.076457135 6122.1622 54.684094 -1.314147 1.76005 -1069.3993 -1067.6392 - 1050 0.105 0.076457155 5830.2219 57.880399 -1.3392396 1.8629256 -1069.5022 -1067.6392 - 1100 0.11 0.076457162 5477.4214 61.505616 -1.3662331 1.979606 -1069.6188 -1067.6392 - 1150 0.115 0.076457195 5194.1423 64.810972 -1.3984474 2.0859914 -1069.7252 -1067.6392 - 1200 0.12 0.076457219 5096.2484 67.147472 -1.438326 2.1611935 -1069.8004 -1067.6392 - 1250 0.125 0.076457214 5180.7444 67.957533 -1.4822383 2.1872659 -1069.8265 -1067.6392 - 1300 0.13 0.076457208 5332.4483 66.96652 -1.5226303 2.1553694 -1069.7946 -1067.6392 - 1350 0.135 0.076457225 5441.1287 64.471602 -1.5553539 2.0750686 -1069.7143 -1067.6392 - 1400 0.14 0.076457244 5466.8622 61.292592 -1.5804721 1.9727496 -1069.612 -1067.6392 - 1450 0.145 0.07645724 5403.309 58.518161 -1.6006864 1.8834524 -1069.5227 -1067.6392 - 1500 0.15 0.076457224 5275.2171 57.1713 -1.6196756 1.8401027 -1069.4793 -1067.6392 - 1550 0.155 0.076457217 5122.7481 57.878063 -1.6407322 1.8628504 -1069.5021 -1067.6392 - 1600 0.16 0.076457217 4968.5049 60.639452 -1.6657935 1.9517278 -1069.591 -1067.6392 - 1650 0.165 0.076457208 4850.1861 64.668839 -1.690847 2.0814168 -1069.7206 -1067.6392 - 1700 0.17 0.076457217 4809.0194 68.693586 -1.7087416 2.2109564 -1069.8502 -1067.6392 - 1750 0.175 0.076457274 4835.8611 71.611033 -1.7188587 2.3048567 -1069.9441 -1067.6392 - 1800 0.18 0.076457318 4929.7428 72.815077 -1.7280248 2.3436098 -1069.9828 -1067.6392 - 1850 0.185 0.076457279 5036.6365 72.102335 -1.7426092 2.3206696 -1069.9599 -1067.6392 - 1900 0.19 0.076457222 5116.2436 69.579977 -1.7638235 2.2394856 -1069.8787 -1067.6392 - 1950 0.195 0.076457228 5207.2334 65.715745 -1.7895824 2.1151122 -1069.7543 -1067.6392 - 2000 0.2 0.076457288 5216.0413 61.340972 -1.8174915 1.9743068 -1069.6135 -1067.6392 - 2050 0.205 0.076457267 5023.1601 57.468628 -1.8456914 1.8496724 -1069.4889 -1067.6392 - 2100 0.21 0.076457198 4748.7818 55.033266 -1.8742291 1.7712884 -1069.4105 -1067.6392 - 2150 0.215 0.076457199 4558.1302 54.573806 -1.9035225 1.7565003 -1069.3957 -1067.6392 - 2200 0.22 0.076457185 4483.1644 56.074241 -1.9322669 1.804793 -1069.444 -1067.6392 - 2250 0.225 0.076457114 4430.1583 59.0552 -1.9577399 1.9007374 -1069.54 -1067.6392 - 2300 0.23 0.076457092 4353.7973 62.874849 -1.9801275 2.0236758 -1069.6629 -1067.6392 - 2350 0.235 0.076457145 4303.5275 66.892738 -2.0022129 2.1529947 -1069.7922 -1067.6392 - 2400 0.24 0.076457171 4258.6889 70.426826 -2.0233072 2.2667421 -1069.906 -1067.6392 - 2450 0.245 0.076457169 4178.5775 72.910422 -2.0405304 2.3466785 -1069.9859 -1067.6392 - 2500 0.25 0.07645717 4114.786 74.106367 -2.0531755 2.3851709 -1070.0244 -1067.6392 - 2550 0.255 0.076457136 4067.5017 74.169349 -2.0634674 2.3871981 -1070.0264 -1067.6392 - 2600 0.26 0.076457099 4045.3324 73.586199 -2.0755814 2.3684289 -1070.0077 -1067.6392 - 2650 0.265 0.076457099 4137.898 72.914235 -2.0913646 2.3468012 -1069.986 -1067.6392 - 2700 0.27 0.076457106 4332.063 72.583192 -2.1091075 2.3361464 -1069.9754 -1067.6392 - 2750 0.275 0.07645709 4465.1953 72.814559 -2.125099 2.3435931 -1069.9828 -1067.6392 - 2800 0.28 0.076457051 4516.5192 73.652154 -2.1371914 2.3705517 -1070.0098 -1067.6392 - 2850 0.285 0.076457019 4555.5962 75.060211 -2.1489378 2.4158711 -1070.0551 -1067.6392 - 2900 0.29 0.076457069 4544.2734 76.844795 -2.1667679 2.4733094 -1070.1125 -1067.6392 - 2950 0.295 0.076457172 4460.2109 78.48171 -2.1924421 2.5259948 -1070.1652 -1067.6392 - 3000 0.3 0.076457219 4323.2746 79.20682 -2.2209955 2.549333 -1070.1886 -1067.6392 - 3050 0.305 0.076457213 4155.688 78.543529 -2.2505299 2.5279844 -1070.1672 -1067.6392 - 3100 0.31 0.076457203 3969.6188 76.554785 -2.2858382 2.4639752 -1070.1032 -1067.6392 - 3150 0.315 0.076457187 3761.432 73.396149 -2.3245055 2.362312 -1070.0015 -1067.6392 - 3200 0.32 0.076457142 3602.8035 69.313196 -2.3577056 2.230899 -1069.8701 -1067.6392 - 3250 0.325 0.076457116 3505.707 65.032482 -2.3836874 2.0931209 -1069.7324 -1067.6392 - 3300 0.33 0.07645716 3424.8795 61.551539 -2.4057167 1.9810841 -1069.6203 -1067.6392 - 3350 0.335 0.076457236 3335.9672 59.709703 -2.4251844 1.9218031 -1069.561 -1067.6392 - 3400 0.34 0.076457298 3238.0186 60.026953 -2.4425501 1.9320141 -1069.5712 -1067.6392 - 3450 0.345 0.076457297 3185.0674 62.613739 -2.4593531 2.0152718 -1069.6545 -1067.6392 - 3500 0.35 0.07645723 3197.4087 67.011871 -2.4756907 2.1568291 -1069.7961 -1067.6392 - 3550 0.355 0.076457177 3216.1428 72.316209 -2.4911379 2.3275533 -1069.9668 -1067.6392 - 3600 0.36 0.076457165 3241.0326 77.550071 -2.5083858 2.4960092 -1070.1352 -1067.6392 - 3650 0.365 0.076457168 3309.6874 81.877688 -2.5306273 2.6352969 -1070.2745 -1067.6392 - 3700 0.37 0.07645718 3350.748 84.764646 -2.5595247 2.7282159 -1070.3674 -1067.6392 - 3750 0.375 0.07645721 3368.085 86.031781 -2.5938559 2.7689996 -1070.4082 -1067.6392 - 3800 0.38 0.076457208 3425.3173 85.733048 -2.6266899 2.7593847 -1070.3986 -1067.6392 - 3850 0.385 0.076457165 3420.4429 84.240647 -2.6514805 2.7113506 -1070.3506 -1067.6392 - 3900 0.39 0.076457146 3323.0403 82.320886 -2.6700966 2.6495616 -1070.2888 -1067.6392 - 3950 0.395 0.076457179 3273.2625 80.780607 -2.6892405 2.5999865 -1070.2392 -1067.6392 - 4000 0.4 0.076457229 3313.2671 79.92769 -2.709641 2.5725347 -1070.2118 -1067.6392 - 4050 0.405 0.076457272 3381.1117 79.663389 -2.7291493 2.564028 -1070.2033 -1067.6392 - 4100 0.41 0.07645731 3373.3005 79.895158 -2.7514856 2.5714877 -1070.2107 -1067.6392 - 4150 0.415 0.076457296 3279.6989 80.402828 -2.7788004 2.5878274 -1070.2271 -1067.6392 - 4200 0.42 0.076457251 3197.0478 80.770336 -2.8064773 2.599656 -1070.2389 -1067.6392 - 4250 0.425 0.076457243 3160.9065 80.756747 -2.8307967 2.5992186 -1070.2385 -1067.6392 - 4300 0.43 0.076457282 3173.9599 80.446488 -2.852192 2.5892326 -1070.2285 -1067.6392 - 4350 0.435 0.076457289 3185.8003 80.110494 -2.8726607 2.5784184 -1070.2177 -1067.6392 - 4400 0.44 0.076457262 3166.3054 80.045036 -2.8936787 2.5763116 -1070.2155 -1067.6392 - 4450 0.445 0.076457226 3177.4332 80.500194 -2.9171408 2.5909612 -1070.2302 -1067.6392 - 4500 0.45 0.076457174 3238.8362 81.573722 -2.9447352 2.6255135 -1070.2647 -1067.6392 - 4550 0.455 0.07645714 3277.7104 83.104228 -2.975052 2.6747741 -1070.314 -1067.6392 - 4600 0.46 0.076457157 3224.8571 84.845473 -3.0065552 2.7308174 -1070.37 -1067.6392 - 4650 0.465 0.076457215 3112.9952 86.608217 -3.03972 2.7875527 -1070.4268 -1067.6392 - 4700 0.47 0.076457254 3001.141 88.18732 -3.074928 2.8383773 -1070.4776 -1067.6392 - 4750 0.475 0.076457235 2904.0735 89.204263 -3.1082127 2.8711084 -1070.5103 -1067.6392 - 4800 0.48 0.076457195 2832.0276 89.24571 -3.134302 2.8724424 -1070.5117 -1067.6392 - 4850 0.485 0.076457172 2833.7453 88.206351 -3.1541802 2.8389899 -1070.4782 -1067.6392 - 4900 0.49 0.076457184 2941.993 86.310712 -3.1725372 2.7779773 -1070.4172 -1067.6392 - 4950 0.495 0.076457228 3082.4825 84.029047 -3.1931038 2.7045401 -1070.3438 -1067.6392 - 5000 0.5 0.07645727 3155.7095 81.99875 -3.2175967 2.6391934 -1070.2784 -1067.6392 - 5050 0.505 0.076457297 3162.1875 80.72053 -3.2420203 2.5980529 -1070.2373 -1067.6392 - 5100 0.51 0.076457279 3133.3889 80.483768 -3.2606472 2.5904325 -1070.2297 -1067.6392 - 5150 0.515 0.076457223 3144.6361 81.566513 -3.2759117 2.6252815 -1070.2645 -1067.6392 - 5200 0.52 0.076457166 3156.8183 84.062018 -3.2944729 2.7056013 -1070.3448 -1067.6392 - 5250 0.525 0.076457128 3059.9886 87.694328 -3.3209415 2.82251 -1070.4617 -1067.6392 - 5300 0.53 0.076457126 2891.6506 91.782947 -3.3547324 2.9541054 -1070.5933 -1067.6392 - 5350 0.535 0.076457151 2751.9451 95.417928 -3.3914125 3.0711001 -1070.7103 -1067.6392 - 5400 0.54 0.07645725 2681.0265 97.845096 -3.4276651 3.1492204 -1070.7885 -1067.6392 - 5450 0.545 0.076457325 2657.0871 98.736021 -3.4632111 3.1778955 -1070.8171 -1067.6392 - 5500 0.55 0.076457263 2653.1919 98.075727 -3.4957627 3.1566434 -1070.7959 -1067.6392 - 5550 0.555 0.076457185 2644.2053 96.114963 -3.5208827 3.0935347 -1070.7328 -1067.6392 - 5600 0.56 0.076457195 2622.4174 93.525807 -3.5389264 3.0102007 -1070.6494 -1067.6392 - 5650 0.565 0.07645725 2616.3851 91.264369 -3.5558733 2.9374145 -1070.5766 -1067.6392 - 5700 0.57 0.076457256 2608.2454 90.135397 -3.5771374 2.9010777 -1070.5403 -1067.6392 - 5750 0.575 0.076457193 2573.217 90.456889 -3.6030061 2.9114252 -1070.5507 -1067.6392 - 5800 0.58 0.076457145 2565.3325 92.099499 -3.6318265 2.9642939 -1070.6035 -1067.6392 - 5850 0.585 0.076457161 2566.2763 94.62532 -3.6627041 3.0455894 -1070.6848 -1067.6392 - 5900 0.59 0.076457186 2564.6814 97.321391 -3.6927592 3.1323645 -1070.7716 -1067.6392 - 5950 0.595 0.076457195 2570.6317 99.384979 -3.7170023 3.1987827 -1070.838 -1067.6392 - 6000 0.6 0.076457206 2556.8466 100.3814 -3.7363622 3.2308533 -1070.8701 -1067.6392 - 6050 0.605 0.076457195 2521.7989 100.35237 -3.7587516 3.2299188 -1070.8692 -1067.6392 - 6100 0.61 0.076457175 2476.1857 99.370382 -3.7869326 3.1983129 -1070.8375 -1067.6392 - 6150 0.615 0.076457178 2397.2805 97.465979 -3.8168635 3.1370182 -1070.7763 -1067.6392 - 6200 0.62 0.07645713 2286.8528 94.931714 -3.8450242 3.0554509 -1070.6947 -1067.6392 - 6250 0.625 0.076457116 2250.5238 92.438461 -3.8722441 2.9752036 -1070.6144 -1067.6392 - 6300 0.63 0.076457156 2338.521 90.714356 -3.9006124 2.9197119 -1070.5589 -1067.6392 - 6350 0.635 0.07645717 2433.0115 90.142291 -3.9291158 2.9012996 -1070.5405 -1067.6392 - 6400 0.64 0.076457159 2467.5348 90.771111 -3.9562691 2.9215387 -1070.5608 -1067.6392 - 6450 0.645 0.076457107 2475.8592 92.488016 -3.9828131 2.9767986 -1070.616 -1067.6392 - 6500 0.65 0.0764571 2489.7418 95.127451 -4.0122141 3.0617508 -1070.701 -1067.6392 - 6550 0.655 0.076457169 2500.4747 98.171693 -4.0419177 3.1597321 -1070.799 -1067.6392 - 6600 0.66 0.076457208 2530.7924 100.74938 -4.0631997 3.242697 -1070.8819 -1067.6392 - 6650 0.665 0.076457205 2539.1274 102.26227 -4.0743158 3.2913904 -1070.9306 -1067.6392 - 6700 0.67 0.076457193 2456.6296 102.74328 -4.083416 3.3068723 -1070.9461 -1067.6392 - 6750 0.675 0.076457138 2387.5795 102.56259 -4.0973623 3.3010567 -1070.9403 -1067.6392 - 6800 0.68 0.076457109 2401.1036 102.04306 -4.113996 3.284335 -1070.9236 -1067.6392 - 6850 0.685 0.076457149 2426.9334 101.49407 -4.1282015 3.2666654 -1070.9059 -1067.6392 - 6900 0.69 0.076457185 2389.4808 101.35428 -4.1401792 3.2621662 -1070.9014 -1067.6392 - 6950 0.695 0.076457175 2323.8732 101.97431 -4.1517617 3.2821222 -1070.9214 -1067.6392 - 7000 0.7 0.076457145 2273.8742 103.4638 -4.1630859 3.3300628 -1070.9693 -1067.6392 - 7050 0.705 0.076457126 2231.6619 105.80757 -4.1770066 3.4054989 -1071.0447 -1067.6392 - 7100 0.71 0.076457114 2185.0913 108.81901 -4.1989399 3.5024243 -1071.1417 -1067.6392 - 7150 0.715 0.076457137 2139.1488 111.85718 -4.2283649 3.60021 -1071.2394 -1067.6392 - 7200 0.72 0.076457149 2101.4843 113.84985 -4.2560033 3.6643459 -1071.3036 -1067.6392 - 7250 0.725 0.07645712 2118.2459 113.9441 -4.2761251 3.6673792 -1071.3066 -1067.6392 - 7300 0.73 0.076457121 2191.8612 111.95162 -4.2925363 3.6032496 -1071.2425 -1067.6392 - 7350 0.735 0.076457137 2227.2133 108.21226 -4.3103732 3.4828957 -1071.1221 -1067.6392 - 7400 0.74 0.076457111 2182.8818 103.43153 -4.3300151 3.329024 -1070.9683 -1067.6392 - 7450 0.745 0.076457109 2101.9195 98.839733 -4.354205 3.1812335 -1070.8205 -1067.6392 - 7500 0.75 0.076457149 2036.6331 95.828658 -4.3866968 3.0843197 -1070.7235 -1067.6392 - 7550 0.755 0.076457161 1994.7766 95.143411 -4.4221882 3.0622645 -1070.7015 -1067.6392 - 7600 0.76 0.076457127 1970.8688 96.749372 -4.4522754 3.1139536 -1070.7532 -1067.6392 - 7650 0.765 0.076457086 1994.0036 100.15642 -4.4763519 3.223612 -1070.8628 -1067.6392 - 7700 0.77 0.076457048 2073.628 104.50472 -4.498005 3.3635656 -1071.0028 -1067.6392 - 7750 0.775 0.076457027 2167.9613 108.65949 -4.5168957 3.49729 -1071.1365 -1067.6392 - 7800 0.78 0.07645702 2217.2571 111.71851 -4.5326316 3.5957471 -1071.235 -1067.6392 - 7850 0.785 0.076457018 2202.7741 113.32785 -4.548779 3.6475449 -1071.2868 -1067.6392 - 7900 0.79 0.076457015 2164.9013 113.50963 -4.5689927 3.6533954 -1071.2926 -1067.6392 - 7950 0.795 0.076457037 2130.7469 112.46016 -4.5932603 3.6196176 -1071.2589 -1067.6392 - 8000 0.8 0.076457043 2075.0145 110.59865 -4.6198672 3.5597035 -1071.1989 -1067.6392 - 8050 0.805 0.076457061 2007.4917 108.6927 -4.6506917 3.4983589 -1071.1376 -1067.6392 - 8100 0.81 0.076457077 1991.5702 107.59433 -4.6877068 3.4630069 -1071.1022 -1067.6392 - 8150 0.815 0.07645708 2031.0743 107.95739 -4.7305236 3.4746923 -1071.1139 -1067.6392 - 8200 0.82 0.076457089 2054.3404 109.99515 -4.7756305 3.5402792 -1071.1795 -1067.6392 - 8250 0.825 0.076457091 2082.2542 113.4122 -4.8195703 3.6502597 -1071.2895 -1067.6392 - 8300 0.83 0.076457089 2137.8944 117.42257 -4.8606167 3.7793367 -1071.4186 -1067.6392 - 8350 0.835 0.076457127 2145.0506 120.77123 -4.8931181 3.8871159 -1071.5263 -1067.6392 - 8400 0.84 0.076457184 2101.9996 122.34334 -4.9126837 3.9377155 -1071.5769 -1067.6392 - 8450 0.845 0.076457201 2057.1092 121.73484 -4.921619 3.9181301 -1071.5574 -1067.6392 - 8500 0.85 0.076457149 2005.1132 119.2385 -4.9251343 3.8377838 -1071.477 -1067.6392 - 8550 0.855 0.076457098 1942.6247 115.64537 -4.9291799 3.722136 -1071.3614 -1067.6392 - 8600 0.86 0.076457115 1910.1502 111.98317 -4.9396222 3.6042654 -1071.2435 -1067.6392 - 8650 0.865 0.076457185 1943.3663 109.19353 -4.9603011 3.5144784 -1071.1537 -1067.6392 - 8700 0.87 0.076457254 2019.4182 107.80177 -4.9898541 3.4696837 -1071.1089 -1067.6392 - 8750 0.875 0.076457249 2073.1225 107.76716 -5.0205034 3.4685697 -1071.1078 -1067.6392 - 8800 0.88 0.076457175 2088.6545 108.72646 -5.0437829 3.4994455 -1071.1387 -1067.6392 - 8850 0.885 0.076457093 2077.5406 110.36499 -5.0572565 3.5521827 -1071.1914 -1067.6392 - 8900 0.89 0.076457088 2039.5392 112.51291 -5.0650529 3.6213154 -1071.2605 -1067.6392 - 8950 0.895 0.076457167 2016.6853 114.99374 -5.0744542 3.7011627 -1071.3404 -1067.6392 - 9000 0.9 0.076457241 2000.3012 117.47475 -5.0917242 3.781016 -1071.4202 -1067.6392 - 9050 0.905 0.076457226 1957.0091 119.35854 -5.1139655 3.8416472 -1071.4809 -1067.6392 - 9100 0.91 0.076457166 1923.1545 120.23087 -5.1350957 3.869724 -1071.509 -1067.6392 - 9150 0.915 0.076457128 1933.618 120.11319 -5.1511544 3.8659364 -1071.5052 -1067.6392 - 9200 0.92 0.076457114 1961.4473 119.3017 -5.1596749 3.8398178 -1071.4791 -1067.6392 - 9250 0.925 0.076457136 1962.1 118.34889 -5.1642618 3.8091509 -1071.4484 -1067.6392 - 9300 0.93 0.076457156 1942.9357 117.84262 -5.1720815 3.7928561 -1071.4321 -1067.6392 - 9350 0.935 0.076457138 1911.4886 118.10075 -5.1877615 3.8011641 -1071.4404 -1067.6392 - 9400 0.94 0.076457123 1890.6033 118.99959 -5.2079977 3.830094 -1071.4693 -1067.6392 - 9450 0.945 0.076457145 1911.9879 120.23989 -5.2265042 3.8700141 -1071.5092 -1067.6392 - 9500 0.95 0.076457172 1944.8053 121.67513 -5.2423826 3.9162086 -1071.5554 -1067.6392 - 9550 0.955 0.076457175 1950.6137 123.16708 -5.2566963 3.9642282 -1071.6035 -1067.6392 - 9600 0.96 0.076457174 1953.467 124.46943 -5.2686278 4.0061451 -1071.6454 -1067.6392 - 9650 0.965 0.076457174 1991.321 125.52237 -5.2816008 4.0400348 -1071.6793 -1067.6392 - 9700 0.97 0.076457153 2064.4494 126.48746 -5.3037304 4.0710971 -1071.7103 -1067.6392 - 9750 0.975 0.076457119 2117.0576 127.38593 -5.3401962 4.100015 -1071.7392 -1067.6392 - 9800 0.98 0.076457147 2129.8396 127.90735 -5.38872 4.1167973 -1071.756 -1067.6392 - 9850 0.985 0.076457201 2114.5902 127.47883 -5.4369444 4.103005 -1071.7422 -1067.6392 - 9900 0.99 0.076457216 2054.2807 125.71916 -5.4695662 4.0463688 -1071.6856 -1067.6392 - 9950 0.995 0.076457168 1984.2158 123.01154 -5.4834672 3.9592219 -1071.5985 -1067.6392 - 10000 1 0.076457131 1962.6658 120.32305 -5.4872199 3.8726906 -1071.5119 -1067.6392 - 10050 1.005 0.076457159 1973.2973 118.61523 -5.4922129 3.8177233 -1071.457 -1067.6392 - 10100 1.01 0.076457216 1957.9424 118.36973 -5.5066432 3.8098215 -1071.4491 -1067.6392 - 10150 1.015 0.076457197 1942.1125 119.27525 -5.5290592 3.8389666 -1071.4782 -1067.6392 - 10200 1.02 0.076457142 1978.3009 120.6949 -5.5571675 3.8846591 -1071.5239 -1067.6392 - 10250 1.025 0.076457171 2058.9652 122.05983 -5.5914809 3.9285903 -1071.5678 -1067.6392 - 10300 1.03 0.07645722 2104.5325 122.92754 -5.6303584 3.9565181 -1071.5958 -1067.6392 - 10350 1.035 0.07645723 2072.9687 123.15237 -5.6697758 3.9637547 -1071.603 -1067.6392 - 10400 1.04 0.076457234 2012.912 123.02584 -5.7067292 3.9596822 -1071.5989 -1067.6392 - 10450 1.045 0.076457242 1971.6903 123.23438 -5.7426231 3.9663941 -1071.6056 -1067.6392 - 10500 1.05 0.0764573 1932.8929 124.43675 -5.7779702 4.0050935 -1071.6443 -1067.6392 - 10550 1.055 0.076457357 1892.1027 126.80016 -5.8082237 4.0811614 -1071.7204 -1067.6392 - 10600 1.06 0.076457317 1911.4422 130.09167 -5.8347562 4.1871012 -1071.8263 -1067.6392 - 10650 1.065 0.076457251 1994.4648 133.74505 -5.8634891 4.3046881 -1071.9439 -1067.6392 - 10700 1.07 0.076457242 2058.3043 136.94864 -5.8957766 4.4077983 -1072.047 -1067.6392 - 10750 1.075 0.076457284 2065.4421 138.83647 -5.9266133 4.4685595 -1072.1078 -1067.6392 - 10800 1.08 0.076457341 2054.3284 138.84647 -5.9519915 4.4688815 -1072.1081 -1067.6392 - 10850 1.085 0.076457339 2019.0718 136.8565 -5.9690783 4.4048328 -1072.0441 -1067.6392 - 10900 1.09 0.076457316 1950.5439 133.30535 -5.9772058 4.290536 -1071.9298 -1067.6392 - 10950 1.095 0.076457386 1880.7681 129.31046 -5.9839906 4.1619576 -1071.8012 -1067.6392 - 11000 1.1 0.076457422 1858.5762 126.17301 -5.9991286 4.0609761 -1071.7002 -1067.6392 - 11050 1.105 0.076457344 1895.8864 124.66179 -6.0225804 4.0123366 -1071.6516 -1067.6392 - 11100 1.11 0.076457251 1940.5442 124.88033 -6.0460181 4.0193704 -1071.6586 -1067.6392 - 11150 1.115 0.076457202 1961.4346 126.74742 -6.0683173 4.0794642 -1071.7187 -1067.6392 - 11200 1.12 0.076457268 1940.4836 129.91024 -6.0923522 4.1812618 -1071.8205 -1067.6392 - 11250 1.125 0.07645736 1893.8666 133.48134 -6.1129806 4.2962004 -1071.9354 -1067.6392 - 11300 1.13 0.076457404 1883.0365 136.68921 -6.127246 4.3994482 -1072.0387 -1067.6392 - 11350 1.135 0.076457466 1882.1011 139.1981 -6.1379481 4.480199 -1072.1194 -1067.6392 - 11400 1.14 0.076457485 1867.5435 140.91567 -6.1513193 4.5354803 -1072.1747 -1067.6392 - 11450 1.145 0.076457418 1847.4052 141.74281 -6.1759478 4.5621023 -1072.2013 -1067.6392 - 11500 1.15 0.076457338 1813.6291 141.28184 -6.2119682 4.5472657 -1072.1865 -1067.6392 - 11550 1.155 0.076457333 1784.6892 139.23575 -6.2525061 4.4814106 -1072.1206 -1067.6392 - 11600 1.16 0.076457369 1755.4332 135.80671 -6.2888206 4.3710442 -1072.0103 -1067.6392 - 11650 1.165 0.076457401 1699.9293 131.63594 -6.3110048 4.236805 -1071.876 -1067.6392 - 11700 1.17 0.076457404 1653.9907 128.00726 -6.3221466 4.120013 -1071.7592 -1067.6392 - 11750 1.175 0.076457374 1643.4316 126.38341 -6.3360107 4.067748 -1071.707 -1067.6392 - 11800 1.18 0.07645738 1673.0949 127.37545 -6.3582141 4.0996777 -1071.7389 -1067.6392 - 11850 1.185 0.076457443 1718.7225 130.55123 -6.3857492 4.2018928 -1071.8411 -1067.6392 - 11900 1.19 0.076457444 1724.682 134.87067 -6.4146926 4.3409171 -1071.9801 -1067.6392 - 11950 1.195 0.076457414 1724.3414 139.24431 -6.4451679 4.4816863 -1072.1209 -1067.6392 - 12000 1.2 0.07645743 1749.066 142.81679 -6.4797792 4.5966692 -1072.2359 -1067.6392 - 12050 1.205 0.076457426 1742.2617 144.86234 -6.5158489 4.6625067 -1072.3017 -1067.6392 - 12100 1.21 0.076457401 1675.5507 144.96503 -6.548258 4.6658119 -1072.305 -1067.6392 - 12150 1.215 0.076457385 1610.7217 143.28189 -6.5749551 4.6116388 -1072.2509 -1067.6392 - 12200 1.22 0.07645736 1594.8876 140.48135 -6.5962025 4.5215012 -1072.1607 -1067.6392 - 12250 1.225 0.076457308 1625.0427 137.50616 -6.6145044 4.4257425 -1072.065 -1067.6392 - 12300 1.23 0.076457299 1685.9568 135.20765 -6.6302129 4.3517632 -1071.991 -1067.6392 - 12350 1.235 0.07645735 1733.821 134.30584 -6.6414385 4.3227378 -1071.962 -1067.6392 - 12400 1.24 0.076457353 1729.246 135.30039 -6.6446018 4.3547479 -1071.994 -1067.6392 - 12450 1.245 0.076457334 1680.067 138.31057 -6.6400277 4.4516331 -1072.0909 -1067.6392 - 12500 1.25 0.076457325 1617.8899 143.09184 -6.6404768 4.6055219 -1072.2448 -1067.6392 - 12550 1.255 0.07645726 1599.1888 148.81179 -6.6580865 4.7896229 -1072.4289 -1067.6392 - 12600 1.26 0.076457209 1658.9431 154.06138 -6.6888278 4.9585849 -1072.5978 -1067.6392 - 12650 1.265 0.07645722 1736.4699 157.49898 -6.7220069 5.0692269 -1072.7085 -1067.6392 - 12700 1.27 0.076457274 1779.2323 158.32957 -6.7551291 5.09596 -1072.7352 -1067.6392 - 12750 1.275 0.076457311 1789.9676 156.14983 -6.7885643 5.0258035 -1072.665 -1067.6392 - 12800 1.28 0.076457268 1802.2393 151.08471 -6.8186653 4.8627787 -1072.502 -1067.6392 - 12850 1.285 0.076457196 1818.1637 144.48302 -6.8490939 4.650298 -1072.2895 -1067.6392 - 12900 1.29 0.076457211 1817.2314 138.47831 -6.8873527 4.4570318 -1072.0963 -1067.6392 - 12950 1.295 0.076457276 1820.0753 134.61334 -6.9279428 4.3326347 -1071.9719 -1067.6392 - 13000 1.3 0.076457312 1845.4907 133.46496 -6.9596793 4.2956734 -1071.9349 -1067.6392 - 13050 1.305 0.076457338 1874.3042 135.13413 -6.9813982 4.3493968 -1071.9886 -1067.6392 - 13100 1.31 0.076457326 1866.7738 139.17204 -6.9940579 4.4793602 -1072.1186 -1067.6392 - 13150 1.315 0.076457289 1832.5745 144.49783 -6.9974757 4.6507749 -1072.29 -1067.6392 - 13200 1.32 0.076457244 1807.0747 149.77919 -6.9983839 4.8207594 -1072.46 -1067.6392 - 13250 1.325 0.076457187 1796.8435 153.72265 -7.0061211 4.9476829 -1072.5869 -1067.6392 - 13300 1.33 0.076457166 1784.1488 155.25389 -7.0202393 4.9969671 -1072.6362 -1067.6392 - 13350 1.335 0.076457229 1753.2853 154.01439 -7.0330486 4.9570726 -1072.5963 -1067.6392 - 13400 1.34 0.0764573 1735.0082 150.84246 -7.0447346 4.8549818 -1072.4942 -1067.6392 - 13450 1.345 0.076457318 1726.8186 147.29221 -7.0628093 4.7407141 -1072.3799 -1067.6392 - 13500 1.35 0.076457297 1714.977 144.61665 -7.0896843 4.654599 -1072.2938 -1067.6392 - 13550 1.355 0.076457254 1740.268 143.14927 -7.1129029 4.6073704 -1072.2466 -1067.6392 - 13600 1.36 0.076457211 1795.1636 143.04769 -7.1231397 4.6041009 -1072.2433 -1067.6392 - 13650 1.365 0.076457195 1823.9739 144.93969 -7.1325 4.6649965 -1072.3042 -1067.6392 - 13700 1.37 0.076457222 1791.6272 148.76155 -7.1501954 4.7880059 -1072.4272 -1067.6392 - 13750 1.375 0.076457214 1717.918 153.25937 -7.1700837 4.9327719 -1072.572 -1067.6392 - 13800 1.38 0.076457173 1650.2116 156.96821 -7.1856522 5.0521435 -1072.6914 -1067.6392 - 13850 1.385 0.076457198 1622.7393 158.94614 -7.1959656 5.1158049 -1072.755 -1067.6392 - 13900 1.39 0.076457218 1637.783 158.98661 -7.2040613 5.1171074 -1072.7563 -1067.6392 - 13950 1.395 0.076457202 1657.4634 157.44492 -7.212632 5.0674868 -1072.7067 -1067.6392 - 14000 1.4 0.076457212 1629.5225 155.05742 -7.2266988 4.9906432 -1072.6299 -1067.6392 - 14050 1.405 0.076457239 1593.2904 152.54882 -7.2502659 4.909902 -1072.5491 -1067.6392 - 14100 1.41 0.07645727 1606.034 150.42146 -7.2818725 4.8414313 -1072.4807 -1067.6392 - 14150 1.415 0.076457309 1640.1759 149.04348 -7.3155252 4.7970802 -1072.4363 -1067.6392 - 14200 1.42 0.076457319 1638.1785 148.56697 -7.3411886 4.7817433 -1072.421 -1067.6392 - 14250 1.425 0.07645727 1612.0972 148.95521 -7.3526259 4.7942389 -1072.4335 -1067.6392 - 14300 1.43 0.076457238 1604.4691 150.10919 -7.3547431 4.8313808 -1072.4706 -1067.6392 - 14350 1.435 0.076457245 1636.4307 151.65208 -7.3541157 4.88104 -1072.5203 -1067.6392 - 14400 1.44 0.076457266 1696.8545 152.99826 -7.354098 4.9243678 -1072.5636 -1067.6392 - 14450 1.445 0.076457266 1741.9828 153.81879 -7.3623341 4.9507773 -1072.59 -1067.6392 - 14500 1.45 0.076457331 1723.2799 153.89268 -7.3834301 4.9531555 -1072.5924 -1067.6392 - 14550 1.455 0.076457432 1657.9319 152.98996 -7.4146781 4.9241004 -1072.5633 -1067.6392 - 14600 1.46 0.076457435 1610.2643 151.16037 -7.4510333 4.8652138 -1072.5044 -1067.6392 - 14650 1.465 0.076457345 1613.0087 148.97 -7.4863307 4.794715 -1072.4339 -1067.6392 - 14700 1.47 0.076457271 1634.4356 147.61305 -7.5183727 4.7510405 -1072.3903 -1067.6392 - 14750 1.475 0.076457283 1633.8891 148.27943 -7.5460376 4.7724886 -1072.4117 -1067.6392 - 14800 1.48 0.076457348 1618.243 151.33474 -7.5665855 4.870826 -1072.5101 -1067.6392 - 14850 1.485 0.076457439 1627.6856 156.2869 -7.5835708 5.0302153 -1072.6694 -1067.6392 - 14900 1.49 0.076457511 1648.6155 162.01117 -7.6018187 5.2144553 -1072.8537 -1067.6392 - 14950 1.495 0.076457476 1659.3058 167.117 -7.6196613 5.3787903 -1073.018 -1067.6392 - 15000 1.5 0.076457375 1669.5167 170.51349 -7.6348747 5.4881089 -1073.1273 -1067.6392 - 15050 1.505 0.076457377 1665.0495 171.6971 -7.6501299 5.5262045 -1073.1654 -1067.6392 - 15100 1.51 0.076457509 1653.5232 170.56263 -7.668555 5.4896905 -1073.1289 -1067.6392 - 15150 1.515 0.07645762 1663.0378 167.19624 -7.6903772 5.3813406 -1073.0206 -1067.6392 - 15200 1.52 0.076457618 1681.9976 161.85457 -7.7108297 5.209415 -1072.8486 -1067.6392 - 15250 1.525 0.076457556 1694.698 155.288 -7.7230717 4.9980649 -1072.6373 -1067.6392 - 15300 1.53 0.076457526 1707.5473 149.10693 -7.726013 4.7991221 -1072.4384 -1067.6392 - 15350 1.535 0.076457503 1714.975 145.26109 -7.7215489 4.6753408 -1072.3146 -1067.6392 - 15400 1.54 0.076457471 1739.6517 145.03787 -7.7121713 4.6681565 -1072.3074 -1067.6392 - 15450 1.545 0.076457463 1779.381 148.49637 -7.7068895 4.7794708 -1072.4187 -1067.6392 - 15500 1.55 0.07645747 1810.3562 154.24813 -7.7125777 4.9645959 -1072.6038 -1067.6392 - 15550 1.555 0.076457505 1808.4717 160.18471 -7.7266491 5.1556691 -1072.7949 -1067.6392 - 15600 1.56 0.076457526 1770.3298 164.69045 -7.7419766 5.3006898 -1072.9399 -1067.6392 - 15650 1.565 0.0764575 1738.214 167.21043 -7.7549828 5.3817975 -1073.021 -1067.6392 - 15700 1.57 0.076457497 1697.7709 168.21074 -7.7723359 5.4139933 -1073.0532 -1067.6392 - 15750 1.575 0.076457555 1621.7132 168.50851 -7.8026216 5.4235772 -1073.0628 -1067.6392 - 15800 1.58 0.076457525 1558.2186 168.47199 -7.8436156 5.4224019 -1073.0616 -1067.6392 - 15850 1.585 0.076457429 1502.1375 167.96717 -7.8883594 5.4061538 -1073.0454 -1067.6392 - 15900 1.59 0.076457478 1425.3742 166.66576 -7.932759 5.3642668 -1073.0035 -1067.6392 - 15950 1.595 0.076457632 1386.0338 164.33246 -7.9718972 5.2891677 -1072.9284 -1067.6392 - 16000 1.6 0.076457666 1419.1839 161.41038 -8.0074959 5.1951185 -1072.8344 -1067.6392 - 16050 1.605 0.076457544 1468.9614 158.91164 -8.0487546 5.1146946 -1072.7539 -1067.6392 - 16100 1.61 0.076457494 1490.7382 157.31753 -8.0937558 5.063387 -1072.7026 -1067.6392 - 16150 1.615 0.076457538 1474.5813 156.42997 -8.1330424 5.03482 -1072.6741 -1067.6392 - 16200 1.62 0.076457556 1437.0783 156.08614 -8.164616 5.0237536 -1072.663 -1067.6392 - 16250 1.625 0.07645755 1438.9601 156.34668 -8.1896203 5.0321393 -1072.6714 -1067.6392 - 16300 1.63 0.076457624 1484.8299 157.40778 -8.2067204 5.0662916 -1072.7055 -1067.6392 - 16350 1.635 0.076457699 1524.3051 159.66771 -8.218867 5.1390293 -1072.7783 -1067.6392 - 16400 1.64 0.076457644 1544.3149 163.28567 -8.2298125 5.255476 -1072.8947 -1067.6392 - 16450 1.645 0.076457498 1553.8417 167.83654 -8.2377547 5.4019493 -1073.0412 -1067.6392 - 16500 1.65 0.076457465 1570.695 172.8939 -8.2462061 5.5647244 -1073.204 -1067.6392 - 16550 1.655 0.076457507 1593.9327 178.16048 -8.2624521 5.7342334 -1073.3735 -1067.6392 - 16600 1.66 0.076457489 1603.2741 183.00592 -8.2872119 5.8901875 -1073.5294 -1067.6392 - 16650 1.665 0.076457496 1571.7154 186.29884 -8.312974 5.9961727 -1073.6354 -1067.6392 - 16700 1.67 0.07645753 1518.6156 186.99911 -8.3350509 6.0187115 -1073.6579 -1067.6392 - 16750 1.675 0.07645752 1499.821 184.74394 -8.3580495 5.9461271 -1073.5854 -1067.6392 - 16800 1.68 0.076457499 1530.7723 179.78119 -8.3875745 5.7863972 -1073.4256 -1067.6392 - 16850 1.685 0.076457548 1575.4962 172.5183 -8.4158429 5.5526355 -1073.1919 -1067.6392 - 16900 1.69 0.076457558 1612.3074 163.97541 -8.4338169 5.277676 -1072.9169 -1067.6392 - 16950 1.695 0.076457479 1635.3132 156.35605 -8.4487945 5.0324408 -1072.6717 -1067.6392 - 17000 1.7 0.076457438 1614.5636 151.92591 -8.4700427 4.8898534 -1072.5291 -1067.6392 - 17050 1.705 0.076457424 1564.7085 151.36605 -8.4902367 4.8718339 -1072.5111 -1067.6392 - 17100 1.71 0.076457358 1535.6285 153.90525 -8.4942176 4.95356 -1072.5928 -1067.6392 - 17150 1.715 0.07645735 1518.627 158.54937 -8.4805275 5.1030346 -1072.7423 -1067.6392 - 17200 1.72 0.07645738 1514.2327 164.40935 -8.4621733 5.2916425 -1072.9309 -1067.6392 - 17250 1.725 0.076457379 1551.5372 170.62245 -8.4562493 5.4916159 -1073.1308 -1067.6392 - 17300 1.73 0.076457343 1595.3198 176.25515 -8.4715899 5.6729089 -1073.3121 -1067.6392 - 17350 1.735 0.076457342 1587.5028 180.16731 -8.4978474 5.7988247 -1073.4381 -1067.6392 - 17400 1.74 0.076457376 1544.7126 181.61601 -8.5200915 5.8454522 -1073.4847 -1067.6392 - 17450 1.745 0.076457389 1509.6731 180.91787 -8.5397072 5.8229821 -1073.4622 -1067.6392 - 17500 1.75 0.076457336 1478.9973 178.87414 -8.56042 5.7572029 -1073.3964 -1067.6392 - 17550 1.755 0.076457332 1451.7239 176.20376 -8.5752611 5.6712547 -1073.3105 -1067.6392 - 17600 1.76 0.076457348 1448.0805 173.64327 -8.5784834 5.5888433 -1073.2281 -1067.6392 - 17650 1.765 0.076457351 1433.0266 171.81431 -8.5726784 5.5299771 -1073.1692 -1067.6392 - 17700 1.77 0.076457438 1390.9365 171.02874 -8.564521 5.5046929 -1073.1439 -1067.6392 - 17750 1.775 0.076457533 1349.1394 171.41687 -8.5621201 5.517185 -1073.1564 -1067.6392 - 17800 1.78 0.076457498 1329.3506 172.86493 -8.5713277 5.563792 -1073.203 -1067.6392 - 17850 1.785 0.076457438 1327.4567 174.82124 -8.5922814 5.6267573 -1073.266 -1067.6392 - 17900 1.79 0.076457427 1319.5199 176.42672 -8.6210646 5.6784309 -1073.3177 -1067.6392 - 17950 1.795 0.076457411 1304.8013 176.80992 -8.649668 5.6907647 -1073.33 -1067.6392 - 18000 1.8 0.076457418 1286.8171 175.49891 -8.6685582 5.6485687 -1073.2878 -1067.6392 - 18050 1.805 0.076457416 1286.4901 172.8819 -8.6780447 5.5643383 -1073.2036 -1067.6392 - 18100 1.81 0.076457432 1323.7883 169.97231 -8.6878072 5.4706908 -1073.1099 -1067.6392 - 18150 1.815 0.076457437 1368.7263 167.90229 -8.7078544 5.4040655 -1073.0433 -1067.6392 - 18200 1.82 0.076457419 1375.2794 167.69816 -8.7440081 5.3974953 -1073.0367 -1067.6392 - 18250 1.825 0.076457418 1341.4685 169.86898 -8.7923763 5.467365 -1073.1066 -1067.6392 - 18300 1.83 0.076457444 1302.4142 174.12507 -8.8422065 5.6043505 -1073.2436 -1067.6392 - 18350 1.835 0.07645748 1271.1442 179.47439 -8.8848553 5.7765226 -1073.4158 -1067.6392 - 18400 1.84 0.07645751 1240.9996 184.64305 -8.9194649 5.9428799 -1073.5821 -1067.6392 - 18450 1.845 0.07645748 1233.4446 188.58667 -8.9527618 6.0698084 -1073.709 -1067.6392 - 18500 1.85 0.07645741 1261.96 190.37217 -8.9842233 6.1272761 -1073.7665 -1067.6392 - 18550 1.855 0.076457388 1308.7001 189.47505 -9.0098977 6.0984017 -1073.7376 -1067.6392 - 18600 1.86 0.076457432 1358.6974 185.96915 -9.0244894 5.9855615 -1073.6248 -1067.6392 - 18650 1.865 0.076457467 1405.4436 180.67131 -9.0286656 5.8150463 -1073.4543 -1067.6392 - 18700 1.87 0.076457462 1433.4669 175.00624 -9.0350323 5.6327117 -1073.2719 -1067.6392 - 18750 1.875 0.0764574 1445.5264 170.24923 -9.048183 5.4796035 -1073.1188 -1067.6392 - 18800 1.88 0.07645736 1443.3405 167.50038 -9.0636349 5.3911298 -1073.0304 -1067.6392 - 18850 1.885 0.076457415 1447.0868 167.72835 -9.083147 5.3984671 -1073.0377 -1067.6392 - 18900 1.89 0.076457524 1458.9885 171.02105 -9.1096362 5.5044452 -1073.1437 -1067.6392 - 18950 1.895 0.076457539 1446.6895 176.34791 -9.1375492 5.6758943 -1073.3151 -1067.6392 - 19000 1.9 0.076457474 1411.5198 182.40529 -9.161382 5.8708558 -1073.5101 -1067.6392 - 19050 1.905 0.076457448 1385.2991 188.2183 -9.1852956 6.0579522 -1073.6972 -1067.6392 - 19100 1.91 0.076457528 1413.6999 192.85984 -9.215331 6.2073435 -1073.8466 -1067.6392 - 19150 1.915 0.076457582 1480.043 195.28016 -9.2474153 6.2852437 -1073.9245 -1067.6392 - 19200 1.92 0.076457539 1547.1186 195.01127 -9.2733006 6.2765891 -1073.9158 -1067.6392 - 19250 1.925 0.07645751 1605.8035 192.80171 -9.2939477 6.2054728 -1073.8447 -1067.6392 - 19300 1.93 0.076457473 1598.3059 190.10762 -9.3163636 6.1187613 -1073.758 -1067.6392 - 19350 1.935 0.076457416 1509.2408 188.03157 -9.3412168 6.0519421 -1073.6912 -1067.6392 - 19400 1.94 0.076457518 1434.6458 186.83194 -9.3626576 6.0133311 -1073.6526 -1067.6392 - 19450 1.945 0.076457638 1403.9558 186.03899 -9.3780305 5.9878093 -1073.627 -1067.6392 - 19500 1.95 0.076457559 1394.7584 185.05086 -9.3957021 5.9560055 -1073.5952 -1067.6392 - 19550 1.955 0.076457442 1413.4384 183.7353 -9.4257255 5.9136631 -1073.5529 -1067.6392 - 19600 1.96 0.076457383 1421.2339 182.69045 -9.4681432 5.880034 -1073.5193 -1067.6392 - 19650 1.965 0.076457413 1420.5968 182.99886 -9.5190918 5.8899604 -1073.5292 -1067.6392 - 19700 1.97 0.076457479 1422.3009 185.07328 -9.5688775 5.9567273 -1073.596 -1067.6392 - 19750 1.975 0.076457568 1401.8644 188.22803 -9.6031318 6.0582654 -1073.6975 -1067.6392 - 19800 1.98 0.076457554 1393.8386 191.47532 -9.6182282 6.1627819 -1073.802 -1067.6392 - 19850 1.985 0.076457465 1418.2809 194.07382 -9.6229072 6.2464164 -1073.8856 -1067.6392 - 19900 1.99 0.076457438 1451.5379 195.52045 -9.6257452 6.2929776 -1073.9322 -1067.6392 - 19950 1.995 0.076457422 1478.147 195.5996 -9.6318225 6.295525 -1073.9348 -1067.6392 - 20000 2 0.076457344 1467.9497 194.43701 -9.6465325 6.258106 -1073.8973 -1067.6392 - 20050 2.005 0.076457295 1455.781 192.15793 -9.6679695 6.1847521 -1073.824 -1067.6392 - 20100 2.01 0.076457282 1475.7234 188.99879 -9.6853381 6.0830729 -1073.7223 -1067.6392 - 20150 2.015 0.076457336 1511.2492 185.9129 -9.6914823 5.983751 -1073.623 -1067.6392 - 20200 2.02 0.076457369 1535.108 184.55863 -9.6947447 5.9401628 -1073.5794 -1067.6392 - 20250 2.025 0.07645738 1549.6908 186.04749 -9.7111475 5.9880829 -1073.6273 -1067.6392 - 20300 2.03 0.076457371 1573.2987 189.74993 -9.7443086 6.1072487 -1073.7465 -1067.6392 - 20350 2.035 0.076457335 1598.8027 193.78171 -9.7835665 6.2370146 -1073.8762 -1067.6392 - 20400 2.04 0.076457321 1612.4365 196.34944 -9.8182578 6.3196591 -1073.9589 -1067.6392 - 20450 2.045 0.076457294 1595.6224 196.49735 -9.8435079 6.3244197 -1073.9637 -1067.6392 - 20500 2.05 0.076457341 1551.0932 194.1488 -9.8554709 6.2488299 -1073.8881 -1067.6392 - 20550 2.055 0.076457438 1523.3882 190.11991 -9.8537895 6.1191568 -1073.7584 -1067.6392 - 20600 2.06 0.07645743 1505.948 186.07182 -9.8495482 5.9888659 -1073.6281 -1067.6392 - 20650 2.065 0.076457406 1490.3445 183.51625 -9.8537234 5.906613 -1073.5458 -1067.6392 - 20700 2.07 0.076457442 1490.946 182.9075 -9.8637593 5.8870197 -1073.5263 -1067.6392 - 20750 2.075 0.076457441 1481.0717 184.03654 -9.8709996 5.9233588 -1073.5626 -1067.6392 - 20800 2.08 0.076457493 1467.9055 186.97232 -9.8793685 6.0178494 -1073.6571 -1067.6392 - 20850 2.085 0.076457525 1469.5229 191.9059 -9.9019503 6.1766405 -1073.8159 -1067.6392 - 20900 2.09 0.07645743 1500.8747 198.14128 -9.9382469 6.3773308 -1074.0166 -1067.6392 - 20950 2.095 0.076457353 1522.7523 204.22851 -9.9761093 6.573253 -1074.2125 -1067.6392 - 21000 2.1 0.076457408 1493.9748 209.08499 -10.009592 6.7295628 -1074.3688 -1067.6392 - 21050 2.105 0.076457469 1446.2705 212.35054 -10.040544 6.8346669 -1074.4739 -1067.6392 - 21100 2.11 0.076457354 1411.2601 213.76664 -10.067187 6.8802453 -1074.5195 -1067.6392 - 21150 2.115 0.07645727 1391.2445 213.01118 -10.083619 6.8559303 -1074.4952 -1067.6392 - 21200 2.12 0.07645735 1371.2169 210.04448 -10.087484 6.7604446 -1074.3997 -1067.6392 - 21250 2.125 0.076457381 1340.7221 205.38603 -10.08789 6.6105088 -1074.2497 -1067.6392 - 21300 2.13 0.076457303 1325.8617 199.86436 -10.098269 6.4327894 -1074.072 -1067.6392 - 21350 2.135 0.076457273 1350.6616 194.28131 -10.12363 6.2530948 -1073.8923 -1067.6392 - 21400 2.14 0.076457275 1394.6898 189.37392 -10.157685 6.0951465 -1073.7344 -1067.6392 - 21450 2.145 0.076457319 1404.9529 186.00624 -10.193758 5.9867551 -1073.626 -1067.6392 - 21500 2.15 0.076457343 1377.3399 184.88515 -10.229093 5.950672 -1073.5899 -1067.6392 - 21550 2.155 0.076457316 1331.0234 185.97828 -10.259659 5.9858551 -1073.6251 -1067.6392 - 21600 2.16 0.076457281 1273.4665 188.83363 -10.28823 6.077757 -1073.717 -1067.6392 - 21650 2.165 0.076457288 1243.3898 192.93897 -10.322287 6.2098905 -1073.8491 -1067.6392 - 21700 2.17 0.076457281 1219.7561 197.68298 -10.364391 6.3625801 -1074.0018 -1067.6392 - 21750 2.175 0.076457285 1200.7077 202.03274 -10.403933 6.5025805 -1074.1418 -1067.6392 - 21800 2.18 0.076457259 1184.4538 204.87849 -10.429043 6.5941733 -1074.2334 -1067.6392 - 21850 2.185 0.076457258 1175.6721 205.68948 -10.440346 6.6202757 -1074.2595 -1067.6392 - 21900 2.19 0.076457315 1180.8341 204.8243 -10.448053 6.5924291 -1074.2317 -1067.6392 - 21950 2.195 0.07645731 1194.0301 203.45174 -10.464561 6.5482521 -1074.1875 -1067.6392 - 22000 2.2 0.076457233 1221.9791 202.73877 -10.493309 6.5253048 -1074.1645 -1067.6392 - 22050 2.205 0.076457231 1250.0249 203.00033 -10.523727 6.5337233 -1074.173 -1067.6392 - 22100 2.21 0.076457313 1249.3152 204.03327 -10.546944 6.5669691 -1074.2062 -1067.6392 - 22150 2.215 0.076457371 1237.3367 205.55066 -10.562365 6.6158075 -1074.255 -1067.6392 - 22200 2.22 0.076457296 1243.2787 207.11609 -10.573015 6.6661921 -1074.3054 -1067.6392 - 22250 2.225 0.076457216 1271.1183 208.31179 -10.585742 6.7046767 -1074.3439 -1067.6392 - 22300 2.23 0.076457244 1284.8837 208.8428 -10.603798 6.7217677 -1074.361 -1067.6392 - 22350 2.235 0.076457332 1283.4661 208.59905 -10.624708 6.7139222 -1074.3532 -1067.6392 - 22400 2.24 0.07645736 1303.7498 207.46236 -10.6408 6.6773371 -1074.3166 -1067.6392 - 22450 2.245 0.076457355 1335.4979 205.36278 -10.647746 6.6097605 -1074.249 -1067.6392 - 22500 2.25 0.076457336 1346.4145 202.64405 -10.654521 6.5222561 -1074.1615 -1067.6392 - 22550 2.255 0.076457311 1346.1625 199.76606 -10.666656 6.4296256 -1074.0689 -1067.6392 - 22600 2.26 0.076457308 1340.0768 197.47287 -10.68361 6.3558176 -1073.995 -1067.6392 - 22650 2.265 0.076457239 1331.9216 197.00994 -10.705717 6.3409178 -1073.9801 -1067.6392 - 22700 2.27 0.076457144 1323.8234 199.2165 -10.723115 6.4119377 -1074.0512 -1067.6392 - 22750 2.275 0.076457155 1328.8167 204.12885 -10.731517 6.5700455 -1074.2093 -1067.6392 - 22800 2.28 0.076457245 1341.6384 210.71157 -10.738456 6.7819153 -1074.4211 -1067.6392 - 22850 2.285 0.076457291 1356.1262 216.84292 -10.742858 6.9792578 -1074.6185 -1067.6392 - 22900 2.29 0.07645725 1366.5895 220.63144 -10.743306 7.1011942 -1074.7404 -1067.6392 - 22950 2.295 0.076457156 1344.6768 221.40356 -10.750585 7.1260454 -1074.7653 -1067.6392 - 23000 2.3 0.076457186 1294.1965 219.35393 -10.774867 7.0600763 -1074.6993 -1067.6392 - 23050 2.305 0.076457196 1239.1224 214.99785 -10.815487 6.9198728 -1074.5591 -1067.6392 - 23100 2.31 0.076457076 1215.0106 208.92641 -10.858673 6.7244588 -1074.3637 -1067.6392 - 23150 2.315 0.076457176 1230.6321 202.19142 -10.890066 6.5076879 -1074.1469 -1067.6392 - 23200 2.32 0.076457304 1238.2351 196.6442 -10.911075 6.3291462 -1073.9684 -1067.6392 - 23250 2.325 0.076457249 1239.4105 194.24059 -10.931389 6.2517841 -1073.891 -1067.6392 - 23300 2.33 0.076457161 1257.0758 195.88203 -10.952578 6.3046152 -1073.9438 -1067.6392 - 23350 2.335 0.076457197 1279.1537 200.82031 -10.967466 6.4635575 -1074.1028 -1067.6392 - 23400 2.34 0.076457257 1300.7395 207.5662 -10.975013 6.6806793 -1074.3199 -1067.6392 - 23450 2.345 0.07645726 1308.5908 214.80077 -10.98098 6.9135294 -1074.5528 -1067.6392 - 23500 2.35 0.076457272 1289.4755 221.18513 -10.987842 7.1190149 -1074.7582 -1067.6392 - 23550 2.355 0.076457236 1283.5991 225.44351 -10.997358 7.2560744 -1074.8953 -1067.6392 - 23600 2.36 0.076457163 1312.3799 226.64105 -11.007971 7.294618 -1074.9339 -1067.6392 - 23650 2.365 0.076457229 1344.3851 224.59123 -11.019084 7.2286432 -1074.8679 -1067.6392 - 23700 2.37 0.07645729 1365.885 219.94976 -11.030767 7.0792538 -1074.7185 -1067.6392 - 23750 2.375 0.076457227 1401.6314 214.22979 -11.045135 6.895152 -1074.5344 -1067.6392 - 23800 2.38 0.076457188 1427.6864 209.29217 -11.064939 6.7362309 -1074.3755 -1067.6392 - 23850 2.385 0.076457163 1408.8222 206.27856 -11.086967 6.6392355 -1074.2785 -1067.6392 - 23900 2.39 0.07645708 1385.5983 205.10952 -11.107172 6.6016091 -1074.2408 -1067.6392 - 23950 2.395 0.076457071 1387.0133 205.04577 -11.129799 6.5995574 -1074.2388 -1067.6392 - 24000 2.4 0.076457108 1390.5162 205.39894 -11.156831 6.6109242 -1074.2502 -1067.6392 - 24050 2.405 0.076457131 1357.8774 206.15789 -11.185375 6.6353518 -1074.2746 -1067.6392 - 24100 2.41 0.076457132 1299.8027 207.97437 -11.215364 6.6938165 -1074.333 -1067.6392 - 24150 2.415 0.076457046 1264.5476 211.18407 -11.243431 6.7971232 -1074.4364 -1067.6392 - 24200 2.42 0.076456997 1257.3066 215.49914 -11.266145 6.9360069 -1074.5752 -1067.6392 - 24250 2.425 0.076457004 1257.7398 220.04117 -11.280372 7.0821959 -1074.7214 -1067.6392 - 24300 2.43 0.07645702 1251.1577 223.4371 -11.283992 7.1914966 -1074.8307 -1067.6392 - 24350 2.435 0.076457022 1252.7715 224.64315 -11.285671 7.230314 -1074.8695 -1067.6392 - 24400 2.44 0.076456984 1265.9957 223.69761 -11.294539 7.1998812 -1074.8391 -1067.6392 - 24450 2.445 0.076456934 1262.7138 221.81546 -11.310639 7.1393028 -1074.7785 -1067.6392 - 24500 2.45 0.076456873 1233.0144 220.50339 -11.329658 7.0970727 -1074.7363 -1067.6392 - 24550 2.455 0.076456875 1202.6505 220.34157 -11.349408 7.0918644 -1074.7311 -1067.6392 - 24600 2.46 0.076456941 1202.6676 220.33665 -11.361751 7.0917062 -1074.7309 -1067.6392 - 24650 2.465 0.076456963 1226.7474 219.30132 -11.363433 7.058383 -1074.6976 -1067.6392 - 24700 2.47 0.076456936 1249.5386 217.48305 -11.36762 6.9998606 -1074.6391 -1067.6392 - 24750 2.475 0.076456975 1268.5471 215.9159 -11.38311 6.9494209 -1074.5887 -1067.6392 - 24800 2.48 0.076456964 1270.5323 215.29735 -11.406944 6.9295122 -1074.5687 -1067.6392 - 24850 2.485 0.076456848 1246.8523 215.79179 -11.434782 6.9454262 -1074.5847 -1067.6392 - 24900 2.49 0.076456767 1228.3555 217.27323 -11.464221 6.9931074 -1074.6323 -1067.6392 - 24950 2.495 0.076456798 1234.9605 219.39808 -11.48602 7.0614974 -1074.7007 -1067.6392 - 25000 2.5 0.076456902 1253.6133 221.8827 -11.487009 7.1414669 -1074.7807 -1067.6392 - 25050 2.505 0.076456945 1263.1766 224.65139 -11.467154 7.2305793 -1074.8698 -1067.6392 - 25100 2.51 0.076456885 1268.8469 227.19826 -11.44163 7.3125522 -1074.9518 -1067.6392 - 25150 2.515 0.076456776 1270.7217 228.36783 -11.425894 7.3501958 -1074.9894 -1067.6392 - 25200 2.52 0.076456734 1279.1408 227.30965 -11.424483 7.3161374 -1074.9554 -1067.6392 - 25250 2.525 0.076456742 1292.6915 224.19273 -11.429236 7.2158169 -1074.8551 -1067.6392 - 25300 2.53 0.07645679 1314.5843 219.60843 -11.430397 7.0682677 -1074.7075 -1067.6392 - 25350 2.535 0.07645686 1334.032 213.71531 -11.425496 6.8785933 -1074.5178 -1067.6392 - 25400 2.54 0.076456849 1349.3813 207.2907 -11.418326 6.6718121 -1074.311 -1067.6392 - 25450 2.545 0.07645677 1377.8998 202.81528 -11.421994 6.5277672 -1074.167 -1067.6392 - 25500 2.55 0.076456793 1396.8932 202.49375 -11.445285 6.5174184 -1074.1566 -1067.6392 - 25550 2.555 0.076456881 1384.3333 205.94001 -11.474157 6.628339 -1074.2676 -1067.6392 - 25600 2.56 0.076456893 1392.2099 211.07888 -11.490781 6.7937375 -1074.433 -1067.6392 - 25650 2.565 0.076456856 1425.474 216.44999 -11.500276 6.966611 -1074.6058 -1067.6392 - 25700 2.57 0.07645682 1422.3347 221.7408 -11.521064 7.1368997 -1074.7761 -1067.6392 - 25750 2.575 0.076456827 1389.5116 226.77774 -11.558724 7.2990176 -1074.9383 -1067.6392 - 25800 2.58 0.076456894 1376.0165 230.42348 -11.588294 7.4163587 -1075.0556 -1067.6392 - 25850 2.585 0.076456848 1392.9987 231.78982 -11.595522 7.4603351 -1075.0996 -1067.6392 - 25900 2.59 0.07645674 1406.285 231.56537 -11.605309 7.4531113 -1075.0923 -1067.6392 - 25950 2.595 0.076456751 1413.5397 230.66657 -11.635338 7.4241825 -1075.0634 -1067.6392 - 26000 2.6 0.076456899 1416.443 229.45699 -11.678587 7.3852513 -1075.0245 -1067.6392 - 26050 2.605 0.076457003 1403.885 228.28072 -11.723713 7.3473922 -1074.9866 -1067.6392 - 26100 2.61 0.076457021 1373.3644 227.67281 -11.766892 7.3278259 -1074.9671 -1067.6392 - 26150 2.615 0.076456911 1340.7862 227.79846 -11.809643 7.3318702 -1074.9711 -1067.6392 - 26200 2.62 0.076456907 1300.443 227.6998 -11.840279 7.3286948 -1074.9679 -1067.6392 - 26250 2.625 0.076456986 1245.9108 226.64351 -11.849238 7.2946973 -1074.9339 -1067.6392 - 26300 2.63 0.076456906 1213.3895 225.39942 -11.849142 7.2546552 -1074.8939 -1067.6392 - 26350 2.635 0.076456826 1226.1376 224.51387 -11.849268 7.2261533 -1074.8654 -1067.6392 - 26400 2.64 0.076456838 1277.7083 223.02405 -11.845728 7.1782022 -1074.8174 -1067.6392 - 26450 2.645 0.076456848 1348.5108 219.94872 -11.843068 7.0792202 -1074.7185 -1067.6392 - 26500 2.65 0.076456809 1384.7118 215.79754 -11.858605 6.9456112 -1074.5848 -1067.6392 - 26550 2.655 0.076456789 1365.0705 211.7995 -11.891933 6.8169312 -1074.4562 -1067.6392 - 26600 2.66 0.076456914 1299.543 209.09625 -11.921163 6.729925 -1074.3692 -1067.6392 - 26650 2.665 0.076457016 1239.2364 208.71915 -11.931351 6.7177878 -1074.357 -1067.6392 - 26700 2.67 0.076456972 1214.9068 211.699 -11.935106 6.8136966 -1074.4529 -1067.6392 - 26750 2.675 0.076456871 1213.0891 218.33214 -11.952461 7.0271895 -1074.6664 -1067.6392 - 26800 2.68 0.076456798 1223.6985 227.28091 -11.983537 7.3152126 -1074.9544 -1067.6392 - 26850 2.685 0.076456809 1225.5098 236.07415 -12.013499 7.5982297 -1075.2375 -1067.6392 - 26900 2.69 0.076456872 1227.6603 242.5254 -12.033513 7.8058683 -1075.4451 -1067.6392 - 26950 2.695 0.076456972 1258.3608 245.56912 -12.047317 7.9038328 -1075.5431 -1067.6392 - 27000 2.7 0.076456994 1275.6126 245.13472 -12.061439 7.8898512 -1075.5291 -1067.6392 - 27050 2.705 0.076456887 1268.2866 241.7328 -12.077934 7.7803577 -1075.4196 -1067.6392 - 27100 2.71 0.076456789 1276.6398 236.41209 -12.099691 7.6091067 -1075.2483 -1067.6392 - 27150 2.715 0.076456817 1285.086 230.59357 -12.127675 7.4218332 -1075.0611 -1067.6392 - 27200 2.72 0.076456956 1279.8644 225.6959 -12.152964 7.2641976 -1074.9034 -1067.6392 - 27250 2.725 0.076457008 1265.0918 222.9285 -12.162529 7.1751269 -1074.8144 -1067.6392 - 27300 2.73 0.076456892 1255.4758 223.34114 -12.160471 7.1884079 -1074.8276 -1067.6392 - 27350 2.735 0.076456791 1255.3028 227.16525 -12.168727 7.3114899 -1074.9507 -1067.6392 - 27400 2.74 0.07645683 1235.3098 232.49107 -12.190625 7.4829055 -1075.1221 -1067.6392 - 27450 2.745 0.076456913 1195.6445 236.20823 -12.208759 7.6025451 -1075.2418 -1067.6392 - 27500 2.75 0.076456943 1161.6213 236.76136 -12.22307 7.6203482 -1075.2596 -1067.6392 - 27550 2.755 0.076456918 1154.7881 234.39737 -12.238887 7.5442614 -1075.1835 -1067.6392 - 27600 2.76 0.076456852 1164.6343 230.1096 -12.253338 7.4062559 -1075.0455 -1067.6392 - 27650 2.765 0.07645681 1192.4719 225.31606 -12.266794 7.2519722 -1074.8912 -1067.6392 - 27700 2.77 0.076456909 1231.6135 221.89166 -12.281503 7.1417553 -1074.781 -1067.6392 - 27750 2.775 0.076457006 1235.7541 221.87696 -12.295173 7.1412822 -1074.7805 -1067.6392 - 27800 2.78 0.07645698 1208.1367 226.64974 -12.307425 7.2948978 -1074.9341 -1067.6392 - 27850 2.785 0.076456891 1176.1511 235.51318 -12.317651 7.5801745 -1075.2194 -1067.6392 - 27900 2.79 0.076456848 1164.9233 245.47424 -12.322706 7.9007791 -1075.54 -1067.6392 - 27950 2.795 0.076456846 1164.6239 253.11209 -12.32738 8.1466091 -1075.7858 -1067.6392 - 28000 2.8 0.076456848 1160.4177 256.41801 -12.347417 8.2530127 -1075.8922 -1067.6392 - 28050 2.805 0.076456824 1162.4022 254.7287 -12.389013 8.1986408 -1075.8379 -1067.6392 - 28100 2.81 0.076456816 1169.0586 248.13397 -12.435631 7.9863846 -1075.6256 -1067.6392 - 28150 2.815 0.076456796 1178.5376 238.03172 -12.470806 7.6612358 -1075.3005 -1067.6392 - 28200 2.82 0.076456763 1199.2585 227.28714 -12.495824 7.3154129 -1074.9546 -1067.6392 - 28250 2.825 0.07645681 1234.5536 218.97616 -12.518189 7.0479177 -1074.6871 -1067.6392 - 28300 2.83 0.076456865 1276.7135 215.42144 -12.539753 6.9335061 -1074.5727 -1067.6392 - 28350 2.835 0.076456943 1320.0112 217.52061 -12.555571 7.0010697 -1074.6403 -1067.6392 - 28400 2.84 0.07645694 1322.7705 223.90193 -12.561183 7.2064573 -1074.8457 -1067.6392 - 28450 2.845 0.076456873 1274.2662 231.82206 -12.558374 7.461373 -1075.1006 -1067.6392 - 28500 2.85 0.07645682 1212.3657 239.21446 -12.557378 7.6993032 -1075.3385 -1067.6392 - 28550 2.855 0.076456743 1168.3546 245.06433 -12.567018 7.8875858 -1075.5268 -1067.6392 - 28600 2.86 0.076456731 1159.1141 248.78928 -12.591534 8.007476 -1075.6467 -1067.6392 - 28650 2.865 0.07645684 1173.7764 249.83877 -12.632126 8.0412547 -1075.6805 -1067.6392 - 28700 2.87 0.076456919 1172.0608 247.79274 -12.684385 7.9754016 -1075.6146 -1067.6392 - 28750 2.875 0.076456876 1150.8061 243.05242 -12.738771 7.8228308 -1075.4621 -1067.6392 - 28800 2.88 0.076456855 1119.2348 237.23074 -12.782276 7.6354555 -1075.2747 -1067.6392 - 28850 2.885 0.076456907 1109.9511 233.14457 -12.809798 7.5039389 -1075.1432 -1067.6392 - 28900 2.89 0.076456909 1118.3015 233.7173 -12.825932 7.5223728 -1075.1616 -1067.6392 - 28950 2.895 0.076456802 1110.4763 239.3953 -12.836993 7.7051234 -1075.3444 -1067.6392 - 29000 2.9 0.076456789 1094.3593 246.77428 -12.846357 7.9426216 -1075.5819 -1067.6392 - 29050 2.905 0.076456914 1087.347 250.95238 -12.854444 8.077097 -1075.7163 -1067.6392 - 29100 2.91 0.076456912 1080.3745 249.15916 -12.864944 8.019381 -1075.6586 -1067.6392 - 29150 2.915 0.076456867 1077.8142 242.15509 -12.879291 7.7939495 -1075.4332 -1067.6392 - 29200 2.92 0.076456965 1073.411 233.44287 -12.891242 7.5135398 -1075.1528 -1067.6392 - 29250 2.925 0.076457115 1072.0744 227.42913 -12.90317 7.3199831 -1074.9592 -1067.6392 - 29300 2.93 0.076457151 1093.6395 227.10626 -12.933289 7.3095913 -1074.9488 -1067.6392 - 29350 2.935 0.076457038 1119.3849 232.36032 -12.988079 7.4786974 -1075.1179 -1067.6392 - 29400 2.94 0.076456921 1134.6243 240.72805 -13.055919 7.748019 -1075.3873 -1067.6392 - 29450 2.945 0.076456864 1141.918 249.49518 -13.118734 8.0301961 -1075.6694 -1067.6392 - 29500 2.95 0.076456941 1159.6822 257.15763 -13.165805 8.2768181 -1075.9161 -1067.6392 - 29550 2.955 0.07645714 1179.2951 262.93943 -13.20027 8.4629096 -1076.1021 -1067.6392 - 29600 2.96 0.07645717 1186.3391 265.77303 -13.225007 8.5541112 -1076.1933 -1067.6392 - 29650 2.965 0.076456962 1198.5613 265.15045 -13.244795 8.5340732 -1076.1733 -1067.6392 - 29700 2.97 0.07645683 1197.8883 261.64426 -13.26969 8.4212236 -1076.0605 -1067.6392 - 29750 2.975 0.076456909 1177.7226 255.9899 -13.299001 8.2392337 -1075.8785 -1067.6392 - 29800 2.98 0.076457063 1159.8441 249.00075 -13.322918 8.0142823 -1075.6535 -1067.6392 - 29850 2.985 0.076457146 1148.4764 242.18856 -13.338769 7.7950268 -1075.4343 -1067.6392 - 29900 2.99 0.076457089 1130.9903 237.45135 -13.348753 7.6425559 -1075.2818 -1067.6392 - 29950 2.995 0.076457001 1117.7814 236.46455 -13.358912 7.610795 -1075.25 -1067.6392 - 30000 3 0.076456942 1126.2416 239.60448 -13.37352 7.7118561 -1075.3511 -1067.6392 - 30050 3.005 0.076456886 1156.3534 245.25724 -13.389734 7.8937946 -1075.533 -1067.6392 - 30100 3.01 0.076456966 1190.7799 250.77536 -13.402583 8.0713994 -1075.7106 -1067.6392 - 30150 3.015 0.076457085 1203.6351 254.27554 -13.409529 8.1840557 -1075.8233 -1067.6392 - 30200 3.02 0.076457139 1204.0863 255.8356 -13.413637 8.2342673 -1075.8735 -1067.6392 - 30250 3.025 0.07645724 1221.2681 256.67609 -13.417029 8.2613191 -1075.9006 -1067.6392 - 30300 3.03 0.076457187 1256.9158 257.31837 -13.417166 8.2819915 -1075.9212 -1067.6392 - 30350 3.035 0.076457004 1278.7323 257.24074 -13.411793 8.2794928 -1075.9187 -1067.6392 - 30400 3.04 0.076457001 1251.5199 256.19386 -13.407137 8.2457981 -1075.885 -1067.6392 - 30450 3.045 0.076457164 1196.1208 254.69214 -13.410047 8.1974643 -1075.8367 -1067.6392 - 30500 3.05 0.076457257 1145.1647 253.23253 -13.415744 8.1504855 -1075.7897 -1067.6392 - 30550 3.055 0.076457144 1116.3699 251.85343 -13.417375 8.1060982 -1075.7453 -1067.6392 - 30600 3.06 0.076456997 1135.1489 250.16809 -13.409575 8.051854 -1075.6911 -1067.6392 - 30650 3.065 0.076457054 1166.8172 248.05389 -13.394954 7.9838071 -1075.623 -1067.6392 - 30700 3.07 0.076457216 1168.9659 245.96158 -13.389042 7.9164642 -1075.5557 -1067.6392 - 30750 3.075 0.076457229 1179.4894 244.10708 -13.40216 7.8567758 -1075.496 -1067.6392 - 30800 3.08 0.076457154 1215.0559 242.34737 -13.43183 7.8001383 -1075.4394 -1067.6392 - 30850 3.085 0.076457184 1249.0791 240.65467 -13.466111 7.7456575 -1075.3849 -1067.6392 - 30900 3.09 0.076457196 1263.3416 239.28699 -13.484792 7.7016376 -1075.3409 -1067.6392 - 30950 3.095 0.076457165 1271.4598 239.5317 -13.488388 7.7095135 -1075.3487 -1067.6392 - 31000 3.1 0.076457184 1286.9333 242.95851 -13.498706 7.8198081 -1075.459 -1067.6392 - 31050 3.105 0.076457244 1283.9706 249.40628 -13.524063 8.0273348 -1075.6666 -1067.6392 - 31100 3.11 0.076457303 1260.718 256.94623 -13.554227 8.2700138 -1075.9092 -1067.6392 - 31150 3.115 0.076457309 1234.9544 263.41539 -13.575646 8.4782287 -1076.1175 -1067.6392 - 31200 3.12 0.076457299 1221.679 267.76241 -13.587061 8.618141 -1076.2574 -1067.6392 - 31250 3.125 0.07645728 1205.3199 269.88964 -13.601419 8.6866074 -1076.3258 -1067.6392 - 31300 3.13 0.076457321 1193.2183 269.84108 -13.633868 8.6850446 -1076.3243 -1067.6392 - 31350 3.135 0.076457329 1188.8946 267.62378 -13.682779 8.6136792 -1076.2529 -1067.6392 - 31400 3.14 0.07645724 1172.3644 263.84237 -13.735657 8.4919716 -1076.1312 -1067.6392 - 31450 3.145 0.076457234 1156.6255 259.26765 -13.777686 8.3447306 -1075.984 -1067.6392 - 31500 3.15 0.076457352 1146.2606 254.31094 -13.801841 8.1851949 -1075.8244 -1067.6392 - 31550 3.155 0.076457413 1127.1739 249.59314 -13.819577 8.0333488 -1075.6726 -1067.6392 - 31600 3.16 0.076457375 1124.4259 245.82878 -13.842426 7.91219 -1075.5514 -1067.6392 - 31650 3.165 0.076457268 1141.1569 243.59222 -13.866183 7.8402047 -1075.4794 -1067.6392 - 31700 3.17 0.076457185 1142.9315 243.62712 -13.876409 7.8413279 -1075.4806 -1067.6392 - 31750 3.175 0.076457201 1127.0843 246.58578 -13.867806 7.9365548 -1075.5758 -1067.6392 - 31800 3.18 0.076457204 1110.3606 251.69266 -13.849255 8.1009235 -1075.7402 -1067.6392 - 31850 3.185 0.076457198 1090.6423 257.43936 -13.842194 8.2858857 -1075.9251 -1067.6392 - 31900 3.19 0.076457249 1070.2837 263.0995 -13.858302 8.4680616 -1076.1073 -1067.6392 - 31950 3.195 0.076457354 1038.4021 268.06563 -13.88309 8.6279005 -1076.2671 -1067.6392 - 32000 3.2 0.076457382 1003.1513 271.1038 -13.895783 8.7256861 -1076.3649 -1067.6392 - 32050 3.205 0.07645731 1001.503 271.56962 -13.890494 8.7406789 -1076.3799 -1067.6392 - 32100 3.21 0.076457342 1028.1672 270.88408 -13.884736 8.7186143 -1076.3578 -1067.6392 - 32150 3.215 0.076457246 1043.2279 270.60923 -13.897305 8.709768 -1076.349 -1067.6392 - 32200 3.22 0.076457163 1061.7278 269.95561 -13.919101 8.688731 -1076.328 -1067.6392 - 32250 3.225 0.076457192 1099.7924 267.40921 -13.929905 8.6067729 -1076.246 -1067.6392 - 32300 3.23 0.07645728 1115.399 262.77167 -13.926581 8.4575103 -1076.0967 -1067.6392 - 32350 3.235 0.076457358 1107.8892 257.08093 -13.924138 8.2743494 -1075.9136 -1067.6392 - 32400 3.24 0.076457338 1118.6333 252.33081 -13.927952 8.1214629 -1075.7607 -1067.6392 - 32450 3.245 0.076457214 1128.4292 251.44519 -13.927409 8.0929586 -1075.7322 -1067.6392 - 32500 3.25 0.076457246 1127.0405 254.99795 -13.916976 8.2073069 -1075.8465 -1067.6392 - 32550 3.255 0.076457307 1140.3298 259.54929 -13.905249 8.3537953 -1075.993 -1067.6392 - 32600 3.26 0.076457287 1141.9087 261.74213 -13.898995 8.4243735 -1076.0636 -1067.6392 - 32650 3.265 0.076457265 1125.1087 260.48084 -13.894888 8.3837781 -1076.023 -1067.6392 - 32700 3.27 0.076457288 1107.2451 256.23647 -13.88768 8.2471695 -1075.8864 -1067.6392 - 32750 3.275 0.076457331 1106.2294 250.66639 -13.887159 8.0678924 -1075.7071 -1067.6392 - 32800 3.28 0.076457361 1102.8873 245.7362 -13.901525 7.9092104 -1075.5484 -1067.6392 - 32850 3.285 0.0764573 1073.7918 243.36584 -13.927674 7.8329184 -1075.4721 -1067.6392 - 32900 3.29 0.076457246 1038.3344 245.33181 -13.96315 7.8961946 -1075.5354 -1067.6392 - 32950 3.295 0.076457262 1052.5387 251.76398 -14.002376 8.103219 -1075.7424 -1067.6392 - 33000 3.3 0.076457271 1099.7091 260.70233 -14.040774 8.3909068 -1076.0301 -1067.6392 - 33050 3.305 0.076457299 1122.3662 269.29951 -14.075396 8.6676137 -1076.3068 -1067.6392 - 33100 3.31 0.076457348 1133.2046 274.78945 -14.097368 8.8443117 -1076.4835 -1067.6392 - 33150 3.315 0.076457345 1144.5149 275.86818 -14.112263 8.8790314 -1076.5183 -1067.6392 - 33200 3.32 0.076457354 1152.0065 273.20166 -14.133828 8.7932075 -1076.4324 -1067.6392 - 33250 3.325 0.076457309 1165.8775 268.65705 -14.161563 8.6469357 -1076.2862 -1067.6392 - 33300 3.33 0.076457216 1161.3025 264.27145 -14.185104 8.5057818 -1076.145 -1067.6392 - 33350 3.335 0.076457256 1163.6382 261.21763 -14.196243 8.4074921 -1076.0467 -1067.6392 - 33400 3.34 0.076457414 1170.8832 259.37361 -14.192673 8.348141 -1075.9874 -1067.6392 - 33450 3.345 0.076457435 1147.1567 258.47673 -14.188523 8.3192742 -1075.9585 -1067.6392 - 33500 3.35 0.076457365 1105.1155 258.65363 -14.192309 8.3249679 -1075.9642 -1067.6392 - 33550 3.355 0.07645739 1090.5352 260.22936 -14.198584 8.3756839 -1076.0149 -1067.6392 - 33600 3.36 0.076457404 1090.7024 263.15737 -14.207014 8.469924 -1076.1092 -1067.6392 - 33650 3.365 0.076457298 1076.4632 266.48318 -14.215356 8.576968 -1076.2162 -1067.6392 - 33700 3.37 0.076457283 1073.0859 269.43944 -14.224471 8.6721174 -1076.3113 -1067.6392 - 33750 3.375 0.076457376 1089.3381 271.89961 -14.244593 8.7512999 -1076.3905 -1067.6392 - 33800 3.38 0.076457435 1103.4612 273.25721 -14.276978 8.7949953 -1076.4342 -1067.6392 - 33850 3.385 0.076457308 1111.4346 272.37848 -14.311851 8.7667127 -1076.4059 -1067.6392 - 33900 3.39 0.076457152 1121.3405 268.69095 -14.338922 8.6480268 -1076.2873 -1067.6392 - 33950 3.395 0.076457254 1157.28 262.95636 -14.353057 8.4634547 -1076.1027 -1067.6392 - 34000 3.4 0.076457397 1196.7048 257.60289 -14.365288 8.2911489 -1075.9304 -1067.6392 - 34050 3.405 0.076457474 1195.8072 255.33311 -14.384718 8.2180942 -1075.8573 -1067.6392 - 34100 3.41 0.076457516 1168.6865 257.33079 -14.404595 8.2823911 -1075.9216 -1067.6392 - 34150 3.415 0.076457484 1150.4642 263.06466 -14.423569 8.4669403 -1076.1062 -1067.6392 - 34200 3.42 0.076457454 1145.8816 270.24631 -14.440471 8.6980873 -1076.3373 -1067.6392 - 34250 3.425 0.076457414 1150.0173 275.63341 -14.450898 8.8714751 -1076.5107 -1067.6392 - 34300 3.43 0.076457415 1133.3958 276.80837 -14.458349 8.9092922 -1076.5485 -1067.6392 - 34350 3.435 0.076457417 1105.4056 273.08081 -14.468157 8.7893178 -1076.4286 -1067.6392 - 34400 3.44 0.07645741 1103.7812 265.31563 -14.480189 8.5393893 -1076.1786 -1067.6392 - 34450 3.445 0.076457445 1111.05 255.73892 -14.490895 8.2311555 -1075.8704 -1067.6392 - 34500 3.45 0.076457521 1110.7118 247.85989 -14.49958 7.9775629 -1075.6168 -1067.6392 - 34550 3.455 0.076457579 1130.7725 245.33622 -14.510207 7.8963366 -1075.5356 -1067.6392 - 34600 3.46 0.07645756 1160.5408 249.98597 -14.528291 8.0459926 -1075.6852 -1067.6392 - 34650 3.465 0.076457475 1173.3904 260.77724 -14.552952 8.393318 -1076.0325 -1067.6392 - 34700 3.47 0.076457459 1180.1124 274.58004 -14.57703 8.8375718 -1076.4768 -1067.6392 - 34750 3.475 0.076457431 1180.26 287.50066 -14.596337 9.2534319 -1076.8927 -1067.6392 - 34800 3.48 0.076457427 1168.0204 296.32134 -14.616838 9.5373322 -1077.1766 -1067.6392 - 34850 3.485 0.076457533 1160.6555 299.11042 -14.639374 9.6271011 -1077.2663 -1067.6392 - 34900 3.49 0.076457572 1154.8977 295.41469 -14.653836 9.5081511 -1077.1474 -1067.6392 - 34950 3.495 0.076457515 1144.2382 286.47523 -14.655017 9.2204277 -1076.8597 -1067.6392 - 35000 3.5 0.076457456 1136.3462 275.07037 -14.654715 8.8533533 -1076.4926 -1067.6392 - 35050 3.505 0.076457435 1137.4511 264.5464 -14.667149 8.5146312 -1076.1539 -1067.6392 - 35100 3.51 0.076457336 1147.1459 257.28562 -14.689408 8.2809373 -1075.9202 -1067.6392 - 35150 3.515 0.076457286 1150.785 253.77586 -14.702669 8.167973 -1075.8072 -1067.6392 - 35200 3.52 0.076457352 1139.7459 253.69403 -14.69943 8.1653391 -1075.8046 -1067.6392 - 35250 3.525 0.076457425 1116.52 256.58494 -14.694772 8.2583854 -1075.8976 -1067.6392 - 35300 3.53 0.07645748 1111.2173 261.10191 -14.6981 8.4037676 -1076.043 -1067.6392 - 35350 3.535 0.076457452 1135.6446 265.79828 -14.707669 8.554924 -1076.1942 -1067.6392 - 35400 3.54 0.076457288 1139.7867 270.36596 -14.724124 8.7019382 -1076.3412 -1067.6392 - 35450 3.545 0.076457217 1102.2707 274.78594 -14.743394 8.8441988 -1076.4834 -1067.6392 - 35500 3.55 0.076457301 1090.3939 278.40484 -14.763703 8.9606757 -1076.5999 -1067.6392 - 35550 3.555 0.076457358 1123.8334 280.40441 -14.795776 9.0250337 -1076.6643 -1067.6392 - 35600 3.56 0.076457339 1139.5536 280.69755 -14.849214 9.0344686 -1076.6737 -1067.6392 - 35650 3.565 0.076457352 1140.7103 280.04749 -14.917058 9.0135457 -1076.6528 -1067.6392 - 35700 3.57 0.076457331 1142.1674 279.62947 -14.981817 9.0000914 -1076.6393 -1067.6392 - 35750 3.575 0.07645736 1144.6546 281.13135 -15.039973 9.0484306 -1076.6877 -1067.6392 - 35800 3.58 0.076457452 1144.7784 285.20803 -15.085998 9.1796418 -1076.8189 -1067.6392 - 35850 3.585 0.076457435 1129.3741 290.12224 -15.107991 9.3378094 -1076.977 -1067.6392 - 35900 3.59 0.076457393 1112.74 293.01297 -15.11219 9.43085 -1077.0701 -1067.6392 - 35950 3.595 0.076457348 1103.3623 292.03339 -15.117469 9.3993213 -1077.0386 -1067.6392 - 36000 3.6 0.076457342 1092.3592 288.39522 -15.133694 9.282224 -1076.9215 -1067.6392 - 36050 3.605 0.076457368 1097.7068 284.33868 -15.15275 9.1516611 -1076.7909 -1067.6392 - 36100 3.61 0.076457447 1089.6532 278.3984 -15.16353 8.9604684 -1076.5997 -1067.6392 - 36150 3.615 0.076457405 1081.2352 270.14161 -15.16929 8.6947173 -1076.3339 -1067.6392 - 36200 3.62 0.076457246 1076.5583 262.87042 -15.178409 8.4606885 -1076.0999 -1067.6392 - 36250 3.625 0.076457235 1061.0661 259.62181 -15.1944 8.3561296 -1075.9954 -1067.6392 - 36300 3.63 0.07645747 1050.7866 261.15131 -15.213791 8.4053577 -1076.0446 -1067.6392 - 36350 3.635 0.076457644 1053.0141 266.64658 -15.238262 8.5822271 -1076.2215 -1067.6392 - 36400 3.64 0.076457572 1037.7841 274.52553 -15.272383 8.8358172 -1076.475 -1067.6392 - 36450 3.645 0.076457433 1003.6397 283.25391 -15.31747 9.1167468 -1076.756 -1067.6392 - 36500 3.65 0.076457386 978.50118 290.76048 -15.359824 9.3583516 -1076.9976 -1067.6392 - 36550 3.655 0.076457382 954.71445 294.4333 -15.380916 9.4765644 -1077.1158 -1067.6392 - 36600 3.66 0.076457454 934.6731 293.09974 -15.381452 9.4336425 -1077.0729 -1067.6392 - 36650 3.665 0.076457485 917.05162 288.19168 -15.372846 9.2756729 -1076.9149 -1067.6392 - 36700 3.67 0.076457404 904.52028 282.67475 -15.369934 9.0981062 -1076.7373 -1067.6392 - 36750 3.675 0.076457354 922.86218 278.65706 -15.385872 8.9687938 -1076.608 -1067.6392 - 36800 3.68 0.076457377 950.29972 276.39567 -15.411585 8.8960092 -1076.5352 -1067.6392 - 36850 3.685 0.076457379 947.97462 275.42079 -15.423194 8.864632 -1076.5039 -1067.6392 - 36900 3.69 0.076457359 941.51877 276.16385 -15.417289 8.8885477 -1076.5278 -1067.6392 - 36950 3.695 0.076457353 956.9108 279.42747 -15.409523 8.99359 -1076.6328 -1067.6392 - 37000 3.7 0.076457317 971.60851 284.78002 -15.412025 9.165866 -1076.8051 -1067.6392 - 37050 3.705 0.076457306 982.77877 290.53372 -15.432887 9.3510532 -1076.9903 -1067.6392 - 37100 3.71 0.076457343 997.15237 294.70552 -15.468502 9.4853259 -1077.1246 -1067.6392 - 37150 3.715 0.076457385 1016.0615 296.28658 -15.49906 9.5362134 -1077.1754 -1067.6392 - 37200 3.72 0.076457326 1051.0664 296.04901 -15.514614 9.5285671 -1077.1678 -1067.6392 - 37250 3.725 0.076457371 1089.2886 295.21317 -15.526145 9.501665 -1077.1409 -1067.6392 - 37300 3.73 0.076457452 1106.1528 293.87568 -15.548007 9.4586168 -1077.0978 -1067.6392 - 37350 3.735 0.076457445 1104.2757 291.48449 -15.577866 9.3816546 -1077.0209 -1067.6392 - 37400 3.74 0.076457331 1085.4998 288.23588 -15.602969 9.2770954 -1076.9163 -1067.6392 - 37450 3.745 0.076457268 1062.8115 285.35794 -15.620806 9.1844668 -1076.8237 -1067.6392 - 37500 3.75 0.076457259 1070.5416 284.37772 -15.640178 9.1529175 -1076.7921 -1067.6392 - 37550 3.755 0.076457261 1092.7901 285.9339 -15.668545 9.2030045 -1076.8422 -1067.6392 - 37600 3.76 0.076457268 1115.2985 288.69513 -15.700277 9.2918767 -1076.9311 -1067.6392 - 37650 3.765 0.076457312 1142.7167 290.22268 -15.717189 9.3410421 -1076.9803 -1067.6392 - 37700 3.77 0.076457266 1159.0972 289.01456 -15.704132 9.3021579 -1076.9414 -1067.6392 - 37750 3.775 0.076457153 1167.8654 285.54867 -15.672789 9.1906054 -1076.8298 -1067.6392 - 37800 3.78 0.076457127 1147.6845 281.59483 -15.654861 9.0633481 -1076.7026 -1067.6392 - 37850 3.785 0.076457194 1112.0309 278.61486 -15.657502 8.9674356 -1076.6067 -1067.6392 - 37900 3.79 0.076457284 1085.8713 277.75431 -15.666153 8.9397381 -1076.579 -1067.6392 - 37950 3.795 0.076457256 1063.8837 280.32673 -15.681907 9.0225334 -1076.6618 -1067.6392 - 38000 3.8 0.076457157 1076.2096 286.41182 -15.708072 9.2183866 -1076.8576 -1067.6392 - 38050 3.805 0.076457093 1101.2483 293.93325 -15.728993 9.4604696 -1077.0997 -1067.6392 - 38100 3.81 0.076457058 1093.1319 300.15342 -15.736321 9.6606707 -1077.2999 -1067.6392 - 38150 3.815 0.076457144 1052.1314 302.93086 -15.72822 9.7500647 -1077.3893 -1067.6392 - 38200 3.82 0.076457165 1022.6071 302.06991 -15.711588 9.7223544 -1077.3616 -1067.6392 - 38250 3.825 0.076457122 1033.0652 299.22877 -15.705515 9.6309102 -1077.2701 -1067.6392 - 38300 3.83 0.076457164 1062.0732 295.72691 -15.720213 9.5182002 -1077.1574 -1067.6392 - 38350 3.835 0.076457203 1064.4455 291.57116 -15.75021 9.384444 -1077.0237 -1067.6392 - 38400 3.84 0.076457185 1056.9879 286.00051 -15.778615 9.2051482 -1076.8444 -1067.6392 - 38450 3.845 0.076457163 1051.055 278.73145 -15.794206 8.971188 -1076.6104 -1067.6392 - 38500 3.85 0.076457045 1043.4921 270.84089 -15.799919 8.7172241 -1076.3565 -1067.6392 - 38550 3.855 0.07645701 1047.2952 264.8644 -15.80707 8.5248663 -1076.1641 -1067.6392 - 38600 3.86 0.076457105 1066.4021 263.59538 -15.821774 8.4840218 -1076.1232 -1067.6392 - 38650 3.865 0.076457109 1081.5763 268.25027 -15.841226 8.6338433 -1076.2731 -1067.6392 - 38700 3.87 0.076457016 1072.3855 277.54565 -15.859692 8.933022 -1076.5723 -1067.6392 - 38750 3.875 0.076456913 1054.1463 288.47412 -15.875746 9.2847635 -1076.924 -1067.6392 - 38800 3.88 0.076456918 1046.099 297.63078 -15.88286 9.5794778 -1077.2187 -1067.6392 - 38850 3.885 0.076456965 1035.9503 302.79444 -15.874155 9.745674 -1077.3849 -1067.6392 - 38900 3.89 0.076456968 1006.8277 304.00878 -15.862675 9.7847584 -1077.424 -1067.6392 - 38950 3.895 0.076456992 982.30541 302.68425 -15.866243 9.7421275 -1077.3814 -1067.6392 - 39000 3.9 0.076457051 964.15884 300.333 -15.885469 9.6664508 -1077.3057 -1067.6392 - 39050 3.905 0.07645708 963.47178 297.96261 -15.907738 9.5901579 -1077.2294 -1067.6392 - 39100 3.91 0.07645707 982.39789 295.77017 -15.919704 9.5195926 -1077.1588 -1067.6392 - 39150 3.915 0.07645701 986.19343 293.76453 -15.921564 9.4550395 -1077.0943 -1067.6392 - 39200 3.92 0.076456973 973.23149 292.25935 -15.917749 9.406594 -1077.0458 -1067.6392 - 39250 3.925 0.07645699 956.8331 292.06244 -15.915109 9.4002564 -1077.0395 -1067.6392 - 39300 3.93 0.076457091 947.66562 293.77507 -15.928151 9.4553785 -1077.0946 -1067.6392 - 39350 3.935 0.076457197 953.8454 296.30939 -15.95971 9.5369477 -1077.1762 -1067.6392 - 39400 3.94 0.076457123 941.598 297.57903 -16.001499 9.5778122 -1077.217 -1067.6392 - 39450 3.945 0.076456979 937.81347 295.88089 -16.028812 9.5231561 -1077.1624 -1067.6392 - 39500 3.95 0.076456966 972.55148 291.44854 -16.022183 9.3804973 -1077.0197 -1067.6392 - 39550 3.955 0.076456998 1016.9451 286.92489 -16.003393 9.2349002 -1076.8741 -1067.6392 - 39600 3.96 0.076457077 1044.6221 284.67636 -16.001645 9.1625296 -1076.8018 -1067.6392 - 39650 3.965 0.076457123 1054.2122 285.21332 -16.024476 9.179812 -1076.819 -1067.6392 - 39700 3.97 0.0764571 1065.5507 287.8143 -16.060544 9.2635265 -1076.9028 -1067.6392 - 39750 3.975 0.076457084 1090.1167 291.49835 -16.091023 9.3821005 -1077.0213 -1067.6392 - 39800 3.98 0.076457092 1088.6899 295.37171 -16.105973 9.5067677 -1077.146 -1067.6392 - 39850 3.985 0.076457119 1048.7529 298.22527 -16.109259 9.5986118 -1077.2378 -1067.6392 - 39900 3.99 0.076457095 1002.706 298.65816 -16.11916 9.6125446 -1077.2518 -1067.6392 - 39950 3.995 0.076457007 987.02608 295.67741 -16.143138 9.5166068 -1077.1558 -1067.6392 - 40000 4 0.076456959 991.32371 290.38741 -16.167165 9.3463442 -1076.9856 -1067.6392 - 40050 4.005 0.076456996 1005.4007 286.06135 -16.191789 9.2071066 -1076.8463 -1067.6392 - 40100 4.01 0.076457058 1012.3385 284.2928 -16.225309 9.1501844 -1076.7894 -1067.6392 - 40150 4.015 0.076457022 981.99522 284.09917 -16.253328 9.1439521 -1076.7832 -1067.6392 - 40200 4.02 0.076457038 941.79789 284.62665 -16.265654 9.1609297 -1076.8002 -1067.6392 - 40250 4.025 0.076457083 937.71916 286.12641 -16.277424 9.2092004 -1076.8484 -1067.6392 - 40300 4.03 0.076457088 965.18662 288.6347 -16.293112 9.2899318 -1076.9292 -1067.6392 - 40350 4.035 0.076457059 1017.9185 291.81257 -16.296246 9.3922139 -1077.0314 -1067.6392 - 40400 4.04 0.076456957 1076.0557 296.38482 -16.287869 9.5393756 -1077.1786 -1067.6392 - 40450 4.045 0.076456887 1095.6373 303.83922 -16.288858 9.779301 -1077.4185 -1067.6392 - 40500 4.05 0.076456882 1073.7393 314.05155 -16.311397 10.107993 -1077.7472 -1067.6392 - 40550 4.055 0.076456904 1044.4103 323.76759 -16.342897 10.420711 -1078.0599 -1067.6392 - 40600 4.06 0.076457029 1034.8473 329.10878 -16.368322 10.592622 -1078.2319 -1067.6392 - 40650 4.065 0.076457135 1060.2685 328.20348 -16.381961 10.563484 -1078.2027 -1067.6392 - 40700 4.07 0.076457112 1074.3918 321.48063 -16.381837 10.347104 -1077.9863 -1067.6392 - 40750 4.075 0.076457033 1068.0033 311.42134 -16.370626 10.023338 -1077.6626 -1067.6392 - 40800 4.08 0.076457002 1062.9309 301.40533 -16.356398 9.7009645 -1077.3402 -1067.6392 - 40850 4.085 0.076457035 1060.5178 293.82988 -16.353033 9.4571427 -1077.0964 -1067.6392 - 40900 4.09 0.076457118 1042.7869 289.64315 -16.36814 9.3223897 -1076.9616 -1067.6392 - 40950 4.095 0.076457102 1018.1514 288.9377 -16.391984 9.2996841 -1076.9389 -1067.6392 - 41000 4.1 0.076457101 1008.7893 291.04209 -16.410378 9.3674155 -1077.0066 -1067.6392 - 41050 4.105 0.076457128 1003.0943 294.82137 -16.429591 9.4890547 -1077.1283 -1067.6392 - 41100 4.11 0.07645713 988.07337 298.92586 -16.468813 9.6211607 -1077.2604 -1067.6392 - 41150 4.115 0.076457209 989.22727 301.53433 -16.530448 9.7051164 -1077.3443 -1067.6392 - 41200 4.12 0.076457137 995.23968 300.7184 -16.59589 9.6788552 -1077.3181 -1067.6392 - 41250 4.125 0.076457081 985.88397 295.87985 -16.651304 9.5231227 -1077.1624 -1067.6392 - 41300 4.13 0.076457157 984.43258 288.32296 -16.693415 9.2798984 -1076.9191 -1067.6392 - 41350 4.135 0.076457193 1006.7996 280.67631 -16.722715 9.033785 -1076.673 -1067.6392 - 41400 4.14 0.076457144 1035.0581 275.89522 -16.743941 8.8799019 -1076.5191 -1067.6392 - 41450 4.145 0.076457091 1055.193 276.48914 -16.770034 8.8990177 -1076.5382 -1067.6392 - 41500 4.15 0.076457094 1049.464 282.98604 -16.80422 9.1081253 -1076.7474 -1067.6392 - 41550 4.155 0.076457138 1033.4498 293.55036 -16.837757 9.448146 -1077.0874 -1067.6392 - 41600 4.16 0.076457177 1025.5053 305.59852 -16.868232 9.8359254 -1077.4752 -1067.6392 - 41650 4.165 0.076457144 1030.3407 316.75401 -16.9012 10.194974 -1077.8342 -1067.6392 - 41700 4.17 0.076457109 1042.8576 325.10515 -16.941062 10.463762 -1078.103 -1067.6392 - 41750 4.175 0.076457116 1041.7476 329.79088 -16.983477 10.614575 -1078.2538 -1067.6392 - 41800 4.18 0.076457129 1021.8465 330.97667 -17.012787 10.652741 -1078.292 -1067.6392 - 41850 4.185 0.076457027 1009.1192 329.54708 -17.026799 10.606729 -1078.246 -1067.6392 - 41900 4.19 0.076457044 1009.0074 326.75477 -17.042781 10.516856 -1078.1561 -1067.6392 - 41950 4.195 0.076457158 1008.7758 323.40391 -17.062093 10.409006 -1078.0482 -1067.6392 - 42000 4.2 0.076457147 1005.3634 320.10432 -17.080158 10.302806 -1077.942 -1067.6392 - 42050 4.205 0.076457115 991.88405 317.33885 -17.10087 10.213797 -1077.853 -1067.6392 - 42100 4.21 0.076457042 980.63929 315.014 -17.130865 10.13897 -1077.7782 -1067.6392 - 42150 4.215 0.076456975 998.50297 312.63763 -17.172141 10.062485 -1077.7017 -1067.6392 - 42200 4.22 0.07645708 1026.9562 310.54725 -17.204551 9.9952042 -1077.6344 -1067.6392 - 42250 4.225 0.07645718 1024.8324 310.92967 -17.213513 10.007513 -1077.6467 -1067.6392 - 42300 4.23 0.076457083 1017.3813 314.39712 -17.205294 10.119115 -1077.7583 -1067.6392 - 42350 4.235 0.076457003 1012.2184 317.86117 -17.191657 10.230608 -1077.8698 -1067.6392 - 42400 4.24 0.076457062 1014.6726 317.97177 -17.18376 10.234168 -1077.8734 -1067.6392 - 42450 4.245 0.076457115 1041.0192 313.50056 -17.1786 10.090259 -1077.7295 -1067.6392 - 42500 4.25 0.076457027 1065.6231 305.46596 -17.164761 9.8316589 -1077.4709 -1067.6392 - 42550 4.255 0.076456955 1061.963 296.42889 -17.133558 9.540794 -1077.18 -1067.6392 - 42600 4.26 0.076457002 1048.971 289.79488 -17.095891 9.327273 -1076.9665 -1067.6392 - 42650 4.265 0.076457008 1015.7483 288.18363 -17.073381 9.2754137 -1076.9146 -1067.6392 - 42700 4.27 0.076456971 966.63074 291.62369 -17.06781 9.3861349 -1077.0254 -1067.6392 - 42750 4.275 0.076456941 937.2059 298.17523 -17.069236 9.5970012 -1077.2362 -1067.6392 - 42800 4.28 0.076456915 941.41873 305.73809 -17.079494 9.8404177 -1077.4796 -1067.6392 - 42850 4.285 0.076456844 968.97273 312.62631 -17.099416 10.06212 -1077.7014 -1067.6392 - 42900 4.29 0.076456817 989.21318 317.5486 -17.113085 10.220548 -1077.8598 -1067.6392 - 42950 4.295 0.07645684 1007.6816 320.37965 -17.114449 10.311668 -1077.9509 -1067.6392 - 43000 4.3 0.076456884 1017.4556 321.9046 -17.116189 10.360749 -1078 -1067.6392 - 43050 4.305 0.076456934 997.36098 322.79504 -17.129186 10.389409 -1078.0286 -1067.6392 - 43100 4.31 0.076456922 976.5255 323.56991 -17.161651 10.414349 -1078.0536 -1067.6392 - 43150 4.315 0.076456789 965.28563 323.98987 -17.208478 10.427865 -1078.0671 -1067.6392 - 43200 4.32 0.076456656 976.013 322.91929 -17.253423 10.393408 -1078.0326 -1067.6392 - 43250 4.325 0.07645674 986.91303 319.71702 -17.290058 10.29034 -1077.9296 -1067.6392 - 43300 4.33 0.076456855 994.50735 315.51655 -17.319905 10.155145 -1077.7944 -1067.6392 - 43350 4.335 0.076456913 992.09776 312.98202 -17.344711 10.073569 -1077.7128 -1067.6392 - 43400 4.34 0.076456873 993.00971 314.05271 -17.361697 10.10803 -1077.7473 -1067.6392 - 43450 4.345 0.076456881 1011.1756 318.25407 -17.363193 10.243254 -1077.8825 -1067.6392 - 43500 4.35 0.076456916 1022.1325 324.00289 -17.356684 10.428285 -1078.0675 -1067.6392 - 43550 4.355 0.076456894 1001.5952 329.50567 -17.36965 10.605396 -1078.2446 -1067.6392 - 43600 4.36 0.076456787 990.25729 331.52244 -17.398294 10.670307 -1078.3095 -1067.6392 - 43650 4.365 0.076456812 1014.8329 327.94176 -17.418135 10.55506 -1078.1943 -1067.6392 - 43700 4.37 0.076456927 1009.9859 320.07607 -17.423852 10.301897 -1077.9411 -1067.6392 - 43750 4.375 0.076456903 969.415 310.42468 -17.431775 9.9912593 -1077.6305 -1067.6392 - 43800 4.38 0.076456845 959.2175 300.83991 -17.450035 9.6827659 -1077.322 -1067.6392 - 43850 4.385 0.076456904 972.76707 292.38261 -17.458814 9.4105611 -1077.0498 -1067.6392 - 43900 4.39 0.076456967 1000.7902 286.33658 -17.440879 9.215965 -1076.8552 -1067.6392 - 43950 4.395 0.076456908 1023.9806 285.0775 -17.417685 9.1754407 -1076.8147 -1067.6392 - 44000 4.4 0.076456873 1016.312 289.59884 -17.414064 9.3209636 -1076.9602 -1067.6392 - 44050 4.405 0.076456899 1002.0937 297.58236 -17.427534 9.5779192 -1077.2171 -1067.6392 - 44100 4.41 0.076456992 979.49413 305.48344 -17.460189 9.8322216 -1077.4715 -1067.6392 - 44150 4.415 0.076456954 957.12038 310.16996 -17.500467 9.983061 -1077.6223 -1067.6392 - 44200 4.42 0.076456909 969.36774 310.67664 -17.517203 9.9993688 -1077.6386 -1067.6392 - 44250 4.425 0.076457034 990.1925 309.6621 -17.501366 9.966715 -1077.6059 -1067.6392 - 44300 4.43 0.076457126 997.07426 311.42685 -17.48063 10.023515 -1077.6627 -1067.6392 - 44350 4.435 0.076457073 1012.156 317.95445 -17.477266 10.233611 -1077.8728 -1067.6392 - 44400 4.44 0.076456939 1014.2778 328.00805 -17.482372 10.557194 -1078.1964 -1067.6392 - 44450 4.445 0.076456926 999.33044 339.05571 -17.484164 10.912771 -1078.552 -1067.6392 - 44500 4.45 0.076457063 992.03592 348.59795 -17.490492 11.219896 -1078.8591 -1067.6392 - 44550 4.455 0.076457102 1000.0606 354.61439 -17.51719 11.413539 -1079.0528 -1067.6392 - 44600 4.46 0.076456962 996.40689 355.89465 -17.569196 11.454745 -1079.094 -1067.6392 - 44650 4.465 0.076456921 982.66296 351.92721 -17.625938 11.32705 -1078.9663 -1067.6392 - 44700 4.47 0.076457079 980.49035 343.41935 -17.667243 11.053218 -1078.6925 -1067.6392 - 44750 4.475 0.076457159 979.21197 332.02069 -17.68549 10.686344 -1078.3256 -1067.6392 - 44800 4.48 0.076457107 992.32881 320.06951 -17.687575 10.301685 -1077.9409 -1067.6392 - 44850 4.485 0.076456963 1013.5196 310.0827 -17.693112 9.9802522 -1077.6195 -1067.6392 - 44900 4.49 0.076456969 1001.5918 303.20339 -17.722904 9.7588364 -1077.3981 -1067.6392 - 44950 4.495 0.07645701 980.51163 298.27852 -17.770105 9.6003255 -1077.2396 -1067.6392 - 45000 4.5 0.076457008 965.95999 294.19092 -17.8048 9.4687631 -1077.108 -1067.6392 - 45050 4.505 0.076457017 961.98916 292.94732 -17.819999 9.4287368 -1077.068 -1067.6392 - 45100 4.51 0.07645703 971.83236 297.17494 -17.826582 9.5648062 -1077.204 -1067.6392 - 45150 4.515 0.076457062 971.3126 305.34652 -17.830021 9.8278148 -1077.467 -1067.6392 - 45200 4.52 0.076457088 967.70533 313.76007 -17.837312 10.098611 -1077.7378 -1067.6392 - 45250 4.525 0.076457101 978.16788 320.28707 -17.856874 10.308688 -1077.9479 -1067.6392 - 45300 4.53 0.076457058 976.86282 324.31727 -17.883352 10.438403 -1078.0776 -1067.6392 - 45350 4.535 0.076457004 957.06022 326.51332 -17.908809 10.509085 -1078.1483 -1067.6392 - 45400 4.54 0.076457052 942.23138 327.86211 -17.932213 10.552497 -1078.1917 -1067.6392 - 45450 4.545 0.07645704 939.40207 328.25924 -17.946431 10.565278 -1078.2045 -1067.6392 - 45500 4.55 0.076456984 936.0127 327.92287 -17.951349 10.554452 -1078.1937 -1067.6392 - 45550 4.555 0.076456984 943.56455 327.95367 -17.956533 10.555444 -1078.1947 -1067.6392 - 45600 4.56 0.076456952 970.72253 329.0502 -17.962098 10.590736 -1078.23 -1067.6392 - 45650 4.565 0.076456987 995.14598 331.17156 -17.959883 10.659014 -1078.2982 -1067.6392 - 45700 4.57 0.076457009 998.94348 333.51018 -17.947766 10.734284 -1078.3735 -1067.6392 - 45750 4.575 0.076456926 989.53969 334.52552 -17.932792 10.766963 -1078.4062 -1067.6392 - 45800 4.58 0.076456925 980.95008 333.13239 -17.931126 10.722125 -1078.3614 -1067.6392 - 45850 4.585 0.076457115 959.08206 328.86879 -17.93416 10.584897 -1078.2241 -1067.6392 - 45900 4.59 0.076457157 946.57457 322.43709 -17.923384 10.377888 -1078.0171 -1067.6392 - 45950 4.595 0.07645705 952.85741 316.41194 -17.913842 10.183964 -1077.8232 -1067.6392 - 46000 4.6 0.076456979 945.08309 313.54756 -17.919013 10.091772 -1077.731 -1067.6392 - 46050 4.605 0.076457016 924.59556 315.06793 -17.927039 10.140706 -1077.7799 -1067.6392 - 46100 4.61 0.076457109 914.10059 320.37764 -17.937025 10.311603 -1077.9508 -1067.6392 - 46150 4.615 0.076457104 917.2827 327.12661 -17.957731 10.528824 -1078.1681 -1067.6392 - 46200 4.62 0.076457168 920.84155 332.53739 -17.977107 10.702974 -1078.3422 -1067.6392 - 46250 4.625 0.076457189 935.24004 335.24356 -17.979199 10.790074 -1078.4293 -1067.6392 - 46300 4.63 0.0764571 956.82788 335.57661 -17.975075 10.800794 -1078.44 -1067.6392 - 46350 4.635 0.076457031 962.26794 334.10104 -17.978152 10.753301 -1078.3925 -1067.6392 - 46400 4.64 0.076457042 962.1098 331.07198 -17.987144 10.655809 -1078.295 -1067.6392 - 46450 4.645 0.076457107 952.75718 326.27068 -17.988379 10.501275 -1078.1405 -1067.6392 - 46500 4.65 0.076457159 948.45576 319.53501 -17.972857 10.284482 -1077.9237 -1067.6392 - 46550 4.655 0.076457197 951.57922 312.18572 -17.950863 10.04794 -1077.6872 -1067.6392 - 46600 4.66 0.076457169 953.72078 306.60692 -17.937745 9.8683816 -1077.5076 -1067.6392 - 46650 4.665 0.07645714 969.19209 304.86187 -17.945815 9.8122157 -1077.4514 -1067.6392 - 46700 4.67 0.076457121 982.50268 307.98161 -17.974576 9.9126272 -1077.5519 -1067.6392 - 46750 4.675 0.076457149 974.5768 314.91384 -18.000917 10.135746 -1077.775 -1067.6392 - 46800 4.68 0.076457222 954.17186 322.2853 -18.003497 10.373003 -1078.0122 -1067.6392 - 46850 4.685 0.076457263 943.539 327.31716 -17.991456 10.534957 -1078.1742 -1067.6392 - 46900 4.69 0.076457272 943.2156 329.68269 -17.979619 10.611093 -1078.2503 -1067.6392 - 46950 4.695 0.076457248 943.45366 330.93325 -17.974243 10.651343 -1078.2906 -1067.6392 - 47000 4.7 0.076457135 949.24404 332.85406 -17.979019 10.713166 -1078.3524 -1067.6392 - 47050 4.705 0.076457109 948.38347 335.49431 -17.990033 10.798145 -1078.4374 -1067.6392 - 47100 4.71 0.076457108 930.57759 336.79293 -18.000912 10.839942 -1078.4792 -1067.6392 - 47150 4.715 0.076457061 927.62433 334.90723 -18.010023 10.779249 -1078.4185 -1067.6392 - 47200 4.72 0.076457026 952.31461 330.77819 -18.012971 10.646353 -1078.2856 -1067.6392 - 47250 4.725 0.076457029 970.41647 328.26943 -18.01237 10.565606 -1078.2048 -1067.6392 - 47300 4.73 0.07645704 968.2995 329.56928 -18.014991 10.607443 -1078.2467 -1067.6392 - 47350 4.735 0.076457096 954.1138 332.31723 -18.02454 10.695888 -1078.3351 -1067.6392 - 47400 4.74 0.07645714 968.01812 333.90938 -18.038354 10.747133 -1078.3864 -1067.6392 - 47450 4.745 0.076457183 1006.2574 334.70242 -18.050106 10.772657 -1078.4119 -1067.6392 - 47500 4.75 0.076457147 1037.4547 335.39669 -18.062338 10.795003 -1078.4342 -1067.6392 - 47550 4.755 0.076457004 1027.5546 333.98227 -18.07862 10.749479 -1078.3887 -1067.6392 - 47600 4.76 0.076457078 986.81013 328.40773 -18.100384 10.570058 -1078.2093 -1067.6392 - 47650 4.765 0.076457236 980.12421 319.46388 -18.120191 10.282193 -1077.9214 -1067.6392 - 47700 4.77 0.076457087 973.75413 310.20532 -18.133538 9.984199 -1077.6234 -1067.6392 - 47750 4.775 0.076456955 944.49227 304.05996 -18.150575 9.7864056 -1077.4256 -1067.6392 - 47800 4.78 0.076457043 934.26558 302.74055 -18.16342 9.7439395 -1077.3832 -1067.6392 - 47850 4.785 0.076457163 946.5867 306.50326 -18.158739 9.8650453 -1077.5043 -1067.6392 - 47900 4.79 0.076457207 956.86274 314.93949 -18.15119 10.136572 -1077.7758 -1067.6392 - 47950 4.795 0.07645715 958.82327 326.06488 -18.164425 10.494651 -1078.1339 -1067.6392 - 48000 4.8 0.076457039 947.13341 336.0645 -18.196245 10.816497 -1078.4557 -1067.6392 - 48050 4.805 0.076457079 939.87276 341.25341 -18.222449 10.983506 -1078.6227 -1067.6392 - 48100 4.81 0.076457027 941.59608 340.87478 -18.232947 10.971319 -1078.6106 -1067.6392 - 48150 4.815 0.076456851 947.69448 337.06143 -18.235444 10.848584 -1078.4878 -1067.6392 - 48200 4.82 0.076456923 945.0083 331.93845 -18.226235 10.683697 -1078.3229 -1067.6392 - 48250 4.825 0.076457065 955.23353 326.88598 -18.206503 10.521079 -1078.1603 -1067.6392 - 48300 4.83 0.076457035 976.25082 323.10993 -18.198786 10.399544 -1078.0388 -1067.6392 - 48350 4.835 0.076456918 980.22652 320.95231 -18.21424 10.330099 -1077.9693 -1067.6392 - 48400 4.84 0.07645681 991.61794 319.56431 -18.236887 10.285425 -1077.9247 -1067.6392 - 48450 4.845 0.076456811 1004.3973 319.00657 -18.259638 10.267474 -1077.9067 -1067.6392 - 48500 4.85 0.076456872 1011.2382 320.78368 -18.281738 10.324672 -1077.9639 -1067.6392 - 48550 4.855 0.076456865 1011.4359 325.48338 -18.293785 10.475935 -1078.1152 -1067.6392 - 48600 4.86 0.076456844 1005.7488 332.46822 -18.305193 10.700748 -1078.34 -1067.6392 - 48650 4.865 0.076456876 989.87609 340.85827 -18.332595 10.970788 -1078.61 -1067.6392 - 48700 4.87 0.07645693 968.07155 348.89288 -18.372402 11.229388 -1078.8686 -1067.6392 - 48750 4.875 0.076456873 954.48433 354.07093 -18.412323 11.396048 -1079.0353 -1067.6392 - 48800 4.88 0.076456838 951.82821 354.8518 -18.445418 11.421181 -1079.0604 -1067.6392 - 48850 4.885 0.076456946 955.18291 351.65785 -18.473652 11.318381 -1078.9576 -1067.6392 - 48900 4.89 0.076457014 961.21122 345.9779 -18.498732 11.135567 -1078.7748 -1067.6392 - 48950 4.895 0.076456863 971.60448 338.99359 -18.517002 10.910772 -1078.55 -1067.6392 - 49000 4.9 0.076456715 983.55102 331.29604 -18.525123 10.66302 -1078.3022 -1067.6392 - 49050 4.905 0.076456793 965.60848 324.24302 -18.535514 10.436013 -1078.0752 -1067.6392 - 49100 4.91 0.076456864 944.53951 319.79955 -18.557009 10.292997 -1077.9322 -1067.6392 - 49150 4.915 0.076456768 947.20225 319.09103 -18.582911 10.270192 -1077.9094 -1067.6392 - 49200 4.92 0.076456734 944.86084 321.47471 -18.607567 10.346913 -1077.9861 -1067.6392 - 49250 4.925 0.076456851 940.6342 324.66116 -18.626242 10.449471 -1078.0887 -1067.6392 - 49300 4.93 0.076456872 950.6162 326.9518 -18.64032 10.523198 -1078.1624 -1067.6392 - 49350 4.935 0.076456643 952.42705 328.08816 -18.649274 10.559772 -1078.199 -1067.6392 - 49400 4.94 0.076456451 940.33548 329.05106 -18.66058 10.590764 -1078.23 -1067.6392 - 49450 4.945 0.076456558 946.93554 331.05799 -18.683544 10.655358 -1078.2946 -1067.6392 - 49500 4.95 0.076456719 968.13429 334.1178 -18.710726 10.753841 -1078.3931 -1067.6392 - 49550 4.955 0.076456712 989.14725 337.02333 -18.733226 10.847357 -1078.4866 -1067.6392 - 49600 4.96 0.076456681 986.97561 338.47429 -18.752155 10.894058 -1078.5333 -1067.6392 - 49650 4.965 0.076456692 980.18259 338.36307 -18.779369 10.890478 -1078.5297 -1067.6392 - 49700 4.97 0.076456776 962.29895 337.41689 -18.815353 10.860024 -1078.4993 -1067.6392 - 49750 4.975 0.076456852 943.47442 335.97999 -18.836611 10.813777 -1078.453 -1067.6392 - 49800 4.98 0.076456829 951.10385 334.29845 -18.839995 10.759655 -1078.3989 -1067.6392 - 49850 4.985 0.076456797 968.57767 333.00568 -18.84792 10.718046 -1078.3573 -1067.6392 - 49900 4.99 0.076456886 973.40031 332.98155 -18.860429 10.71727 -1078.3565 -1067.6392 - 49950 4.995 0.076456914 964.32242 335.13156 -18.853933 10.786469 -1078.4257 -1067.6392 - 50000 5 0.076456921 972.52311 340.63067 -18.841947 10.963463 -1078.6027 -1067.6392 -Loop time of 90.4316 on 1 procs for 50000 steps with 250 atoms - -Performance: 4.777 ns/day, 5.024 hours/ns, 552.904 timesteps/s -99.3% CPU use with 1 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 37.302 | 37.302 | 37.302 | 0.0 | 41.25 -Neigh | 0.386 | 0.386 | 0.386 | 0.0 | 0.43 -Comm | 0.7718 | 0.7718 | 0.7718 | 0.0 | 0.85 -Output | 15.35 | 15.35 | 15.35 | 0.0 | 16.97 -Modify | 36.465 | 36.465 | 36.465 | 0.0 | 40.32 -Other | | 0.1579 | | | 0.17 - -Nlocal: 250 ave 250 max 250 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Nghost: 1327 ave 1327 max 1327 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -Neighs: 7747 ave 7747 max 7747 min -Histogram: 1 0 0 0 0 0 0 0 0 0 -FullNghs: 15494 ave 15494 max 15494 min -Histogram: 1 0 0 0 0 0 0 0 0 0 - -Total # of neighbors = 15494 -Ave neighs/atom = 61.976 -Neighbor list builds = 614 -Dangerous builds = 0 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:01:30 diff --git a/examples/SPIN/iron/log.11May18.spin.iron.g++.4 b/examples/SPIN/iron/log.11May18.spin.iron.g++.4 deleted file mode 100644 index 1467f8e2c5..0000000000 --- a/examples/SPIN/iron/log.11May18.spin.iron.g++.4 +++ /dev/null @@ -1,1115 +0,0 @@ -LAMMPS (11 May 2018) -# bcc iron in a 3d periodic box - -clear -units metal -atom_style spin - -dimension 3 -boundary p p p - -# necessary for the serial algorithm (sametag) -atom_modify map array - -lattice bcc 2.8665 -Lattice spacing in x,y,z = 2.8665 2.8665 2.8665 -region box block 0.0 5.0 0.0 5.0 0.0 5.0 -create_box 1 box -Created orthogonal box = (0 0 0) to (14.3325 14.3325 14.3325) - 1 by 2 by 2 MPI processor grid -create_atoms 1 box -Created 250 atoms - Time spent = 0.00023818 secs - -# setting mass, mag. moments, and interactions for bcc iron - -mass 1 55.845 - -set group all spin/random 31 2.2 - 250 settings made for spin/random -velocity all create 100 4928459 rot yes dist gaussian - -pair_style hybrid/overlay eam/alloy spin/exchange 3.5 -pair_coeff * * eam/alloy Fe_Mishin2006.eam.alloy Fe -pair_coeff * * spin/exchange exchange 3.4 0.02726 0.2171 1.841 - -neighbor 0.1 bin -neigh_modify every 10 check yes delay 20 - -fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 -fix 2 all langevin/spin 0.0 0.0 21 - -fix 3 all nve/spin lattice yes -timestep 0.0001 - -# compute and output options - -compute out_mag all compute/spin -compute out_pe all pe -compute out_ke all ke -compute out_temp all temp - -variable magz equal c_out_mag[3] -variable magnorm equal c_out_mag[4] -variable emag equal c_out_mag[5] -variable tmag equal c_out_mag[6] - -thermo_style custom step time v_magnorm v_tmag temp v_emag ke pe etotal -thermo 50 - -compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 100 all custom 1 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] - -run 50000 -Neighbor list info ... - update every 10 steps, delay 20 steps, check yes - max neighbors/atom: 2000, page size: 100000 - master list distance cutoff = 5.77337 - ghost atom cutoff = 5.77337 - binsize = 2.88668, bins = 5 5 5 - 2 neighbor lists, perpetual/occasional/extra = 2 0 0 - (1) pair eam/alloy, perpetual, half/full from (2) - attributes: half, newton on - pair build: halffull/newton - stencil: none - bin: none - (2) pair spin/exchange, perpetual - attributes: full, newton on - pair build: full/bin/atomonly - stencil: full/bin/3d - bin: standard -Per MPI rank memory allocation (min/avg/max) = 7.265 | 7.265 | 7.265 Mbytes -Step Time v_magnorm v_tmag Temp v_emag KinEng PotEng TotEng - 0 0 0.076456975 9109.0924 100.00358 -0.85791269 3.2186929 -1070.8579 -1067.6392 - 50 0.005 0.076456995 9402.4007 96.298333 -0.85659448 3.0994366 -1070.7387 -1067.6392 - 100 0.01 0.076457028 9589.1846 86.330828 -0.87003341 2.7786247 -1070.4179 -1067.6392 - 150 0.015 0.076457074 9673.9268 71.603402 -0.89006992 2.3046111 -1069.9438 -1067.6392 - 200 0.02 0.076457106 9509.1148 54.648817 -0.91124541 1.7589146 -1069.3981 -1067.6392 - 250 0.025 0.076457128 9004.27 38.599515 -0.93187522 1.2423553 -1068.8816 -1067.6392 - 300 0.03 0.076457157 8353.4371 26.383018 -0.95082226 0.8491579 -1068.4884 -1067.6392 - 350 0.035 0.076457207 7911.1316 20.01039 -0.96826468 0.64404992 -1068.2833 -1067.6392 - 400 0.04 0.076457243 7775.9492 20.097682 -0.98706373 0.64685949 -1068.2861 -1067.6392 - 450 0.045 0.076457231 7737.1225 25.687511 -1.0095684 0.82677249 -1068.466 -1067.6392 - 500 0.05 0.076457204 7676.9809 34.604697 -1.0349855 1.113779 -1068.753 -1067.6392 - 550 0.055 0.076457196 7550.2809 44.251809 -1.0609123 1.4242788 -1069.0635 -1067.6392 - 600 0.06 0.076457188 7209.7657 52.475202 -1.0880854 1.6889551 -1069.3282 -1067.6392 - 650 0.065 0.07645718 6691.1787 57.926479 -1.1179657 1.8644087 -1069.5036 -1067.6392 - 700 0.07 0.076457185 6276.4003 60.030548 -1.1469999 1.9321298 -1069.5714 -1067.6392 - 750 0.075 0.07645719 6149.9253 59.122504 -1.1721939 1.9029037 -1069.5421 -1067.6392 - 800 0.08 0.076457195 6207.0587 56.349146 -1.1949365 1.813641 -1069.4529 -1067.6392 - 850 0.085 0.076457199 6328.4635 53.154464 -1.2164642 1.7108177 -1069.35 -1067.6392 - 900 0.09 0.076457199 6456.2716 50.837416 -1.2366018 1.6362417 -1069.2755 -1067.6392 - 950 0.095 0.076457222 6495.1064 50.234549 -1.2539657 1.6168379 -1069.2561 -1067.6392 - 1000 0.1 0.076457266 6416.775 51.592727 -1.2671834 1.6605519 -1069.2998 -1067.6392 - 1050 0.105 0.076457256 6305.9015 54.719414 -1.2794824 1.7611868 -1069.4004 -1067.6392 - 1100 0.11 0.076457222 6165.987 59.01343 -1.2960617 1.8993931 -1069.5386 -1067.6392 - 1150 0.115 0.076457194 5941.7807 63.475298 -1.317859 2.0430017 -1069.6822 -1067.6392 - 1200 0.12 0.076457182 5692.0982 67.036713 -1.3432854 2.1576286 -1069.7969 -1067.6392 - 1250 0.125 0.076457217 5543.1736 68.917405 -1.3719994 2.2181602 -1069.8574 -1067.6392 - 1300 0.13 0.076457263 5507.9968 68.753418 -1.4042339 2.2128821 -1069.8521 -1067.6392 - 1350 0.135 0.076457286 5500.7848 66.608286 -1.4385667 2.1438394 -1069.7831 -1067.6392 - 1400 0.14 0.076457254 5523.456 62.967429 -1.4712143 2.0266556 -1069.6659 -1067.6392 - 1450 0.145 0.076457188 5501.5777 58.75732 -1.4990458 1.89115 -1069.5304 -1067.6392 - 1500 0.15 0.076457175 5324.4931 55.246308 -1.5236774 1.7781453 -1069.4174 -1067.6392 - 1550 0.155 0.076457234 5025.5908 53.607297 -1.5492947 1.7253925 -1069.3646 -1067.6392 - 1600 0.16 0.076457297 4742.9546 54.443418 -1.5785798 1.7523036 -1069.3915 -1067.6392 - 1650 0.165 0.076457321 4558.083 57.572305 -1.6113848 1.8530093 -1069.4922 -1067.6392 - 1700 0.17 0.076457304 4479.4352 62.073307 -1.6443595 1.9978776 -1069.6371 -1067.6392 - 1750 0.175 0.076457272 4520.5577 66.677964 -1.6742729 2.146082 -1069.7853 -1067.6392 - 1800 0.18 0.076457253 4659.9114 70.277293 -1.7021557 2.2619292 -1069.9012 -1067.6392 - 1850 0.185 0.076457257 4734.1597 72.135028 -1.7307798 2.3217219 -1069.961 -1067.6392 - 1900 0.19 0.076457279 4632.2637 71.873382 -1.7598165 2.3133006 -1069.9525 -1067.6392 - 1950 0.195 0.076457276 4496.6621 69.52131 -1.7866398 2.2375973 -1069.8768 -1067.6392 - 2000 0.2 0.076457276 4507.4594 65.61098 -1.8106776 2.1117403 -1069.751 -1067.6392 - 2050 0.205 0.076457288 4652.9279 61.016261 -1.8317479 1.9638557 -1069.6031 -1067.6392 - 2100 0.21 0.076457307 4738.4188 56.745795 -1.8489776 1.8264074 -1069.4656 -1067.6392 - 2150 0.215 0.076457279 4643.423 53.837376 -1.8647516 1.7327977 -1069.372 -1067.6392 - 2200 0.22 0.076457215 4517.9871 53.044053 -1.8828305 1.707264 -1069.3465 -1067.6392 - 2250 0.225 0.07645717 4436.4399 54.521839 -1.9038753 1.7548277 -1069.3941 -1067.6392 - 2300 0.23 0.076457132 4318.8261 57.895634 -1.9276454 1.8634159 -1069.5026 -1067.6392 - 2350 0.235 0.076457114 4148.8616 62.484473 -1.9559372 2.0111113 -1069.6503 -1067.6392 - 2400 0.24 0.076457144 4014.8498 67.404243 -1.9902034 2.1694579 -1069.8087 -1067.6392 - 2450 0.245 0.076457189 4004.017 71.654167 -2.0278558 2.306245 -1069.9455 -1067.6392 - 2500 0.25 0.076457202 4109.5497 74.379393 -2.0629968 2.3939585 -1070.0332 -1067.6392 - 2550 0.255 0.076457205 4251.6933 75.255112 -2.0918484 2.4221442 -1070.0614 -1067.6392 - 2600 0.26 0.076457208 4320.6876 74.700611 -2.1169691 2.4042972 -1070.0435 -1067.6392 - 2650 0.265 0.076457197 4297.5527 73.627823 -2.143 2.3697686 -1070.009 -1067.6392 - 2700 0.27 0.076457213 4198.4852 72.957211 -2.1702374 2.3481845 -1069.9874 -1067.6392 - 2750 0.275 0.076457256 4019.2384 73.353574 -2.1967187 2.3609417 -1070.0002 -1067.6392 - 2800 0.28 0.076457288 3867.2492 75.083781 -2.2227117 2.4166298 -1070.0559 -1067.6392 - 2850 0.285 0.076457302 3879.8471 77.82546 -2.2488766 2.5048728 -1070.1441 -1067.6392 - 2900 0.29 0.076457321 4003.8986 80.741745 -2.2742584 2.5987357 -1070.238 -1067.6392 - 2950 0.295 0.076457347 4026.6754 82.934399 -2.3001834 2.669308 -1070.3085 -1067.6392 - 3000 0.3 0.076457334 3857.2183 83.701738 -2.3291113 2.6940054 -1070.3332 -1067.6392 - 3050 0.305 0.076457295 3640.7581 82.615991 -2.3614721 2.6590598 -1070.2983 -1067.6392 - 3100 0.31 0.07645725 3489.102 79.573679 -2.3943974 2.5611406 -1070.2004 -1067.6392 - 3150 0.315 0.076457232 3396.4301 74.896125 -2.4236621 2.4105899 -1070.0498 -1067.6392 - 3200 0.32 0.076457259 3378.11 69.450128 -2.4483292 2.2353063 -1069.8745 -1067.6392 - 3250 0.325 0.076457289 3463.7734 64.542714 -2.4729224 2.0773573 -1069.7166 -1067.6392 - 3300 0.33 0.076457318 3637.4971 61.346221 -2.500303 1.9744757 -1069.6137 -1067.6392 - 3350 0.335 0.076457361 3833.5389 60.346704 -2.5252732 1.9423055 -1069.5815 -1067.6392 - 3400 0.34 0.076457387 3965.2081 61.464125 -2.5426842 1.9782706 -1069.6175 -1067.6392 - 3450 0.345 0.076457375 3976.7956 64.41797 -2.5565409 2.0733424 -1069.7126 -1067.6392 - 3500 0.35 0.076457371 3862.8334 68.714547 -2.5743062 2.211631 -1069.8509 -1067.6392 - 3550 0.355 0.076457375 3697.284 73.534942 -2.5974674 2.3667792 -1070.006 -1067.6392 - 3600 0.36 0.076457362 3575.9012 77.902682 -2.6209385 2.5073583 -1070.1466 -1067.6392 - 3650 0.365 0.076457345 3550.0667 81.043684 -2.6394846 2.6084539 -1070.2477 -1067.6392 - 3700 0.37 0.076457309 3535.0981 82.730976 -2.65464 2.6627607 -1070.302 -1067.6392 - 3750 0.375 0.076457309 3444.1795 83.322515 -2.6736085 2.6817998 -1070.321 -1067.6392 - 3800 0.38 0.076457348 3323.7191 83.436143 -2.7008525 2.685457 -1070.3247 -1067.6392 - 3850 0.385 0.076457368 3252.5404 83.62535 -2.7353937 2.6915468 -1070.3308 -1067.6392 - 3900 0.39 0.076457344 3219.5349 84.088597 -2.7722909 2.7064568 -1070.3457 -1067.6392 - 3950 0.395 0.076457316 3210.4164 84.636475 -2.8060651 2.7240906 -1070.3633 -1067.6392 - 4000 0.4 0.076457319 3223.9708 85.042888 -2.8352998 2.7371713 -1070.3764 -1067.6392 - 4050 0.405 0.076457335 3232.7108 85.266853 -2.8607963 2.7443798 -1070.3836 -1067.6392 - 4100 0.41 0.076457314 3206.1428 85.444074 -2.8837721 2.7500838 -1070.3893 -1067.6392 - 4150 0.415 0.076457325 3146.4589 85.771643 -2.9074131 2.7606269 -1070.3999 -1067.6392 - 4200 0.42 0.076457395 3092.6283 86.24875 -2.9341331 2.775983 -1070.4152 -1067.6392 - 4250 0.425 0.07645742 3103.0319 86.563557 -2.9622203 2.7861153 -1070.4253 -1067.6392 - 4300 0.43 0.076457425 3116.9053 86.320099 -2.9880208 2.7782794 -1070.4175 -1067.6392 - 4350 0.435 0.076457427 3061.2259 85.306966 -3.0085539 2.7456709 -1070.3849 -1067.6392 - 4400 0.44 0.076457432 3033.5229 83.703441 -3.0243431 2.6940602 -1070.3333 -1067.6392 - 4450 0.445 0.076457411 3042.5167 82.058057 -3.0397518 2.6411023 -1070.2803 -1067.6392 - 4500 0.45 0.076457387 2994.5161 81.002427 -3.0597817 2.607126 -1070.2464 -1067.6392 - 4550 0.455 0.076457413 2868.381 80.936403 -3.086593 2.605001 -1070.2442 -1067.6392 - 4600 0.46 0.076457454 2716.5128 81.904984 -3.1192161 2.6361755 -1070.2754 -1067.6392 - 4650 0.465 0.076457402 2628.691 83.537981 -3.1529675 2.6887347 -1070.328 -1067.6392 - 4700 0.47 0.076457327 2609.7253 85.196185 -3.1819342 2.7421053 -1070.3813 -1067.6392 - 4750 0.475 0.076457328 2604.4797 86.479192 -3.2088497 2.7833999 -1070.4226 -1067.6392 - 4800 0.48 0.076457385 2610.7583 87.294321 -3.242028 2.8096355 -1070.4489 -1067.6392 - 4850 0.485 0.076457398 2649.7853 87.477655 -3.2810534 2.8155362 -1070.4548 -1067.6392 - 4900 0.49 0.076457371 2678.8351 86.820207 -3.3154833 2.7943757 -1070.4336 -1067.6392 - 4950 0.495 0.076457344 2687.9239 85.543066 -3.3381845 2.75327 -1070.3925 -1067.6392 - 5000 0.5 0.076457351 2720.6587 84.363474 -3.3508261 2.7153039 -1070.3545 -1067.6392 - 5050 0.505 0.076457408 2755.8291 84.030245 -3.3582878 2.7045787 -1070.3438 -1067.6392 - 5100 0.51 0.076457454 2753.2313 84.932962 -3.3648805 2.7336333 -1070.3729 -1067.6392 - 5150 0.515 0.076457453 2706.7195 86.928397 -3.3711152 2.7978579 -1070.4371 -1067.6392 - 5200 0.52 0.076457474 2678.1769 89.583728 -3.3768576 2.8833218 -1070.5226 -1067.6392 - 5250 0.525 0.076457519 2699.6153 92.51484 -3.3860255 2.9776619 -1070.6169 -1067.6392 - 5300 0.53 0.076457531 2703.4089 95.385751 -3.4040809 3.0700644 -1070.7093 -1067.6392 - 5350 0.535 0.076457501 2642.6927 97.779641 -3.4335521 3.1471136 -1070.7863 -1067.6392 - 5400 0.54 0.076457502 2536.3506 99.093181 -3.4686217 3.1893909 -1070.8286 -1067.6392 - 5450 0.545 0.076457526 2496.939 98.768918 -3.4975315 3.1789543 -1070.8182 -1067.6392 - 5500 0.55 0.07645752 2590.2958 96.816602 -3.5146308 3.1161175 -1070.7554 -1067.6392 - 5550 0.555 0.07645751 2736.4682 93.934193 -3.5252273 3.0233449 -1070.6626 -1067.6392 - 5600 0.56 0.076457511 2852.5255 91.119522 -3.5395987 2.9327525 -1070.572 -1067.6392 - 5650 0.565 0.07645752 2911.6957 89.034641 -3.5601373 2.865649 -1070.5049 -1067.6392 - 5700 0.57 0.076457504 2872.1072 87.822315 -3.578603 2.8266294 -1070.4659 -1067.6392 - 5750 0.575 0.076457514 2742.4368 87.594069 -3.5903293 2.8192831 -1070.4585 -1067.6392 - 5800 0.58 0.076457541 2620.8057 88.56771 -3.5997032 2.8506205 -1070.4899 -1067.6392 - 5850 0.585 0.076457558 2577.6654 90.685493 -3.6121768 2.918783 -1070.558 -1067.6392 - 5900 0.59 0.076457556 2603.2357 93.377822 -3.6265072 3.0054377 -1070.6447 -1067.6392 - 5950 0.595 0.076457545 2622.1452 95.785548 -3.6355062 3.0829322 -1070.7222 -1067.6392 - 6000 0.6 0.076457592 2584.5081 97.370124 -3.6379266 3.133933 -1070.7732 -1067.6392 - 6050 0.605 0.076457628 2511.2974 98.197855 -3.6436111 3.1605742 -1070.7998 -1067.6392 - 6100 0.61 0.076457605 2460.1929 98.607339 -3.6641341 3.1737537 -1070.813 -1067.6392 - 6150 0.615 0.076457552 2425.1563 98.77721 -3.7023511 3.1792212 -1070.8185 -1067.6392 - 6200 0.62 0.076457529 2378.8547 98.671042 -3.7529171 3.1758041 -1070.815 -1067.6392 - 6250 0.625 0.076457536 2373.6127 98.176109 -3.8075656 3.1598743 -1070.7991 -1067.6392 - 6300 0.63 0.076457584 2457.9835 97.287991 -3.8600042 3.1312895 -1070.7705 -1067.6392 - 6350 0.635 0.076457603 2571.5799 96.270875 -3.9092353 3.0985528 -1070.7378 -1067.6392 - 6400 0.64 0.076457558 2610.0081 95.435983 -3.9541076 3.0716812 -1070.7109 -1067.6392 - 6450 0.645 0.076457543 2587.7565 94.898723 -3.9898259 3.054389 -1070.6936 -1067.6392 - 6500 0.65 0.076457571 2592.6987 94.73176 -4.0156724 3.0490152 -1070.6882 -1067.6392 - 6550 0.655 0.076457601 2601.6462 95.026393 -4.0381259 3.0584982 -1070.6977 -1067.6392 - 6600 0.66 0.076457634 2566.7039 95.637128 -4.0616088 3.0781552 -1070.7174 -1067.6392 - 6650 0.665 0.076457648 2514.9262 96.272229 -4.0866885 3.0985964 -1070.7378 -1067.6392 - 6700 0.67 0.076457667 2469.8505 96.811573 -4.1148394 3.1159556 -1070.7552 -1067.6392 - 6750 0.675 0.076457679 2455.7259 97.232643 -4.1435989 3.1295081 -1070.7687 -1067.6392 - 6800 0.68 0.076457673 2468.7089 97.598131 -4.1658056 3.1412716 -1070.7805 -1067.6392 - 6850 0.685 0.076457641 2449.9304 98.364281 -4.1815157 3.1659307 -1070.8052 -1067.6392 - 6900 0.69 0.076457591 2353.8798 100.13599 -4.1974942 3.2229545 -1070.8622 -1067.6392 - 6950 0.695 0.076457574 2209.8271 103.01376 -4.2144962 3.3155778 -1070.9548 -1067.6392 - 7000 0.7 0.07645757 2076.4986 106.68059 -4.2313568 3.4335975 -1071.0728 -1067.6392 - 7050 0.705 0.076457532 2018.5403 110.71749 -4.2520079 3.5635282 -1071.2028 -1067.6392 - 7100 0.71 0.076457492 2065.9887 114.55487 -4.281219 3.6870374 -1071.3263 -1067.6392 - 7150 0.715 0.07645748 2155.5459 117.3116 -4.3158586 3.7757647 -1071.415 -1067.6392 - 7200 0.72 0.076457494 2209.3453 118.11442 -4.3476298 3.8016043 -1071.4408 -1067.6392 - 7250 0.725 0.076457549 2217.3813 116.73458 -4.3751538 3.757193 -1071.3964 -1067.6392 - 7300 0.73 0.076457599 2194.6993 113.55369 -4.4007611 3.6548138 -1071.294 -1067.6392 - 7350 0.735 0.07645757 2162.8509 109.25439 -4.4239789 3.5164373 -1071.1557 -1067.6392 - 7400 0.74 0.076457504 2179.0418 104.7754 -4.4453985 3.3722777 -1071.0115 -1067.6392 - 7450 0.745 0.076457518 2259.2856 101.07787 -4.4663409 3.2532696 -1070.8925 -1067.6392 - 7500 0.75 0.076457572 2343.5535 98.882501 -4.4873841 3.1826101 -1070.8218 -1067.6392 - 7550 0.755 0.076457589 2398.2908 98.45877 -4.5060042 3.1689719 -1070.8082 -1067.6392 - 7600 0.76 0.076457555 2420.4319 99.704417 -4.5200225 3.209064 -1070.8483 -1067.6392 - 7650 0.765 0.076457552 2411.7072 102.42806 -4.5350873 3.2967265 -1070.936 -1067.6392 - 7700 0.77 0.076457571 2387.7867 106.24775 -4.5597359 3.4196662 -1071.0589 -1067.6392 - 7750 0.775 0.076457574 2378.614 110.33425 -4.5954327 3.5511934 -1071.1904 -1067.6392 - 7800 0.78 0.076457546 2386.339 113.47426 -4.6333762 3.6522573 -1071.2915 -1067.6392 - 7850 0.785 0.076457584 2373.6185 114.65304 -4.6634531 3.6901971 -1071.3294 -1067.6392 - 7900 0.79 0.076457607 2346.7767 113.53184 -4.6813286 3.6541104 -1071.2933 -1067.6392 - 7950 0.795 0.076457576 2325.1204 110.53074 -4.6884073 3.5575175 -1071.1968 -1067.6392 - 8000 0.8 0.076457577 2299.9447 106.81524 -4.6940716 3.4379313 -1071.0772 -1067.6392 - 8050 0.805 0.076457592 2281.6434 103.78514 -4.7080773 3.3404052 -1070.9796 -1067.6392 - 8100 0.81 0.076457595 2279.2037 102.50084 -4.7334489 3.2990691 -1070.9383 -1067.6392 - 8150 0.815 0.076457635 2249.7793 103.47522 -4.7690042 3.3304303 -1070.9697 -1067.6392 - 8200 0.82 0.076457642 2189.9745 106.45522 -4.8073957 3.426344 -1071.0656 -1067.6392 - 8250 0.825 0.076457606 2149.0282 110.6545 -4.8397042 3.5615011 -1071.2007 -1067.6392 - 8300 0.83 0.076457542 2135.0181 115.25463 -4.8644908 3.7095598 -1071.3488 -1067.6392 - 8350 0.835 0.076457496 2133.8536 119.41482 -4.8843171 3.8434585 -1071.4827 -1067.6392 - 8400 0.84 0.076457518 2133.1467 122.18695 -4.8996144 3.932682 -1071.5719 -1067.6392 - 8450 0.845 0.076457578 2134.2861 123.01595 -4.9155444 3.9593637 -1071.5986 -1067.6392 - 8500 0.85 0.076457574 2141.613 121.9466 -4.9391276 3.9249459 -1071.5642 -1067.6392 - 8550 0.855 0.076457587 2138.9082 119.39807 -4.9693983 3.8429195 -1071.4822 -1067.6392 - 8600 0.86 0.076457616 2068.0673 116.09276 -5.000552 3.7365357 -1071.3758 -1067.6392 - 8650 0.865 0.076457587 1952.0961 112.98671 -5.0303107 3.6365649 -1071.2758 -1067.6392 - 8700 0.87 0.076457563 1866.7421 110.99219 -5.0605853 3.5723697 -1071.2116 -1067.6392 - 8750 0.875 0.07645759 1830.3031 110.63824 -5.0918767 3.5609778 -1071.2002 -1067.6392 - 8800 0.88 0.076457593 1839.3749 111.91657 -5.1197801 3.6021218 -1071.2414 -1067.6392 - 8850 0.885 0.07645757 1836.93 114.56856 -5.1423719 3.687478 -1071.3267 -1067.6392 - 8900 0.89 0.076457579 1795.2859 118.25516 -5.1643112 3.8061342 -1071.4454 -1067.6392 - 8950 0.895 0.076457614 1766.8498 122.31379 -5.1895303 3.9367641 -1071.576 -1067.6392 - 9000 0.9 0.076457668 1777.4862 125.80875 -5.2189311 4.0492522 -1071.6885 -1067.6392 - 9050 0.905 0.076457701 1778.9988 127.84202 -5.250791 4.1146947 -1071.7539 -1067.6392 - 9100 0.91 0.076457703 1756.3985 127.83199 -5.2809641 4.1143719 -1071.7536 -1067.6392 - 9150 0.915 0.076457636 1750.7698 125.64781 -5.3037451 4.0440723 -1071.6833 -1067.6392 - 9200 0.92 0.076457553 1795.5785 121.64446 -5.3145968 3.9152214 -1071.5545 -1067.6392 - 9250 0.925 0.076457546 1884.6389 116.77819 -5.317446 3.7585968 -1071.3978 -1067.6392 - 9300 0.93 0.076457575 1961.0059 112.44866 -5.3248028 3.6192473 -1071.2585 -1067.6392 - 9350 0.935 0.076457586 1988.8357 109.85485 -5.3452949 3.5357635 -1071.175 -1067.6392 - 9400 0.94 0.076457583 1972.3793 109.57616 -5.3783713 3.5267939 -1071.166 -1067.6392 - 9450 0.945 0.076457572 1948.7911 111.48324 -5.4161951 3.5881745 -1071.2274 -1067.6392 - 9500 0.95 0.076457563 1922.5709 114.9318 -5.4492314 3.6991693 -1071.3384 -1067.6392 - 9550 0.955 0.076457545 1887.2071 119.14996 -5.473804 3.8349339 -1071.4742 -1067.6392 - 9600 0.96 0.076457569 1854.7259 123.36854 -5.4904613 3.9707121 -1071.6099 -1067.6392 - 9650 0.965 0.076457622 1827.4781 126.8424 -5.4992845 4.0825212 -1071.7218 -1067.6392 - 9700 0.97 0.076457643 1811.2431 129.09763 -5.503264 4.1551074 -1071.7943 -1067.6392 - 9750 0.975 0.076457625 1802.4995 130.06103 -5.5091498 4.1861153 -1071.8253 -1067.6392 - 9800 0.98 0.076457569 1802.206 129.93881 -5.5226464 4.1821816 -1071.8214 -1067.6392 - 9850 0.985 0.076457512 1815.5438 128.98667 -5.542848 4.1515359 -1071.7908 -1067.6392 - 9900 0.99 0.076457501 1820.5473 127.45475 -5.5621249 4.1022301 -1071.7415 -1067.6392 - 9950 0.995 0.076457538 1816.8204 125.90549 -5.5773991 4.0523658 -1071.6916 -1067.6392 - 10000 1 0.076457537 1784.5276 125.28779 -5.5974427 4.0324847 -1071.6717 -1067.6392 - 10050 1.005 0.076457529 1720.376 126.28509 -5.6322599 4.0645836 -1071.7038 -1067.6392 - 10100 1.01 0.076457551 1689.9106 128.66253 -5.6814138 4.1411033 -1071.7803 -1067.6392 - 10150 1.015 0.076457539 1713.0249 131.40846 -5.7369528 4.2294833 -1071.8687 -1067.6392 - 10200 1.02 0.076457489 1743.8221 133.3229 -5.789472 4.2911009 -1071.9303 -1067.6392 - 10250 1.025 0.076457427 1770.5405 133.47365 -5.8284105 4.2959531 -1071.9352 -1067.6392 - 10300 1.03 0.076457402 1784.3689 131.77123 -5.852419 4.2411593 -1071.8804 -1067.6392 - 10350 1.035 0.076457432 1759.9766 128.82223 -5.8669372 4.1462436 -1071.7855 -1067.6392 - 10400 1.04 0.076457457 1756.0701 125.3228 -5.8723914 4.0336114 -1071.6728 -1067.6392 - 10450 1.045 0.076457431 1796.2676 122.12283 -5.8711897 3.930618 -1071.5698 -1067.6392 - 10500 1.05 0.076457363 1832.5849 120.24945 -5.8728862 3.870322 -1071.5096 -1067.6392 - 10550 1.055 0.076457315 1825.9591 120.26647 -5.8808515 3.8708698 -1071.5101 -1067.6392 - 10600 1.06 0.076457322 1783.5912 121.98369 -5.8879416 3.9261399 -1071.5654 -1067.6392 - 10650 1.065 0.07645737 1765.4445 124.88567 -5.8906657 4.0195423 -1071.6588 -1067.6392 - 10700 1.07 0.076457449 1789.2376 128.29349 -5.8943984 4.1292256 -1071.7685 -1067.6392 - 10750 1.075 0.076457481 1818.6141 131.12076 -5.9023895 4.2202233 -1071.8595 -1067.6392 - 10800 1.08 0.076457417 1821.6989 132.13157 -5.9106221 4.2527572 -1071.892 -1067.6392 - 10850 1.085 0.076457331 1835.7675 130.83646 -5.9174483 4.2110729 -1071.8503 -1067.6392 - 10900 1.09 0.076457313 1863.9325 127.86582 -5.9253528 4.1154608 -1071.7547 -1067.6392 - 10950 1.095 0.076457328 1879.7524 124.69175 -5.9376375 4.0133007 -1071.6525 -1067.6392 - 11000 1.1 0.07645735 1877.2445 122.96147 -5.9563654 3.9576103 -1071.5968 -1067.6392 - 11050 1.105 0.076457334 1853.502 123.73028 -5.9816201 3.9823552 -1071.6216 -1067.6392 - 11100 1.11 0.076457299 1840.4 127.02072 -6.0118687 4.0882605 -1071.7275 -1067.6392 - 11150 1.115 0.076457349 1868.0417 131.88474 -6.0432323 4.2448126 -1071.884 -1067.6392 - 11200 1.12 0.076457425 1906.0826 137.04774 -6.0742843 4.4109879 -1072.0502 -1067.6392 - 11250 1.125 0.076457409 1916.8851 141.44887 -6.1055084 4.5526417 -1072.1919 -1067.6392 - 11300 1.13 0.076457315 1929.063 144.55599 -6.1379843 4.6526467 -1072.2919 -1067.6392 - 11350 1.135 0.07645728 1963.9888 146.27645 -6.1715945 4.7080209 -1072.3473 -1067.6392 - 11400 1.14 0.076457317 2003.9719 146.52242 -6.201081 4.7159377 -1072.3552 -1067.6392 - 11450 1.145 0.076457337 2032.7751 145.14866 -6.2190123 4.6717222 -1072.311 -1067.6392 - 11500 1.15 0.076457346 2007.3165 142.48643 -6.228223 4.5860364 -1072.2253 -1067.6392 - 11550 1.155 0.076457364 1930.307 139.42166 -6.2424032 4.4873945 -1072.1266 -1067.6392 - 11600 1.16 0.076457384 1815.1751 136.55133 -6.2668555 4.3950107 -1072.0342 -1067.6392 - 11650 1.165 0.076457374 1692.3408 134.02582 -6.2982889 4.3137251 -1071.953 -1067.6392 - 11700 1.17 0.076457362 1632.1328 131.95661 -6.333283 4.2471259 -1071.8864 -1067.6392 - 11750 1.175 0.07645735 1668.5268 130.40398 -6.3655085 4.1971534 -1071.8364 -1067.6392 - 11800 1.18 0.076457303 1739.9788 129.31098 -6.3892439 4.1619742 -1071.8012 -1067.6392 - 11850 1.185 0.076457253 1807.7337 128.65584 -6.4083517 4.1408881 -1071.7801 -1067.6392 - 11900 1.19 0.0764573 1826.428 128.39557 -6.4305339 4.1325111 -1071.7717 -1067.6392 - 11950 1.195 0.076457354 1740.376 128.35778 -6.456201 4.1312949 -1071.7705 -1067.6392 - 12000 1.2 0.076457321 1628.3377 128.64127 -6.4864265 4.1404191 -1071.7797 -1067.6392 - 12050 1.205 0.076457228 1610.9113 129.62765 -6.5236327 4.1721667 -1071.8114 -1067.6392 - 12100 1.21 0.07645719 1647.6711 131.56179 -6.5624185 4.2344183 -1071.8736 -1067.6392 - 12150 1.215 0.076457244 1667.2405 134.45387 -6.593096 4.327502 -1071.9667 -1067.6392 - 12200 1.22 0.076457281 1650.0369 138.29884 -6.6148053 4.4512554 -1072.0905 -1067.6392 - 12250 1.225 0.076457269 1610.0214 142.96914 -6.6359085 4.6015728 -1072.2408 -1067.6392 - 12300 1.23 0.076457261 1594.6496 147.74828 -6.6580315 4.755393 -1072.3946 -1067.6392 - 12350 1.235 0.076457238 1609.8485 151.54432 -6.6730075 4.8775714 -1072.5168 -1067.6392 - 12400 1.24 0.076457201 1649.4384 153.78009 -6.6795567 4.9495317 -1072.5888 -1067.6392 - 12450 1.245 0.076457189 1676.2248 154.4468 -6.6837801 4.9709901 -1072.6102 -1067.6392 - 12500 1.25 0.076457239 1670.814 153.58107 -6.6881901 4.9431258 -1072.5824 -1067.6392 - 12550 1.255 0.076457285 1649.8854 151.2045 -6.6908201 4.8666342 -1072.5059 -1067.6392 - 12600 1.26 0.076457284 1650.7306 147.66332 -6.6919133 4.7526585 -1072.3919 -1067.6392 - 12650 1.265 0.076457189 1716.8308 143.58784 -6.6915867 4.6214861 -1072.2607 -1067.6392 - 12700 1.27 0.076457085 1831.8331 139.80608 -6.6912135 4.4997672 -1072.139 -1067.6392 - 12750 1.275 0.076457143 1914.1068 137.09279 -6.6943577 4.4124378 -1072.0517 -1067.6392 - 12800 1.28 0.076457209 1952.4216 135.78967 -6.7027456 4.370496 -1072.0097 -1067.6392 - 12850 1.285 0.076457218 1975.0105 135.8441 -6.71489 4.3722479 -1072.0115 -1067.6392 - 12900 1.29 0.076457295 1973.6709 137.16928 -6.7284709 4.4148997 -1072.0541 -1067.6392 - 12950 1.295 0.076457414 1949.6975 139.70897 -6.7419581 4.4966417 -1072.1359 -1067.6392 - 13000 1.3 0.076457467 1910.5263 143.0515 -6.7515077 4.6042234 -1072.2435 -1067.6392 - 13050 1.305 0.076457461 1863.8288 146.61488 -6.7594325 4.7189138 -1072.3581 -1067.6392 - 13100 1.31 0.07645739 1808.6316 149.91966 -6.7746805 4.8252807 -1072.4645 -1067.6392 - 13150 1.315 0.07645729 1782.3809 152.39881 -6.7984035 4.9050739 -1072.5443 -1067.6392 - 13200 1.32 0.076457252 1781.5232 153.48161 -6.8240019 4.9399248 -1072.5792 -1067.6392 - 13250 1.325 0.07645725 1763.5272 152.93985 -6.8501794 4.9224879 -1072.5617 -1067.6392 - 13300 1.33 0.076457252 1710.4946 150.83438 -6.8814293 4.8547215 -1072.494 -1067.6392 - 13350 1.335 0.076457258 1644.7486 147.30722 -6.9178941 4.7411971 -1072.3804 -1067.6392 - 13400 1.34 0.076457331 1605.6165 142.74866 -6.9539225 4.5944763 -1072.2337 -1067.6392 - 13450 1.345 0.076457403 1581.6983 137.98535 -6.9831256 4.4411657 -1072.0804 -1067.6392 - 13500 1.35 0.076457367 1564.3505 134.11939 -7.0019808 4.3167366 -1071.956 -1067.6392 - 13550 1.355 0.076457301 1574.5107 132.21611 -7.0146772 4.2554781 -1071.8947 -1067.6392 - 13600 1.36 0.076457257 1611.9755 132.80504 -7.0296151 4.2744333 -1071.9137 -1067.6392 - 13650 1.365 0.076457201 1640.7113 135.56674 -7.0513962 4.3633208 -1072.0026 -1067.6392 - 13700 1.37 0.076457189 1654.0361 139.6012 -7.0805562 4.4931729 -1072.1324 -1067.6392 - 13750 1.375 0.076457229 1678.441 143.86647 -7.1124767 4.6304539 -1072.2697 -1067.6392 - 13800 1.38 0.076457284 1686.1364 147.62332 -7.1379787 4.7513712 -1072.3906 -1067.6392 - 13850 1.385 0.076457274 1656.3348 150.77783 -7.1529695 4.8529016 -1072.4921 -1067.6392 - 13900 1.39 0.076457235 1597.0959 153.61417 -7.1618005 4.9441914 -1072.5834 -1067.6392 - 13950 1.395 0.076457252 1565.4065 156.26062 -7.170134 5.0293694 -1072.6686 -1067.6392 - 14000 1.4 0.076457261 1576.0797 158.74996 -7.1843908 5.1094907 -1072.7487 -1067.6392 - 14050 1.405 0.076457231 1597.0006 160.90398 -7.2025683 5.1788195 -1072.8181 -1067.6392 - 14100 1.41 0.076457223 1613.5592 162.39878 -7.2156174 5.2269309 -1072.8662 -1067.6392 - 14150 1.415 0.076457286 1629.6758 163.17046 -7.2245128 5.251768 -1072.891 -1067.6392 - 14200 1.42 0.076457403 1653.3044 163.16418 -7.2361077 5.2515657 -1072.8908 -1067.6392 - 14250 1.425 0.076457462 1662.8527 162.13868 -7.2521095 5.2185594 -1072.8578 -1067.6392 - 14300 1.43 0.076457412 1630.9111 160.1566 -7.2734168 5.1547645 -1072.794 -1067.6392 - 14350 1.435 0.076457382 1580.8899 157.80029 -7.3028008 5.0789247 -1072.7182 -1067.6392 - 14400 1.44 0.076457398 1564.0104 155.5646 -7.336948 5.0069673 -1072.6462 -1067.6392 - 14450 1.445 0.076457402 1558.3075 153.27872 -7.3628999 4.9333947 -1072.5726 -1067.6392 - 14500 1.45 0.076457377 1530.3969 150.48123 -7.3702551 4.8433552 -1072.4826 -1067.6392 - 14550 1.455 0.076457353 1511.7287 147.14899 -7.362315 4.7361044 -1072.3753 -1067.6392 - 14600 1.46 0.076457341 1535.6604 143.91325 -7.3525622 4.6319595 -1072.2712 -1067.6392 - 14650 1.465 0.076457346 1579.1663 141.56448 -7.3510104 4.5563627 -1072.1956 -1067.6392 - 14700 1.47 0.076457397 1612.3535 140.59549 -7.360296 4.5251749 -1072.1644 -1067.6392 - 14750 1.475 0.076457471 1642.2272 141.10169 -7.3761707 4.5414673 -1072.1807 -1067.6392 - 14800 1.48 0.076457425 1655.8317 143.06873 -7.3922813 4.604778 -1072.244 -1067.6392 - 14850 1.485 0.076457358 1635.8169 146.57617 -7.4084124 4.7176678 -1072.3569 -1067.6392 - 14900 1.49 0.07645736 1620.3521 151.43759 -7.4283243 4.8741364 -1072.5134 -1067.6392 - 14950 1.495 0.076457392 1613.6163 156.81465 -7.451549 5.0472011 -1072.6864 -1067.6392 - 15000 1.5 0.076457432 1641.9185 161.49441 -7.4752177 5.1978229 -1072.8371 -1067.6392 - 15050 1.505 0.076457454 1694.671 164.44492 -7.4987743 5.2927872 -1072.932 -1067.6392 - 15100 1.51 0.076457415 1736.9184 165.1692 -7.5221765 5.3160988 -1072.9553 -1067.6392 - 15150 1.515 0.076457338 1752.072 163.78444 -7.5411028 5.2715294 -1072.9108 -1067.6392 - 15200 1.52 0.076457306 1752.6181 161.09848 -7.553989 5.1850797 -1072.8243 -1067.6392 - 15250 1.525 0.076457359 1736.1908 158.22125 -7.5667375 5.0924736 -1072.7317 -1067.6392 - 15300 1.53 0.076457401 1730.7557 155.8948 -7.5868022 5.0175953 -1072.6568 -1067.6392 - 15350 1.535 0.076457406 1749.4877 154.29785 -7.6163309 4.9661959 -1072.6054 -1067.6392 - 15400 1.54 0.076457413 1767.8554 153.256 -7.646484 4.9326634 -1072.5719 -1067.6392 - 15450 1.545 0.076457408 1774.3702 152.86159 -7.6690389 4.9199689 -1072.5592 -1067.6392 - 15500 1.55 0.076457491 1770.2174 153.59646 -7.6870142 4.9436212 -1072.5829 -1067.6392 - 15550 1.555 0.076457608 1767.1771 155.78946 -7.7079221 5.0142046 -1072.6534 -1067.6392 - 15600 1.56 0.076457561 1738.6373 159.28425 -7.7334961 5.1266873 -1072.7659 -1067.6392 - 15650 1.565 0.076457428 1700.8184 163.47112 -7.7586601 5.2614448 -1072.9007 -1067.6392 - 15700 1.57 0.076457375 1688.1496 167.31488 -7.7745852 5.3851594 -1073.0244 -1067.6392 - 15750 1.575 0.076457393 1700.6524 169.85179 -7.7793279 5.4668117 -1073.106 -1067.6392 - 15800 1.58 0.076457312 1732.7457 170.75736 -7.7843367 5.4959582 -1073.1352 -1067.6392 - 15850 1.585 0.076457273 1770.0139 169.97991 -7.7986828 5.4709353 -1073.1102 -1067.6392 - 15900 1.59 0.076457392 1786.2936 167.32785 -7.8165236 5.3855768 -1073.0248 -1067.6392 - 15950 1.595 0.076457536 1758.2055 162.95664 -7.8294313 5.244886 -1072.8841 -1067.6392 - 16000 1.6 0.076457587 1701.2308 157.82826 -7.8390235 5.079825 -1072.7191 -1067.6392 - 16050 1.605 0.076457541 1658.3347 153.26331 -7.8499456 4.9328986 -1072.5721 -1067.6392 - 16100 1.61 0.076457398 1664.9861 150.22106 -7.8641896 4.8349815 -1072.4742 -1067.6392 - 16150 1.615 0.076457358 1704.9163 148.78635 -7.8778806 4.7888042 -1072.428 -1067.6392 - 16200 1.62 0.076457411 1717.877 148.52697 -7.8854701 4.7804557 -1072.4197 -1067.6392 - 16250 1.625 0.076457389 1676.6721 149.39648 -7.8911926 4.8084417 -1072.4477 -1067.6392 - 16300 1.63 0.076457343 1606.1432 151.67229 -7.9043128 4.8816903 -1072.5209 -1067.6392 - 16350 1.635 0.076457336 1579.1024 155.15678 -7.9251862 4.9938414 -1072.6331 -1067.6392 - 16400 1.64 0.076457384 1586.2825 159.18596 -7.949204 5.1235238 -1072.7628 -1067.6392 - 16450 1.645 0.076457396 1574.4855 163.18237 -7.976768 5.2521512 -1072.8914 -1067.6392 - 16500 1.65 0.07645733 1576.1962 166.71848 -8.0077333 5.3659636 -1073.0052 -1067.6392 - 16550 1.655 0.07645727 1597.1073 169.59771 -8.038467 5.4586339 -1073.0979 -1067.6392 - 16600 1.66 0.076457285 1599.917 171.99866 -8.06723 5.5359104 -1073.1751 -1067.6392 - 16650 1.665 0.076457312 1567.2444 174.07518 -8.0934269 5.6027449 -1073.242 -1067.6392 - 16700 1.67 0.076457288 1538.1861 175.68138 -8.1188007 5.6544416 -1073.2937 -1067.6392 - 16750 1.675 0.07645721 1511.9049 176.53933 -8.146985 5.6820555 -1073.3213 -1067.6392 - 16800 1.68 0.076457228 1468.497 176.55444 -8.1808459 5.6825417 -1073.3218 -1067.6392 - 16850 1.685 0.076457264 1431.494 175.8924 -8.2214633 5.6612334 -1073.3005 -1067.6392 - 16900 1.69 0.076457269 1415.3928 174.78298 -8.266249 5.6255257 -1073.2648 -1067.6392 - 16950 1.695 0.076457225 1452.9617 173.33174 -8.3082586 5.5788167 -1073.218 -1067.6392 - 17000 1.7 0.076457179 1470.3678 171.67883 -8.3449394 5.5256165 -1073.1648 -1067.6392 - 17050 1.705 0.076457163 1443.7364 169.99399 -8.3798127 5.4713883 -1073.1106 -1067.6392 - 17100 1.71 0.07645721 1420.9961 168.25292 -8.4131544 5.4153509 -1073.0546 -1067.6392 - 17150 1.715 0.076457295 1438.9266 166.52365 -8.4428287 5.3596929 -1072.9989 -1067.6392 - 17200 1.72 0.076457288 1491.1593 165.33242 -8.4714901 5.3213522 -1072.9606 -1067.6392 - 17250 1.725 0.076457246 1522.9686 165.31615 -8.5004148 5.3208287 -1072.9601 -1067.6392 - 17300 1.73 0.076457324 1507.7851 166.83662 -8.5254522 5.369766 -1073.009 -1067.6392 - 17350 1.735 0.076457348 1472.7382 169.83517 -8.5448034 5.4662768 -1073.1055 -1067.6392 - 17400 1.74 0.076457306 1446.0079 173.344 -8.5542116 5.5792111 -1073.2184 -1067.6392 - 17450 1.745 0.07645735 1428.36 175.90072 -8.5502511 5.661501 -1073.3007 -1067.6392 - 17500 1.75 0.076457419 1424.108 176.56743 -8.5390662 5.6829599 -1073.3222 -1067.6392 - 17550 1.755 0.076457329 1441.9785 175.33547 -8.5352293 5.6433082 -1073.2825 -1067.6392 - 17600 1.76 0.076457184 1458.608 172.71768 -8.5475316 5.5590527 -1073.1983 -1067.6392 - 17650 1.765 0.076457192 1468.4405 169.36794 -8.5725313 5.4512387 -1073.0905 -1067.6392 - 17700 1.77 0.076457276 1483.3347 165.84641 -8.6000497 5.3378954 -1072.9771 -1067.6392 - 17750 1.775 0.076457328 1488.5201 162.8195 -8.6287352 5.2404721 -1072.8797 -1067.6392 - 17800 1.78 0.07645732 1470.5993 161.04107 -8.6640671 5.1832319 -1072.8225 -1067.6392 - 17850 1.785 0.076457278 1462.6343 161.04849 -8.7048157 5.1834707 -1072.8227 -1067.6392 - 17900 1.79 0.076457233 1453.3573 163.16996 -8.7450188 5.2517519 -1072.891 -1067.6392 - 17950 1.795 0.076457161 1447.1007 167.58872 -8.7859818 5.3939729 -1073.0332 -1067.6392 - 18000 1.8 0.076457139 1440.0053 173.87077 -8.833056 5.5961657 -1073.2354 -1067.6392 - 18050 1.805 0.076457185 1418.2881 180.47756 -8.8792523 5.8088102 -1073.448 -1067.6392 - 18100 1.81 0.076457223 1401.1744 185.61692 -8.9125448 5.9742247 -1073.6135 -1067.6392 - 18150 1.815 0.07645727 1389.0345 188.42536 -8.9312647 6.0646165 -1073.7039 -1067.6392 - 18200 1.82 0.076457264 1387.7229 189.24556 -8.9469259 6.0910152 -1073.7302 -1067.6392 - 18250 1.825 0.076457202 1402.1898 188.92804 -8.9718195 6.0807957 -1073.72 -1067.6392 - 18300 1.83 0.076457177 1390.586 188.00713 -9.0028575 6.0511554 -1073.6904 -1067.6392 - 18350 1.835 0.076457182 1352.2199 186.92382 -9.0291119 6.0162881 -1073.6555 -1067.6392 - 18400 1.84 0.076457214 1348.252 186.22966 -9.0428346 5.9939461 -1073.6332 -1067.6392 - 18450 1.845 0.076457257 1391.9407 186.3174 -9.0469158 5.9967701 -1073.636 -1067.6392 - 18500 1.85 0.07645722 1426.8552 186.92904 -9.0496753 6.0164563 -1073.6557 -1067.6392 - 18550 1.855 0.076457185 1446.4566 187.30921 -9.0572556 6.0286923 -1073.6679 -1067.6392 - 18600 1.86 0.076457223 1464.9221 186.80304 -9.0713411 6.0124008 -1073.6516 -1067.6392 - 18650 1.865 0.076457199 1471.3202 185.06559 -9.0868448 5.9564798 -1073.5957 -1067.6392 - 18700 1.87 0.07645725 1461.0629 182.41219 -9.1051202 5.871078 -1073.5103 -1067.6392 - 18750 1.875 0.076457345 1431.7789 179.46716 -9.1294581 5.7762898 -1073.4155 -1067.6392 - 18800 1.88 0.076457274 1409.3438 176.48484 -9.1499481 5.6803016 -1073.3195 -1067.6392 - 18850 1.885 0.076457201 1370.4168 173.84236 -9.1643576 5.5952513 -1073.2345 -1067.6392 - 18900 1.89 0.076457245 1307.0644 172.24292 -9.1908564 5.543772 -1073.183 -1067.6392 - 18950 1.895 0.076457257 1298.5302 171.72024 -9.2357227 5.5269491 -1073.1662 -1067.6392 - 19000 1.9 0.076457286 1335.2088 171.37187 -9.2735952 5.5157366 -1073.155 -1067.6392 - 19050 1.905 0.076457382 1347.2532 170.91617 -9.2850717 5.5010696 -1073.1403 -1067.6392 - 19100 1.91 0.076457395 1332.8305 171.59912 -9.2864975 5.5230508 -1073.1623 -1067.6392 - 19150 1.915 0.076457344 1304.8597 174.54105 -9.2959387 5.6177392 -1073.257 -1067.6392 - 19200 1.92 0.076457301 1276.1592 179.42057 -9.309653 5.7747904 -1073.414 -1067.6392 - 19250 1.925 0.076457274 1260.6559 185.20252 -9.325615 5.9608868 -1073.6001 -1067.6392 - 19300 1.93 0.076457271 1265.939 190.71739 -9.3483129 6.1383871 -1073.7776 -1067.6392 - 19350 1.935 0.076457278 1304.535 194.87898 -9.3783203 6.2723313 -1073.9116 -1067.6392 - 19400 1.94 0.07645731 1362.5576 197.21347 -9.4193269 6.3474686 -1073.9867 -1067.6392 - 19450 1.945 0.076457423 1382.7886 197.45962 -9.4694007 6.355391 -1073.9946 -1067.6392 - 19500 1.95 0.076457472 1352.303 195.21464 -9.5133315 6.2831347 -1073.9224 -1067.6392 - 19550 1.955 0.076457413 1318.6835 190.89792 -9.5445597 6.1441978 -1073.7834 -1067.6392 - 19600 1.96 0.076457386 1300.0189 186.19759 -9.5724767 5.9929138 -1073.6321 -1067.6392 - 19650 1.965 0.076457417 1281.4514 182.93348 -9.6006152 5.8878559 -1073.5271 -1067.6392 - 19700 1.97 0.07645744 1265.2354 182.28868 -9.628322 5.8671025 -1073.5063 -1067.6392 - 19750 1.975 0.076457421 1267.1291 184.68067 -9.6640365 5.9440908 -1073.5833 -1067.6392 - 19800 1.98 0.076457374 1293.1065 189.3714 -9.7123982 6.0950654 -1073.7343 -1067.6392 - 19850 1.985 0.076457367 1329.191 194.76572 -9.7631294 6.268686 -1073.9079 -1067.6392 - 19900 1.99 0.076457418 1354.9407 199.74508 -9.810328 6.4289505 -1074.0682 -1067.6392 - 19950 1.995 0.076457493 1364.3708 203.86864 -9.8606606 6.5616706 -1074.2009 -1067.6392 - 20000 2 0.076457544 1370.452 206.23944 -9.9126035 6.6379764 -1074.2772 -1067.6392 - 20050 2.005 0.076457509 1383.7523 205.76789 -9.9571492 6.6227992 -1074.262 -1067.6392 - 20100 2.01 0.076457429 1414.7434 202.49809 -9.9940319 6.517558 -1074.1568 -1067.6392 - 20150 2.015 0.076457429 1440.4523 197.73428 -10.025459 6.3642312 -1074.0035 -1067.6392 - 20200 2.02 0.076457497 1438.5359 193.30554 -10.048612 6.2216888 -1073.8609 -1067.6392 - 20250 2.025 0.07645744 1414.6747 190.72151 -10.062382 6.1385198 -1073.7778 -1067.6392 - 20300 2.03 0.07645731 1378.8817 190.25946 -10.069669 6.1236485 -1073.7629 -1067.6392 - 20350 2.035 0.076457261 1346.5661 190.90571 -10.074723 6.1444483 -1073.7837 -1067.6392 - 20400 2.04 0.076457374 1317.3739 191.59018 -10.08691 6.1664785 -1073.8057 -1067.6392 - 20450 2.045 0.076457432 1298.4495 191.78045 -10.110389 6.1726027 -1073.8118 -1067.6392 - 20500 2.05 0.076457389 1307.5371 191.15865 -10.137263 6.1525895 -1073.7918 -1067.6392 - 20550 2.055 0.07645742 1349.47 189.92735 -10.166271 6.1129591 -1073.7522 -1067.6392 - 20600 2.06 0.076457466 1398.5195 188.8647 -10.202844 6.0787568 -1073.718 -1067.6392 - 20650 2.065 0.076457498 1429.8721 188.62808 -10.24022 6.0711412 -1073.7104 -1067.6392 - 20700 2.07 0.076457542 1418.3434 189.78814 -10.271874 6.1084787 -1073.7477 -1067.6392 - 20750 2.075 0.076457458 1385.6893 192.47669 -10.295734 6.1950118 -1073.8342 -1067.6392 - 20800 2.08 0.076457259 1384.4289 196.10104 -10.308523 6.3116642 -1073.9509 -1067.6392 - 20850 2.085 0.0764572 1421.2966 200.257 -10.317753 6.4454271 -1074.0847 -1067.6392 - 20900 2.09 0.076457326 1452.7855 205.19616 -10.341775 6.6043977 -1074.2436 -1067.6392 - 20950 2.095 0.076457501 1427.8013 210.86618 -10.385931 6.7868916 -1074.4261 -1067.6392 - 21000 2.1 0.076457596 1357.2483 216.14216 -10.43158 6.9567033 -1074.5959 -1067.6392 - 21050 2.105 0.07645759 1324.5353 219.6255 -10.462375 7.0688173 -1074.7081 -1067.6392 - 21100 2.11 0.076457496 1347.0889 220.73435 -10.48964 7.1045064 -1074.7437 -1067.6392 - 21150 2.115 0.076457458 1361.8801 219.46337 -10.529469 7.0635988 -1074.7028 -1067.6392 - 21200 2.12 0.076457466 1365.4715 216.13572 -10.578785 6.9564959 -1074.5957 -1067.6392 - 21250 2.125 0.076457537 1362.6717 211.57708 -10.625983 6.8097726 -1074.449 -1067.6392 - 21300 2.13 0.076457586 1340.2017 206.63829 -10.66147 6.6508137 -1074.29 -1067.6392 - 21350 2.135 0.076457554 1331.9946 201.93393 -10.679818 6.4994001 -1074.1386 -1067.6392 - 21400 2.14 0.076457547 1347.0023 198.28955 -10.68412 6.382103 -1074.0213 -1067.6392 - 21450 2.145 0.076457533 1340.6741 196.9082 -10.686481 6.3376433 -1073.9769 -1067.6392 - 21500 2.15 0.076457456 1316.0121 198.72879 -10.696049 6.3962403 -1074.0355 -1067.6392 - 21550 2.155 0.076457391 1324.8545 203.55687 -10.714867 6.551636 -1074.1909 -1067.6392 - 21600 2.16 0.076457382 1351.2014 209.51125 -10.739588 6.7432823 -1074.3825 -1067.6392 - 21650 2.165 0.076457455 1366.4862 213.95654 -10.765901 6.8863571 -1074.5256 -1067.6392 - 21700 2.17 0.076457459 1377.4225 215.23385 -10.795997 6.9274684 -1074.5667 -1067.6392 - 21750 2.175 0.076457481 1396.0304 212.90984 -10.825441 6.8526684 -1074.4919 -1067.6392 - 21800 2.18 0.076457615 1387.0649 207.72279 -10.844968 6.6857194 -1074.325 -1067.6392 - 21850 2.185 0.07645756 1347.9695 201.50492 -10.85814 6.4855922 -1074.1248 -1067.6392 - 21900 2.19 0.076457366 1323.2228 196.28581 -10.872625 6.3176113 -1073.9568 -1067.6392 - 21950 2.195 0.076457329 1315.1922 193.83068 -10.887085 6.2385908 -1073.8778 -1067.6392 - 22000 2.2 0.076457369 1307.9895 195.03955 -10.898532 6.2774994 -1073.9167 -1067.6392 - 22050 2.205 0.076457333 1302.1738 199.68283 -10.909377 6.4269467 -1074.0662 -1067.6392 - 22100 2.21 0.076457379 1305.5855 206.92378 -10.917331 6.6600025 -1074.2992 -1067.6392 - 22150 2.215 0.076457515 1304.6883 215.29251 -10.918892 6.9293567 -1074.5686 -1067.6392 - 22200 2.22 0.076457547 1296.8284 222.98568 -10.922929 7.1769673 -1074.8162 -1067.6392 - 22250 2.225 0.076457453 1286.8966 228.09069 -10.938316 7.341276 -1074.9805 -1067.6392 - 22300 2.23 0.076457432 1283.0205 228.97664 -10.961235 7.369791 -1075.009 -1067.6392 - 22350 2.235 0.076457491 1270.3982 225.44347 -10.985727 7.256073 -1074.8953 -1067.6392 - 22400 2.24 0.076457539 1249.8598 219.23739 -11.012893 7.0563256 -1074.6956 -1067.6392 - 22450 2.245 0.076457476 1240.8541 212.79326 -11.044291 6.8489162 -1074.4881 -1067.6392 - 22500 2.25 0.076457394 1216.6944 207.29518 -11.068062 6.6719563 -1074.3112 -1067.6392 - 22550 2.255 0.07645743 1199.1131 202.98585 -11.071495 6.5332571 -1074.1725 -1067.6392 - 22600 2.26 0.076457488 1212.1478 200.96232 -11.064393 6.4681283 -1074.1074 -1067.6392 - 22650 2.265 0.076457528 1237.8172 202.93395 -11.064895 6.5315867 -1074.1708 -1067.6392 - 22700 2.27 0.076457598 1271.2811 209.42782 -11.076273 6.740597 -1074.3798 -1067.6392 - 22750 2.275 0.076457625 1292.63 218.78195 -11.089805 7.0416668 -1074.6809 -1067.6392 - 22800 2.28 0.076457646 1294.2671 227.41133 -11.098416 7.31941 -1074.9586 -1067.6392 - 22850 2.285 0.07645765 1293.2803 231.3383 -11.10365 7.4458026 -1075.085 -1067.6392 - 22900 2.29 0.076457537 1276.9806 228.2557 -11.10958 7.346587 -1074.9858 -1067.6392 - 22950 2.295 0.076457429 1247.4583 218.93487 -11.118854 7.0465888 -1074.6858 -1067.6392 - 23000 2.3 0.07645749 1220.8505 206.99183 -11.13279 6.6621926 -1074.3014 -1067.6392 - 23050 2.305 0.076457684 1195.6985 196.96159 -11.149 6.3393615 -1073.9786 -1067.6392 - 23100 2.31 0.076457705 1177.6963 192.24501 -11.168942 6.1875548 -1073.8268 -1067.6392 - 23150 2.315 0.076457622 1189.909 193.63937 -11.194406 6.2324333 -1073.8717 -1067.6392 - 23200 2.32 0.076457629 1176.2126 199.45702 -11.222484 6.4196791 -1074.0589 -1067.6392 - 23250 2.325 0.076457691 1143.0276 207.378 -11.256925 6.6746219 -1074.3139 -1067.6392 - 23300 2.33 0.076457654 1149.5521 215.51136 -11.297612 6.9364003 -1074.5756 -1067.6392 - 23350 2.335 0.076457506 1175.2519 222.4968 -11.332657 7.1612322 -1074.8005 -1067.6392 - 23400 2.34 0.07645745 1206.0616 227.6206 -11.358013 7.3261457 -1074.9654 -1067.6392 - 23450 2.345 0.076457571 1244.7472 230.22754 -11.372594 7.4100522 -1075.0493 -1067.6392 - 23500 2.35 0.076457771 1284.7778 229.70862 -11.373027 7.3933501 -1075.0326 -1067.6392 - 23550 2.355 0.076457864 1311.4158 226.4096 -11.368792 7.2871688 -1074.9264 -1067.6392 - 23600 2.36 0.076457811 1306.2401 221.71694 -11.376759 7.1361318 -1074.7754 -1067.6392 - 23650 2.365 0.076457644 1286.7748 217.10502 -11.396699 6.9876935 -1074.6269 -1067.6392 - 23700 2.37 0.076457559 1285.9692 213.6234 -11.411758 6.8756348 -1074.5149 -1067.6392 - 23750 2.375 0.076457583 1315.8724 212.16671 -11.41765 6.8287501 -1074.468 -1067.6392 - 23800 2.38 0.076457631 1339.9814 212.92958 -11.42278 6.8533037 -1074.4925 -1067.6392 - 23850 2.385 0.076457734 1345.9875 214.96489 -11.430277 6.918812 -1074.558 -1067.6392 - 23900 2.39 0.076457858 1361.0323 217.03056 -11.439982 6.985297 -1074.6245 -1067.6392 - 23950 2.395 0.076457821 1349.6621 218.41589 -11.451629 7.0298849 -1074.6691 -1067.6392 - 24000 2.4 0.076457708 1314.3225 219.11487 -11.463434 7.0523821 -1074.6916 -1067.6392 - 24050 2.405 0.076457674 1317.1772 219.55885 -11.474327 7.066672 -1074.7059 -1067.6392 - 24100 2.41 0.076457767 1340.506 220.1472 -11.487319 7.0856086 -1074.7248 -1067.6392 - 24150 2.415 0.076457818 1335.5812 220.89722 -11.505688 7.1097485 -1074.749 -1067.6392 - 24200 2.42 0.076457791 1314.6836 221.34153 -11.523839 7.1240489 -1074.7633 -1067.6392 - 24250 2.425 0.0764578 1318.1131 221.06173 -11.535018 7.1150433 -1074.7543 -1067.6392 - 24300 2.43 0.076457733 1331.7464 220.35927 -11.543314 7.0924342 -1074.7317 -1067.6392 - 24350 2.435 0.076457676 1349.095 220.17248 -11.558019 7.0864221 -1074.7257 -1067.6392 - 24400 2.44 0.076457742 1356.5902 221.03788 -11.578741 7.1142759 -1074.7535 -1067.6392 - 24450 2.445 0.076457749 1335.6175 222.53673 -11.601255 7.1625175 -1074.8017 -1067.6392 - 24500 2.45 0.076457723 1333.7469 223.84826 -11.630787 7.2047301 -1074.844 -1067.6392 - 24550 2.455 0.07645779 1345.535 223.91615 -11.665528 7.2069151 -1074.8461 -1067.6392 - 24600 2.46 0.076457891 1349.7061 222.16848 -11.700181 7.1506649 -1074.7899 -1067.6392 - 24650 2.465 0.076457886 1343.7465 219.10866 -11.729696 7.0521824 -1074.6914 -1067.6392 - 24700 2.47 0.076457762 1339.7649 216.23529 -11.746431 6.9597005 -1074.5989 -1067.6392 - 24750 2.475 0.076457705 1355.939 215.51975 -11.750957 6.9366704 -1074.5759 -1067.6392 - 24800 2.48 0.076457776 1356.4139 218.30642 -11.757207 7.0263614 -1074.6656 -1067.6392 - 24850 2.485 0.076457848 1330.0312 224.05179 -11.772578 7.2112807 -1074.8505 -1067.6392 - 24900 2.49 0.076457863 1297.5013 230.5494 -11.792498 7.4204112 -1075.0596 -1067.6392 - 24950 2.495 0.076457868 1290.2485 235.49414 -11.816527 7.5795618 -1075.2188 -1067.6392 - 25000 2.5 0.076457817 1324.8441 237.34082 -11.84201 7.6389985 -1075.2782 -1067.6392 - 25050 2.505 0.076457813 1382.8669 235.99886 -11.868053 7.5958063 -1075.235 -1067.6392 - 25100 2.51 0.076457866 1404.5052 232.75422 -11.897872 7.4913751 -1075.1306 -1067.6392 - 25150 2.515 0.076457758 1373.5678 229.12093 -11.930189 7.3744349 -1075.0137 -1067.6392 - 25200 2.52 0.076457631 1340.2368 225.89973 -11.961129 7.2707582 -1074.91 -1067.6392 - 25250 2.525 0.076457603 1287.6672 223.17935 -11.988402 7.1832006 -1074.8224 -1067.6392 - 25300 2.53 0.076457707 1215.9369 221.04361 -12.017068 7.1144602 -1074.7537 -1067.6392 - 25350 2.535 0.076457838 1180.1736 219.67591 -12.055753 7.0704398 -1074.7097 -1067.6392 - 25400 2.54 0.076457842 1170.0761 218.91437 -12.098288 7.0459289 -1074.6852 -1067.6392 - 25450 2.545 0.076457763 1167.2929 218.81794 -12.132702 7.0428252 -1074.6821 -1067.6392 - 25500 2.55 0.076457742 1155.4395 219.83672 -12.154195 7.0756153 -1074.7148 -1067.6392 - 25550 2.555 0.076457848 1131.146 222.18391 -12.164224 7.1511617 -1074.7904 -1067.6392 - 25600 2.56 0.076457871 1116.0652 225.47579 -12.165095 7.2571134 -1074.8963 -1067.6392 - 25650 2.565 0.076457678 1117.8567 229.01451 -12.157967 7.3710097 -1075.0102 -1067.6392 - 25700 2.57 0.076457577 1115.2103 232.4771 -12.148741 7.4824559 -1075.1217 -1067.6392 - 25750 2.575 0.07645762 1102.8295 236.02578 -12.149186 7.5966728 -1075.2359 -1067.6392 - 25800 2.58 0.076457709 1096.6263 239.31704 -12.161384 7.7026045 -1075.3418 -1067.6392 - 25850 2.585 0.076457771 1099.7531 240.71012 -12.161592 7.747442 -1075.3867 -1067.6392 - 25900 2.59 0.076457794 1113.7391 239.15473 -12.139363 7.6973807 -1075.3366 -1067.6392 - 25950 2.595 0.07645781 1147.6615 235.77781 -12.120655 7.5886918 -1075.2279 -1067.6392 - 26000 2.6 0.076457803 1195.6627 232.4229 -12.122283 7.4807114 -1075.1199 -1067.6392 - 26050 2.605 0.076457723 1213.8878 230.05021 -12.134196 7.4043447 -1075.0436 -1067.6392 - 26100 2.61 0.076457662 1191.4257 228.34601 -12.14523 7.3494937 -1074.9887 -1067.6392 - 26150 2.615 0.076457767 1186.9577 226.17929 -12.149057 7.2797559 -1074.919 -1067.6392 - 26200 2.62 0.076457849 1226.0678 223.24397 -12.148604 7.1852804 -1074.8245 -1067.6392 - 26250 2.625 0.076457784 1270.1774 220.78885 -12.161228 7.1062605 -1074.7455 -1067.6392 - 26300 2.63 0.076457753 1268.5951 220.05927 -12.190785 7.0827783 -1074.722 -1067.6392 - 26350 2.635 0.076457796 1244.3015 221.38274 -12.221833 7.1253752 -1074.7646 -1067.6392 - 26400 2.64 0.076457904 1225.8939 224.5378 -12.241241 7.2269233 -1074.8662 -1067.6392 - 26450 2.645 0.076457928 1204.224 229.04038 -12.247464 7.3718425 -1075.0111 -1067.6392 - 26500 2.65 0.076457842 1199.5629 234.11351 -12.243703 7.5351249 -1075.1744 -1067.6392 - 26550 2.655 0.0764578 1235.5048 238.7946 -12.230359 7.6857895 -1075.325 -1067.6392 - 26600 2.66 0.076457721 1281.541 242.70107 -12.219967 7.8115224 -1075.4508 -1067.6392 - 26650 2.665 0.0764577 1281.3617 245.64082 -12.229105 7.9061404 -1075.5454 -1067.6392 - 26700 2.67 0.07645779 1230.3534 246.77381 -12.256827 7.9426067 -1075.5818 -1067.6392 - 26750 2.675 0.076457839 1175.2288 245.47917 -12.297669 7.9009375 -1075.5402 -1067.6392 - 26800 2.68 0.076457784 1149.9437 242.07494 -12.342321 7.7913698 -1075.4306 -1067.6392 - 26850 2.685 0.076457711 1169.6008 237.70339 -12.376334 7.650668 -1075.2899 -1067.6392 - 26900 2.69 0.076457632 1210.4254 233.714 -12.396735 7.5222663 -1075.1615 -1067.6392 - 26950 2.695 0.076457617 1244.0163 230.58832 -12.405269 7.4216639 -1075.0609 -1067.6392 - 27000 2.7 0.076457659 1257.3494 228.32233 -12.406329 7.3487312 -1074.988 -1067.6392 - 27050 2.705 0.076457668 1242.1629 227.1087 -12.40368 7.3096696 -1074.9489 -1067.6392 - 27100 2.71 0.076457682 1217.8126 227.49963 -12.404175 7.3222522 -1074.9615 -1067.6392 - 27150 2.715 0.076457706 1217.8124 229.8195 -12.417454 7.3969191 -1075.0361 -1067.6392 - 27200 2.72 0.076457701 1219.6581 233.1475 -12.435301 7.5040334 -1075.1433 -1067.6392 - 27250 2.725 0.076457686 1211.6763 235.8244 -12.43823 7.5901913 -1075.2294 -1067.6392 - 27300 2.73 0.076457643 1225.8491 236.93145 -12.423077 7.6258227 -1075.2651 -1067.6392 - 27350 2.735 0.076457549 1261.0199 236.94668 -12.410644 7.6263127 -1075.2655 -1067.6392 - 27400 2.74 0.076457483 1284.2546 236.98531 -12.421882 7.6275561 -1075.2668 -1067.6392 - 27450 2.745 0.076457556 1281.5681 237.67885 -12.455724 7.6498782 -1075.2891 -1067.6392 - 27500 2.75 0.076457685 1256.839 238.55422 -12.493006 7.6780526 -1075.3173 -1067.6392 - 27550 2.755 0.076457693 1220.0129 238.19759 -12.515867 7.6665742 -1075.3058 -1067.6392 - 27600 2.76 0.076457632 1193.1779 235.68564 -12.532016 7.5857252 -1075.225 -1067.6392 - 27650 2.765 0.076457609 1192.09 231.33982 -12.558081 7.4458516 -1075.0851 -1067.6392 - 27700 2.77 0.076457625 1202.0934 226.4355 -12.590497 7.2880024 -1074.9272 -1067.6392 - 27750 2.775 0.076457615 1223.3689 222.74878 -12.619082 7.1693425 -1074.8086 -1067.6392 - 27800 2.78 0.076457614 1236.1154 221.25926 -12.636081 7.1214011 -1074.7606 -1067.6392 - 27850 2.785 0.076457572 1215.5551 222.18867 -12.64127 7.1513149 -1074.7905 -1067.6392 - 27900 2.79 0.07645756 1193.3848 226.01602 -12.647063 7.2745009 -1074.9137 -1067.6392 - 27950 2.795 0.076457569 1199.0777 232.72902 -12.662048 7.4905641 -1075.1298 -1067.6392 - 28000 2.8 0.076457558 1226.0822 240.9006 -12.684171 7.7535728 -1075.3928 -1067.6392 - 28050 2.805 0.076457525 1250.6269 248.18701 -12.706245 7.9880915 -1075.6273 -1067.6392 - 28100 2.81 0.076457523 1248.7874 252.69422 -12.722605 8.1331597 -1075.7724 -1067.6392 - 28150 2.815 0.07645753 1230.0137 253.95916 -12.737961 8.1738726 -1075.8131 -1067.6392 - 28200 2.82 0.076457605 1234.0819 252.35766 -12.756693 8.1223272 -1075.7616 -1067.6392 - 28250 2.825 0.07645771 1254.628 248.5247 -12.774833 7.9989605 -1075.6382 -1067.6392 - 28300 2.83 0.07645778 1281.309 243.72026 -12.788447 7.8443256 -1075.4836 -1067.6392 - 28350 2.835 0.076457708 1285.3002 239.8707 -12.802912 7.7204245 -1075.3597 -1067.6392 - 28400 2.84 0.076457582 1256.9488 238.10994 -12.817628 7.6637532 -1075.303 -1067.6392 - 28450 2.845 0.076457576 1242.8447 238.02503 -12.821369 7.6610204 -1075.3003 -1067.6392 - 28500 2.85 0.076457672 1248.8453 238.87258 -12.815092 7.6882993 -1075.3275 -1067.6392 - 28550 2.855 0.07645771 1281.7135 240.3983 -12.811904 7.7374058 -1075.3766 -1067.6392 - 28600 2.86 0.07645762 1294.605 242.33371 -12.814653 7.7996987 -1075.4389 -1067.6392 - 28650 2.865 0.076457529 1252.3957 244.15537 -12.817984 7.8583301 -1075.4976 -1067.6392 - 28700 2.87 0.076457548 1213.8804 245.30616 -12.82322 7.8953691 -1075.5346 -1067.6392 - 28750 2.875 0.076457553 1200.6384 245.23015 -12.835086 7.8929227 -1075.5322 -1067.6392 - 28800 2.88 0.076457552 1189.7135 243.32741 -12.845696 7.8316815 -1075.4709 -1067.6392 - 28850 2.885 0.076457676 1171.5405 239.66267 -12.847297 7.7137291 -1075.353 -1067.6392 - 28900 2.89 0.076457794 1182.195 235.25919 -12.851038 7.5719995 -1075.2112 -1067.6392 - 28950 2.895 0.076457813 1224.8369 230.84518 -12.859984 7.4299314 -1075.0692 -1067.6392 - 29000 2.9 0.076457656 1269.692 226.8838 -12.858576 7.3024311 -1074.9417 -1067.6392 - 29050 2.905 0.076457468 1286.8403 225.08705 -12.856504 7.2446013 -1074.8838 -1067.6392 - 29100 2.91 0.0764575 1271.0526 226.82973 -12.880368 7.3006909 -1074.9399 -1067.6392 - 29150 2.915 0.07645747 1248.4957 230.86777 -12.929739 7.4306583 -1075.0699 -1067.6392 - 29200 2.92 0.07645748 1245.8599 234.77185 -12.982866 7.5563142 -1075.1955 -1067.6392 - 29250 2.925 0.076457588 1257.79 237.40229 -13.022402 7.6409768 -1075.2802 -1067.6392 - 29300 2.93 0.076457597 1260.7886 239.44496 -13.046942 7.7067219 -1075.346 -1067.6392 - 29350 2.935 0.07645748 1254.7882 242.29319 -13.065883 7.7983943 -1075.4376 -1067.6392 - 29400 2.94 0.076457359 1263.4607 246.63741 -13.085623 7.9382166 -1075.5774 -1067.6392 - 29450 2.945 0.076457332 1289.6554 251.59184 -13.099481 8.0976788 -1075.7369 -1067.6392 - 29500 2.95 0.076457414 1305.0692 255.25633 -13.098228 8.2156232 -1075.8549 -1067.6392 - 29550 2.955 0.076457494 1277.7916 256.65211 -13.088762 8.2605473 -1075.8998 -1067.6392 - 29600 2.96 0.076457446 1192.1394 256.67442 -13.090594 8.2612654 -1075.9005 -1067.6392 - 29650 2.965 0.076457417 1102.145 257.10406 -13.122356 8.2750937 -1075.9143 -1067.6392 - 29700 2.97 0.076457454 1062.1511 258.80127 -13.182596 8.3297196 -1075.969 -1067.6392 - 29750 2.975 0.076457483 1054.3636 261.18603 -13.249025 8.4064751 -1076.0457 -1067.6392 - 29800 2.98 0.076457498 1047.2927 263.27484 -13.304946 8.4737052 -1076.1129 -1067.6392 - 29850 2.985 0.076457496 1036.3496 264.2054 -13.347539 8.503656 -1076.1429 -1067.6392 - 29900 2.99 0.076457524 1049.8211 263.14933 -13.375057 8.4696654 -1076.1089 -1067.6392 - 29950 2.995 0.076457485 1086.8925 259.64496 -13.389366 8.3568747 -1075.9961 -1067.6392 - 30000 3 0.076457358 1121.0033 253.8035 -13.399945 8.1688626 -1075.8081 -1067.6392 - 30050 3.005 0.076457431 1153.305 246.37026 -13.414937 7.929618 -1075.5688 -1067.6392 - 30100 3.01 0.076457504 1145.6871 238.79622 -13.434682 7.6858415 -1075.3251 -1067.6392 - 30150 3.015 0.076457434 1115.5285 232.85496 -13.455727 7.4946177 -1075.1338 -1067.6392 - 30200 3.02 0.076457399 1103.9994 229.6959 -13.474938 7.392941 -1075.0322 -1067.6392 - 30250 3.025 0.076457501 1101.6296 229.35272 -13.488841 7.3818953 -1075.0211 -1067.6392 - 30300 3.03 0.076457539 1112.6865 231.35224 -13.495096 7.4462514 -1075.0855 -1067.6392 - 30350 3.035 0.076457548 1123.796 235.35091 -13.499855 7.5749517 -1075.2142 -1067.6392 - 30400 3.04 0.076457611 1111.9754 240.67564 -13.509248 7.7463324 -1075.3856 -1067.6392 - 30450 3.045 0.076457553 1103.8338 246.28636 -13.523249 7.9269177 -1075.5661 -1067.6392 - 30500 3.05 0.076457568 1119.7372 251.34267 -13.540792 8.089659 -1075.7289 -1067.6392 - 30550 3.055 0.076457571 1132.1966 255.24219 -13.56046 8.2151678 -1075.8544 -1067.6392 - 30600 3.06 0.076457421 1124.379 257.49852 -13.581214 8.2877897 -1075.927 -1067.6392 - 30650 3.065 0.076457351 1122.0717 257.82611 -13.600369 8.2983334 -1075.9376 -1067.6392 - 30700 3.07 0.076457488 1124.7347 256.51074 -13.616001 8.2559974 -1075.8952 -1067.6392 - 30750 3.075 0.076457614 1114.8471 254.66368 -13.629361 8.1965481 -1075.8358 -1067.6392 - 30800 3.08 0.076457581 1094.5902 253.68827 -13.6371 8.1651537 -1075.8044 -1067.6392 - 30850 3.085 0.076457515 1073.605 254.18179 -13.626926 8.1810381 -1075.8203 -1067.6392 - 30900 3.09 0.076457524 1059.6001 255.86129 -13.596369 8.2350942 -1075.8743 -1067.6392 - 30950 3.095 0.0764576 1050.7385 258.54322 -13.569865 8.3214142 -1075.9606 -1067.6392 - 31000 3.1 0.076457649 1033.7103 262.19251 -13.574242 8.4388695 -1076.0781 -1067.6392 - 31050 3.105 0.076457659 1023.1274 265.66302 -13.599347 8.5505704 -1076.1898 -1067.6392 - 31100 3.11 0.076457746 1039.0568 267.03003 -13.620524 8.5945689 -1076.2338 -1067.6392 - 31150 3.115 0.076457898 1064.7448 265.17792 -13.632089 8.5349571 -1076.1742 -1067.6392 - 31200 3.12 0.076458052 1085.3299 260.61936 -13.639394 8.3882363 -1076.0275 -1067.6392 - 31250 3.125 0.076457928 1090.3799 255.5305 -13.653293 8.2244474 -1075.8637 -1067.6392 - 31300 3.13 0.076457763 1073.4364 252.27482 -13.679887 8.1196609 -1075.7589 -1067.6392 - 31350 3.135 0.076457843 1055.311 251.62684 -13.710258 8.098805 -1075.738 -1067.6392 - 31400 3.14 0.07645797 1050.9396 252.63775 -13.731468 8.131342 -1075.7706 -1067.6392 - 31450 3.145 0.076457995 1046.9287 253.93922 -13.744029 8.1732308 -1075.8125 -1067.6392 - 31500 3.15 0.076457929 1022.8429 255.08707 -13.767257 8.2101752 -1075.8494 -1067.6392 - 31550 3.155 0.076457813 1004.9865 255.64995 -13.801963 8.228292 -1075.8675 -1067.6392 - 31600 3.16 0.076457767 1012.0538 254.8658 -13.829447 8.2030536 -1075.8423 -1067.6392 - 31650 3.165 0.076457802 1018.5353 252.69011 -13.844282 8.1330274 -1075.7723 -1067.6392 - 31700 3.17 0.076457799 1017.5009 249.999 -13.85414 8.0464118 -1075.6856 -1067.6392 - 31750 3.175 0.076457841 1019.8774 248.32876 -13.869648 7.9926539 -1075.6319 -1067.6392 - 31800 3.18 0.076457886 1027.7011 249.00645 -13.900943 8.014466 -1075.6537 -1067.6392 - 31850 3.185 0.07645785 1032.5018 251.69035 -13.947711 8.1008491 -1075.7401 -1067.6392 - 31900 3.19 0.076457837 1045.2307 254.29935 -13.987581 8.1848219 -1075.8241 -1067.6392 - 31950 3.195 0.076457885 1056.0235 255.3938 -14.000115 8.2200476 -1075.8593 -1067.6392 - 32000 3.2 0.076457879 1063.1819 256.13783 -14.001498 8.2439948 -1075.8832 -1067.6392 - 32050 3.205 0.076457704 1063.2852 258.5764 -14.010496 8.3224822 -1075.9617 -1067.6392 - 32100 3.21 0.076457634 1060.1503 263.31955 -14.023472 8.4751441 -1076.1144 -1067.6392 - 32150 3.215 0.07645773 1082.1484 268.96215 -14.036792 8.6567557 -1076.296 -1067.6392 - 32200 3.22 0.076457724 1103.843 273.4235 -14.055183 8.8003475 -1076.4396 -1067.6392 - 32250 3.225 0.076457625 1120.0414 275.94618 -14.084096 8.8815421 -1076.5208 -1067.6392 - 32300 3.23 0.076457606 1136.3108 276.73679 -14.116774 8.9069885 -1076.5462 -1067.6392 - 32350 3.235 0.07645768 1140.5919 275.77159 -14.139186 8.8759228 -1076.5152 -1067.6392 - 32400 3.24 0.076457802 1142.314 273.10495 -14.154735 8.7900947 -1076.4293 -1067.6392 - 32450 3.245 0.076457801 1159.6999 269.05809 -14.173996 8.6598435 -1076.2991 -1067.6392 - 32500 3.25 0.076457663 1174.6995 264.30819 -14.195702 8.5069643 -1076.1462 -1067.6392 - 32550 3.255 0.07645754 1185.7335 260.56202 -14.220076 8.3863908 -1076.0256 -1067.6392 - 32600 3.26 0.07645745 1198.982 259.45314 -14.241025 8.3507006 -1075.9899 -1067.6392 - 32650 3.265 0.076457456 1199.5794 261.37319 -14.253149 8.4124991 -1076.0517 -1067.6392 - 32700 3.27 0.076457573 1179.3566 265.3589 -14.262294 8.540782 -1076.18 -1067.6392 - 32750 3.275 0.076457607 1165.0216 269.79834 -14.273699 8.683669 -1076.3229 -1067.6392 - 32800 3.28 0.076457614 1173.1315 273.40897 -14.289043 8.7998799 -1076.4391 -1067.6392 - 32850 3.285 0.076457555 1178.2206 274.57793 -14.299588 8.8375039 -1076.4767 -1067.6392 - 32900 3.29 0.076457497 1160.0236 271.50252 -14.294919 8.7385195 -1076.3778 -1067.6392 - 32950 3.295 0.076457473 1144.3971 264.301 -14.284674 8.5067327 -1076.146 -1067.6392 - 33000 3.3 0.076457442 1138.8725 255.31826 -14.284777 8.2176163 -1075.8568 -1067.6392 - 33050 3.305 0.076457458 1135.3747 247.47369 -14.298209 7.9651327 -1075.6044 -1067.6392 - 33100 3.31 0.07645749 1148.9774 242.6502 -14.315521 7.809885 -1075.4491 -1067.6392 - 33150 3.315 0.076457432 1189.6279 241.36912 -14.324008 7.7686525 -1075.4079 -1067.6392 - 33200 3.32 0.076457424 1218.5788 243.90794 -14.331626 7.8503665 -1075.4896 -1067.6392 - 33250 3.325 0.076457482 1226.0538 250.03113 -14.352941 8.0474459 -1075.6867 -1067.6392 - 33300 3.33 0.076457454 1217.2314 257.73002 -14.374194 8.2952407 -1075.9345 -1067.6392 - 33350 3.335 0.076457399 1179.6803 264.28604 -14.379749 8.5062513 -1076.1455 -1067.6392 - 33400 3.34 0.076457379 1147.4971 267.79867 -14.373039 8.6193079 -1076.2585 -1067.6392 - 33450 3.345 0.076457399 1124.9366 267.92167 -14.366464 8.6232668 -1076.2625 -1067.6392 - 33500 3.35 0.076457444 1092.1841 265.9319 -14.368822 8.5592245 -1076.1985 -1067.6392 - 33550 3.355 0.076457408 1060.5254 264.14114 -14.37771 8.5015877 -1076.1408 -1067.6392 - 33600 3.36 0.07645736 1052.8302 265.02822 -14.389997 8.5301389 -1076.1694 -1067.6392 - 33650 3.365 0.076457327 1071.8382 269.77669 -14.410837 8.6829721 -1076.3222 -1067.6392 - 33700 3.37 0.076457378 1077.2229 277.22693 -14.442017 8.9227639 -1076.562 -1067.6392 - 33750 3.375 0.076457477 1071.9501 284.74963 -14.478049 9.1648879 -1076.8041 -1067.6392 - 33800 3.38 0.076457559 1090.056 289.50132 -14.506085 9.3178246 -1076.9571 -1067.6392 - 33850 3.385 0.076457575 1101.8505 289.82737 -14.514725 9.328319 -1076.9676 -1067.6392 - 33900 3.39 0.076457503 1091.3063 286.53466 -14.509436 9.2223404 -1076.8616 -1067.6392 - 33950 3.395 0.076457435 1087.1463 282.13005 -14.507235 9.0805746 -1076.7198 -1067.6392 - 34000 3.4 0.076457382 1079.0451 278.26682 -14.510716 8.9562337 -1076.5955 -1067.6392 - 34050 3.405 0.076457431 1073.4079 274.56089 -14.506574 8.8369554 -1076.4762 -1067.6392 - 34100 3.41 0.076457549 1080.3626 270.2225 -14.496075 8.6973209 -1076.3366 -1067.6392 - 34150 3.415 0.076457614 1081.8942 265.22981 -14.489633 8.5366274 -1076.1759 -1067.6392 - 34200 3.42 0.076457554 1102.3586 260.17866 -14.492136 8.3740522 -1076.0133 -1067.6392 - 34250 3.425 0.076457464 1141.421 255.94089 -14.50297 8.2376562 -1075.8769 -1067.6392 - 34300 3.43 0.076457528 1167.5346 253.78734 -14.520502 8.1683424 -1075.8076 -1067.6392 - 34350 3.435 0.076457597 1181.2246 255.29171 -14.550339 8.2167619 -1075.856 -1067.6392 - 34400 3.44 0.076457601 1162.4984 260.55233 -14.591365 8.386079 -1076.0253 -1067.6392 - 34450 3.445 0.076457485 1116.5653 267.61508 -14.63639 8.6133991 -1076.2526 -1067.6392 - 34500 3.45 0.07645735 1088.0554 273.74226 -14.675649 8.8106072 -1076.4498 -1067.6392 - 34550 3.455 0.076457477 1088.7296 277.3573 -14.702608 8.9269599 -1076.5662 -1067.6392 - 34600 3.46 0.076457673 1090.2675 279.19132 -14.732125 8.9859893 -1076.6252 -1067.6392 - 34650 3.465 0.07645765 1100.9294 280.27784 -14.77937 9.0209599 -1076.6602 -1067.6392 - 34700 3.47 0.076457569 1122.6353 279.51649 -14.824493 8.9964553 -1076.6357 -1067.6392 - 34750 3.475 0.076457534 1143.7477 275.73199 -14.844911 8.874648 -1076.5139 -1067.6392 - 34800 3.48 0.076457556 1165.0387 270.72066 -14.849166 8.7133545 -1076.3526 -1067.6392 - 34850 3.485 0.076457595 1162.8441 267.90858 -14.858627 8.6228456 -1076.2621 -1067.6392 - 34900 3.49 0.076457625 1139.7512 268.63619 -14.881699 8.6462643 -1076.2855 -1067.6392 - 34950 3.495 0.076457625 1112.7165 270.83924 -14.900675 8.7171711 -1076.3564 -1067.6392 - 35000 3.5 0.076457606 1086.0982 271.68623 -14.896016 8.7444321 -1076.3837 -1067.6392 - 35050 3.505 0.076457591 1071.7971 270.42576 -14.87744 8.703863 -1076.3431 -1067.6392 - 35100 3.51 0.076457658 1060.0049 267.97932 -14.863646 8.6251225 -1076.2644 -1067.6392 - 35150 3.515 0.076457689 1048.4698 265.72769 -14.860477 8.5526519 -1076.1919 -1067.6392 - 35200 3.52 0.076457634 1056.5787 265.02751 -14.865903 8.530116 -1076.1693 -1067.6392 - 35250 3.525 0.076457566 1046.9055 266.33972 -14.87323 8.5723504 -1076.2116 -1067.6392 - 35300 3.53 0.076457569 1013.1592 269.06436 -14.877187 8.6600451 -1076.2993 -1067.6392 - 35350 3.535 0.076457656 997.2022 272.57564 -14.87974 8.7730585 -1076.4123 -1067.6392 - 35400 3.54 0.07645767 994.65584 277.00538 -14.890358 8.9156331 -1076.5549 -1067.6392 - 35450 3.545 0.076457529 1001.1164 282.19926 -14.906943 9.0828022 -1076.722 -1067.6392 - 35500 3.55 0.076457424 1005.5196 287.07965 -14.918939 9.2398813 -1076.8791 -1067.6392 - 35550 3.555 0.076457509 997.69944 290.53612 -14.933609 9.3511304 -1076.9904 -1067.6392 - 35600 3.56 0.076457585 987.73643 291.05935 -14.952689 9.367971 -1077.0072 -1067.6392 - 35650 3.565 0.076457527 979.49042 287.4359 -14.968978 9.2513476 -1076.8906 -1067.6392 - 35700 3.57 0.07645746 984.55099 280.23031 -14.982301 9.01943 -1076.6587 -1067.6392 - 35750 3.575 0.07645748 1007.1391 271.88244 -14.993121 8.7507474 -1076.39 -1067.6392 - 35800 3.58 0.076457584 1039.0252 265.93314 -15.003434 8.5592646 -1076.1985 -1067.6392 - 35850 3.585 0.076457694 1068.9559 264.36704 -15.012954 8.5088585 -1076.1481 -1067.6392 - 35900 3.59 0.076457572 1070.9201 265.93574 -15.011002 8.559348 -1076.1986 -1067.6392 - 35950 3.595 0.076457429 1036.7314 268.37032 -15.000108 8.637707 -1076.2769 -1067.6392 - 36000 3.6 0.076457451 992.35033 270.35259 -15.003655 8.7015079 -1076.3407 -1067.6392 - 36050 3.605 0.076457474 975.3892 271.29311 -15.025665 8.7317792 -1076.371 -1067.6392 - 36100 3.61 0.076457434 1003.1636 271.41843 -15.049959 8.7358129 -1076.375 -1067.6392 - 36150 3.615 0.076457412 1027.3457 271.65889 -15.065017 8.7435522 -1076.3828 -1067.6392 - 36200 3.62 0.076457466 1042.0311 273.28003 -15.081242 8.79573 -1076.435 -1067.6392 - 36250 3.625 0.076457508 1050.9908 276.54947 -15.107217 8.9009594 -1076.5402 -1067.6392 - 36300 3.63 0.076457539 1064.6932 280.62712 -15.141343 9.0322016 -1076.6714 -1067.6392 - 36350 3.635 0.076457488 1085.4466 284.55482 -15.179271 9.1586178 -1076.7979 -1067.6392 - 36400 3.64 0.07645739 1094.0882 287.6198 -15.211097 9.2572665 -1076.8965 -1067.6392 - 36450 3.645 0.076457389 1092.1647 289.93627 -15.238113 9.3318239 -1076.9711 -1067.6392 - 36500 3.65 0.076457492 1082.1176 292.06035 -15.270924 9.4001889 -1077.0394 -1067.6392 - 36550 3.655 0.07645746 1078.0108 293.66619 -15.302636 9.4518744 -1077.0911 -1067.6392 - 36600 3.66 0.076457339 1094.3091 293.79253 -15.317422 9.4559406 -1077.0952 -1067.6392 - 36650 3.665 0.076457274 1100.3857 292.13609 -15.32291 9.4026267 -1077.0419 -1067.6392 - 36700 3.67 0.0764573 1059.1813 288.62112 -15.334691 9.2894948 -1076.9287 -1067.6392 - 36750 3.675 0.076457376 1010.0955 283.16513 -15.348493 9.1138894 -1076.7531 -1067.6392 - 36800 3.68 0.07645743 1004.7965 277.87783 -15.360479 8.9437136 -1076.5829 -1067.6392 - 36850 3.685 0.076457375 1018.8309 276.50784 -15.379064 8.8996193 -1076.5388 -1067.6392 - 36900 3.69 0.076457369 1028.961 278.28003 -15.401946 8.9566587 -1076.5959 -1067.6392 - 36950 3.695 0.076457388 1023.5143 278.85362 -15.418664 8.9751201 -1076.6144 -1067.6392 - 37000 3.7 0.076457408 1012.265 276.41504 -15.427991 8.8966325 -1076.5359 -1067.6392 - 37050 3.705 0.076457493 990.96196 271.81651 -15.438424 8.7486254 -1076.3879 -1067.6392 - 37100 3.71 0.076457562 981.1712 266.91048 -15.456878 8.5907211 -1076.23 -1067.6392 - 37150 3.715 0.076457539 986.354 263.91762 -15.48189 8.4943933 -1076.1336 -1067.6392 - 37200 3.72 0.076457423 996.09368 264.87626 -15.509807 8.525248 -1076.1645 -1067.6392 - 37250 3.725 0.076457402 997.16422 270.68182 -15.53609 8.7121043 -1076.3513 -1067.6392 - 37300 3.73 0.076457531 991.56754 280.3235 -15.553199 9.0224294 -1076.6617 -1067.6392 - 37350 3.735 0.076457475 983.899 291.64399 -15.567246 9.3867882 -1077.026 -1067.6392 - 37400 3.74 0.076457375 957.07127 302.31861 -15.591292 9.7303592 -1077.3696 -1067.6392 - 37450 3.745 0.076457441 915.9148 310.31227 -15.627635 9.9876414 -1077.6269 -1067.6392 - 37500 3.75 0.076457477 897.56201 314.34798 -15.671163 10.117534 -1077.7568 -1067.6392 - 37550 3.755 0.076457431 903.88431 313.87044 -15.71386 10.102164 -1077.7414 -1067.6392 - 37600 3.76 0.076457491 917.28579 308.82801 -15.749285 9.9398693 -1077.5791 -1067.6392 - 37650 3.765 0.076457525 942.06017 299.66951 -15.772048 9.6450956 -1077.2843 -1067.6392 - 37700 3.77 0.076457445 961.28174 287.88151 -15.778198 9.2656899 -1076.9049 -1067.6392 - 37750 3.775 0.076457477 958.2021 276.39254 -15.772569 8.8959083 -1076.5351 -1067.6392 - 37800 3.78 0.076457557 948.94806 268.64513 -15.765698 8.6465521 -1076.2858 -1067.6392 - 37850 3.785 0.076457556 947.78704 266.8871 -15.766401 8.5899684 -1076.2292 -1067.6392 - 37900 3.79 0.076457558 962.37609 270.88487 -15.776472 8.7186398 -1076.3579 -1067.6392 - 37950 3.795 0.076457526 991.61874 278.53558 -15.795866 8.9648839 -1076.6041 -1067.6392 - 38000 3.8 0.076457499 1010.916 287.47978 -15.824326 9.25276 -1076.892 -1067.6392 - 38050 3.805 0.076457489 993.35135 295.7602 -15.862726 9.5192717 -1077.1585 -1067.6392 - 38100 3.81 0.076457546 989.74778 301.47541 -15.907632 9.70322 -1077.3425 -1067.6392 - 38150 3.815 0.07645761 993.3824 303.44671 -15.946558 9.7666679 -1077.4059 -1067.6392 - 38200 3.82 0.076457588 988.80567 302.40203 -15.977266 9.733044 -1077.3723 -1067.6392 - 38250 3.825 0.07645753 984.55282 300.11697 -16.011838 9.6594977 -1077.2987 -1067.6392 - 38300 3.83 0.076457562 983.37008 297.61678 -16.053812 9.5790269 -1077.2183 -1067.6392 - 38350 3.835 0.076457613 1000.3554 294.80409 -16.085202 9.4884983 -1077.1277 -1067.6392 - 38400 3.84 0.076457626 1033.4664 291.876 -16.096115 9.3942555 -1077.0335 -1067.6392 - 38450 3.845 0.076457661 1047.3368 290.07519 -16.110059 9.3362953 -1076.9755 -1067.6392 - 38500 3.85 0.076457655 1024.7937 289.82293 -16.139554 9.328176 -1076.9674 -1067.6392 - 38550 3.855 0.076457638 1017.4806 289.8687 -16.161946 9.3296489 -1076.9689 -1067.6392 - 38600 3.86 0.076457592 1039.5043 289.37833 -16.169892 9.3138662 -1076.9531 -1067.6392 - 38650 3.865 0.076457557 1063.9366 288.50085 -16.171467 9.2856238 -1076.9249 -1067.6392 - 38700 3.87 0.076457677 1070.449 287.9452 -16.169902 9.2677398 -1076.907 -1067.6392 - 38750 3.875 0.076457662 1052.016 288.41298 -16.166026 9.2827956 -1076.922 -1067.6392 - 38800 3.88 0.076457605 1032.1006 289.76121 -16.162583 9.3261896 -1076.9654 -1067.6392 - 38850 3.885 0.076457712 1020.3335 291.3617 -16.16773 9.3777023 -1077.0169 -1067.6392 - 38900 3.89 0.076457683 1015.7433 292.68938 -16.184231 9.4204347 -1077.0597 -1067.6392 - 38950 3.895 0.076457564 1027.8269 293.63898 -16.21584 9.4509986 -1077.0902 -1067.6392 - 39000 3.9 0.076457619 1038.6319 293.97207 -16.254979 9.4617194 -1077.101 -1067.6392 - 39050 3.905 0.076457705 1044.5679 293.885 -16.278531 9.4589168 -1077.0981 -1067.6392 - 39100 3.91 0.076457709 1046.1788 295.0006 -16.27343 9.4948231 -1077.1341 -1067.6392 - 39150 3.915 0.076457649 1023.8873 298.98535 -16.251292 9.6230756 -1077.2623 -1067.6392 - 39200 3.92 0.076457633 1000.8332 305.48222 -16.233015 9.8321825 -1077.4714 -1067.6392 - 39250 3.925 0.07645756 988.14502 312.10448 -16.230005 10.045325 -1077.6846 -1067.6392 - 39300 3.93 0.076457575 997.35073 315.81405 -16.238203 10.16472 -1077.804 -1067.6392 - 39350 3.935 0.076457677 1028.5818 314.19089 -16.240391 10.112478 -1077.7517 -1067.6392 - 39400 3.94 0.076457714 1045.4201 306.98031 -16.22979 9.8803995 -1077.5196 -1067.6392 - 39450 3.945 0.076457711 1044.1918 297.96176 -16.221111 9.5901304 -1077.2294 -1067.6392 - 39500 3.95 0.076457669 1031.5483 292.5692 -16.214559 9.4165666 -1077.0558 -1067.6392 - 39550 3.955 0.07645756 1025.8724 290.92753 -16.201804 9.3637283 -1077.003 -1067.6392 - 39600 3.96 0.076457551 1043.0568 290.57097 -16.194891 9.3522522 -1076.9915 -1067.6392 - 39650 3.965 0.076457568 1064.0457 291.54866 -16.212818 9.3837199 -1077.0229 -1067.6392 - 39700 3.97 0.076457614 1074.2493 294.08039 -16.259022 9.4652057 -1077.1044 -1067.6392 - 39750 3.975 0.076457622 1045.9401 296.58886 -16.307783 9.5459427 -1077.1852 -1067.6392 - 39800 3.98 0.076457589 1003.4409 297.25507 -16.339872 9.5673852 -1077.2066 -1067.6392 - 39850 3.985 0.076457612 993.64485 295.77116 -16.361298 9.5196243 -1077.1589 -1067.6392 - 39900 3.99 0.076457712 1006.0484 293.1885 -16.376761 9.4364994 -1077.0757 -1067.6392 - 39950 3.995 0.076457679 991.57157 290.9198 -16.379302 9.3634795 -1077.0027 -1067.6392 - 40000 4 0.076457582 964.36543 290.23473 -16.367849 9.3414299 -1076.9807 -1067.6392 - 40050 4.005 0.076457559 954.79409 292.02726 -16.354715 9.3991239 -1077.0384 -1067.6392 - 40100 4.01 0.076457588 961.79789 296.03902 -16.354183 9.5282455 -1077.1675 -1067.6392 - 40150 4.015 0.0764576 986.86742 299.96659 -16.365093 9.6546575 -1077.2939 -1067.6392 - 40200 4.02 0.076457589 994.14866 300.89633 -16.372591 9.6845819 -1077.3238 -1067.6392 - 40250 4.025 0.076457645 996.14585 298.37892 -16.367541 9.6035572 -1077.2428 -1067.6392 - 40300 4.03 0.076457675 1009.035 295.25357 -16.358503 9.5029652 -1077.1422 -1067.6392 - 40350 4.035 0.076457598 1014.8105 294.51698 -16.354826 9.4792575 -1077.1185 -1067.6392 - 40400 4.04 0.076457586 1029.6311 295.9285 -16.358567 9.5246883 -1077.1639 -1067.6392 - 40450 4.045 0.076457599 1038.8165 296.70455 -16.37191 9.5496663 -1077.1889 -1067.6392 - 40500 4.05 0.076457523 1019.8005 294.96456 -16.392342 9.4936634 -1077.1329 -1067.6392 - 40550 4.055 0.076457428 1023.4475 291.60684 -16.41267 9.3855926 -1077.0248 -1067.6392 - 40600 4.06 0.076457444 1057.8107 289.35106 -16.430176 9.3129884 -1076.9522 -1067.6392 - 40650 4.065 0.076457557 1057.6424 290.01367 -16.442565 9.3343151 -1076.9735 -1067.6392 - 40700 4.07 0.076457689 1032.0152 293.01599 -16.440441 9.430947 -1077.0702 -1067.6392 - 40750 4.075 0.076457733 1027.6923 297.33249 -16.429161 9.5698769 -1077.2091 -1067.6392 - 40800 4.08 0.076457683 1049.2581 302.71656 -16.425908 9.7431675 -1077.3824 -1067.6392 - 40850 4.085 0.076457676 1062.7046 309.06748 -16.434404 9.9475769 -1077.5868 -1067.6392 - 40900 4.09 0.076457757 1056.9788 316.0858 -16.451775 10.173467 -1077.8127 -1067.6392 - 40950 4.095 0.076457774 1073.6105 322.63471 -16.485634 10.384248 -1078.0235 -1067.6392 - 41000 4.1 0.076457723 1102.1708 326.00311 -16.532097 10.492663 -1078.1319 -1067.6392 - 41050 4.105 0.076457742 1135.7358 323.78206 -16.572384 10.421177 -1078.0604 -1067.6392 - 41100 4.11 0.076457839 1150.9624 315.72207 -16.586201 10.16176 -1077.801 -1067.6392 - 41150 4.115 0.0764579 1133.6801 304.50129 -16.576495 9.8006105 -1077.4398 -1067.6392 - 41200 4.12 0.076457874 1106.7713 294.55355 -16.562247 9.4804346 -1077.1197 -1067.6392 - 41250 4.125 0.076457816 1077.861 288.97154 -16.546794 9.3007733 -1076.94 -1067.6392 - 41300 4.13 0.076457775 1049.8951 288.68305 -16.541043 9.2914881 -1076.9307 -1067.6392 - 41350 4.135 0.076457789 1040.6446 293.17749 -16.568222 9.4361451 -1077.0754 -1067.6392 - 41400 4.14 0.076457796 1062.3287 300.13752 -16.620751 9.660159 -1077.2994 -1067.6392 - 41450 4.145 0.076457888 1076.5853 306.09407 -16.668767 9.8518751 -1077.4911 -1067.6392 - 41500 4.15 0.076457877 1065.2199 308.61394 -16.698067 9.9329793 -1077.5722 -1067.6392 - 41550 4.155 0.076457852 1068.7881 308.03917 -16.719828 9.9144797 -1077.5537 -1067.6392 - 41600 4.16 0.07645779 1068.4578 306.44808 -16.737367 9.8632693 -1077.5025 -1067.6392 - 41650 4.165 0.076457748 1034.0147 305.80908 -16.739572 9.8427024 -1077.4819 -1067.6392 - 41700 4.17 0.076457762 999.13334 306.91055 -16.733356 9.8781543 -1077.5174 -1067.6392 - 41750 4.175 0.076457738 1002.966 308.67217 -16.740815 9.9348535 -1077.5741 -1067.6392 - 41800 4.18 0.076457662 1026.9401 309.28404 -16.76882 9.9545468 -1077.5938 -1067.6392 - 41850 4.185 0.076457785 1048.1545 308.26721 -16.803047 9.9218192 -1077.5611 -1067.6392 - 41900 4.19 0.076457896 1061.9672 306.79451 -16.828056 9.8744195 -1077.5136 -1067.6392 - 41950 4.195 0.076457788 1063.3452 305.81438 -16.838103 9.8428732 -1077.4821 -1067.6392 - 42000 4.2 0.076457653 1066.6376 305.00511 -16.838688 9.8168263 -1077.4561 -1067.6392 - 42050 4.205 0.076457619 1066.8981 303.458 -16.842064 9.7670311 -1077.4063 -1067.6392 - 42100 4.21 0.076457741 1057.308 300.62005 -16.861587 9.6756897 -1077.3149 -1067.6392 - 42150 4.215 0.076457798 1034.8812 296.98868 -16.899542 9.5588112 -1077.198 -1067.6392 - 42200 4.22 0.076457741 1006.9297 294.0721 -16.935797 9.4649389 -1077.1042 -1067.6392 - 42250 4.225 0.076457708 986.75051 293.0943 -16.947693 9.4334674 -1077.0727 -1067.6392 - 42300 4.23 0.076457808 969.75426 294.20406 -16.945858 9.4691862 -1077.1084 -1067.6392 - 42350 4.235 0.076457868 963.74596 296.59463 -16.946926 9.5461283 -1077.1854 -1067.6392 - 42400 4.24 0.076457778 979.44368 299.96439 -16.956659 9.6545866 -1077.2938 -1067.6392 - 42450 4.245 0.076457791 984.2135 304.59299 -16.974496 9.8035617 -1077.4428 -1067.6392 - 42500 4.25 0.076457854 979.70863 310.10222 -16.997517 9.9808808 -1077.6201 -1067.6392 - 42550 4.255 0.076457845 963.18828 315.17089 -17.018507 10.14402 -1077.7833 -1067.6392 - 42600 4.26 0.07645772 924.95483 318.99173 -17.029395 10.266996 -1077.9062 -1067.6392 - 42650 4.265 0.076457639 917.86112 322.34212 -17.035941 10.374831 -1078.0141 -1067.6392 - 42700 4.27 0.07645774 944.82028 325.38302 -17.047468 10.472705 -1078.1119 -1067.6392 - 42750 4.275 0.076457938 960.10214 326.61344 -17.067033 10.512307 -1078.1515 -1067.6392 - 42800 4.28 0.076458022 972.52239 325.00876 -17.091275 10.460659 -1078.0999 -1067.6392 - 42850 4.285 0.076458002 992.87865 320.17152 -17.108075 10.304969 -1077.9442 -1067.6392 - 42900 4.29 0.076457841 1006.327 311.59438 -17.103583 10.028907 -1077.6681 -1067.6392 - 42950 4.295 0.076457788 1002.2455 300.38593 -17.078254 9.6681543 -1077.3074 -1067.6392 - 43000 4.3 0.076457862 996.17457 290.24794 -17.044976 9.3418551 -1076.9811 -1067.6392 - 43050 4.305 0.076457877 1000.9547 285.54988 -17.01983 9.1906446 -1076.8299 -1067.6392 - 43100 4.31 0.076457942 988.65155 288.59122 -17.015533 9.2885325 -1076.9278 -1067.6392 - 43150 4.315 0.076457999 972.41145 298.32202 -17.033256 9.6017256 -1077.241 -1067.6392 - 43200 4.32 0.076458028 948.97512 311.09248 -17.065815 10.012753 -1077.652 -1067.6392 - 43250 4.325 0.076457935 916.82485 322.42515 -17.093329 10.377504 -1078.0167 -1067.6392 - 43300 4.33 0.076457873 899.77572 329.85568 -17.106846 10.616661 -1078.2559 -1067.6392 - 43350 4.335 0.076457929 878.86717 333.35452 -17.115682 10.729274 -1078.3685 -1067.6392 - 43400 4.34 0.076457966 874.70786 333.18911 -17.121427 10.72395 -1078.3632 -1067.6392 - 43450 4.345 0.076458006 891.26384 329.38375 -17.117357 10.601472 -1078.2407 -1067.6392 - 43500 4.35 0.076458001 898.35186 322.8122 -17.107186 10.389961 -1078.0292 -1067.6392 - 43550 4.355 0.076458013 901.74597 315.36342 -17.103127 10.150216 -1077.7894 -1067.6392 - 43600 4.36 0.076458088 926.67246 308.8075 -17.112922 9.9392091 -1077.5784 -1067.6392 - 43650 4.365 0.076458104 960.6166 303.94548 -17.140357 9.7827213 -1077.422 -1067.6392 - 43700 4.37 0.076458063 975.11769 300.59062 -17.177028 9.6747425 -1077.314 -1067.6392 - 43750 4.375 0.076458054 968.24523 298.47066 -17.207996 9.60651 -1077.2457 -1067.6392 - 43800 4.38 0.076458041 964.14007 298.09373 -17.232401 9.5943781 -1077.2336 -1067.6392 - 43850 4.385 0.076457954 965.79688 300.53579 -17.264344 9.6729776 -1077.3122 -1067.6392 - 43900 4.39 0.076457854 955.96603 305.88479 -17.306956 9.8451395 -1077.4844 -1067.6392 - 43950 4.395 0.076457896 941.12525 312.31823 -17.341534 10.052205 -1077.6914 -1067.6392 - 44000 4.4 0.076457859 938.67889 317.5795 -17.360921 10.221543 -1077.8608 -1067.6392 - 44050 4.405 0.076457719 947.63231 320.31294 -17.381896 10.309521 -1077.9488 -1067.6392 - 44100 4.41 0.076457755 969.34037 320.05455 -17.418322 10.301204 -1077.9404 -1067.6392 - 44150 4.415 0.076457877 994.80806 316.92978 -17.455307 10.200631 -1077.8399 -1067.6392 - 44200 4.42 0.076457883 994.27896 312.50804 -17.485343 10.058314 -1077.6975 -1067.6392 - 44250 4.425 0.076457773 973.05564 308.95598 -17.522396 9.943988 -1077.5832 -1067.6392 - 44300 4.43 0.076457724 951.78988 307.21327 -17.563966 9.8878976 -1077.5271 -1067.6392 - 44350 4.435 0.076457759 928.72012 308.03041 -17.602557 9.9141978 -1077.5534 -1067.6392 - 44400 4.44 0.076457834 916.44987 311.99524 -17.635148 10.041809 -1077.681 -1067.6392 - 44450 4.445 0.076457893 928.75804 317.70608 -17.652296 10.225617 -1077.8648 -1067.6392 - 44500 4.45 0.076457885 943.60516 322.59137 -17.661113 10.382853 -1078.0221 -1067.6392 - 44550 4.455 0.076457906 945.49994 325.00133 -17.680273 10.46042 -1078.0997 -1067.6392 - 44600 4.46 0.076457941 952.36178 325.6626 -17.717875 10.481703 -1078.1209 -1067.6392 - 44650 4.465 0.076457852 940.32266 326.47902 -17.757759 10.507981 -1078.1472 -1067.6392 - 44700 4.47 0.076457689 897.56364 327.57886 -17.783166 10.54338 -1078.1826 -1067.6392 - 44750 4.475 0.076457713 857.39373 327.4808 -17.804428 10.540224 -1078.1795 -1067.6392 - 44800 4.48 0.07645791 851.17923 325.52967 -17.833839 10.477425 -1078.1167 -1067.6392 - 44850 4.485 0.076458019 869.19875 322.22447 -17.859584 10.371045 -1078.0103 -1067.6392 - 44900 4.49 0.076457959 892.97974 318.64189 -17.864667 10.255737 -1077.895 -1067.6392 - 44950 4.495 0.076457921 899.76829 316.57454 -17.858322 10.189197 -1077.8284 -1067.6392 - 45000 4.5 0.07645794 879.79667 318.12269 -17.875334 10.239026 -1077.8783 -1067.6392 - 45050 4.505 0.076457864 861.6753 323.54624 -17.930753 10.413587 -1078.0528 -1067.6392 - 45100 4.51 0.076457773 868.31935 329.69269 -17.990903 10.611415 -1078.2506 -1067.6392 - 45150 4.515 0.076457818 892.5502 332.57348 -18.015322 10.704136 -1078.3434 -1067.6392 - 45200 4.52 0.076457979 934.55633 331.51408 -18.006044 10.670038 -1078.3093 -1067.6392 - 45250 4.525 0.076457934 969.26205 329.02929 -17.994029 10.590063 -1078.2293 -1067.6392 - 45300 4.53 0.076457821 986.82839 326.98424 -17.994973 10.524241 -1078.1635 -1067.6392 - 45350 4.535 0.076457878 969.0246 325.50185 -18.001111 10.47653 -1078.1158 -1067.6392 - 45400 4.54 0.076458012 949.66785 324.76289 -18.004536 10.452746 -1078.092 -1067.6392 - 45450 4.545 0.076457931 934.25079 325.87047 -18.014727 10.488394 -1078.1276 -1067.6392 - 45500 4.55 0.076457855 926.68239 328.82491 -18.026773 10.583485 -1078.2227 -1067.6392 - 45550 4.555 0.076457796 929.74295 331.7329 -18.027681 10.677081 -1078.3163 -1067.6392 - 45600 4.56 0.076457858 934.2471 332.34645 -18.020161 10.696829 -1078.3361 -1067.6392 - 45650 4.565 0.076457947 919.70747 330.09857 -18.007458 10.624479 -1078.2637 -1067.6392 - 45700 4.57 0.076457972 912.95486 326.17283 -17.995078 10.498126 -1078.1374 -1067.6392 - 45750 4.575 0.076457896 941.11127 321.60716 -17.994665 10.351176 -1077.9904 -1067.6392 - 45800 4.58 0.076457862 966.79612 317.78513 -18.009696 10.228161 -1077.8674 -1067.6392 - 45850 4.585 0.076457935 944.28578 315.85752 -18.027571 10.16612 -1077.8053 -1067.6392 - 45900 4.59 0.076458044 901.04422 316.68004 -18.043848 10.192593 -1077.8318 -1067.6392 - 45950 4.595 0.076458007 879.51756 320.93625 -18.067698 10.329582 -1077.9688 -1067.6392 - 46000 4.6 0.076457964 872.83739 327.90148 -18.094801 10.553764 -1078.193 -1067.6392 - 46050 4.605 0.076457967 876.29409 335.50363 -18.112035 10.798445 -1078.4377 -1067.6392 - 46100 4.61 0.076457881 897.82101 341.25719 -18.123994 10.983628 -1078.6229 -1067.6392 - 46150 4.615 0.076457848 917.72011 342.09311 -18.135768 11.010532 -1078.6498 -1067.6392 - 46200 4.62 0.076457904 935.79066 336.81461 -18.142721 10.84064 -1078.4799 -1067.6392 - 46250 4.625 0.07645791 958.856 329.24209 -18.153564 10.596912 -1078.2361 -1067.6392 - 46300 4.63 0.076457941 976.84674 323.74284 -18.177828 10.419914 -1078.0591 -1067.6392 - 46350 4.635 0.076457974 986.64452 321.53234 -18.208728 10.348768 -1077.988 -1067.6392 - 46400 4.64 0.076457862 996.7259 323.14828 -18.22492 10.400778 -1078.04 -1067.6392 - 46450 4.645 0.076457805 1006.0233 328.59085 -18.21408 10.575952 -1078.2152 -1067.6392 - 46500 4.65 0.076457941 1004.0925 335.85497 -18.186199 10.809753 -1078.449 -1067.6392 - 46550 4.655 0.076457976 986.50596 341.77518 -18.164044 11.0003 -1078.6395 -1067.6392 - 46600 4.66 0.076457959 977.94506 343.98758 -18.166618 11.071507 -1078.7107 -1067.6392 - 46650 4.665 0.07645792 979.65854 341.91053 -18.193889 11.004656 -1078.6439 -1067.6392 - 46700 4.67 0.07645783 995.8469 337.32643 -18.237006 10.857113 -1078.4963 -1067.6392 - 46750 4.675 0.076457742 996.88168 332.71719 -18.282271 10.708761 -1078.348 -1067.6392 - 46800 4.68 0.076457785 982.69373 328.43469 -18.306019 10.570925 -1078.2102 -1067.6392 - 46850 4.685 0.076457823 978.36015 323.5801 -18.306181 10.414677 -1078.0539 -1067.6392 - 46900 4.69 0.076457791 962.75325 318.03098 -18.3112 10.236074 -1077.8753 -1067.6392 - 46950 4.695 0.076457771 943.72644 312.62711 -18.333493 10.062146 -1077.7014 -1067.6392 - 47000 4.7 0.076457655 933.06364 309.79024 -18.359925 9.9708393 -1077.6101 -1067.6392 - 47050 4.705 0.076457527 923.63321 312.99794 -18.385002 10.074082 -1077.7133 -1067.6392 - 47100 4.71 0.076457491 918.61147 323.5351 -18.420653 10.413228 -1078.0525 -1067.6392 - 47150 4.715 0.076457637 920.24413 338.17027 -18.464512 10.884273 -1078.5235 -1067.6392 - 47200 4.72 0.076457729 914.26076 351.25395 -18.491106 11.305381 -1078.9446 -1067.6392 - 47250 4.725 0.07645769 894.45791 358.77754 -18.490423 11.547534 -1079.1868 -1067.6392 - 47300 4.73 0.076457673 866.24513 359.47999 -18.476062 11.570142 -1079.2094 -1067.6392 - 47350 4.735 0.076457644 850.87063 353.65236 -18.459228 11.382576 -1079.0218 -1067.6392 - 47400 4.74 0.07645765 861.60254 342.84162 -18.444647 11.034624 -1078.6739 -1067.6392 - 47450 4.745 0.076457629 868.52502 329.8691 -18.432312 10.617093 -1078.2563 -1067.6392 - 47500 4.75 0.076457475 874.96863 318.16288 -18.423034 10.240319 -1077.8795 -1067.6392 - 47550 4.755 0.076457461 893.70831 310.61468 -18.425459 9.9973745 -1077.6366 -1067.6392 - 47600 4.76 0.076457507 898.58686 308.29041 -18.437291 9.9225663 -1077.5618 -1067.6392 - 47650 4.765 0.076457495 906.98902 310.84197 -18.447354 10.00469 -1077.6439 -1067.6392 - 47700 4.77 0.076457476 917.08363 317.51731 -18.453233 10.219541 -1077.8588 -1067.6392 - 47750 4.775 0.07645741 913.18684 326.63525 -18.458615 10.513009 -1078.1522 -1067.6392 - 47800 4.78 0.076457341 914.30453 335.22798 -18.466228 10.789573 -1078.4288 -1067.6392 - 47850 4.785 0.076457324 930.54553 340.64884 -18.477564 10.964047 -1078.6033 -1067.6392 - 47900 4.79 0.076457362 944.82928 342.0923 -18.497904 11.010506 -1078.6497 -1067.6392 - 47950 4.795 0.076457403 948.97835 339.9758 -18.525445 10.942385 -1078.5816 -1067.6392 - 48000 4.8 0.076457478 949.55048 335.14347 -18.544304 10.786853 -1078.4261 -1067.6392 - 48050 4.805 0.076457492 934.49484 329.4616 -18.547259 10.603977 -1078.2432 -1067.6392 - 48100 4.81 0.076457483 906.2488 325.50663 -18.537762 10.476683 -1078.1159 -1067.6392 - 48150 4.815 0.076457537 907.61196 324.83016 -18.527959 10.454911 -1078.0941 -1067.6392 - 48200 4.82 0.076457521 928.41301 327.05163 -18.532299 10.526411 -1078.1656 -1067.6392 - 48250 4.825 0.076457453 941.11541 331.5379 -18.558254 10.670805 -1078.31 -1067.6392 - 48300 4.83 0.07645744 943.62955 337.63093 -18.594136 10.866914 -1078.5061 -1067.6392 - 48350 4.835 0.076457431 950.73848 343.5387 -18.62029 11.05706 -1078.6963 -1067.6392 - 48400 4.84 0.076457508 977.05827 347.46226 -18.634634 11.183342 -1078.8226 -1067.6392 - 48450 4.845 0.076457572 985.51176 349.38288 -18.652405 11.245159 -1078.8844 -1067.6392 - 48500 4.85 0.0764575 966.51991 350.00883 -18.680976 11.265306 -1078.9045 -1067.6392 - 48550 4.855 0.076457449 952.81522 348.84984 -18.705088 11.228003 -1078.8672 -1067.6392 - 48600 4.86 0.07645757 956.4504 345.07299 -18.706134 11.106442 -1078.7457 -1067.6392 - 48650 4.865 0.076457648 962.27213 339.6091 -18.687227 10.930583 -1078.5698 -1067.6392 - 48700 4.87 0.076457531 951.28586 335.48047 -18.675207 10.797699 -1078.4369 -1067.6392 - 48750 4.875 0.076457622 939.27346 335.37698 -18.691822 10.794368 -1078.4336 -1067.6392 - 48800 4.88 0.07645763 929.93644 338.62392 -18.723472 10.898874 -1078.5381 -1067.6392 - 48850 4.885 0.07645746 927.0018 341.61788 -18.739309 10.995236 -1078.6345 -1067.6392 - 48900 4.89 0.076457454 933.2133 341.45716 -18.734537 10.990064 -1078.6293 -1067.6392 - 48950 4.895 0.076457525 927.17347 338.03446 -18.732333 10.879901 -1078.5191 -1067.6392 - 49000 4.9 0.076457565 934.00454 333.29208 -18.749493 10.727264 -1078.3665 -1067.6392 - 49050 4.905 0.076457546 946.42674 329.88244 -18.783172 10.617522 -1078.2568 -1067.6392 - 49100 4.91 0.076457456 953.85036 329.62056 -18.816988 10.609094 -1078.2483 -1067.6392 - 49150 4.915 0.076457497 981.62511 332.41677 -18.829947 10.699092 -1078.3383 -1067.6392 - 49200 4.92 0.076457502 1010.935 336.90702 -18.819016 10.843614 -1078.4828 -1067.6392 - 49250 4.925 0.076457418 1025.5157 341.57069 -18.807495 10.993718 -1078.6329 -1067.6392 - 49300 4.93 0.076457502 1027.8193 344.89678 -18.811783 11.100771 -1078.74 -1067.6392 - 49350 4.935 0.076457543 1020.505 345.48293 -18.816811 11.119636 -1078.7589 -1067.6392 - 49400 4.94 0.076457478 1016.2039 342.92093 -18.803277 11.037176 -1078.6764 -1067.6392 - 49450 4.945 0.07645749 1018.2955 337.76884 -18.778837 10.871352 -1078.5106 -1067.6392 - 49500 4.95 0.07645759 1012.1553 330.63853 -18.761954 10.641858 -1078.2811 -1067.6392 - 49550 4.955 0.076457651 985.5222 322.69351 -18.765732 10.386141 -1078.0254 -1067.6392 - 49600 4.96 0.076457607 966.22788 316.25074 -18.798665 10.178775 -1077.818 -1067.6392 - 49650 4.965 0.076457494 961.04675 313.18195 -18.839015 10.080004 -1077.7192 -1067.6392 - 49700 4.97 0.076457431 960.65868 314.4735 -18.863274 10.121574 -1077.7608 -1067.6392 - 49750 4.975 0.076457515 966.54445 320.68235 -18.880959 10.32141 -1077.9606 -1067.6392 - 49800 4.98 0.076457498 965.47876 331.30789 -18.90627 10.663401 -1078.3026 -1067.6392 - 49850 4.985 0.076457382 964.05595 343.93887 -18.938996 11.069939 -1078.7092 -1067.6392 - 49900 4.99 0.076457357 944.93024 354.89734 -18.970612 11.422646 -1079.0619 -1067.6392 - 49950 4.995 0.076457532 918.77322 361.48317 -18.987516 11.634616 -1079.2739 -1067.6392 - 50000 5 0.07645762 900.51128 363.08297 -18.994661 11.686107 -1079.3253 -1067.6392 -Loop time of 52.5523 on 4 procs for 50000 steps with 250 atoms - -Performance: 8.220 ns/day, 2.920 hours/ns, 951.434 timesteps/s -94.1% CPU use with 4 MPI tasks x no OpenMP threads - -MPI task timing breakdown: -Section | min time | avg time | max time |%varavg| %total ---------------------------------------------------------------- -Pair | 10.242 | 10.478 | 10.799 | 6.3 | 19.94 -Neigh | 0.10368 | 0.10776 | 0.11329 | 1.1 | 0.21 -Comm | 2.4492 | 2.7097 | 2.8852 | 11.0 | 5.16 -Output | 5.5737 | 5.9107 | 6.2742 | 11.8 | 11.25 -Modify | 32.833 | 33.256 | 33.661 | 5.2 | 63.28 -Other | | 0.09063 | | | 0.17 - -Nlocal: 62.5 ave 66 max 57 min -Histogram: 1 0 0 0 0 1 0 0 1 1 -Nghost: 772 ave 785 max 755 min -Histogram: 1 0 0 0 0 0 2 0 0 1 -Neighs: 1931 ave 2025 max 1751 min -Histogram: 1 0 0 0 0 0 1 0 0 2 -FullNghs: 3862 ave 4082 max 3518 min -Histogram: 1 0 0 0 0 1 0 0 1 1 - -Total # of neighbors = 15448 -Ave neighs/atom = 61.792 -Neighbor list builds = 614 -Dangerous builds = 0 - -Please see the log.cite file for references relevant to this simulation - -Total wall time: 0:00:52 diff --git a/examples/SPIN/iron/log.30Apr19.spin.iron.g++.1 b/examples/SPIN/iron/log.30Apr19.spin.iron.g++.1 new file mode 100644 index 0000000000..f02c43e28c --- /dev/null +++ b/examples/SPIN/iron/log.30Apr19.spin.iron.g++.1 @@ -0,0 +1,1117 @@ +LAMMPS (30 Apr 2019) + using 1 OpenMP thread(s) per MPI task +# bcc iron in a 3d periodic box + +clear + using 1 OpenMP thread(s) per MPI task +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice bcc 2.8665 +Lattice spacing in x,y,z = 2.8665 2.8665 2.8665 +region box block 0.0 5.0 0.0 5.0 0.0 5.0 +create_box 1 box +Created orthogonal box = (0 0 0) to (14.3325 14.3325 14.3325) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 250 atoms + create_atoms CPU = 0.00074935 secs + +# setting mass, mag. moments, and interactions for bcc iron + +mass 1 55.845 + +set group all spin/random 31 2.2 + 250 settings made for spin/random +velocity all create 100 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 3.5 +pair_coeff * * eam/alloy Fe_Mishin2006.eam.alloy Fe +pair_coeff * * spin/exchange exchange 3.4 0.02726 0.2171 1.841 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 +fix 2 all langevin/spin 0.0 0.0 21 + +fix 3 all nve/spin lattice yes +timestep 0.0001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magnorm v_tmag temp v_emag ke pe etotal +thermo 50 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 100 all custom 1 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +run 50000 +Neighbor list info ... + update every 10 steps, delay 20 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.77337 + ghost atom cutoff = 5.77337 + binsize = 2.88668, bins = 5 5 5 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair eam/alloy, perpetual, half/full from (2) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (2) pair spin/exchange, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.319 | 7.319 | 7.319 Mbytes +Step Time v_magnorm v_tmag Temp v_emag KinEng PotEng TotEng + 0 0 0.076456975 9109.0924 100.00358 -0.85791269 3.2186929 -1070.8579 -1067.6392 + 50 0.005 0.076456974 9316.7659 96.663685 -0.86504718 3.1111957 -1070.7504 -1067.6392 + 100 0.01 0.076456983 9488.3743 86.965803 -0.88035771 2.7990619 -1070.4383 -1067.6392 + 150 0.015 0.076456973 9589.0566 72.421197 -0.8996913 2.3309324 -1069.9702 -1067.6392 + 200 0.02 0.076456944 9415.3095 55.633188 -0.921682 1.7905973 -1069.4298 -1067.6392 + 250 0.025 0.076456953 8878.9394 39.802206 -0.94649004 1.2810649 -1068.9203 -1067.6392 + 300 0.03 0.076457027 8203.3388 27.882295 -0.97253854 0.8974133 -1068.5366 -1067.6392 + 350 0.035 0.076457103 7720.309 21.776538 -0.99708692 0.70089477 -1068.3401 -1067.6392 + 400 0.04 0.076457117 7531.0683 21.857102 -1.0190244 0.70348778 -1068.3427 -1067.6392 + 450 0.045 0.076457072 7479.8073 26.959407 -1.0389343 0.86770942 -1068.5069 -1067.6392 + 500 0.05 0.076457001 7461.6683 34.92521 -1.0582008 1.124095 -1068.7633 -1067.6392 + 550 0.055 0.076456962 7396.1112 43.405912 -1.0785156 1.397053 -1069.0363 -1067.6392 + 600 0.06 0.076456997 7121.894 50.544844 -1.102048 1.626825 -1069.2661 -1067.6392 + 650 0.065 0.076457079 6683.4805 55.261218 -1.1296588 1.7786252 -1069.4179 -1067.6392 + 700 0.07 0.076457136 6313.6896 57.25083 -1.1595102 1.8426624 -1069.4819 -1067.6392 + 750 0.075 0.076457132 6199.0363 56.934336 -1.1893875 1.8324758 -1069.4717 -1067.6392 + 800 0.08 0.076457116 6265.997 55.266343 -1.2181223 1.7787901 -1069.418 -1067.6392 + 850 0.085 0.076457116 6326.5886 53.376453 -1.2443326 1.7179626 -1069.3572 -1067.6392 + 900 0.09 0.076457121 6336.1261 52.279557 -1.2676425 1.6826581 -1069.3219 -1067.6392 + 950 0.095 0.076457122 6288.4204 52.667743 -1.2902335 1.6951522 -1069.3344 -1067.6392 + 1000 0.1 0.076457135 6122.1622 54.684094 -1.314147 1.76005 -1069.3993 -1067.6392 + 1050 0.105 0.076457155 5830.2219 57.880399 -1.3392396 1.8629256 -1069.5022 -1067.6392 + 1100 0.11 0.076457162 5477.4214 61.505616 -1.3662331 1.979606 -1069.6188 -1067.6392 + 1150 0.115 0.076457195 5194.1423 64.810972 -1.3984474 2.0859914 -1069.7252 -1067.6392 + 1200 0.12 0.076457219 5096.2484 67.147472 -1.438326 2.1611935 -1069.8004 -1067.6392 + 1250 0.125 0.076457214 5180.7444 67.957533 -1.4822383 2.1872659 -1069.8265 -1067.6392 + 1300 0.13 0.076457208 5332.4483 66.96652 -1.5226303 2.1553694 -1069.7946 -1067.6392 + 1350 0.135 0.076457225 5441.1287 64.471602 -1.5553539 2.0750686 -1069.7143 -1067.6392 + 1400 0.14 0.076457244 5466.8622 61.292592 -1.5804721 1.9727496 -1069.612 -1067.6392 + 1450 0.145 0.07645724 5403.309 58.518161 -1.6006864 1.8834524 -1069.5227 -1067.6392 + 1500 0.15 0.076457224 5275.2171 57.1713 -1.6196756 1.8401027 -1069.4793 -1067.6392 + 1550 0.155 0.076457217 5122.7481 57.878063 -1.6407322 1.8628504 -1069.5021 -1067.6392 + 1600 0.16 0.076457217 4968.5049 60.639452 -1.6657935 1.9517278 -1069.591 -1067.6392 + 1650 0.165 0.076457208 4850.1861 64.668839 -1.690847 2.0814168 -1069.7206 -1067.6392 + 1700 0.17 0.076457217 4809.0194 68.693586 -1.7087416 2.2109564 -1069.8502 -1067.6392 + 1750 0.175 0.076457274 4835.8611 71.611033 -1.7188587 2.3048567 -1069.9441 -1067.6392 + 1800 0.18 0.076457318 4929.7428 72.815077 -1.7280248 2.3436098 -1069.9828 -1067.6392 + 1850 0.185 0.076457279 5036.6365 72.102335 -1.7426092 2.3206696 -1069.9599 -1067.6392 + 1900 0.19 0.076457222 5116.2436 69.579977 -1.7638235 2.2394856 -1069.8787 -1067.6392 + 1950 0.195 0.076457228 5207.2334 65.715745 -1.7895824 2.1151122 -1069.7543 -1067.6392 + 2000 0.2 0.076457288 5216.0413 61.340972 -1.8174915 1.9743068 -1069.6135 -1067.6392 + 2050 0.205 0.076457267 5023.1601 57.468628 -1.8456914 1.8496724 -1069.4889 -1067.6392 + 2100 0.21 0.076457198 4748.7818 55.033266 -1.8742291 1.7712884 -1069.4105 -1067.6392 + 2150 0.215 0.076457199 4558.1302 54.573806 -1.9035225 1.7565003 -1069.3957 -1067.6392 + 2200 0.22 0.076457185 4483.1644 56.074241 -1.9322669 1.804793 -1069.444 -1067.6392 + 2250 0.225 0.076457114 4430.1583 59.0552 -1.9577399 1.9007374 -1069.54 -1067.6392 + 2300 0.23 0.076457092 4353.7973 62.874849 -1.9801275 2.0236758 -1069.6629 -1067.6392 + 2350 0.235 0.076457145 4303.5275 66.892738 -2.0022129 2.1529947 -1069.7922 -1067.6392 + 2400 0.24 0.076457171 4258.6889 70.426826 -2.0233072 2.2667421 -1069.906 -1067.6392 + 2450 0.245 0.076457169 4178.5775 72.910422 -2.0405304 2.3466785 -1069.9859 -1067.6392 + 2500 0.25 0.07645717 4114.786 74.106367 -2.0531755 2.3851709 -1070.0244 -1067.6392 + 2550 0.255 0.076457136 4067.5017 74.169349 -2.0634674 2.3871981 -1070.0264 -1067.6392 + 2600 0.26 0.076457099 4045.3324 73.586199 -2.0755814 2.3684289 -1070.0077 -1067.6392 + 2650 0.265 0.076457099 4137.898 72.914235 -2.0913646 2.3468012 -1069.986 -1067.6392 + 2700 0.27 0.076457106 4332.063 72.583192 -2.1091075 2.3361464 -1069.9754 -1067.6392 + 2750 0.275 0.07645709 4465.1953 72.814559 -2.125099 2.3435931 -1069.9828 -1067.6392 + 2800 0.28 0.076457051 4516.5192 73.652154 -2.1371914 2.3705517 -1070.0098 -1067.6392 + 2850 0.285 0.076457019 4555.5962 75.060211 -2.1489378 2.4158711 -1070.0551 -1067.6392 + 2900 0.29 0.076457069 4544.2734 76.844795 -2.1667679 2.4733094 -1070.1125 -1067.6392 + 2950 0.295 0.076457172 4460.2109 78.48171 -2.1924421 2.5259948 -1070.1652 -1067.6392 + 3000 0.3 0.076457219 4323.2746 79.20682 -2.2209955 2.549333 -1070.1886 -1067.6392 + 3050 0.305 0.076457213 4155.688 78.543529 -2.2505299 2.5279844 -1070.1672 -1067.6392 + 3100 0.31 0.076457203 3969.6188 76.554785 -2.2858382 2.4639752 -1070.1032 -1067.6392 + 3150 0.315 0.076457187 3761.432 73.396149 -2.3245055 2.362312 -1070.0015 -1067.6392 + 3200 0.32 0.076457142 3602.8035 69.313196 -2.3577056 2.230899 -1069.8701 -1067.6392 + 3250 0.325 0.076457116 3505.707 65.032482 -2.3836874 2.0931209 -1069.7324 -1067.6392 + 3300 0.33 0.07645716 3424.8795 61.551539 -2.4057167 1.9810841 -1069.6203 -1067.6392 + 3350 0.335 0.076457236 3335.9672 59.709703 -2.4251844 1.9218031 -1069.561 -1067.6392 + 3400 0.34 0.076457298 3238.0186 60.026953 -2.4425501 1.9320141 -1069.5712 -1067.6392 + 3450 0.345 0.076457297 3185.0674 62.613739 -2.4593531 2.0152718 -1069.6545 -1067.6392 + 3500 0.35 0.07645723 3197.4087 67.011871 -2.4756907 2.1568291 -1069.7961 -1067.6392 + 3550 0.355 0.076457177 3216.1428 72.316209 -2.4911379 2.3275533 -1069.9668 -1067.6392 + 3600 0.36 0.076457165 3241.0326 77.550071 -2.5083858 2.4960092 -1070.1352 -1067.6392 + 3650 0.365 0.076457168 3309.6874 81.877688 -2.5306273 2.6352969 -1070.2745 -1067.6392 + 3700 0.37 0.07645718 3350.748 84.764646 -2.5595247 2.7282159 -1070.3674 -1067.6392 + 3750 0.375 0.07645721 3368.085 86.031781 -2.5938559 2.7689996 -1070.4082 -1067.6392 + 3800 0.38 0.076457208 3425.3173 85.733048 -2.6266899 2.7593847 -1070.3986 -1067.6392 + 3850 0.385 0.076457165 3420.4429 84.240647 -2.6514805 2.7113506 -1070.3506 -1067.6392 + 3900 0.39 0.076457146 3323.0403 82.320886 -2.6700966 2.6495616 -1070.2888 -1067.6392 + 3950 0.395 0.076457179 3273.2625 80.780607 -2.6892405 2.5999865 -1070.2392 -1067.6392 + 4000 0.4 0.076457229 3313.2671 79.92769 -2.709641 2.5725347 -1070.2118 -1067.6392 + 4050 0.405 0.076457272 3381.1117 79.663389 -2.7291493 2.564028 -1070.2033 -1067.6392 + 4100 0.41 0.07645731 3373.3005 79.895158 -2.7514856 2.5714877 -1070.2107 -1067.6392 + 4150 0.415 0.076457296 3279.6989 80.402828 -2.7788004 2.5878274 -1070.2271 -1067.6392 + 4200 0.42 0.076457251 3197.0478 80.770336 -2.8064773 2.599656 -1070.2389 -1067.6392 + 4250 0.425 0.076457243 3160.9065 80.756747 -2.8307967 2.5992186 -1070.2385 -1067.6392 + 4300 0.43 0.076457282 3173.9599 80.446488 -2.852192 2.5892326 -1070.2285 -1067.6392 + 4350 0.435 0.076457289 3185.8003 80.110494 -2.8726607 2.5784184 -1070.2177 -1067.6392 + 4400 0.44 0.076457262 3166.3054 80.045036 -2.8936787 2.5763116 -1070.2155 -1067.6392 + 4450 0.445 0.076457226 3177.4332 80.500194 -2.9171408 2.5909612 -1070.2302 -1067.6392 + 4500 0.45 0.076457174 3238.8362 81.573722 -2.9447352 2.6255135 -1070.2647 -1067.6392 + 4550 0.455 0.07645714 3277.7104 83.104228 -2.975052 2.6747741 -1070.314 -1067.6392 + 4600 0.46 0.076457157 3224.8571 84.845474 -3.0065552 2.7308174 -1070.37 -1067.6392 + 4650 0.465 0.076457215 3112.9952 86.608217 -3.03972 2.7875527 -1070.4268 -1067.6392 + 4700 0.47 0.076457254 3001.141 88.18732 -3.074928 2.8383773 -1070.4776 -1067.6392 + 4750 0.475 0.076457235 2904.0735 89.204263 -3.1082127 2.8711084 -1070.5103 -1067.6392 + 4800 0.48 0.076457195 2832.0276 89.24571 -3.134302 2.8724424 -1070.5117 -1067.6392 + 4850 0.485 0.076457172 2833.7453 88.206351 -3.1541802 2.8389899 -1070.4782 -1067.6392 + 4900 0.49 0.076457184 2941.993 86.310712 -3.1725372 2.7779773 -1070.4172 -1067.6392 + 4950 0.495 0.076457228 3082.4825 84.029047 -3.1931038 2.7045401 -1070.3438 -1067.6392 + 5000 0.5 0.07645727 3155.7096 81.99875 -3.2175967 2.6391934 -1070.2784 -1067.6392 + 5050 0.505 0.076457297 3162.1875 80.72053 -3.2420202 2.5980529 -1070.2373 -1067.6392 + 5100 0.51 0.076457279 3133.3889 80.483768 -3.2606472 2.5904325 -1070.2297 -1067.6392 + 5150 0.515 0.076457223 3144.6361 81.566513 -3.2759117 2.6252815 -1070.2645 -1067.6392 + 5200 0.52 0.076457166 3156.8183 84.062018 -3.2944729 2.7056013 -1070.3448 -1067.6392 + 5250 0.525 0.076457128 3059.9886 87.694328 -3.3209415 2.82251 -1070.4617 -1067.6392 + 5300 0.53 0.076457126 2891.6506 91.782947 -3.3547324 2.9541054 -1070.5933 -1067.6392 + 5350 0.535 0.076457151 2751.9452 95.417928 -3.3914125 3.0711001 -1070.7103 -1067.6392 + 5400 0.54 0.07645725 2681.0266 97.845096 -3.427665 3.1492204 -1070.7885 -1067.6392 + 5450 0.545 0.076457325 2657.0872 98.736021 -3.4632111 3.1778955 -1070.8171 -1067.6392 + 5500 0.55 0.076457263 2653.1919 98.075728 -3.4957627 3.1566434 -1070.7959 -1067.6392 + 5550 0.555 0.076457185 2644.2052 96.114965 -3.5208827 3.0935347 -1070.7328 -1067.6392 + 5600 0.56 0.076457195 2622.4173 93.52581 -3.5389264 3.0102008 -1070.6494 -1067.6392 + 5650 0.565 0.07645725 2616.385 91.264371 -3.5558734 2.9374146 -1070.5766 -1067.6392 + 5700 0.57 0.076457256 2608.245 90.135398 -3.5771375 2.9010777 -1070.5403 -1067.6392 + 5750 0.575 0.076457193 2573.2163 90.456889 -3.6030063 2.9114252 -1070.5507 -1067.6392 + 5800 0.58 0.076457145 2565.3319 92.099497 -3.6318266 2.9642938 -1070.6035 -1067.6392 + 5850 0.585 0.076457161 2566.2757 94.625315 -3.6627042 3.0455892 -1070.6848 -1067.6392 + 5900 0.59 0.076457186 2564.6803 97.321385 -3.6927592 3.1323643 -1070.7716 -1067.6392 + 5950 0.595 0.076457195 2570.6302 99.384974 -3.7170024 3.1987825 -1070.838 -1067.6392 + 6000 0.6 0.076457206 2556.8451 100.3814 -3.7363623 3.2308531 -1070.8701 -1067.6392 + 6050 0.605 0.076457195 2521.7968 100.35236 -3.7587516 3.2299187 -1070.8692 -1067.6392 + 6100 0.61 0.076457175 2476.1834 99.370379 -3.7869326 3.1983128 -1070.8375 -1067.6392 + 6150 0.615 0.076457178 2397.2793 97.46598 -3.8168635 3.1370182 -1070.7763 -1067.6392 + 6200 0.62 0.07645713 2286.8537 94.931722 -3.8450244 3.0554511 -1070.6947 -1067.6392 + 6250 0.625 0.076457116 2250.5276 92.438472 -3.8722444 2.9752039 -1070.6144 -1067.6392 + 6300 0.63 0.076457156 2338.5273 90.714367 -3.9006127 2.9197123 -1070.5589 -1067.6392 + 6350 0.635 0.07645717 2433.0191 90.142302 -3.9291161 2.9013 -1070.5405 -1067.6392 + 6400 0.64 0.076457159 2467.5427 90.771124 -3.9562695 2.9215391 -1070.5608 -1067.6392 + 6450 0.645 0.076457107 2475.8649 92.488037 -3.9828137 2.9767993 -1070.616 -1067.6392 + 6500 0.65 0.0764571 2489.7445 95.127495 -4.0122155 3.0617523 -1070.701 -1067.6392 + 6550 0.655 0.076457169 2500.4772 98.171784 -4.0419204 3.1597351 -1070.799 -1067.6392 + 6600 0.66 0.076457208 2530.8002 100.74954 -4.0632043 3.2427022 -1070.8819 -1067.6392 + 6650 0.665 0.076457205 2539.1451 102.2625 -4.0743218 3.2913979 -1070.9306 -1067.6392 + 6700 0.67 0.076457193 2456.6604 102.74354 -4.0834224 3.3068807 -1070.9461 -1067.6392 + 6750 0.675 0.076457138 2387.6116 102.56283 -4.0973681 3.3010644 -1070.9403 -1067.6392 + 6800 0.68 0.076457109 2401.109 102.04322 -4.1140004 3.2843402 -1070.9236 -1067.6392 + 6850 0.685 0.076457149 2426.903 101.49411 -4.1282038 3.2666667 -1070.9059 -1067.6392 + 6900 0.69 0.076457185 2389.4414 101.35418 -4.1401788 3.2621629 -1070.9014 -1067.6392 + 6950 0.695 0.076457175 2323.8548 101.97407 -4.1517576 3.2821145 -1070.9213 -1067.6392 + 7000 0.7 0.076457145 2273.8774 103.46341 -4.1630759 3.3300502 -1070.9693 -1067.6392 + 7050 0.705 0.076457126 2231.652 105.807 -4.1769876 3.4054803 -1071.0447 -1067.6392 + 7100 0.71 0.076457114 2185.0532 108.81826 -4.1989101 3.5024002 -1071.1416 -1067.6392 + 7150 0.715 0.076457137 2139.1143 111.85634 -4.2283255 3.6001832 -1071.2394 -1067.6392 + 7200 0.72 0.076457149 2101.4939 113.84909 -4.2559584 3.6643212 -1071.3036 -1067.6392 + 7250 0.725 0.07645712 2118.2862 113.94356 -4.2760809 3.6673619 -1071.3066 -1067.6392 + 7300 0.73 0.076457121 2191.9037 111.95148 -4.2925005 3.6032452 -1071.2425 -1067.6392 + 7350 0.735 0.076457137 2227.2391 108.2126 -4.3103519 3.4829066 -1071.1221 -1067.6392 + 7400 0.74 0.076457111 2182.826 103.4321 -4.3300063 3.3290426 -1070.9683 -1067.6392 + 7450 0.745 0.076457109 2101.7168 98.840049 -4.3541992 3.1812437 -1070.8205 -1067.6392 + 7500 0.75 0.076457149 2036.3108 95.828239 -4.386682 3.0843062 -1070.7235 -1067.6392 + 7550 0.755 0.076457161 1994.4837 95.142177 -4.4221587 3.0622248 -1070.7015 -1067.6392 + 7600 0.76 0.076457127 1970.6785 96.747859 -4.4522387 3.1139049 -1070.7531 -1067.6392 + 7650 0.765 0.076457086 1993.9417 100.15534 -4.4763203 3.2235774 -1070.8628 -1067.6392 + 7700 0.77 0.076457048 2073.7836 104.50424 -4.4979798 3.3635502 -1071.0028 -1067.6392 + 7750 0.775 0.076457026 2168.4033 108.65953 -4.5168753 3.4972912 -1071.1365 -1067.6392 + 7800 0.78 0.07645702 2217.6427 111.71942 -4.5326251 3.5957762 -1071.235 -1067.6392 + 7850 0.785 0.076457017 2202.5357 113.33023 -4.5487958 3.6476215 -1071.2869 -1067.6392 + 7900 0.79 0.076457015 2164.601 113.51362 -4.5690254 3.653524 -1071.2928 -1067.6392 + 7950 0.795 0.076457037 2131.6906 112.46493 -4.5932729 3.6197711 -1071.259 -1067.6392 + 8000 0.8 0.076457042 2076.7626 110.60384 -4.6198371 3.5598705 -1071.1991 -1067.6392 + 8050 0.805 0.07645706 2008.3681 108.69863 -4.6506123 3.4985496 -1071.1378 -1067.6392 + 8100 0.81 0.076457078 1991.1056 107.59889 -4.6874954 3.4631539 -1071.1024 -1067.6392 + 8150 0.815 0.076457081 2030.108 107.96066 -4.7301631 3.4747976 -1071.114 -1067.6392 + 8200 0.82 0.07645709 2053.0781 110.00158 -4.7752612 3.5404861 -1071.1797 -1067.6392 + 8250 0.825 0.076457092 2080.7633 113.42163 -4.8192627 3.650563 -1071.2898 -1067.6392 + 8300 0.83 0.076457092 2136.3278 117.426 -4.8602394 3.7794468 -1071.4187 -1067.6392 + 8350 0.835 0.076457128 2143.1741 120.76905 -4.8928022 3.8870456 -1071.5263 -1067.6392 + 8400 0.84 0.076457182 2096.2614 122.36127 -4.9132303 3.9382923 -1071.5775 -1067.6392 + 8450 0.845 0.076457199 2045.0508 121.81432 -4.9242986 3.9206885 -1071.5599 -1067.6392 + 8500 0.85 0.076457148 1988.55 119.39197 -4.9305717 3.8427231 -1071.482 -1067.6392 + 8550 0.855 0.076457089 1927.6698 115.82938 -4.9366606 3.7280586 -1071.3673 -1067.6392 + 8600 0.86 0.0764571 1904.9377 112.15467 -4.9485473 3.6097852 -1071.249 -1067.6392 + 8650 0.865 0.076457183 1942.1657 109.35829 -4.9712735 3.5197814 -1071.159 -1067.6392 + 8700 0.87 0.076457275 1995.7079 107.97044 -5.0032067 3.4751123 -1071.1143 -1067.6392 + 8750 0.875 0.076457274 2021.2979 107.91844 -5.0351272 3.4734386 -1071.1127 -1067.6392 + 8800 0.88 0.076457159 2019.7716 108.89001 -5.0595657 3.5047095 -1071.1439 -1067.6392 + 8850 0.885 0.076457056 1997.5026 110.65412 -5.0764543 3.5614886 -1071.2007 -1067.6392 + 8900 0.89 0.076457086 1958.2352 113.01816 -5.0898539 3.6375771 -1071.2768 -1067.6392 + 8950 0.895 0.076457184 1948.1688 115.69887 -5.1049282 3.723858 -1071.3631 -1067.6392 + 9000 0.9 0.076457251 1946.4034 118.2422 -5.125187 3.8057169 -1071.4449 -1067.6392 + 9050 0.905 0.076457271 1929.5103 120.07623 -5.1485984 3.8647467 -1071.504 -1067.6392 + 9100 0.91 0.076457223 1920.5823 120.83551 -5.1696144 3.8891848 -1071.5284 -1067.6392 + 9150 0.915 0.07645719 1947.9739 120.53164 -5.1820234 3.8794043 -1071.5186 -1067.6392 + 9200 0.92 0.076457191 2021.9322 119.4904 -5.1820769 3.8458913 -1071.4851 -1067.6392 + 9250 0.925 0.076457189 2120.5676 118.28073 -5.1733083 3.8069571 -1071.4462 -1067.6392 + 9300 0.93 0.076457202 2218.9759 117.51293 -5.1649043 3.7822448 -1071.4215 -1067.6392 + 9350 0.935 0.07645722 2256.6996 117.52636 -5.163384 3.7826772 -1071.4219 -1067.6392 + 9400 0.94 0.076457192 2219.8074 118.22843 -5.1666597 3.8052737 -1071.4445 -1067.6392 + 9450 0.945 0.076457133 2130.6686 119.30164 -5.1680994 3.8398158 -1071.479 -1067.6392 + 9500 0.95 0.076457125 2013.4271 120.65247 -5.1678977 3.8832933 -1071.5225 -1067.6392 + 9550 0.955 0.076457169 1923.3398 122.44923 -5.1747845 3.9411236 -1071.5804 -1067.6392 + 9600 0.96 0.076457205 1913.1904 124.48108 -5.1900088 4.0065202 -1071.6458 -1067.6392 + 9650 0.965 0.076457203 1960.3017 126.09586 -5.2054982 4.0584932 -1071.6977 -1067.6392 + 9700 0.97 0.0764572 1993.4886 126.91655 -5.2204458 4.0849076 -1071.7241 -1067.6392 + 9750 0.975 0.076457237 2016.3395 126.88895 -5.2391789 4.0840193 -1071.7233 -1067.6392 + 9800 0.98 0.076457278 2059.2841 125.9798 -5.2613642 4.0547577 -1071.694 -1067.6392 + 9850 0.985 0.076457268 2076.0892 124.30551 -5.2849423 4.0008692 -1071.6401 -1067.6392 + 9900 0.99 0.076457232 2054.9566 122.26397 -5.3097299 3.9351607 -1071.5744 -1067.6392 + 9950 0.995 0.076457211 2050.2277 120.49535 -5.3384666 3.8782362 -1071.5175 -1067.6392 + 10000 1 0.076457247 2069.6559 119.63397 -5.374562 3.8505122 -1071.4897 -1067.6392 + 10050 1.005 0.076457306 2079.8366 119.92165 -5.4169176 3.8597712 -1071.499 -1067.6392 + 10100 1.01 0.076457317 2051.4213 121.0737 -5.4602428 3.896851 -1071.5361 -1067.6392 + 10150 1.015 0.076457329 2026.2947 122.36851 -5.4975255 3.9385254 -1071.5778 -1067.6392 + 10200 1.02 0.076457353 2042.1162 122.97997 -5.5239278 3.9582059 -1071.5974 -1067.6392 + 10250 1.025 0.076457364 2059.2177 122.42397 -5.5402625 3.9403105 -1071.5795 -1067.6392 + 10300 1.03 0.076457332 2037.1418 120.82131 -5.5531843 3.8887277 -1071.528 -1067.6392 + 10350 1.035 0.076457305 1953.9125 118.75093 -5.5690263 3.8220908 -1071.4613 -1067.6392 + 10400 1.04 0.076457265 1845.8999 116.97821 -5.5872522 3.7650343 -1071.4043 -1067.6392 + 10450 1.045 0.076457218 1789.9704 116.44416 -5.6054265 3.7478455 -1071.3871 -1067.6392 + 10500 1.05 0.076457227 1790.1722 117.85441 -5.6201726 3.7932355 -1071.4325 -1067.6392 + 10550 1.055 0.076457265 1792.8951 121.26237 -5.6302348 3.9029234 -1071.5422 -1067.6392 + 10600 1.06 0.076457285 1801.2253 126.08926 -5.6408443 4.0582808 -1071.6975 -1067.6392 + 10650 1.065 0.076457276 1848.312 131.30844 -5.6585268 4.2262642 -1071.8655 -1067.6392 + 10700 1.07 0.076457228 1899.189 135.63605 -5.6833 4.3655515 -1072.0048 -1067.6392 + 10750 1.075 0.076457196 1933.4466 137.94816 -5.7116789 4.4399687 -1072.0792 -1067.6392 + 10800 1.08 0.076457209 1952.1407 137.53149 -5.7380474 4.4265577 -1072.0658 -1067.6392 + 10850 1.085 0.076457232 1956.2467 134.36784 -5.7597709 4.3247333 -1071.964 -1067.6392 + 10900 1.09 0.076457254 1935.3183 129.23046 -5.7778262 4.1593827 -1071.7986 -1067.6392 + 10950 1.095 0.07645725 1894.1382 123.56602 -5.7940915 3.9770683 -1071.6163 -1067.6392 + 11000 1.1 0.076457202 1869.9315 119.13104 -5.8115801 3.8343249 -1071.4736 -1067.6392 + 11050 1.105 0.076457157 1872.2105 117.1706 -5.8302554 3.7712266 -1071.4105 -1067.6392 + 11100 1.11 0.076457121 1910.0087 117.93509 -5.8479403 3.7958325 -1071.4351 -1067.6392 + 11150 1.115 0.076457111 1974.5822 120.8604 -5.8628947 3.8899857 -1071.5292 -1067.6392 + 11200 1.12 0.076457152 2017.5386 125.16424 -5.8764671 4.0285084 -1071.6677 -1067.6392 + 11250 1.125 0.076457215 2006.1464 130.14791 -5.8926588 4.1889116 -1071.8281 -1067.6392 + 11300 1.13 0.076457208 1981.6806 134.97307 -5.9111129 4.344213 -1071.9834 -1067.6392 + 11350 1.135 0.076457154 1955.8911 138.78712 -5.9293384 4.4669713 -1072.1062 -1067.6392 + 11400 1.14 0.076457103 1903.025 141.01634 -5.9477992 4.5387205 -1072.178 -1067.6392 + 11450 1.145 0.076457082 1861.8231 141.41934 -5.9709229 4.5516912 -1072.1909 -1067.6392 + 11500 1.15 0.076457105 1864.1 139.85754 -5.999873 4.5014233 -1072.1407 -1067.6392 + 11550 1.155 0.076457135 1864.553 136.29668 -6.0269465 4.3868144 -1072.026 -1067.6392 + 11600 1.16 0.076457167 1838.5238 131.42789 -6.0482365 4.2301086 -1071.8693 -1067.6392 + 11650 1.165 0.076457207 1805.0176 126.80497 -6.0718009 4.0813163 -1071.7205 -1067.6392 + 11700 1.17 0.076457247 1735.2577 124.00212 -6.1059505 3.9911044 -1071.6303 -1067.6392 + 11750 1.175 0.076457255 1641.4793 123.80317 -6.1481291 3.984701 -1071.6239 -1067.6392 + 11800 1.18 0.076457236 1596.2043 126.199 -6.1904504 4.0618126 -1071.701 -1067.6392 + 11850 1.185 0.076457229 1622.0725 130.64719 -6.2272702 4.2049812 -1071.8442 -1067.6392 + 11900 1.19 0.076457283 1669.7039 136.11282 -6.2551373 4.3808969 -1072.0201 -1067.6392 + 11950 1.195 0.076457361 1687.4469 141.27818 -6.2753897 4.5471478 -1072.1864 -1067.6392 + 12000 1.2 0.076457336 1685.355 144.8526 -6.294312 4.6621933 -1072.3014 -1067.6392 + 12050 1.205 0.076457364 1684.0235 145.75585 -6.3137437 4.691265 -1072.3305 -1067.6392 + 12100 1.21 0.076457364 1695.7222 143.63233 -6.3312278 4.6229181 -1072.2622 -1067.6392 + 12150 1.215 0.076457301 1744.0573 139.27223 -6.3471908 4.4825848 -1072.1218 -1067.6392 + 12200 1.22 0.076457264 1815.5391 134.28007 -6.3640171 4.3219083 -1071.9611 -1067.6392 + 12250 1.225 0.076457306 1839.4868 130.2409 -6.378914 4.1919044 -1071.8311 -1067.6392 + 12300 1.23 0.076457381 1791.3388 128.29684 -6.3893167 4.1293333 -1071.7686 -1067.6392 + 12350 1.235 0.076457382 1713.284 129.07652 -6.4002273 4.154428 -1071.7937 -1067.6392 + 12400 1.24 0.076457352 1639.3792 132.52697 -6.4176635 4.2654835 -1071.9047 -1067.6392 + 12450 1.245 0.076457344 1579.8725 137.81757 -6.4424211 4.4357656 -1072.075 -1067.6392 + 12500 1.25 0.076457303 1557.3644 143.52235 -6.4729454 4.6193783 -1072.2586 -1067.6392 + 12550 1.255 0.076457277 1618.5087 148.11444 -6.5082137 4.7671782 -1072.4064 -1067.6392 + 12600 1.26 0.076457326 1720.3013 150.5465 -6.5476118 4.845456 -1072.4847 -1067.6392 + 12650 1.265 0.076457391 1778.5404 150.56002 -6.5906298 4.8458912 -1072.4851 -1067.6392 + 12700 1.27 0.076457351 1788.5951 148.56554 -6.6347601 4.7816972 -1072.4209 -1067.6392 + 12750 1.275 0.076457269 1779.1884 145.24576 -6.6730452 4.6748475 -1072.3141 -1067.6392 + 12800 1.28 0.07645728 1758.2949 141.40165 -6.701303 4.5511219 -1072.1904 -1067.6392 + 12850 1.285 0.076457312 1712.5641 137.9123 -6.7240908 4.4388145 -1072.078 -1067.6392 + 12900 1.29 0.076457327 1668.6646 135.42155 -6.7444763 4.3586478 -1071.9979 -1067.6392 + 12950 1.295 0.076457332 1653.7008 134.40911 -6.7622343 4.3260615 -1071.9653 -1067.6392 + 13000 1.3 0.076457334 1678.1215 135.3964 -6.7808215 4.3578383 -1071.9971 -1067.6392 + 13050 1.305 0.076457316 1709.6866 138.43433 -6.7994699 4.4556163 -1072.0948 -1067.6392 + 13100 1.31 0.076457256 1719.9198 142.81982 -6.8124215 4.5967668 -1072.236 -1067.6392 + 13150 1.315 0.076457227 1716.5741 147.42301 -6.8192217 4.744924 -1072.3842 -1067.6392 + 13200 1.32 0.076457238 1743.2587 150.89049 -6.8222296 4.8565276 -1072.4958 -1067.6392 + 13250 1.325 0.076457261 1793.7636 151.98662 -6.8200794 4.8918073 -1072.531 -1067.6392 + 13300 1.33 0.07645729 1825.2569 150.42643 -6.8140605 4.8415915 -1072.4808 -1067.6392 + 13350 1.335 0.076457252 1838.476 147.28172 -6.8146446 4.7403765 -1072.3796 -1067.6392 + 13400 1.34 0.076457169 1838.3398 144.11825 -6.8303357 4.6385577 -1072.2778 -1067.6392 + 13450 1.345 0.076457222 1801.0039 141.93725 -6.8583491 4.5683605 -1072.2076 -1067.6392 + 13500 1.35 0.076457347 1755.582 140.99498 -6.89022 4.5380327 -1072.1773 -1067.6392 + 13550 1.355 0.076457427 1733.1918 141.21311 -6.9214427 4.5450535 -1072.1843 -1067.6392 + 13600 1.36 0.076457431 1712.5682 142.19629 -6.9465697 4.5766981 -1072.2159 -1067.6392 + 13650 1.365 0.076457399 1717.694 143.5117 -6.9629204 4.6190353 -1072.2583 -1067.6392 + 13700 1.37 0.076457334 1770.8346 145.13001 -6.9802142 4.671122 -1072.3104 -1067.6392 + 13750 1.375 0.076457247 1825.1073 146.95312 -7.0064861 4.7298002 -1072.369 -1067.6392 + 13800 1.38 0.076457256 1824.3539 148.48573 -7.0381068 4.7791285 -1072.4184 -1067.6392 + 13850 1.385 0.076457313 1782.7326 149.20301 -7.0651441 4.8022147 -1072.4414 -1067.6392 + 13900 1.39 0.076457295 1750.9167 149.18894 -7.0840385 4.8017618 -1072.441 -1067.6392 + 13950 1.395 0.076457288 1760.1963 149.12388 -7.1020342 4.7996679 -1072.4389 -1067.6392 + 14000 1.4 0.076457265 1776.4309 149.46795 -7.1245024 4.8107421 -1072.45 -1067.6392 + 14050 1.405 0.076457201 1795.0829 150.25585 -7.1514213 4.8361011 -1072.4753 -1067.6392 + 14100 1.41 0.076457229 1812.6337 151.48841 -7.1831839 4.8757722 -1072.515 -1067.6392 + 14150 1.415 0.076457297 1801.8728 153.13675 -7.2174201 4.928825 -1072.5681 -1067.6392 + 14200 1.42 0.076457305 1773.4672 155.06508 -7.2481606 4.9908901 -1072.6301 -1067.6392 + 14250 1.425 0.076457282 1738.9317 157.04135 -7.2698182 5.0544977 -1072.6937 -1067.6392 + 14300 1.43 0.076457306 1716.5389 158.77479 -7.2837833 5.1102898 -1072.7495 -1067.6392 + 14350 1.435 0.07645735 1720.7949 159.7069 -7.2945528 5.1402904 -1072.7795 -1067.6392 + 14400 1.44 0.076457333 1748.7885 159.02986 -7.3011362 5.1184995 -1072.7577 -1067.6392 + 14450 1.445 0.076457295 1742.8885 156.42679 -7.3047662 5.0347176 -1072.674 -1067.6392 + 14500 1.45 0.076457256 1670.5068 152.24569 -7.3102428 4.9001455 -1072.5394 -1067.6392 + 14550 1.455 0.076457265 1584.5241 147.05373 -7.318176 4.7330384 -1072.3723 -1067.6392 + 14600 1.46 0.076457287 1529.9826 141.71242 -7.3290619 4.5611241 -1072.2004 -1067.6392 + 14650 1.465 0.076457308 1510.2873 137.60969 -7.3489824 4.4290747 -1072.0683 -1067.6392 + 14700 1.47 0.076457333 1517.9737 136.06432 -7.3778607 4.3793359 -1072.0186 -1067.6392 + 14750 1.475 0.076457349 1536.5785 137.7444 -7.4074887 4.4334105 -1072.0726 -1067.6392 + 14800 1.48 0.076457332 1570.427 142.60265 -7.435251 4.589777 -1072.229 -1067.6392 + 14850 1.485 0.076457277 1605.5273 149.55383 -7.4584362 4.813506 -1072.4527 -1067.6392 + 14900 1.49 0.076457286 1619.5816 156.68247 -7.4687128 5.042947 -1072.6822 -1067.6392 + 14950 1.495 0.076457352 1628.8798 162.48759 -7.4692532 5.2297891 -1072.869 -1067.6392 + 15000 1.5 0.076457367 1645.2779 166.28468 -7.4710214 5.3520015 -1072.9912 -1067.6392 + 15050 1.505 0.076457354 1659.3085 168.01268 -7.4835147 5.4076185 -1073.0469 -1067.6392 + 15100 1.51 0.076457322 1657.5151 167.8691 -7.5090057 5.4029973 -1073.0422 -1067.6392 + 15150 1.515 0.076457334 1619.1825 165.90116 -7.5343027 5.3396576 -1072.9789 -1067.6392 + 15200 1.52 0.076457345 1564.833 162.54809 -7.5475534 5.2317363 -1072.871 -1067.6392 + 15250 1.525 0.076457333 1526.2301 158.9992 -7.5544031 5.1175126 -1072.7567 -1067.6392 + 15300 1.53 0.076457299 1516.6129 156.42636 -7.5677145 5.0347037 -1072.6739 -1067.6392 + 15350 1.535 0.07645727 1514.4631 155.10745 -7.5910984 4.9922537 -1072.6315 -1067.6392 + 15400 1.54 0.076457295 1489.0219 154.49939 -7.6168589 4.9726826 -1072.6119 -1067.6392 + 15450 1.545 0.076457307 1454.98 154.09722 -7.6374985 4.9597386 -1072.599 -1067.6392 + 15500 1.55 0.076457289 1465.2041 153.94567 -7.6532363 4.9548609 -1072.5941 -1067.6392 + 15550 1.555 0.076457258 1507.1468 154.2404 -7.6663203 4.964347 -1072.6036 -1067.6392 + 15600 1.56 0.076457196 1529.3808 154.91397 -7.6776911 4.9860264 -1072.6253 -1067.6392 + 15650 1.565 0.076457177 1523.9817 156.0119 -7.695343 5.021364 -1072.6606 -1067.6392 + 15700 1.57 0.076457193 1522.7643 157.82491 -7.7296805 5.0797172 -1072.7189 -1067.6392 + 15750 1.575 0.076457243 1494.5697 160.297 -7.7768073 5.1592832 -1072.7985 -1067.6392 + 15800 1.58 0.076457287 1432.4424 162.81609 -7.8203339 5.2403621 -1072.8796 -1067.6392 + 15850 1.585 0.07645733 1402.4977 164.59576 -7.8451116 5.2976423 -1072.9369 -1067.6392 + 15900 1.59 0.076457402 1416.812 165.26647 -7.8504137 5.3192297 -1072.9585 -1067.6392 + 15950 1.595 0.076457391 1434.0052 165.00555 -7.8513437 5.3108318 -1072.9501 -1067.6392 + 16000 1.6 0.07645732 1448.028 163.9183 -7.8607479 5.2758378 -1072.9151 -1067.6392 + 16050 1.605 0.076457324 1476.1802 161.67871 -7.8741051 5.2037547 -1072.843 -1067.6392 + 16100 1.61 0.076457365 1517.1195 158.257 -7.8821118 5.0936245 -1072.7329 -1067.6392 + 16150 1.615 0.07645732 1551.8013 154.48554 -7.8845021 4.9722371 -1072.6115 -1067.6392 + 16200 1.62 0.076457224 1563.4592 151.61692 -7.8867696 4.8799081 -1072.5191 -1067.6392 + 16250 1.625 0.076457231 1568.8982 150.52413 -7.8928325 4.8447358 -1072.484 -1067.6392 + 16300 1.63 0.076457315 1587.8208 151.31592 -7.9028799 4.8702203 -1072.5095 -1067.6392 + 16350 1.635 0.076457401 1587.1658 153.58503 -7.9155357 4.9432533 -1072.5825 -1067.6392 + 16400 1.64 0.0764574 1564.8466 156.97281 -7.9329671 5.0522917 -1072.6915 -1067.6392 + 16450 1.645 0.076457324 1559.9515 161.25392 -7.9569659 5.1900827 -1072.8293 -1067.6392 + 16500 1.65 0.07645729 1572.1491 166.16033 -7.9871415 5.3479991 -1072.9872 -1067.6392 + 16550 1.655 0.076457319 1587.1041 171.09675 -8.0223182 5.5068818 -1073.1461 -1067.6392 + 16600 1.66 0.076457367 1611.2738 175.10798 -8.0612322 5.6359861 -1073.2752 -1067.6392 + 16650 1.665 0.076457363 1645.197 177.28144 -8.100579 5.7059409 -1073.3452 -1067.6392 + 16700 1.67 0.076457373 1687.596 177.10275 -8.1330656 5.7001896 -1073.3394 -1067.6392 + 16750 1.675 0.076457406 1741.0657 174.63626 -8.1549243 5.6208035 -1073.26 -1067.6392 + 16800 1.68 0.076457428 1770.5295 170.6939 -8.1775588 5.4939157 -1073.1331 -1067.6392 + 16850 1.685 0.076457412 1764.9164 166.35555 -8.2116214 5.3542824 -1072.9935 -1067.6392 + 16900 1.69 0.076457377 1753.4555 162.46345 -8.24703 5.2290123 -1072.8682 -1067.6392 + 16950 1.695 0.076457382 1737.3044 159.85392 -8.2679658 5.1450224 -1072.7843 -1067.6392 + 17000 1.7 0.076457397 1698.4267 159.38372 -8.2771546 5.1298887 -1072.7691 -1067.6392 + 17050 1.705 0.076457398 1648.5432 161.02257 -8.2829365 5.1826363 -1072.8219 -1067.6392 + 17100 1.71 0.076457362 1597.8104 163.90303 -8.2883924 5.2753461 -1072.9146 -1067.6392 + 17150 1.715 0.076457407 1581.3305 167.13768 -8.2982879 5.3794559 -1073.0187 -1067.6392 + 17200 1.72 0.076457416 1615.3538 169.91691 -8.3147181 5.4689075 -1073.1081 -1067.6392 + 17250 1.725 0.076457317 1640.517 171.76528 -8.3382653 5.5283989 -1073.1676 -1067.6392 + 17300 1.73 0.076457279 1642.0824 172.72393 -8.3672834 5.5592538 -1073.1985 -1067.6392 + 17350 1.735 0.076457358 1654.7782 173.20812 -8.3956352 5.5748377 -1073.2141 -1067.6392 + 17400 1.74 0.076457387 1690.9444 174.02756 -8.4250034 5.6012122 -1073.2404 -1067.6392 + 17450 1.745 0.076457318 1700.9667 175.61591 -8.4582001 5.6523344 -1073.2916 -1067.6392 + 17500 1.75 0.076457288 1647.3737 177.46686 -8.4919066 5.7119087 -1073.3511 -1067.6392 + 17550 1.755 0.076457298 1540.9506 178.64086 -8.5244634 5.7496947 -1073.3889 -1067.6392 + 17600 1.76 0.076457329 1446.6813 178.43003 -8.554886 5.7429089 -1073.3821 -1067.6392 + 17650 1.765 0.076457379 1412.0895 176.95558 -8.5854884 5.6954528 -1073.3347 -1067.6392 + 17700 1.77 0.076457349 1414.559 175.0213 -8.6219735 5.6331963 -1073.2724 -1067.6392 + 17750 1.775 0.076457246 1413.6264 173.04798 -8.6573217 5.5696835 -1073.2089 -1067.6392 + 17800 1.78 0.076457222 1399.031 170.80066 -8.673405 5.4973518 -1073.1366 -1067.6392 + 17850 1.785 0.076457257 1402.9589 168.32364 -8.6692442 5.417627 -1073.0569 -1067.6392 + 17900 1.79 0.076457292 1421.4914 166.26754 -8.667908 5.3514498 -1072.9907 -1067.6392 + 17950 1.795 0.07645729 1459.6161 165.06532 -8.6883597 5.3127556 -1072.952 -1067.6392 + 18000 1.8 0.07645728 1526.0272 164.4467 -8.724083 5.2928448 -1072.9321 -1067.6392 + 18050 1.805 0.076457285 1579.053 164.14599 -8.7580049 5.283166 -1072.9224 -1067.6392 + 18100 1.81 0.076457295 1585.8299 164.68311 -8.7876471 5.3004537 -1072.9397 -1067.6392 + 18150 1.815 0.076457311 1571.4213 167.11719 -8.82749 5.3787965 -1073.018 -1067.6392 + 18200 1.82 0.076457253 1566.7735 171.84493 -8.8828984 5.5309623 -1073.1702 -1067.6392 + 18250 1.825 0.076457211 1565.9409 178.03402 -8.9379169 5.7301632 -1073.3694 -1067.6392 + 18300 1.83 0.076457261 1564.3982 184.19934 -8.977693 5.9285986 -1073.5678 -1067.6392 + 18350 1.835 0.07645725 1565.4674 188.93147 -9.0068361 6.0809061 -1073.7201 -1067.6392 + 18400 1.84 0.076457214 1575.9469 191.19229 -9.0319747 6.1536724 -1073.7929 -1067.6392 + 18450 1.845 0.076457289 1591.7212 190.75232 -9.0530056 6.1395115 -1073.7787 -1067.6392 + 18500 1.85 0.076457356 1602.2968 188.42238 -9.0750081 6.0645207 -1073.7038 -1067.6392 + 18550 1.855 0.076457289 1601.939 185.22419 -9.1006094 5.9615844 -1073.6008 -1067.6392 + 18600 1.86 0.076457199 1571.9204 181.88092 -9.1245655 5.8539786 -1073.4932 -1067.6392 + 18650 1.865 0.076457174 1547.9534 179.20735 -9.1468721 5.7679277 -1073.4072 -1067.6392 + 18700 1.87 0.076457165 1552.3316 177.96057 -9.1713552 5.7277992 -1073.367 -1067.6392 + 18750 1.875 0.076457197 1553.5318 178.2992 -9.1953424 5.7386981 -1073.3779 -1067.6392 + 18800 1.88 0.076457184 1502.7768 179.82752 -9.2133625 5.7878883 -1073.4271 -1067.6392 + 18850 1.885 0.076457121 1411.167 181.98955 -9.226772 5.857475 -1073.4967 -1067.6392 + 18900 1.89 0.07645718 1331.5599 184.25555 -9.244306 5.9304078 -1073.5696 -1067.6392 + 18950 1.895 0.076457306 1300.8838 185.96704 -9.269864 5.9854936 -1073.6247 -1067.6392 + 19000 1.9 0.076457332 1341.3268 186.45142 -9.2968684 6.0010837 -1073.6403 -1067.6392 + 19050 1.905 0.076457294 1418.9495 185.73025 -9.3201217 5.9778722 -1073.6171 -1067.6392 + 19100 1.91 0.076457261 1469.3348 184.71078 -9.3405594 5.9450597 -1073.5843 -1067.6392 + 19150 1.915 0.07645726 1494.8858 184.40838 -9.3593456 5.9353267 -1073.5746 -1067.6392 + 19200 1.92 0.076457302 1535.9214 185.12696 -9.3754395 5.958455 -1073.5977 -1067.6392 + 19250 1.925 0.076457322 1578.5937 186.7022 -9.3955891 6.0091552 -1073.6484 -1067.6392 + 19300 1.93 0.07645736 1578.7452 188.80101 -9.4323472 6.076707 -1073.7159 -1067.6392 + 19350 1.935 0.076457464 1549.5413 190.55677 -9.4860328 6.1332175 -1073.7725 -1067.6392 + 19400 1.94 0.076457401 1518.0105 190.8838 -9.545051 6.1437434 -1073.783 -1067.6392 + 19450 1.945 0.076457226 1476.9524 189.41845 -9.6005799 6.0965799 -1073.7358 -1067.6392 + 19500 1.95 0.076457236 1453.8032 186.8834 -9.6531215 6.0149872 -1073.6542 -1067.6392 + 19550 1.955 0.076457309 1436.5876 184.62159 -9.7075641 5.942189 -1073.5814 -1067.6392 + 19600 1.96 0.076457314 1395.5458 183.83049 -9.7642712 5.9167271 -1073.556 -1067.6392 + 19650 1.965 0.076457309 1342.194 185.07394 -9.8173107 5.9567485 -1073.596 -1067.6392 + 19700 1.97 0.076457382 1296.9221 188.42121 -9.866389 6.0644829 -1073.7037 -1067.6392 + 19750 1.975 0.076457367 1284.6809 193.29911 -9.9107399 6.2214817 -1073.8607 -1067.6392 + 19800 1.98 0.076457239 1277.2922 198.66316 -9.946204 6.3941279 -1074.0334 -1067.6392 + 19850 1.985 0.076457182 1240.7957 203.40147 -9.9754722 6.5466343 -1074.1859 -1067.6392 + 19900 1.99 0.07645726 1203.1195 206.12078 -10.001353 6.6341571 -1074.2734 -1067.6392 + 19950 1.995 0.076457363 1202.7274 205.68644 -10.025039 6.6201776 -1074.2594 -1067.6392 + 20000 2 0.076457341 1220.191 202.20273 -10.047292 6.5080517 -1074.1473 -1067.6392 + 20050 2.005 0.076457241 1219.9293 197.12841 -10.066398 6.3447308 -1073.984 -1067.6392 + 20100 2.01 0.076457168 1194.4117 192.23758 -10.079101 6.1873157 -1073.8265 -1067.6392 + 20150 2.015 0.076457198 1169.6328 188.78101 -10.085348 6.0760632 -1073.7153 -1067.6392 + 20200 2.02 0.076457237 1170.2112 187.39597 -10.084836 6.0314848 -1073.6707 -1067.6392 + 20250 2.025 0.076457263 1178.3781 188.35798 -10.080252 6.0624476 -1073.7017 -1067.6392 + 20300 2.03 0.076457263 1193.5136 191.43468 -10.076517 6.1614738 -1073.8007 -1067.6392 + 20350 2.035 0.076457217 1217.151 195.69411 -10.073155 6.2985667 -1073.9378 -1067.6392 + 20400 2.04 0.076457203 1235.3327 200.1109 -10.073615 6.4407245 -1074.08 -1067.6392 + 20450 2.045 0.076457254 1242.9155 203.63993 -10.081258 6.5543091 -1074.1935 -1067.6392 + 20500 2.05 0.076457271 1241.9055 205.2779 -10.095394 6.6070286 -1074.2463 -1067.6392 + 20550 2.055 0.076457271 1221.6949 204.56884 -10.116586 6.5842068 -1074.2234 -1067.6392 + 20600 2.06 0.076457294 1226.6359 201.68982 -10.144389 6.4915433 -1074.1308 -1067.6392 + 20650 2.065 0.07645732 1283.4482 197.23304 -10.174916 6.3480985 -1073.9873 -1067.6392 + 20700 2.07 0.076457316 1329.13 192.42022 -10.208859 6.1931942 -1073.8324 -1067.6392 + 20750 2.075 0.076457251 1326.0056 189.01786 -10.251588 6.0836867 -1073.7229 -1067.6392 + 20800 2.08 0.076457224 1289.0675 188.31447 -10.298492 6.0610474 -1073.7003 -1067.6392 + 20850 2.085 0.076457272 1261.4039 190.77218 -10.344257 6.1401507 -1073.7794 -1067.6392 + 20900 2.09 0.076457341 1274.4048 195.96512 -10.390177 6.3072895 -1073.9465 -1067.6392 + 20950 2.095 0.076457382 1294.6179 202.31796 -10.42989 6.5117606 -1074.151 -1067.6392 + 21000 2.1 0.076457336 1271.5204 207.81694 -10.451365 6.6887496 -1074.328 -1067.6392 + 21050 2.105 0.076457218 1224.8924 211.49094 -10.462946 6.8070002 -1074.4462 -1067.6392 + 21100 2.11 0.076457179 1197.0124 213.27369 -10.482662 6.8643792 -1074.5036 -1067.6392 + 21150 2.115 0.076457232 1200.2169 213.01628 -10.509071 6.8560942 -1074.4953 -1067.6392 + 21200 2.12 0.076457334 1233.3373 211.01674 -10.539776 6.7917377 -1074.431 -1067.6392 + 21250 2.125 0.076457324 1292.2293 208.23361 -10.582784 6.7021603 -1074.3414 -1067.6392 + 21300 2.13 0.076457234 1353.0348 205.33718 -10.632972 6.6089366 -1074.2482 -1067.6392 + 21350 2.135 0.076457274 1390.9107 202.43255 -10.667402 6.5154488 -1074.1547 -1067.6392 + 21400 2.14 0.076457309 1398.7408 199.69704 -10.670157 6.4274041 -1074.0666 -1067.6392 + 21450 2.145 0.076457306 1400.5231 197.71241 -10.646924 6.3635274 -1074.0028 -1067.6392 + 21500 2.15 0.076457319 1422.7259 197.36253 -10.618311 6.3522661 -1073.9915 -1067.6392 + 21550 2.155 0.076457297 1434.7766 199.14128 -10.598724 6.4095165 -1074.0487 -1067.6392 + 21600 2.16 0.076457278 1429.5442 202.52793 -10.589548 6.5185185 -1074.1577 -1067.6392 + 21650 2.165 0.076457295 1420.497 206.1935 -10.591701 6.636498 -1074.2757 -1067.6392 + 21700 2.17 0.076457276 1378.0825 208.36958 -10.599065 6.7065365 -1074.3458 -1067.6392 + 21750 2.175 0.076457297 1325.5891 208.06821 -10.604715 6.6968368 -1074.3361 -1067.6392 + 21800 2.18 0.076457341 1286.1379 205.87017 -10.612217 6.6260911 -1074.2653 -1067.6392 + 21850 2.185 0.076457343 1249.4394 203.00417 -10.618963 6.5338467 -1074.1731 -1067.6392 + 21900 2.19 0.076457342 1219.6068 200.92404 -10.618829 6.4668963 -1074.1061 -1067.6392 + 21950 2.195 0.076457255 1203.2091 201.06239 -10.615316 6.4713491 -1074.1106 -1067.6392 + 22000 2.2 0.076457157 1207.2707 203.83245 -10.616122 6.5605055 -1074.1997 -1067.6392 + 22050 2.205 0.076457174 1213.7955 208.32753 -10.627885 6.7051832 -1074.3444 -1067.6392 + 22100 2.21 0.076457305 1217.4318 212.84143 -10.652913 6.8504667 -1074.4897 -1067.6392 + 22150 2.215 0.076457345 1210.5327 215.5321 -10.688094 6.9370678 -1074.5763 -1067.6392 + 22200 2.22 0.076457215 1195.2458 215.20969 -10.73343 6.9266909 -1074.5659 -1067.6392 + 22250 2.225 0.076457077 1182.8507 211.73156 -10.788326 6.8147447 -1074.454 -1067.6392 + 22300 2.23 0.076457075 1161.1546 206.13732 -10.841515 6.6346895 -1074.2739 -1067.6392 + 22350 2.235 0.076457134 1136.2879 200.67718 -10.880177 6.4589508 -1074.0982 -1067.6392 + 22400 2.24 0.07645722 1141.1588 197.90394 -10.902196 6.369692 -1074.0089 -1067.6392 + 22450 2.245 0.07645725 1183.4596 199.22083 -10.913175 6.412077 -1074.0513 -1067.6392 + 22500 2.25 0.076457199 1229.4238 204.41082 -10.921755 6.5791208 -1074.2184 -1067.6392 + 22550 2.255 0.076457171 1264.902 212.14836 -10.939819 6.8281595 -1074.4674 -1067.6392 + 22600 2.26 0.076457158 1287.9026 220.33991 -10.971089 7.091811 -1074.731 -1067.6392 + 22650 2.265 0.076457207 1311.4828 226.7258 -11.007167 7.2973458 -1074.9366 -1067.6392 + 22700 2.27 0.076457319 1353.9253 229.84218 -11.040634 7.3976489 -1075.0369 -1067.6392 + 22750 2.275 0.076457274 1390.1174 229.24441 -11.068644 7.3784091 -1075.0176 -1067.6392 + 22800 2.28 0.076457156 1387.0664 225.36499 -11.095325 7.2535471 -1074.8928 -1067.6392 + 22850 2.285 0.076457176 1360.9519 219.18675 -11.130488 7.0546956 -1074.6939 -1067.6392 + 22900 2.29 0.076457316 1344.359 211.76274 -11.174978 6.8157482 -1074.455 -1067.6392 + 22950 2.295 0.07645732 1299.3984 204.35647 -11.214963 6.5773717 -1074.2166 -1067.6392 + 23000 2.3 0.076457162 1231.7571 198.93484 -11.2383 6.4028722 -1074.0421 -1067.6392 + 23050 2.305 0.07645712 1199.0791 197.45133 -11.245595 6.3551243 -1073.9944 -1067.6392 + 23100 2.31 0.076457206 1194.5403 200.36018 -11.246069 6.4487479 -1074.088 -1067.6392 + 23150 2.315 0.07645717 1213.0855 206.27572 -11.249945 6.6391441 -1074.2784 -1067.6392 + 23200 2.32 0.076457149 1247.0389 212.62317 -11.25317 6.8434419 -1074.4827 -1067.6392 + 23250 2.325 0.076457232 1252.9771 217.14066 -11.243809 6.9888406 -1074.6281 -1067.6392 + 23300 2.33 0.076457298 1246.3963 219.5467 -11.230203 7.0662811 -1074.7055 -1067.6392 + 23350 2.335 0.076457347 1263.8532 220.90621 -11.226826 7.1100378 -1074.7493 -1067.6392 + 23400 2.34 0.076457343 1278.9193 222.02245 -11.231757 7.1459649 -1074.7852 -1067.6392 + 23450 2.345 0.076457298 1271.4615 223.28544 -11.242585 7.1866153 -1074.8258 -1067.6392 + 23500 2.35 0.076457216 1263.4764 224.76526 -11.261772 7.2342444 -1074.8735 -1067.6392 + 23550 2.355 0.076457156 1269.5953 225.95356 -11.284145 7.2724905 -1074.9117 -1067.6392 + 23600 2.36 0.076457239 1268.359 226.26773 -11.305282 7.2826025 -1074.9218 -1067.6392 + 23650 2.365 0.076457257 1265.5906 225.69913 -11.3327 7.2643016 -1074.9035 -1067.6392 + 23700 2.37 0.076457123 1275.7614 224.53597 -11.374051 7.2268646 -1074.8661 -1067.6392 + 23750 2.375 0.076457085 1287.3169 222.75095 -11.424079 7.1694122 -1074.8086 -1067.6392 + 23800 2.38 0.076457174 1303.4659 219.83945 -11.467156 7.0757035 -1074.7149 -1067.6392 + 23850 2.385 0.076457349 1312.2776 215.4104 -11.491657 6.9331509 -1074.5724 -1067.6392 + 23900 2.39 0.076457447 1300.2196 210.22181 -11.505842 6.766152 -1074.4054 -1067.6392 + 23950 2.395 0.076457318 1285.3883 205.91466 -11.523034 6.6275231 -1074.2668 -1067.6392 + 24000 2.4 0.076457215 1271.3069 203.89116 -11.544141 6.5623954 -1074.2016 -1067.6392 + 24050 2.405 0.07645717 1275.6297 204.82158 -11.568504 6.5923414 -1074.2316 -1067.6392 + 24100 2.41 0.076457155 1308.5278 208.28691 -11.593169 6.703876 -1074.3431 -1067.6392 + 24150 2.415 0.076457173 1320.3939 213.14435 -11.610405 6.8602164 -1074.4994 -1067.6392 + 24200 2.42 0.076457286 1290.2677 218.34701 -11.616172 7.0276681 -1074.6669 -1067.6392 + 24250 2.425 0.07645742 1266.5534 223.16759 -11.612622 7.182822 -1074.8221 -1067.6392 + 24300 2.43 0.076457424 1263.1458 227.14553 -11.607449 7.310855 -1074.9501 -1067.6392 + 24350 2.435 0.076457322 1278.3394 229.88879 -11.606753 7.3991491 -1075.0384 -1067.6392 + 24400 2.44 0.076457217 1299.8856 231.18375 -11.60862 7.4408286 -1075.0801 -1067.6392 + 24450 2.445 0.076457261 1314.6037 231.51695 -11.609751 7.4515526 -1075.0908 -1067.6392 + 24500 2.45 0.076457395 1306.5195 231.80528 -11.609243 7.4608328 -1075.1001 -1067.6392 + 24550 2.455 0.076457379 1284.1202 232.64324 -11.61431 7.4878034 -1075.127 -1067.6392 + 24600 2.46 0.076457237 1266.9925 233.34522 -11.628582 7.510397 -1075.1496 -1067.6392 + 24650 2.465 0.076457198 1282.9995 232.39636 -11.648257 7.4798573 -1075.1191 -1067.6392 + 24700 2.47 0.07645726 1305.414 229.20359 -11.674265 7.3770956 -1075.0163 -1067.6392 + 24750 2.475 0.07645732 1301.6393 224.60137 -11.703977 7.2289695 -1074.8682 -1067.6392 + 24800 2.48 0.076457337 1286.6037 220.28411 -11.728511 7.090015 -1074.7292 -1067.6392 + 24850 2.485 0.076457248 1285.2636 217.75575 -11.741746 7.0086378 -1074.6479 -1067.6392 + 24900 2.49 0.076457211 1273.3347 217.15842 -11.738866 6.9894122 -1074.6286 -1067.6392 + 24950 2.495 0.076457314 1254.4627 217.67065 -11.724117 7.0058988 -1074.6451 -1067.6392 + 25000 2.5 0.07645736 1252.7349 218.6929 -11.717307 7.0388007 -1074.678 -1067.6392 + 25050 2.505 0.076457303 1253.3725 220.1096 -11.733758 7.0843985 -1074.7236 -1067.6392 + 25100 2.51 0.076457303 1226.6085 221.88399 -11.763112 7.1415083 -1074.7807 -1067.6392 + 25150 2.515 0.076457323 1179.7816 224.12648 -11.787319 7.2136847 -1074.8529 -1067.6392 + 25200 2.52 0.076457341 1147.9357 227.17475 -11.806595 7.3117955 -1074.951 -1067.6392 + 25250 2.525 0.076457289 1122.8538 230.61744 -11.827081 7.4226013 -1075.0618 -1067.6392 + 25300 2.53 0.076457275 1123.0584 232.62891 -11.840179 7.487342 -1075.1266 -1067.6392 + 25350 2.535 0.076457325 1135.7283 231.67931 -11.840266 7.4567784 -1075.096 -1067.6392 + 25400 2.54 0.076457369 1132.9884 228.34818 -11.841402 7.3495632 -1074.9888 -1067.6392 + 25450 2.545 0.076457373 1126.8396 224.33046 -11.849704 7.2202499 -1074.8595 -1067.6392 + 25500 2.55 0.076457345 1138.9754 220.94924 -11.854541 7.1114227 -1074.7507 -1067.6392 + 25550 2.555 0.076457293 1161.4091 218.97947 -11.85351 7.0480242 -1074.6873 -1067.6392 + 25600 2.56 0.076457314 1174.3492 218.77523 -11.860158 7.0414507 -1074.6807 -1067.6392 + 25650 2.565 0.07645744 1168.4635 220.04213 -11.881157 7.0822266 -1074.7215 -1067.6392 + 25700 2.57 0.076457455 1176.9925 222.26325 -11.910611 7.153715 -1074.7929 -1067.6392 + 25750 2.575 0.076457341 1184.7961 225.03857 -11.939316 7.2430409 -1074.8823 -1067.6392 + 25800 2.58 0.076457304 1154.7511 227.79451 -11.960291 7.3317431 -1074.971 -1067.6392 + 25850 2.585 0.076457382 1114.3611 229.90007 -11.97576 7.3995122 -1075.0387 -1067.6392 + 25900 2.59 0.076457443 1085.8869 230.83015 -11.989347 7.4294476 -1075.0687 -1067.6392 + 25950 2.595 0.076457402 1078.3201 230.19636 -12.002061 7.4090485 -1075.0483 -1067.6392 + 26000 2.6 0.076457319 1095.9541 227.61221 -12.008597 7.3258755 -1074.9651 -1067.6392 + 26050 2.605 0.076457291 1140.9903 223.50282 -12.008527 7.1936117 -1074.8328 -1067.6392 + 26100 2.61 0.076457385 1178.622 219.76032 -12.018995 7.0731563 -1074.7124 -1067.6392 + 26150 2.615 0.076457448 1173.4374 218.06955 -12.044671 7.0187377 -1074.658 -1067.6392 + 26200 2.62 0.076457408 1151.1453 218.96082 -12.075861 7.0474238 -1074.6867 -1067.6392 + 26250 2.625 0.076457383 1155.4138 222.06391 -12.101821 7.1472992 -1074.7865 -1067.6392 + 26300 2.63 0.076457372 1194.7964 226.66949 -12.116261 7.2955333 -1074.9348 -1067.6392 + 26350 2.635 0.076457363 1223.2766 232.21329 -12.127208 7.4739649 -1075.1132 -1067.6392 + 26400 2.64 0.076457354 1223.9805 237.61275 -12.140513 7.6477507 -1075.287 -1067.6392 + 26450 2.645 0.076457281 1218.086 241.25999 -12.14955 7.7651401 -1075.4044 -1067.6392 + 26500 2.65 0.07645724 1226.9905 242.22464 -12.151248 7.7961882 -1075.4354 -1067.6392 + 26550 2.655 0.076457293 1247.8203 240.6035 -12.151475 7.7440104 -1075.3832 -1067.6392 + 26600 2.66 0.076457269 1242.9798 237.04434 -12.161376 7.6294559 -1075.2687 -1067.6392 + 26650 2.665 0.076457162 1205.6877 232.19203 -12.183196 7.4732806 -1075.1125 -1067.6392 + 26700 2.67 0.07645716 1172.6996 227.25303 -12.214748 7.3143152 -1074.9535 -1067.6392 + 26750 2.675 0.076457262 1153.9255 224.05517 -12.256042 7.2113895 -1074.8506 -1067.6392 + 26800 2.68 0.076457311 1136.0414 223.48738 -12.295525 7.1931146 -1074.8323 -1067.6392 + 26850 2.685 0.076457307 1118.9445 225.12955 -12.319088 7.2459693 -1074.8852 -1067.6392 + 26900 2.69 0.076457308 1108.0624 228.2382 -12.325255 7.3460238 -1074.9853 -1067.6392 + 26950 2.695 0.076457378 1116.2269 232.45212 -12.323702 7.4816518 -1075.1209 -1067.6392 + 27000 2.7 0.07645739 1134.9488 237.58432 -12.328662 7.6468358 -1075.2861 -1067.6392 + 27050 2.705 0.07645735 1138.9878 242.69968 -12.344967 7.8114775 -1075.4507 -1067.6392 + 27100 2.71 0.07645736 1129.3313 246.18245 -12.366079 7.9235733 -1075.5628 -1067.6392 + 27150 2.715 0.076457354 1124.2775 246.92127 -12.384885 7.9473528 -1075.5866 -1067.6392 + 27200 2.72 0.076457305 1108.739 245.14655 -12.403913 7.8902318 -1075.5295 -1067.6392 + 27250 2.725 0.076457306 1108.6304 241.74994 -12.427874 7.7809096 -1075.4201 -1067.6392 + 27300 2.73 0.076457366 1145.8269 237.40384 -12.453673 7.641027 -1075.2803 -1067.6392 + 27350 2.735 0.076457346 1182.0337 232.72259 -12.475581 7.4903572 -1075.1296 -1067.6392 + 27400 2.74 0.076457288 1197.1644 228.48145 -12.490327 7.3538529 -1074.9931 -1067.6392 + 27450 2.745 0.076457272 1211.3793 225.74198 -12.50044 7.2656808 -1074.9049 -1067.6392 + 27500 2.75 0.076457331 1258.8799 225.52316 -12.511305 7.2586379 -1074.8979 -1067.6392 + 27550 2.755 0.076457388 1308.0524 227.54337 -12.522462 7.3236601 -1074.9629 -1067.6392 + 27600 2.76 0.076457348 1328.121 230.14115 -12.523762 7.4072716 -1075.0465 -1067.6392 + 27650 2.765 0.076457243 1340.2612 232.32442 -12.510293 7.4775417 -1075.1168 -1067.6392 + 27700 2.77 0.076457161 1351.5963 234.3197 -12.488706 7.5417616 -1075.181 -1067.6392 + 27750 2.775 0.076457282 1357.7982 236.12334 -12.460757 7.5998128 -1075.239 -1067.6392 + 27800 2.78 0.076457422 1361.4651 237.29306 -12.430447 7.6374614 -1075.2767 -1067.6392 + 27850 2.785 0.076457378 1361.9438 237.41071 -12.408369 7.6412479 -1075.2805 -1067.6392 + 27900 2.79 0.076457207 1354.0021 236.45794 -12.402868 7.6105824 -1075.2498 -1067.6392 + 27950 2.795 0.076457167 1330.2965 235.02473 -12.414971 7.5644534 -1075.2037 -1067.6392 + 28000 2.8 0.076457251 1299.3048 233.7726 -12.43317 7.5241524 -1075.1634 -1067.6392 + 28050 2.805 0.076457269 1277.0133 233.28243 -12.448406 7.5083761 -1075.1476 -1067.6392 + 28100 2.81 0.076457225 1251.8497 234.0353 -12.464212 7.5326077 -1075.1718 -1067.6392 + 28150 2.815 0.076457297 1208.4966 235.64084 -12.477803 7.5842833 -1075.2235 -1067.6392 + 28200 2.82 0.076457399 1198.6158 237.16084 -12.484054 7.6332057 -1075.2724 -1067.6392 + 28250 2.825 0.076457406 1239.4401 237.9696 -12.486107 7.6592361 -1075.2985 -1067.6392 + 28300 2.83 0.076457357 1293.9124 237.8743 -12.489779 7.6561691 -1075.2954 -1067.6392 + 28350 2.835 0.076457319 1312.3301 237.34832 -12.50409 7.63924 -1075.2785 -1067.6392 + 28400 2.84 0.076457322 1285.5505 237.14016 -12.527163 7.6325402 -1075.2718 -1067.6392 + 28450 2.845 0.076457378 1245.9557 237.75445 -12.548289 7.6523114 -1075.2915 -1067.6392 + 28500 2.85 0.076457388 1235.3861 238.91062 -12.557157 7.6895238 -1075.3288 -1067.6392 + 28550 2.855 0.076457337 1268.9513 240.25184 -12.560084 7.7326918 -1075.3719 -1067.6392 + 28600 2.86 0.076457363 1304.4221 241.87684 -12.576878 7.7849937 -1075.4242 -1067.6392 + 28650 2.865 0.076457362 1297.8936 243.05258 -12.60596 7.8228358 -1075.4621 -1067.6392 + 28700 2.87 0.076457347 1249.8912 242.36176 -12.630048 7.8006014 -1075.4398 -1067.6392 + 28750 2.875 0.076457391 1211.5737 239.53884 -12.648513 7.7097434 -1075.349 -1067.6392 + 28800 2.88 0.076457383 1202.6703 235.69511 -12.669768 7.58603 -1075.2253 -1067.6392 + 28850 2.885 0.07645729 1216.8735 232.20584 -12.686867 7.4737252 -1075.113 -1067.6392 + 28900 2.89 0.076457246 1241.5924 230.54911 -12.693862 7.4204019 -1075.0596 -1067.6392 + 28950 2.895 0.076457286 1240.767 231.97347 -12.701097 7.4662461 -1075.1055 -1067.6392 + 29000 2.9 0.076457358 1217.5962 236.18629 -12.716277 7.6018392 -1075.2411 -1067.6392 + 29050 2.905 0.076457432 1196.6203 241.17448 -12.73636 7.7623879 -1075.4016 -1067.6392 + 29100 2.91 0.076457522 1195.7297 244.6264 -12.752906 7.8734904 -1075.5127 -1067.6392 + 29150 2.915 0.076457557 1231.0931 245.54928 -12.765411 7.9031941 -1075.5424 -1067.6392 + 29200 2.92 0.07645753 1267.4904 244.15127 -12.781472 7.8581982 -1075.4974 -1067.6392 + 29250 2.925 0.076457521 1284.1755 240.9389 -12.800258 7.7548054 -1075.394 -1067.6392 + 29300 2.93 0.076457564 1286.0387 237.25035 -12.821281 7.6360866 -1075.2753 -1067.6392 + 29350 2.935 0.076457553 1256.2955 235.11519 -12.847909 7.5673647 -1075.2066 -1067.6392 + 29400 2.94 0.076457534 1204.4184 235.8746 -12.878902 7.591807 -1075.231 -1067.6392 + 29450 2.945 0.076457502 1156.6997 239.23804 -12.906804 7.700062 -1075.3393 -1067.6392 + 29500 2.95 0.076457485 1116.1408 243.69565 -12.924534 7.8435336 -1075.4828 -1067.6392 + 29550 2.955 0.076457504 1105.9977 247.90665 -12.938831 7.979068 -1075.6183 -1067.6392 + 29600 2.96 0.076457547 1114.6315 250.84823 -12.956708 8.0737448 -1075.713 -1067.6392 + 29650 2.965 0.07645753 1139.9431 251.55972 -12.974842 8.0966448 -1075.7359 -1067.6392 + 29700 2.97 0.076457492 1194.9224 249.83103 -12.990073 8.0410056 -1075.6802 -1067.6392 + 29750 2.975 0.076457443 1239.364 246.6967 -13.001472 7.9401246 -1075.5794 -1067.6392 + 29800 2.98 0.076457457 1252.6783 243.80542 -13.010513 7.8470666 -1075.4863 -1067.6392 + 29850 2.985 0.076457512 1240.1645 241.74022 -13.018373 7.7805965 -1075.4198 -1067.6392 + 29900 2.99 0.076457565 1223.7615 239.43409 -13.020593 7.7063721 -1075.3456 -1067.6392 + 29950 2.995 0.076457595 1204.1487 235.75951 -13.015055 7.5881027 -1075.2273 -1067.6392 + 30000 3 0.076457625 1186.3894 230.7717 -13.002308 7.4275663 -1075.0668 -1067.6392 + 30050 3.005 0.076457551 1196.5894 226.06185 -12.988551 7.275976 -1074.9152 -1067.6392 + 30100 3.01 0.076457433 1233.2652 224.05561 -12.98272 7.2114038 -1074.8506 -1067.6392 + 30150 3.015 0.076457506 1263.4065 226.5763 -12.989178 7.2925339 -1074.9318 -1067.6392 + 30200 3.02 0.076457597 1273.2272 233.82971 -13.003426 7.5259905 -1075.1652 -1067.6392 + 30250 3.025 0.076457526 1276.9473 244.40258 -13.018097 7.8662868 -1075.5055 -1067.6392 + 30300 3.03 0.076457432 1275.5446 255.93782 -13.034602 8.2375574 -1075.8768 -1067.6392 + 30350 3.035 0.076457464 1250.8783 265.87839 -13.057824 8.5575024 -1076.1967 -1067.6392 + 30400 3.04 0.076457427 1235.9551 272.00442 -13.083661 8.7546732 -1076.3939 -1067.6392 + 30450 3.045 0.076457316 1235.5042 273.37792 -13.111283 8.7988804 -1076.4381 -1067.6392 + 30500 3.05 0.07645726 1230.6233 270.64686 -13.146707 8.7109792 -1076.3502 -1067.6392 + 30550 3.055 0.076457233 1224.1115 265.0222 -13.182314 8.5299452 -1076.1692 -1067.6392 + 30600 3.06 0.076457361 1212.3027 257.68391 -13.202367 8.2937568 -1075.933 -1067.6392 + 30650 3.065 0.076457487 1190.0178 249.77024 -13.201564 8.0390489 -1075.6783 -1067.6392 + 30700 3.07 0.076457394 1161.8109 242.31657 -13.191293 7.7991468 -1075.4384 -1067.6392 + 30750 3.075 0.076457252 1158.6855 236.08427 -13.18911 7.5985553 -1075.2378 -1067.6392 + 30800 3.08 0.076457183 1168.5206 231.60347 -13.197075 7.4543374 -1075.0936 -1067.6392 + 30850 3.085 0.076457279 1158.9328 229.71585 -13.209643 7.3935831 -1075.0328 -1067.6392 + 30900 3.09 0.076457454 1136.1168 231.05928 -13.230895 7.4368221 -1075.0761 -1067.6392 + 30950 3.095 0.076457365 1140.4629 234.79871 -13.261019 7.5571786 -1075.1964 -1067.6392 + 31000 3.1 0.076457233 1151.4718 238.95885 -13.2835 7.691076 -1075.3303 -1067.6392 + 31050 3.105 0.076457249 1136.0165 241.99628 -13.285479 7.7888381 -1075.4281 -1067.6392 + 31100 3.11 0.076457312 1095.4919 243.6173 -13.274528 7.841012 -1075.4802 -1067.6392 + 31150 3.115 0.076457361 1043.3403 244.60685 -13.261288 7.8728613 -1075.5121 -1067.6392 + 31200 3.12 0.076457255 1000.1386 246.53553 -13.250369 7.9349374 -1075.5742 -1067.6392 + 31250 3.125 0.076457166 991.81643 250.55835 -13.24872 8.0644151 -1075.7036 -1067.6392 + 31300 3.13 0.076457166 1022.1079 256.4075 -13.267835 8.2526743 -1075.8919 -1067.6392 + 31350 3.135 0.076457189 1054.9092 262.76827 -13.305663 8.4574006 -1076.0966 -1067.6392 + 31400 3.14 0.07645724 1060.5815 267.85735 -13.342713 8.6211968 -1076.2604 -1067.6392 + 31450 3.145 0.076457287 1049.3579 269.97994 -13.36678 8.6895138 -1076.3287 -1067.6392 + 31500 3.15 0.076457292 1020.7582 268.2573 -13.386937 8.6340694 -1076.2733 -1067.6392 + 31550 3.155 0.076457309 996.86817 262.55532 -13.414409 8.4505467 -1076.0898 -1067.6392 + 31600 3.16 0.076457265 988.4472 253.14804 -13.44617 8.1477662 -1075.787 -1067.6392 + 31650 3.165 0.07645717 975.20678 241.3533 -13.472839 7.7681433 -1075.4074 -1067.6392 + 31700 3.17 0.076457122 978.08946 230.12225 -13.489241 7.4066632 -1075.0459 -1067.6392 + 31750 3.175 0.076457159 994.1906 223.24272 -13.4961 7.1852402 -1074.8245 -1067.6392 + 31800 3.18 0.076457198 1011.9808 223.61603 -13.502125 7.1972556 -1074.8365 -1067.6392 + 31850 3.185 0.076457197 1043.2929 231.32793 -13.514524 7.4454691 -1075.0847 -1067.6392 + 31900 3.19 0.076457211 1073.2125 243.48614 -13.529663 7.8367904 -1075.476 -1067.6392 + 31950 3.195 0.076457283 1089.512 255.96547 -13.531619 8.2384474 -1075.8777 -1067.6392 + 32000 3.2 0.076457346 1091.1766 265.64481 -13.515072 8.5499844 -1076.1892 -1067.6392 + 32050 3.205 0.076457238 1107.4466 271.60773 -13.502747 8.7419056 -1076.3811 -1067.6392 + 32100 3.21 0.076457153 1117.8805 274.08365 -13.50656 8.8215948 -1076.4608 -1067.6392 + 32150 3.215 0.076457122 1123.2092 273.86962 -13.522054 8.8147064 -1076.4539 -1067.6392 + 32200 3.22 0.076457105 1152.6197 271.95614 -13.543888 8.7531194 -1076.3924 -1067.6392 + 32250 3.225 0.076457164 1168.3769 268.86435 -13.563301 8.6536078 -1076.2928 -1067.6392 + 32300 3.23 0.076457237 1158.6589 265.10575 -13.580865 8.5326342 -1076.1719 -1067.6392 + 32350 3.235 0.076457159 1152.9881 261.29815 -13.605255 8.4100836 -1076.0493 -1067.6392 + 32400 3.24 0.07645703 1164.2634 257.27542 -13.625646 8.280609 -1075.9198 -1067.6392 + 32450 3.245 0.076457057 1173.0337 252.87376 -13.637472 8.1389381 -1075.7782 -1067.6392 + 32500 3.25 0.076457171 1170.4615 248.34575 -13.651248 7.9932007 -1075.6324 -1067.6392 + 32550 3.255 0.076457164 1172.6715 244.01198 -13.667945 7.8537149 -1075.4929 -1067.6392 + 32600 3.26 0.076457072 1178.0602 240.61161 -13.683594 7.7442715 -1075.3835 -1067.6392 + 32650 3.265 0.076457132 1164.2276 239.08635 -13.693266 7.6951799 -1075.3344 -1067.6392 + 32700 3.27 0.07645721 1135.6536 239.997 -13.697188 7.7244896 -1075.3637 -1067.6392 + 32750 3.275 0.07645717 1122.6725 242.77278 -13.697307 7.8138302 -1075.4531 -1067.6392 + 32800 3.28 0.076457087 1124.7984 246.08264 -13.698507 7.9203608 -1075.5596 -1067.6392 + 32850 3.285 0.076457071 1132.9874 248.8912 -13.71026 8.0107565 -1075.65 -1067.6392 + 32900 3.29 0.076457146 1144.7957 250.92712 -13.736297 8.0762841 -1075.7155 -1067.6392 + 32950 3.295 0.07645721 1152.7642 252.46291 -13.764351 8.1257148 -1075.7649 -1067.6392 + 33000 3.3 0.076457168 1146.2857 254.10358 -13.779597 8.1785209 -1075.8178 -1067.6392 + 33050 3.305 0.076457077 1145.5084 256.8303 -13.789612 8.2662826 -1075.9055 -1067.6392 + 33100 3.31 0.076457096 1154.4041 261.13865 -13.808552 8.40495 -1076.0442 -1067.6392 + 33150 3.315 0.07645715 1125.5641 266.3904 -13.833889 8.5739819 -1076.2132 -1067.6392 + 33200 3.32 0.07645715 1093.2946 271.0557 -13.855364 8.724138 -1076.3634 -1067.6392 + 33250 3.325 0.076457145 1095.5775 273.48025 -13.872191 8.8021741 -1076.4414 -1067.6392 + 33300 3.33 0.076457162 1100.9708 272.81497 -13.884719 8.7807615 -1076.42 -1067.6392 + 33350 3.335 0.07645717 1097.446 269.39464 -13.884534 8.6706755 -1076.3099 -1067.6392 + 33400 3.34 0.076457107 1081.3925 264.90836 -13.877973 8.5262812 -1076.1655 -1067.6392 + 33450 3.345 0.076457118 1078.1638 261.34438 -13.882973 8.4115716 -1076.0508 -1067.6392 + 33500 3.35 0.076457263 1098.4302 259.43885 -13.901235 8.3502409 -1075.9895 -1067.6392 + 33550 3.355 0.0764573 1113.653 258.79858 -13.925503 8.3296331 -1075.9689 -1067.6392 + 33600 3.36 0.076457139 1102.1918 258.64576 -13.952352 8.3247147 -1075.9639 -1067.6392 + 33650 3.365 0.076457044 1079.3943 258.32267 -13.984128 8.3143157 -1075.9535 -1067.6392 + 33700 3.37 0.076457092 1080.4816 257.3355 -14.022263 8.2825429 -1075.9218 -1067.6392 + 33750 3.375 0.076457159 1091.9482 255.16753 -14.058006 8.2127649 -1075.852 -1067.6392 + 33800 3.38 0.076457132 1093.3842 251.7622 -14.081909 8.1031619 -1075.7424 -1067.6392 + 33850 3.385 0.076457194 1089.6902 248.0965 -14.095869 7.9851785 -1075.6244 -1067.6392 + 33900 3.39 0.07645727 1096.6474 246.01593 -14.105391 7.9182138 -1075.5574 -1067.6392 + 33950 3.395 0.076457209 1126.664 247.11823 -14.104952 7.9536921 -1075.5929 -1067.6392 + 34000 3.4 0.076457164 1147.9196 251.93896 -14.093155 8.1088509 -1075.7481 -1067.6392 + 34050 3.405 0.076457179 1139.0305 259.69551 -14.085668 8.3585014 -1075.9977 -1067.6392 + 34100 3.41 0.076457311 1111.5824 268.28371 -14.096523 8.6349193 -1076.2742 -1067.6392 + 34150 3.415 0.076457318 1093.8889 274.76774 -14.115851 8.8436128 -1076.4828 -1067.6392 + 34200 3.42 0.076457165 1080.138 277.06119 -14.126901 8.9174293 -1076.5567 -1067.6392 + 34250 3.425 0.076457126 1068.8702 275.51584 -14.137497 8.867691 -1076.5069 -1067.6392 + 34300 3.43 0.076457173 1079.0654 272.17988 -14.166544 8.7603208 -1076.3996 -1067.6392 + 34350 3.435 0.076457237 1097.2929 268.53315 -14.204534 8.6429479 -1076.2822 -1067.6392 + 34400 3.44 0.076457306 1090.4064 265.24166 -14.230854 8.5370086 -1076.1762 -1067.6392 + 34450 3.445 0.076457334 1094.1532 263.10158 -14.24558 8.4681285 -1076.1074 -1067.6392 + 34500 3.45 0.076457326 1091.6462 262.74486 -14.260327 8.4566473 -1076.0959 -1067.6392 + 34550 3.455 0.076457285 1048.9417 263.68384 -14.279645 8.486869 -1076.1261 -1067.6392 + 34600 3.46 0.076457322 1035.8659 264.38837 -14.298673 8.509545 -1076.1488 -1067.6392 + 34650 3.465 0.076457348 1072.1468 263.89728 -14.317443 8.4937389 -1076.133 -1067.6392 + 34700 3.47 0.076457257 1099.9068 262.7456 -14.336515 8.4566712 -1076.0959 -1067.6392 + 34750 3.475 0.07645724 1086.8308 262.31079 -14.346872 8.4426763 -1076.0819 -1067.6392 + 34800 3.48 0.076457278 1063.2908 263.8317 -14.348034 8.491628 -1076.1309 -1067.6392 + 34850 3.485 0.076457253 1055.3547 267.54832 -14.355638 8.6112503 -1076.2505 -1067.6392 + 34900 3.49 0.076457295 1035.2728 272.01532 -14.373099 8.7550243 -1076.3943 -1067.6392 + 34950 3.495 0.076457375 1040.634 275.06802 -14.390413 8.8532777 -1076.4925 -1067.6392 + 35000 3.5 0.076457344 1063.0087 275.5042 -14.407745 8.8673167 -1076.5065 -1067.6392 + 35050 3.505 0.076457312 1058.6708 273.65876 -14.433515 8.8079196 -1076.4472 -1067.6392 + 35100 3.51 0.076457257 1060.8523 271.14098 -14.474773 8.7268829 -1076.3661 -1067.6392 + 35150 3.515 0.076457289 1067.0827 269.23085 -14.526301 8.6654039 -1076.3046 -1067.6392 + 35200 3.52 0.07645742 1062.2236 268.14335 -14.573177 8.6304019 -1076.2696 -1067.6392 + 35250 3.525 0.076457337 1070.5812 267.81607 -14.60424 8.6198681 -1076.2591 -1067.6392 + 35300 3.53 0.076457217 1072.5143 267.83883 -14.617097 8.6206007 -1076.2598 -1067.6392 + 35350 3.535 0.076457254 1028.3355 267.52283 -14.622569 8.6104298 -1076.2497 -1067.6392 + 35400 3.54 0.076457305 1002.1085 266.59937 -14.633762 8.5807077 -1076.2199 -1067.6392 + 35450 3.545 0.076457409 1029.413 265.25698 -14.649797 8.5375018 -1076.1767 -1067.6392 + 35500 3.55 0.076457478 1063.6674 263.65567 -14.671113 8.4859625 -1076.1252 -1067.6392 + 35550 3.555 0.076457385 1064.2389 261.55993 -14.712306 8.4185094 -1076.0577 -1067.6392 + 35600 3.56 0.076457248 1043.973 258.13746 -14.765767 8.3083544 -1075.9476 -1067.6392 + 35650 3.565 0.076457197 1018.5052 253.81996 -14.810087 8.1693925 -1075.8086 -1067.6392 + 35700 3.57 0.076457358 1000.6206 251.22894 -14.843694 8.0859983 -1075.7252 -1067.6392 + 35750 3.575 0.076457447 1017.4159 252.90054 -14.876657 8.1398 -1075.779 -1067.6392 + 35800 3.58 0.076457294 1047.8317 258.96411 -14.909538 8.3349608 -1075.9742 -1067.6392 + 35850 3.585 0.076457191 1082.9886 267.72357 -14.939208 8.6168909 -1076.2561 -1067.6392 + 35900 3.59 0.076457278 1100.5702 277.23543 -14.962644 8.9230375 -1076.5623 -1067.6392 + 35950 3.595 0.076457309 1086.933 285.96591 -14.977753 9.2040346 -1076.8433 -1067.6392 + 36000 3.6 0.076457255 1074.2647 292.9362 -14.987968 9.428379 -1077.0676 -1067.6392 + 36050 3.605 0.07645718 1055.2238 298.01121 -14.998446 9.5917221 -1077.231 -1067.6392 + 36100 3.61 0.076457233 1047.2166 302.00821 -15.020568 9.7203687 -1077.3596 -1067.6392 + 36150 3.615 0.076457349 1052.6407 305.28298 -15.059957 9.8257696 -1077.465 -1067.6392 + 36200 3.62 0.076457311 1060.7211 306.93482 -15.10603 9.8789354 -1077.5182 -1067.6392 + 36250 3.625 0.076457193 1068.8892 305.84803 -15.141949 9.8439561 -1077.4832 -1067.6392 + 36300 3.63 0.076457194 1061.6868 301.87989 -15.16629 9.7162384 -1077.3555 -1067.6392 + 36350 3.635 0.076457258 1057.9527 295.4431 -15.185933 9.5090656 -1077.1483 -1067.6392 + 36400 3.64 0.076457264 1064.3799 287.24818 -15.203507 9.2453055 -1076.8845 -1067.6392 + 36450 3.645 0.076457194 1063.7064 278.74515 -15.224498 8.9716288 -1076.6109 -1067.6392 + 36500 3.65 0.076457136 1061.3588 271.32268 -15.2455 8.732731 -1076.372 -1067.6392 + 36550 3.655 0.076457182 1067.1517 265.76761 -15.260325 8.5539369 -1076.1932 -1067.6392 + 36600 3.66 0.07645727 1089.9772 261.85411 -15.267562 8.4279778 -1076.0672 -1067.6392 + 36650 3.665 0.076457221 1104.789 258.4444 -15.265264 8.3182336 -1075.9575 -1067.6392 + 36700 3.67 0.07645716 1092.8435 255.00082 -15.25529 8.2073992 -1075.8466 -1067.6392 + 36750 3.675 0.076457168 1061.6595 252.8329 -15.247428 8.1376232 -1075.7769 -1067.6392 + 36800 3.68 0.076457215 1035.3281 254.03876 -15.243457 8.1764346 -1075.8157 -1067.6392 + 36850 3.685 0.076457264 1012.6747 259.66792 -15.232713 8.3576136 -1075.9968 -1067.6392 + 36900 3.69 0.07645721 1000.1165 269.04132 -15.219475 8.6593036 -1076.2985 -1067.6392 + 36950 3.695 0.076457158 1004.3738 279.5229 -15.222136 8.9966614 -1076.6359 -1067.6392 + 37000 3.7 0.076457194 1015.0789 287.52665 -15.242557 9.2542684 -1076.8935 -1067.6392 + 37050 3.705 0.076457209 1006.6001 291.33936 -15.269368 9.3769835 -1077.0162 -1067.6392 + 37100 3.71 0.076457215 1009.5254 292.25598 -15.292099 9.4064856 -1077.0457 -1067.6392 + 37150 3.715 0.076457221 1035.7983 292.7155 -15.306557 9.4212757 -1077.0605 -1067.6392 + 37200 3.72 0.076457114 1030.9374 293.77202 -15.308274 9.4552805 -1077.0945 -1067.6392 + 37250 3.725 0.076457028 982.50822 295.2423 -15.305932 9.5026027 -1077.1418 -1067.6392 + 37300 3.73 0.076457035 948.55083 296.17303 -15.311999 9.5325589 -1077.1718 -1067.6392 + 37350 3.735 0.076457098 937.47027 295.49824 -15.335364 9.5108401 -1077.1501 -1067.6392 + 37400 3.74 0.076457181 936.77662 292.98591 -15.385092 9.429979 -1077.0692 -1067.6392 + 37450 3.745 0.076457164 937.43311 288.88554 -15.44922 9.2980054 -1076.9372 -1067.6392 + 37500 3.75 0.076457095 942.75677 284.1287 -15.497475 9.1449027 -1076.7841 -1067.6392 + 37550 3.755 0.076457051 973.14442 280.71281 -15.516447 9.0349597 -1076.6742 -1067.6392 + 37600 3.76 0.076457064 1023.9535 280.23051 -15.517936 9.0194364 -1076.6587 -1067.6392 + 37650 3.765 0.076457028 1061.1038 282.66393 -15.519455 9.0977579 -1076.737 -1067.6392 + 37700 3.77 0.076457072 1070.7829 287.04664 -15.525411 9.2388189 -1076.8781 -1067.6392 + 37750 3.775 0.076457124 1066.3938 291.68394 -15.520525 9.388074 -1077.0273 -1067.6392 + 37800 3.78 0.076457071 1048.9796 294.14399 -15.497921 9.4672528 -1077.1065 -1067.6392 + 37850 3.785 0.076457038 1038.2533 292.47043 -15.480179 9.4133879 -1077.0526 -1067.6392 + 37900 3.79 0.076457018 1045.648 286.41439 -15.491193 9.2184695 -1076.8577 -1067.6392 + 37950 3.795 0.076457122 1065.9631 277.89366 -15.523881 8.9442232 -1076.5835 -1067.6392 + 38000 3.8 0.07645714 1090.5261 270.72264 -15.554861 8.7134183 -1076.3526 -1067.6392 + 38050 3.805 0.076457032 1113.2307 268.45698 -15.575531 8.6404964 -1076.2797 -1067.6392 + 38100 3.81 0.076457024 1116.2952 271.45106 -15.582548 8.7368631 -1076.3761 -1067.6392 + 38150 3.815 0.07645699 1093.8664 277.51108 -15.573712 8.9319094 -1076.5711 -1067.6392 + 38200 3.82 0.076456911 1051.845 284.62475 -15.56289 9.1608685 -1076.8001 -1067.6392 + 38250 3.825 0.076456883 1005.6732 291.31425 -15.566443 9.3761751 -1077.0154 -1067.6392 + 38300 3.83 0.076456909 998.58464 295.80008 -15.577737 9.5205551 -1077.1598 -1067.6392 + 38350 3.835 0.076456917 1023.8255 296.91935 -15.58617 9.5565797 -1077.1958 -1067.6392 + 38400 3.84 0.076457007 1038.0022 294.9054 -15.596528 9.4917592 -1077.131 -1067.6392 + 38450 3.845 0.076457031 1037.6121 290.96422 -15.616202 9.3649092 -1077.0041 -1067.6392 + 38500 3.85 0.076456984 1040.5904 286.88024 -15.646786 9.2334631 -1076.8727 -1067.6392 + 38550 3.855 0.076456918 1043.2321 284.56473 -15.689543 9.1589367 -1076.7982 -1067.6392 + 38600 3.86 0.076456877 1038.0862 284.74376 -15.739663 9.1646989 -1076.8039 -1067.6392 + 38650 3.865 0.076456988 1038.4376 285.95011 -15.776018 9.2035262 -1076.8428 -1067.6392 + 38700 3.87 0.076457066 1046.7517 286.45113 -15.793545 9.2196518 -1076.8589 -1067.6392 + 38750 3.875 0.076457085 1069.8363 286.1605 -15.809275 9.2102978 -1076.8495 -1067.6392 + 38800 3.88 0.076457103 1099.7649 286.35508 -15.838882 9.2165605 -1076.8558 -1067.6392 + 38850 3.885 0.076457029 1113.9425 288.09011 -15.885059 9.2724039 -1076.9116 -1067.6392 + 38900 3.89 0.076457017 1105.7043 290.97132 -15.928294 9.3651376 -1077.0044 -1067.6392 + 38950 3.895 0.076456995 1093.6515 294.07778 -15.945379 9.4651215 -1077.1044 -1067.6392 + 39000 3.9 0.07645694 1103.4477 297.5125 -15.943567 9.5756706 -1077.2149 -1067.6392 + 39050 3.905 0.076457006 1109.1277 301.82187 -15.951259 9.7143712 -1077.3536 -1067.6392 + 39100 3.91 0.076456969 1114.3237 306.51524 -15.985628 9.865431 -1077.5047 -1067.6392 + 39150 3.915 0.076456912 1114.4623 309.57518 -16.034747 9.9639174 -1077.6032 -1067.6392 + 39200 3.92 0.07645697 1087.5299 308.28093 -16.061177 9.9222609 -1077.5615 -1067.6392 + 39250 3.925 0.076457004 1085.9492 302.29555 -16.058242 9.7296168 -1077.3688 -1067.6392 + 39300 3.93 0.076456952 1107.8421 294.53188 -16.053056 9.4797371 -1077.119 -1067.6392 + 39350 3.935 0.076456973 1124.1513 288.15688 -16.067119 9.2745528 -1076.9138 -1067.6392 + 39400 3.94 0.076457054 1137.2475 283.95115 -16.101525 9.1391882 -1076.7784 -1067.6392 + 39450 3.945 0.07645698 1135.1662 281.54817 -16.141252 9.0618462 -1076.7011 -1067.6392 + 39500 3.95 0.076456838 1099.0721 281.13694 -16.174509 9.0486105 -1076.6878 -1067.6392 + 39550 3.955 0.076456882 1049.5257 282.67803 -16.205325 9.0982117 -1076.7374 -1067.6392 + 39600 3.96 0.076457011 1027.3757 284.94192 -16.234406 9.1710768 -1076.8103 -1067.6392 + 39650 3.965 0.076456971 1017.794 286.75472 -16.252188 9.2294233 -1076.8687 -1067.6392 + 39700 3.97 0.076456888 1007.7805 288.56666 -16.25612 9.2877419 -1076.927 -1067.6392 + 39750 3.975 0.076456865 1012.8541 292.07722 -16.261884 9.4007319 -1077.04 -1067.6392 + 39800 3.98 0.076456816 1043.1577 297.78139 -16.277698 9.584325 -1077.2236 -1067.6392 + 39850 3.985 0.076456836 1077.8248 304.26971 -16.297835 9.7931567 -1077.4324 -1067.6392 + 39900 3.99 0.07645687 1094.0855 309.71669 -16.325371 9.9684719 -1077.6077 -1067.6392 + 39950 3.995 0.076456883 1064.1015 312.41437 -16.358615 10.055299 -1077.6945 -1067.6392 + 40000 4 0.076456877 1022.9431 310.99163 -16.375546 10.009507 -1077.6487 -1067.6392 + 40050 4.005 0.076456756 1013.7056 306.64402 -16.373477 9.8695757 -1077.5088 -1067.6392 + 40100 4.01 0.076456759 1007.6913 303.35311 -16.376022 9.7636554 -1077.4029 -1067.6392 + 40150 4.015 0.076456864 1004.252 303.81576 -16.385329 9.7785462 -1077.4178 -1067.6392 + 40200 4.02 0.076456912 1013.1412 307.22942 -16.384285 9.8884172 -1077.5276 -1067.6392 + 40250 4.025 0.076456867 1030.3871 310.68562 -16.369477 9.9996578 -1077.6389 -1067.6392 + 40300 4.03 0.076456789 1034.7373 311.09098 -16.352628 10.012705 -1077.6519 -1067.6392 + 40350 4.035 0.076456729 1033.1387 307.52717 -16.345575 9.8980007 -1077.5372 -1067.6392 + 40400 4.04 0.07645669 1062.9045 301.64635 -16.348471 9.708722 -1077.348 -1067.6392 + 40450 4.045 0.076456729 1073.8352 295.54356 -16.354824 9.5122988 -1077.1515 -1067.6392 + 40500 4.05 0.076456875 1045.0985 290.52511 -16.36464 9.3507761 -1076.99 -1067.6392 + 40550 4.055 0.076456839 1027.9258 287.44019 -16.379541 9.2514857 -1076.8907 -1067.6392 + 40600 4.06 0.076456646 1031.5216 286.57721 -16.388491 9.22371 -1076.8629 -1067.6392 + 40650 4.065 0.076456606 1055.0251 287.81611 -16.386366 9.2635847 -1076.9028 -1067.6392 + 40700 4.07 0.076456834 1081.6077 290.98909 -16.384202 9.3657097 -1077.0049 -1067.6392 + 40750 4.075 0.076457031 1095.8624 295.35171 -16.381535 9.5061241 -1077.1454 -1067.6392 + 40800 4.08 0.076456927 1091.1884 299.74612 -16.369379 9.6475614 -1077.2868 -1067.6392 + 40850 4.085 0.076456677 1072.8108 303.12714 -16.353468 9.7563823 -1077.3956 -1067.6392 + 40900 4.09 0.076456612 1071.4265 304.47082 -16.345218 9.7996295 -1077.4389 -1067.6392 + 40950 4.095 0.076456759 1087.5691 303.62065 -16.343756 9.7722663 -1077.4115 -1067.6392 + 41000 4.1 0.07645689 1093.1572 302.41466 -16.342931 9.7334506 -1077.3727 -1067.6392 + 41050 4.105 0.076456787 1077.0283 303.03079 -16.350207 9.7532811 -1077.3925 -1067.6392 + 41100 4.11 0.0764566 1063.8174 304.59541 -16.3659 9.8036396 -1077.4429 -1067.6392 + 41150 4.115 0.076456666 1067.2044 305.05378 -16.383874 9.8183927 -1077.4576 -1067.6392 + 41200 4.12 0.076456794 1067.5418 304.12177 -16.408325 9.7883952 -1077.4276 -1067.6392 + 41250 4.125 0.076456816 1047.1076 301.87307 -16.437615 9.716019 -1077.3553 -1067.6392 + 41300 4.13 0.076456766 1000.8676 298.01778 -16.464716 9.5919337 -1077.2312 -1067.6392 + 41350 4.135 0.076456687 958.82868 293.49143 -16.485682 9.4462495 -1077.0855 -1067.6392 + 41400 4.14 0.076456739 951.84883 290.80384 -16.499012 9.3597472 -1076.999 -1067.6392 + 41450 4.145 0.076456812 963.65591 292.08601 -16.507392 9.4010149 -1077.0402 -1067.6392 + 41500 4.15 0.076456843 975.72148 297.16323 -16.520849 9.5644292 -1077.2037 -1067.6392 + 41550 4.155 0.076456845 984.53332 303.16542 -16.53794 9.7576142 -1077.3968 -1067.6392 + 41600 4.16 0.076456751 985.80319 307.28815 -16.557303 9.8903077 -1077.5295 -1067.6392 + 41650 4.165 0.076456683 1002.2286 308.88612 -16.587168 9.9417395 -1077.581 -1067.6392 + 41700 4.17 0.076456643 1030.6323 308.39988 -16.625508 9.9260895 -1077.5653 -1067.6392 + 41750 4.175 0.07645661 1034.2586 306.29955 -16.665355 9.8584887 -1077.4977 -1067.6392 + 41800 4.18 0.076456559 1020.0175 303.06426 -16.703335 9.7543583 -1077.3936 -1067.6392 + 41850 4.185 0.076456676 991.59829 299.14498 -16.725328 9.6282135 -1077.2674 -1067.6392 + 41900 4.19 0.076456761 967.85853 296.19757 -16.730689 9.5333487 -1077.1726 -1067.6392 + 41950 4.195 0.076456701 975.82892 296.71617 -16.740926 9.5500402 -1077.1893 -1067.6392 + 42000 4.2 0.076456713 1002.2491 300.92024 -16.770609 9.6853516 -1077.3246 -1067.6392 + 42050 4.205 0.076456664 1009.6687 305.97966 -16.813995 9.8481928 -1077.4874 -1067.6392 + 42100 4.21 0.076456626 1003.7314 309.08496 -16.851376 9.9481394 -1077.5874 -1067.6392 + 42150 4.215 0.076456675 1009.5258 310.0374 -16.864204 9.9787942 -1077.618 -1067.6392 + 42200 4.22 0.076456733 1016.8827 310.8272 -16.85494 10.004215 -1077.6434 -1067.6392 + 42250 4.225 0.076456828 1023.91 312.80966 -16.842511 10.068022 -1077.7073 -1067.6392 + 42300 4.23 0.076456807 1019.5709 315.15173 -16.836523 10.143403 -1077.7826 -1067.6392 + 42350 4.235 0.076456685 1017.6755 316.23931 -16.830978 10.178408 -1077.8176 -1067.6392 + 42400 4.24 0.076456572 1035.9763 314.95382 -16.817532 10.137033 -1077.7763 -1067.6392 + 42450 4.245 0.076456544 1057.572 310.93678 -16.799682 10.007741 -1077.647 -1067.6392 + 42500 4.25 0.076456618 1077.1806 305.03796 -16.792574 9.8178834 -1077.4571 -1067.6392 + 42550 4.255 0.076456744 1090.5444 299.3483 -16.809848 9.6347572 -1077.274 -1067.6392 + 42600 4.26 0.076456726 1096.922 295.41747 -16.837401 9.5082406 -1077.1475 -1067.6392 + 42650 4.265 0.076456617 1103.2531 293.46673 -16.859813 9.4454545 -1077.0847 -1067.6392 + 42700 4.27 0.076456587 1104.4238 293.26317 -16.892288 9.4389029 -1077.0781 -1067.6392 + 42750 4.275 0.076456665 1083.3823 294.65311 -16.933936 9.4836391 -1077.1229 -1067.6392 + 42800 4.28 0.076456664 1042.3438 298.70068 -16.959665 9.6139133 -1077.2531 -1067.6392 + 42850 4.285 0.076456687 1013.4416 306.95616 -16.966168 9.8796223 -1077.5189 -1067.6392 + 42900 4.29 0.076456725 1011.1467 318.14544 -16.97008 10.239758 -1077.879 -1067.6392 + 42950 4.295 0.076456665 1017.4449 328.03985 -16.982627 10.558217 -1078.1975 -1067.6392 + 43000 4.3 0.076456617 1019.3575 333.03871 -17.008768 10.719109 -1078.3583 -1067.6392 + 43050 4.305 0.076456693 999.2679 332.30906 -17.055549 10.695625 -1078.3349 -1067.6392 + 43100 4.31 0.076456762 967.7236 326.28709 -17.109853 10.501803 -1078.141 -1067.6392 + 43150 4.315 0.076456687 976.16726 316.29296 -17.144504 10.180134 -1077.8194 -1067.6392 + 43200 4.32 0.076456692 1009.9146 306.30886 -17.155114 9.8587883 -1077.498 -1067.6392 + 43250 4.325 0.076456822 1011.5832 301.46146 -17.160687 9.7027711 -1077.342 -1067.6392 + 43300 4.33 0.076456891 993.25245 303.09136 -17.173125 9.7552307 -1077.3945 -1067.6392 + 43350 4.335 0.076456691 978.1423 307.90834 -17.186565 9.910269 -1077.5495 -1067.6392 + 43400 4.34 0.07645663 966.7299 311.62095 -17.191657 10.029762 -1077.669 -1067.6392 + 43450 4.345 0.076456883 971.37208 311.68351 -17.189726 10.031776 -1077.671 -1067.6392 + 43500 4.35 0.076456994 978.85437 307.94316 -17.193481 9.9113896 -1077.5506 -1067.6392 + 43550 4.355 0.076456767 996.27549 302.13712 -17.211228 9.7245177 -1077.3637 -1067.6392 + 43600 4.36 0.076456685 1016.7792 297.0799 -17.235609 9.5617472 -1077.201 -1067.6392 + 43650 4.365 0.076456862 1020.5319 294.98379 -17.245695 9.4942822 -1077.1335 -1067.6392 + 43700 4.37 0.076456832 1016.3483 296.10415 -17.238216 9.530342 -1077.1696 -1067.6392 + 43750 4.375 0.076456643 1012.7306 299.25575 -17.241809 9.6317786 -1077.271 -1067.6392 + 43800 4.38 0.076456789 1005.3285 303.54214 -17.262691 9.7697394 -1077.409 -1067.6392 + 43850 4.385 0.076456982 1003.3326 310.06269 -17.281251 9.9796085 -1077.6188 -1067.6392 + 43900 4.39 0.076456965 987.54044 320.52249 -17.299417 10.316265 -1077.9555 -1067.6392 + 43950 4.395 0.076456761 963.2584 333.20523 -17.330466 10.724469 -1078.3637 -1067.6392 + 44000 4.4 0.076456706 963.73639 342.88698 -17.367857 11.036084 -1078.6753 -1067.6392 + 44050 4.405 0.076456821 986.80537 345.16932 -17.395458 11.109542 -1078.7488 -1067.6392 + 44100 4.41 0.076456831 1009.8445 339.67355 -17.41311 10.932657 -1078.5719 -1067.6392 + 44150 4.415 0.076456785 1014.6601 330.05625 -17.436389 10.623116 -1078.2623 -1067.6392 + 44200 4.42 0.076456797 984.52199 321.8216 -17.48274 10.358078 -1077.9973 -1067.6392 + 44250 4.425 0.076456753 957.80787 317.33913 -17.54731 10.213806 -1077.853 -1067.6392 + 44300 4.43 0.076456643 940.00066 314.53772 -17.596853 10.123641 -1077.7629 -1067.6392 + 44350 4.435 0.076456628 918.4875 312.37225 -17.612235 10.053943 -1077.6932 -1067.6392 + 44400 4.44 0.07645672 913.57846 310.8786 -17.595301 10.005869 -1077.6451 -1067.6392 + 44450 4.445 0.076456761 919.4865 309.82858 -17.561225 9.9720734 -1077.6113 -1067.6392 + 44500 4.45 0.07645674 926.5393 309.78037 -17.534259 9.9705218 -1077.6097 -1067.6392 + 44550 4.455 0.076456708 929.10063 311.77335 -17.538056 10.034667 -1077.6739 -1067.6392 + 44600 4.46 0.076456694 933.10594 315.21765 -17.566473 10.145525 -1077.7848 -1067.6392 + 44650 4.465 0.076456702 926.71966 318.06782 -17.591174 10.23726 -1077.8765 -1067.6392 + 44700 4.47 0.076456707 911.59951 319.12218 -17.602472 10.271195 -1077.9104 -1067.6392 + 44750 4.475 0.076456688 910.70606 318.9204 -17.609049 10.264701 -1077.9039 -1067.6392 + 44800 4.48 0.0764567 905.05917 318.54255 -17.616129 10.252539 -1077.8918 -1067.6392 + 44850 4.485 0.076456621 894.49408 318.42782 -17.623448 10.248847 -1077.8881 -1067.6392 + 44900 4.49 0.076456517 906.7452 318.55777 -17.630547 10.253029 -1077.8923 -1067.6392 + 44950 4.495 0.076456564 912.1438 318.94548 -17.639597 10.265508 -1077.9047 -1067.6392 + 45000 4.5 0.076456621 904.16689 319.6676 -17.650569 10.28875 -1077.928 -1067.6392 + 45050 4.505 0.076456591 906.29138 321.41748 -17.664978 10.345071 -1077.9843 -1067.6392 + 45100 4.51 0.076456544 905.96789 325.06187 -17.678666 10.462369 -1078.1016 -1067.6392 + 45150 4.515 0.076456576 898.50939 330.26103 -17.687185 10.629708 -1078.2689 -1067.6392 + 45200 4.52 0.076456663 905.35412 334.94433 -17.701241 10.780443 -1078.4197 -1067.6392 + 45250 4.525 0.07645673 930.80225 336.07069 -17.72859 10.816696 -1078.4559 -1067.6392 + 45300 4.53 0.076456595 959.3922 331.6008 -17.765016 10.672829 -1078.3121 -1067.6392 + 45350 4.535 0.076456568 984.36318 321.62814 -17.802524 10.351851 -1077.9911 -1067.6392 + 45400 4.54 0.07645668 990.20053 308.8639 -17.836056 9.9410245 -1077.5803 -1067.6392 + 45450 4.545 0.076456648 947.25396 298.78614 -17.865782 9.6166638 -1077.2559 -1067.6392 + 45500 4.55 0.076456577 910.56022 297.55292 -17.905424 9.5769716 -1077.2162 -1067.6392 + 45550 4.555 0.076456563 888.63811 306.74089 -17.960609 9.8726936 -1077.5119 -1067.6392 + 45600 4.56 0.076456599 859.98987 321.07118 -18.005145 10.333925 -1077.9732 -1067.6392 + 45650 4.565 0.076456612 856.19145 333.40125 -18.019594 10.730778 -1078.37 -1067.6392 + 45700 4.57 0.076456557 878.62104 340.06144 -18.020894 10.945141 -1078.5844 -1067.6392 + 45750 4.575 0.076456566 897.45139 340.97037 -18.029395 10.974396 -1078.6136 -1067.6392 + 45800 4.58 0.076456592 900.06632 337.73275 -18.042178 10.870191 -1078.5094 -1067.6392 + 45850 4.585 0.076456653 905.65224 333.13083 -18.060834 10.722074 -1078.3613 -1067.6392 + 45900 4.59 0.076456731 911.50958 329.86483 -18.10231 10.616955 -1078.2562 -1067.6392 + 45950 4.595 0.076456674 934.98117 327.78934 -18.158233 10.550154 -1078.1894 -1067.6392 + 46000 4.6 0.076456573 960.91441 324.26975 -18.195778 10.436874 -1078.0761 -1067.6392 + 46050 4.605 0.076456596 962.59058 317.8452 -18.203481 10.230095 -1077.8693 -1067.6392 + 46100 4.61 0.076456671 960.19967 310.62901 -18.213042 9.9978359 -1077.6371 -1067.6392 + 46150 4.615 0.076456686 958.71855 305.95972 -18.235837 9.8475511 -1077.4868 -1067.6392 + 46200 4.62 0.076456612 966.32277 305.9278 -18.25351 9.8465235 -1077.4858 -1067.6392 + 46250 4.625 0.076456484 976.33095 310.79103 -18.261143 10.00305 -1077.6423 -1067.6392 + 46300 4.63 0.076456455 971.1525 319.21516 -18.262509 10.274188 -1077.9134 -1067.6392 + 46350 4.635 0.076456555 942.98388 329.128 -18.258965 10.59324 -1078.2325 -1067.6392 + 46400 4.64 0.07645659 931.95574 338.94782 -18.258301 10.909299 -1078.5485 -1067.6392 + 46450 4.645 0.076456634 952.04764 347.69672 -18.270432 11.190889 -1078.8301 -1067.6392 + 46500 4.65 0.076456695 954.27972 354.28335 -18.291901 11.402884 -1079.0421 -1067.6392 + 46550 4.655 0.076456718 932.47699 357.80024 -18.314064 11.516078 -1079.1553 -1067.6392 + 46600 4.66 0.076456571 917.15783 358.255 -18.33944 11.530715 -1079.1699 -1067.6392 + 46650 4.665 0.076456487 914.53778 356.10608 -18.373204 11.46155 -1079.1008 -1067.6392 + 46700 4.67 0.07645664 926.29271 351.32545 -18.410415 11.307682 -1078.9469 -1067.6392 + 46750 4.675 0.076456722 955.90982 343.62423 -18.443075 11.059813 -1078.699 -1067.6392 + 46800 4.68 0.076456662 968.52074 333.76849 -18.472665 10.742598 -1078.3818 -1067.6392 + 46850 4.685 0.076456611 960.55547 323.74847 -18.502955 10.420096 -1078.0593 -1067.6392 + 46900 4.69 0.07645658 969.48482 315.29249 -18.530555 10.147933 -1077.7872 -1067.6392 + 46950 4.695 0.076456538 970.41435 309.50703 -18.552649 9.9617239 -1077.601 -1067.6392 + 47000 4.7 0.076456607 973.5826 307.27705 -18.562429 9.8899503 -1077.5292 -1067.6392 + 47050 4.705 0.076456741 971.31274 309.44374 -18.561975 9.9596868 -1077.5989 -1067.6392 + 47100 4.71 0.076456567 974.56171 315.87966 -18.571858 10.166832 -1077.8061 -1067.6392 + 47150 4.715 0.076456487 989.886 324.3948 -18.59552 10.440899 -1078.0801 -1067.6392 + 47200 4.72 0.076456752 991.34022 333.02825 -18.624859 10.718773 -1078.358 -1067.6392 + 47250 4.725 0.076456811 982.33055 341.27988 -18.652892 10.984358 -1078.6236 -1067.6392 + 47300 4.73 0.076456654 969.07699 348.54206 -18.671538 11.218097 -1078.8573 -1067.6392 + 47350 4.735 0.076456603 950.49208 353.80509 -18.681778 11.387491 -1079.0267 -1067.6392 + 47400 4.74 0.076456655 932.53448 356.59027 -18.691148 11.477134 -1079.1164 -1067.6392 + 47450 4.745 0.07645674 914.98082 356.88075 -18.707177 11.486484 -1079.1257 -1067.6392 + 47500 4.75 0.076456846 910.29391 354.25323 -18.733572 11.401915 -1079.0411 -1067.6392 + 47550 4.755 0.076456842 911.79249 348.56319 -18.768858 11.218777 -1078.858 -1067.6392 + 47600 4.76 0.076456764 896.25715 341.13087 -18.817172 10.979562 -1078.6188 -1067.6392 + 47650 4.765 0.076456752 893.56376 333.65355 -18.869281 10.738898 -1078.3781 -1067.6392 + 47700 4.77 0.076456851 923.22366 328.05385 -18.908457 10.558668 -1078.1979 -1067.6392 + 47750 4.775 0.076456872 942.84866 326.28411 -18.929889 10.501707 -1078.1409 -1067.6392 + 47800 4.78 0.076456844 930.32583 328.44034 -18.932985 10.571107 -1078.2103 -1067.6392 + 47850 4.785 0.076456902 912.36756 332.89004 -18.922464 10.714324 -1078.3536 -1067.6392 + 47900 4.79 0.076456964 916.62133 338.11673 -18.919206 10.882549 -1078.5218 -1067.6392 + 47950 4.795 0.076457014 930.75246 342.30195 -18.922007 11.017254 -1078.6565 -1067.6392 + 48000 4.8 0.076457014 936.01421 343.78811 -18.908628 11.065087 -1078.7043 -1067.6392 + 48050 4.805 0.076456953 944.54584 342.44511 -18.878537 11.021862 -1078.6611 -1067.6392 + 48100 4.81 0.076456972 941.98405 339.08691 -18.851545 10.913775 -1078.553 -1067.6392 + 48150 4.815 0.076456898 920.11331 334.61456 -18.839033 10.769829 -1078.4091 -1067.6392 + 48200 4.82 0.076456871 907.83719 330.10701 -18.832157 10.62475 -1078.264 -1067.6392 + 48250 4.825 0.076456918 912.20647 327.58291 -18.826744 10.54351 -1078.1827 -1067.6392 + 48300 4.83 0.07645699 932.39917 329.24117 -18.830768 10.596882 -1078.2361 -1067.6392 + 48350 4.835 0.07645701 945.1163 335.0398 -18.840255 10.783516 -1078.4227 -1067.6392 + 48400 4.84 0.076456836 950.22061 342.35702 -18.841461 11.019026 -1078.6583 -1067.6392 + 48450 4.845 0.0764567 952.16965 348.50659 -18.834984 11.216955 -1078.8562 -1067.6392 + 48500 4.85 0.076456712 955.36854 352.21576 -18.825983 11.336338 -1078.9756 -1067.6392 + 48550 4.855 0.076456801 959.48836 353.76389 -18.820533 11.386165 -1079.0254 -1067.6392 + 48600 4.86 0.076456823 964.22846 354.04554 -18.822337 11.395231 -1079.0345 -1067.6392 + 48650 4.865 0.076456815 974.22885 352.93972 -18.818132 11.359639 -1078.9989 -1067.6392 + 48700 4.87 0.076456877 987.44079 349.70581 -18.807017 11.255553 -1078.8948 -1067.6392 + 48750 4.875 0.076456856 980.80712 344.37973 -18.808379 11.084129 -1078.7234 -1067.6392 + 48800 4.88 0.076456847 965.79638 337.63651 -18.81979 10.867093 -1078.5063 -1067.6392 + 48850 4.885 0.076457001 966.05115 330.7499 -18.830692 10.645442 -1078.2847 -1067.6392 + 48900 4.89 0.076457069 965.02834 325.77373 -18.849924 10.48528 -1078.1245 -1067.6392 + 48950 4.895 0.076456805 951.50135 324.61657 -18.890071 10.448036 -1078.0873 -1067.6392 + 49000 4.9 0.076456678 947.91103 327.27966 -18.934537 10.53375 -1078.173 -1067.6392 + 49050 4.905 0.076456661 958.11234 332.39046 -18.962498 10.698245 -1078.3375 -1067.6392 + 49100 4.91 0.076456829 970.05161 338.47836 -18.976168 10.894189 -1078.5334 -1067.6392 + 49150 4.915 0.07645699 968.15446 343.93729 -18.98603 11.069889 -1078.7091 -1067.6392 + 49200 4.92 0.076456985 960.59968 346.43043 -18.994109 11.150132 -1078.7894 -1067.6392 + 49250 4.925 0.076456928 945.53084 343.0733 -18.986613 11.042081 -1078.6813 -1067.6392 + 49300 4.93 0.076456888 920.51419 333.13647 -18.959986 10.722256 -1078.3615 -1067.6392 + 49350 4.935 0.076456851 907.35436 320.38291 -18.938752 10.311773 -1077.951 -1067.6392 + 49400 4.94 0.07645685 893.81547 310.99739 -18.938412 10.009692 -1077.6489 -1067.6392 + 49450 4.945 0.076456896 870.23823 309.67527 -18.95594 9.9671388 -1077.6064 -1067.6392 + 49500 4.95 0.076456955 872.77052 317.13999 -18.978605 10.207397 -1077.8466 -1067.6392 + 49550 4.955 0.076456967 894.83445 330.73629 -18.98876 10.645004 -1078.2842 -1067.6392 + 49600 4.96 0.076456979 912.1661 346.73247 -18.984428 11.159854 -1078.7991 -1067.6392 + 49650 4.965 0.076456993 915.70238 361.26297 -18.978545 11.627529 -1079.2668 -1067.6392 + 49700 4.97 0.076456983 924.58803 370.71298 -18.984487 11.931685 -1079.5709 -1067.6392 + 49750 4.975 0.076456922 944.17323 372.65166 -18.998747 11.994083 -1079.6333 -1067.6392 + 49800 4.98 0.076456923 948.92864 367.69228 -19.0113 11.834461 -1079.4737 -1067.6392 + 49850 4.985 0.076456921 953.93531 359.51215 -19.018592 11.571177 -1079.2104 -1067.6392 + 49900 4.99 0.076456974 963.60708 351.14054 -19.013112 11.301731 -1078.941 -1067.6392 + 49950 4.995 0.076456997 970.081 343.67798 -19.003119 11.061543 -1078.7008 -1067.6392 + 50000 5 0.076457012 1001.2522 337.57276 -19.005327 10.865041 -1078.5043 -1067.6392 +Loop time of 149.65 on 1 procs for 50000 steps with 250 atoms + +Performance: 2.887 ns/day, 8.314 hours/ns, 334.113 timesteps/s +98.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 | 56.939 | 56.939 | 56.939 | 0.0 | 38.05 +Neigh | 0.65017 | 0.65017 | 0.65017 | 0.0 | 0.43 +Comm | 1.4958 | 1.4958 | 1.4958 | 0.0 | 1.00 +Output | 37.503 | 37.503 | 37.503 | 0.0 | 25.06 +Modify | 52.788 | 52.788 | 52.788 | 0.0 | 35.27 +Other | | 0.2742 | | | 0.18 + +Nlocal: 250 ave 250 max 250 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1335 ave 1335 max 1335 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 7746 ave 7746 max 7746 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 15492 ave 15492 max 15492 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 15492 +Ave neighs/atom = 61.968 +Neighbor list builds = 608 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:02:29 diff --git a/examples/SPIN/iron/log.30Apr19.spin.iron.g++.4 b/examples/SPIN/iron/log.30Apr19.spin.iron.g++.4 new file mode 100644 index 0000000000..6fc3e307f0 --- /dev/null +++ b/examples/SPIN/iron/log.30Apr19.spin.iron.g++.4 @@ -0,0 +1,1117 @@ +LAMMPS (30 Apr 2019) + using 1 OpenMP thread(s) per MPI task +# bcc iron in a 3d periodic box + +clear + using 1 OpenMP thread(s) per MPI task +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice bcc 2.8665 +Lattice spacing in x,y,z = 2.8665 2.8665 2.8665 +region box block 0.0 5.0 0.0 5.0 0.0 5.0 +create_box 1 box +Created orthogonal box = (0 0 0) to (14.3325 14.3325 14.3325) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 250 atoms + create_atoms CPU = 0.00056982 secs + +# setting mass, mag. moments, and interactions for bcc iron + +mass 1 55.845 + +set group all spin/random 31 2.2 + 250 settings made for spin/random +velocity all create 100 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 3.5 +pair_coeff * * eam/alloy Fe_Mishin2006.eam.alloy Fe +pair_coeff * * spin/exchange exchange 3.4 0.02726 0.2171 1.841 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 +fix 2 all langevin/spin 0.0 0.0 21 + +fix 3 all nve/spin lattice yes +timestep 0.0001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magnorm v_tmag temp v_emag ke pe etotal +thermo 50 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 100 all custom 1 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +run 50000 +Neighbor list info ... + update every 10 steps, delay 20 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.77337 + ghost atom cutoff = 5.77337 + binsize = 2.88668, bins = 5 5 5 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair eam/alloy, perpetual, half/full from (2) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (2) pair spin/exchange, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.265 | 7.265 | 7.265 Mbytes +Step Time v_magnorm v_tmag Temp v_emag KinEng PotEng TotEng + 0 0 0.076456975 9109.0924 100.00358 -0.85791269 3.2186929 -1070.8579 -1067.6392 + 50 0.005 0.076456995 9402.4007 96.298333 -0.85659448 3.0994366 -1070.7387 -1067.6392 + 100 0.01 0.076457028 9589.1846 86.330828 -0.87003341 2.7786247 -1070.4179 -1067.6392 + 150 0.015 0.076457074 9673.9268 71.603402 -0.89006992 2.3046111 -1069.9438 -1067.6392 + 200 0.02 0.076457106 9509.1148 54.648817 -0.91124541 1.7589146 -1069.3981 -1067.6392 + 250 0.025 0.076457128 9004.27 38.599515 -0.93187522 1.2423553 -1068.8816 -1067.6392 + 300 0.03 0.076457157 8353.4371 26.383018 -0.95082226 0.8491579 -1068.4884 -1067.6392 + 350 0.035 0.076457207 7911.1316 20.01039 -0.96826468 0.64404992 -1068.2833 -1067.6392 + 400 0.04 0.076457243 7775.9492 20.097682 -0.98706373 0.64685949 -1068.2861 -1067.6392 + 450 0.045 0.076457231 7737.1225 25.687511 -1.0095684 0.82677249 -1068.466 -1067.6392 + 500 0.05 0.076457204 7676.9809 34.604697 -1.0349855 1.113779 -1068.753 -1067.6392 + 550 0.055 0.076457196 7550.2809 44.251809 -1.0609123 1.4242788 -1069.0635 -1067.6392 + 600 0.06 0.076457188 7209.7657 52.475202 -1.0880854 1.6889551 -1069.3282 -1067.6392 + 650 0.065 0.07645718 6691.1787 57.926479 -1.1179657 1.8644087 -1069.5036 -1067.6392 + 700 0.07 0.076457185 6276.4003 60.030548 -1.1469999 1.9321298 -1069.5714 -1067.6392 + 750 0.075 0.07645719 6149.9253 59.122504 -1.1721939 1.9029037 -1069.5421 -1067.6392 + 800 0.08 0.076457195 6207.0587 56.349146 -1.1949365 1.813641 -1069.4529 -1067.6392 + 850 0.085 0.076457199 6328.4635 53.154464 -1.2164642 1.7108177 -1069.35 -1067.6392 + 900 0.09 0.076457199 6456.2716 50.837416 -1.2366018 1.6362417 -1069.2755 -1067.6392 + 950 0.095 0.076457222 6495.1064 50.234549 -1.2539657 1.6168379 -1069.2561 -1067.6392 + 1000 0.1 0.076457266 6416.775 51.592727 -1.2671834 1.6605519 -1069.2998 -1067.6392 + 1050 0.105 0.076457256 6305.9015 54.719414 -1.2794824 1.7611868 -1069.4004 -1067.6392 + 1100 0.11 0.076457222 6165.987 59.01343 -1.2960617 1.8993931 -1069.5386 -1067.6392 + 1150 0.115 0.076457194 5941.7807 63.475298 -1.317859 2.0430017 -1069.6822 -1067.6392 + 1200 0.12 0.076457182 5692.0982 67.036713 -1.3432854 2.1576286 -1069.7969 -1067.6392 + 1250 0.125 0.076457217 5543.1736 68.917405 -1.3719994 2.2181602 -1069.8574 -1067.6392 + 1300 0.13 0.076457263 5507.9968 68.753418 -1.4042339 2.2128821 -1069.8521 -1067.6392 + 1350 0.135 0.076457286 5500.7848 66.608286 -1.4385667 2.1438394 -1069.7831 -1067.6392 + 1400 0.14 0.076457254 5523.456 62.967429 -1.4712143 2.0266556 -1069.6659 -1067.6392 + 1450 0.145 0.076457188 5501.5777 58.75732 -1.4990458 1.89115 -1069.5304 -1067.6392 + 1500 0.15 0.076457175 5324.4931 55.246308 -1.5236774 1.7781453 -1069.4174 -1067.6392 + 1550 0.155 0.076457234 5025.5908 53.607297 -1.5492947 1.7253925 -1069.3646 -1067.6392 + 1600 0.16 0.076457297 4742.9546 54.443418 -1.5785798 1.7523036 -1069.3915 -1067.6392 + 1650 0.165 0.076457321 4558.083 57.572305 -1.6113848 1.8530093 -1069.4922 -1067.6392 + 1700 0.17 0.076457304 4479.4352 62.073307 -1.6443595 1.9978776 -1069.6371 -1067.6392 + 1750 0.175 0.076457272 4520.5577 66.677964 -1.6742729 2.146082 -1069.7853 -1067.6392 + 1800 0.18 0.076457253 4659.9114 70.277293 -1.7021557 2.2619292 -1069.9012 -1067.6392 + 1850 0.185 0.076457257 4734.1597 72.135028 -1.7307798 2.3217219 -1069.961 -1067.6392 + 1900 0.19 0.076457279 4632.2637 71.873382 -1.7598165 2.3133006 -1069.9525 -1067.6392 + 1950 0.195 0.076457276 4496.6621 69.52131 -1.7866398 2.2375973 -1069.8768 -1067.6392 + 2000 0.2 0.076457276 4507.4594 65.61098 -1.8106776 2.1117403 -1069.751 -1067.6392 + 2050 0.205 0.076457288 4652.9279 61.016261 -1.8317479 1.9638557 -1069.6031 -1067.6392 + 2100 0.21 0.076457307 4738.4188 56.745795 -1.8489776 1.8264074 -1069.4656 -1067.6392 + 2150 0.215 0.076457279 4643.423 53.837376 -1.8647516 1.7327977 -1069.372 -1067.6392 + 2200 0.22 0.076457215 4517.9871 53.044053 -1.8828305 1.707264 -1069.3465 -1067.6392 + 2250 0.225 0.07645717 4436.4399 54.521839 -1.9038753 1.7548277 -1069.3941 -1067.6392 + 2300 0.23 0.076457132 4318.8261 57.895634 -1.9276454 1.8634159 -1069.5026 -1067.6392 + 2350 0.235 0.076457114 4148.8616 62.484473 -1.9559372 2.0111113 -1069.6503 -1067.6392 + 2400 0.24 0.076457144 4014.8498 67.404243 -1.9902034 2.1694579 -1069.8087 -1067.6392 + 2450 0.245 0.076457189 4004.017 71.654167 -2.0278558 2.306245 -1069.9455 -1067.6392 + 2500 0.25 0.076457202 4109.5497 74.379393 -2.0629968 2.3939585 -1070.0332 -1067.6392 + 2550 0.255 0.076457205 4251.6933 75.255112 -2.0918484 2.4221442 -1070.0614 -1067.6392 + 2600 0.26 0.076457208 4320.6876 74.700611 -2.1169691 2.4042972 -1070.0435 -1067.6392 + 2650 0.265 0.076457197 4297.5527 73.627823 -2.143 2.3697686 -1070.009 -1067.6392 + 2700 0.27 0.076457213 4198.4852 72.957211 -2.1702374 2.3481845 -1069.9874 -1067.6392 + 2750 0.275 0.076457256 4019.2384 73.353574 -2.1967187 2.3609417 -1070.0002 -1067.6392 + 2800 0.28 0.076457288 3867.2492 75.083781 -2.2227117 2.4166298 -1070.0559 -1067.6392 + 2850 0.285 0.076457302 3879.8471 77.82546 -2.2488766 2.5048728 -1070.1441 -1067.6392 + 2900 0.29 0.076457321 4003.8986 80.741745 -2.2742584 2.5987357 -1070.238 -1067.6392 + 2950 0.295 0.076457347 4026.6754 82.934399 -2.3001834 2.669308 -1070.3085 -1067.6392 + 3000 0.3 0.076457334 3857.2183 83.701738 -2.3291113 2.6940054 -1070.3332 -1067.6392 + 3050 0.305 0.076457295 3640.7581 82.615991 -2.3614721 2.6590598 -1070.2983 -1067.6392 + 3100 0.31 0.07645725 3489.102 79.573679 -2.3943974 2.5611406 -1070.2004 -1067.6392 + 3150 0.315 0.076457232 3396.4301 74.896125 -2.4236621 2.4105899 -1070.0498 -1067.6392 + 3200 0.32 0.076457259 3378.11 69.450128 -2.4483292 2.2353063 -1069.8745 -1067.6392 + 3250 0.325 0.076457289 3463.7734 64.542714 -2.4729224 2.0773573 -1069.7166 -1067.6392 + 3300 0.33 0.076457318 3637.4971 61.346221 -2.500303 1.9744757 -1069.6137 -1067.6392 + 3350 0.335 0.076457361 3833.5389 60.346704 -2.5252732 1.9423055 -1069.5815 -1067.6392 + 3400 0.34 0.076457387 3965.2081 61.464125 -2.5426842 1.9782706 -1069.6175 -1067.6392 + 3450 0.345 0.076457375 3976.7956 64.41797 -2.5565409 2.0733424 -1069.7126 -1067.6392 + 3500 0.35 0.076457371 3862.8334 68.714547 -2.5743062 2.211631 -1069.8509 -1067.6392 + 3550 0.355 0.076457375 3697.284 73.534942 -2.5974674 2.3667792 -1070.006 -1067.6392 + 3600 0.36 0.076457362 3575.9012 77.902682 -2.6209385 2.5073583 -1070.1466 -1067.6392 + 3650 0.365 0.076457345 3550.0667 81.043684 -2.6394846 2.6084539 -1070.2477 -1067.6392 + 3700 0.37 0.076457309 3535.0981 82.730976 -2.65464 2.6627607 -1070.302 -1067.6392 + 3750 0.375 0.076457309 3444.1795 83.322515 -2.6736085 2.6817998 -1070.321 -1067.6392 + 3800 0.38 0.076457348 3323.7191 83.436143 -2.7008525 2.685457 -1070.3247 -1067.6392 + 3850 0.385 0.076457368 3252.5404 83.62535 -2.7353937 2.6915468 -1070.3308 -1067.6392 + 3900 0.39 0.076457344 3219.5349 84.088597 -2.7722909 2.7064568 -1070.3457 -1067.6392 + 3950 0.395 0.076457316 3210.4164 84.636475 -2.8060651 2.7240906 -1070.3633 -1067.6392 + 4000 0.4 0.076457319 3223.9708 85.042888 -2.8352998 2.7371713 -1070.3764 -1067.6392 + 4050 0.405 0.076457335 3232.7108 85.266853 -2.8607963 2.7443798 -1070.3836 -1067.6392 + 4100 0.41 0.076457314 3206.1428 85.444074 -2.8837721 2.7500838 -1070.3893 -1067.6392 + 4150 0.415 0.076457325 3146.4589 85.771643 -2.9074131 2.7606269 -1070.3999 -1067.6392 + 4200 0.42 0.076457395 3092.6283 86.24875 -2.9341331 2.775983 -1070.4152 -1067.6392 + 4250 0.425 0.07645742 3103.0319 86.563557 -2.9622203 2.7861153 -1070.4253 -1067.6392 + 4300 0.43 0.076457425 3116.9053 86.320099 -2.9880208 2.7782794 -1070.4175 -1067.6392 + 4350 0.435 0.076457427 3061.2259 85.306966 -3.0085539 2.7456709 -1070.3849 -1067.6392 + 4400 0.44 0.076457432 3033.5229 83.703441 -3.0243431 2.6940602 -1070.3333 -1067.6392 + 4450 0.445 0.076457411 3042.5167 82.058057 -3.0397518 2.6411023 -1070.2803 -1067.6392 + 4500 0.45 0.076457387 2994.5161 81.002427 -3.0597817 2.607126 -1070.2464 -1067.6392 + 4550 0.455 0.076457413 2868.381 80.936403 -3.086593 2.605001 -1070.2442 -1067.6392 + 4600 0.46 0.076457454 2716.5128 81.904984 -3.1192161 2.6361755 -1070.2754 -1067.6392 + 4650 0.465 0.076457402 2628.691 83.537981 -3.1529675 2.6887347 -1070.328 -1067.6392 + 4700 0.47 0.076457327 2609.7253 85.196185 -3.1819342 2.7421053 -1070.3813 -1067.6392 + 4750 0.475 0.076457328 2604.4797 86.479192 -3.2088497 2.7833999 -1070.4226 -1067.6392 + 4800 0.48 0.076457385 2610.7583 87.294321 -3.242028 2.8096355 -1070.4489 -1067.6392 + 4850 0.485 0.076457398 2649.7853 87.477655 -3.2810534 2.8155362 -1070.4548 -1067.6392 + 4900 0.49 0.076457371 2678.8351 86.820207 -3.3154833 2.7943757 -1070.4336 -1067.6392 + 4950 0.495 0.076457344 2687.924 85.543066 -3.3381845 2.75327 -1070.3925 -1067.6392 + 5000 0.5 0.076457351 2720.6587 84.363474 -3.3508261 2.7153039 -1070.3545 -1067.6392 + 5050 0.505 0.076457408 2755.8292 84.030245 -3.3582878 2.7045787 -1070.3438 -1067.6392 + 5100 0.51 0.076457454 2753.2313 84.932962 -3.3648805 2.7336333 -1070.3729 -1067.6392 + 5150 0.515 0.076457453 2706.7195 86.928397 -3.3711152 2.7978579 -1070.4371 -1067.6392 + 5200 0.52 0.076457474 2678.177 89.583728 -3.3768576 2.8833218 -1070.5226 -1067.6392 + 5250 0.525 0.076457519 2699.6154 92.51484 -3.3860255 2.9776619 -1070.6169 -1067.6392 + 5300 0.53 0.076457531 2703.409 95.385751 -3.4040809 3.0700644 -1070.7093 -1067.6392 + 5350 0.535 0.076457501 2642.6927 97.779641 -3.4335521 3.1471136 -1070.7863 -1067.6392 + 5400 0.54 0.076457502 2536.3506 99.09318 -3.4686216 3.1893909 -1070.8286 -1067.6392 + 5450 0.545 0.076457526 2496.939 98.768917 -3.4975315 3.1789543 -1070.8182 -1067.6392 + 5500 0.55 0.07645752 2590.2956 96.816601 -3.5146308 3.1161175 -1070.7554 -1067.6392 + 5550 0.555 0.07645751 2736.468 93.934193 -3.5252273 3.0233449 -1070.6626 -1067.6392 + 5600 0.56 0.076457511 2852.5253 91.119522 -3.5395987 2.9327525 -1070.572 -1067.6392 + 5650 0.565 0.07645752 2911.6956 89.034641 -3.5601373 2.865649 -1070.5049 -1067.6392 + 5700 0.57 0.076457504 2872.1071 87.822315 -3.5786029 2.8266294 -1070.4659 -1067.6392 + 5750 0.575 0.076457514 2742.4368 87.594068 -3.5903293 2.8192831 -1070.4585 -1067.6392 + 5800 0.58 0.076457541 2620.8059 88.56771 -3.5997031 2.8506205 -1070.4899 -1067.6392 + 5850 0.585 0.076457558 2577.6659 90.685494 -3.6121768 2.918783 -1070.558 -1067.6392 + 5900 0.59 0.076457556 2603.2365 93.377823 -3.6265073 3.0054377 -1070.6447 -1067.6392 + 5950 0.595 0.076457545 2622.1463 95.785547 -3.6355062 3.0829322 -1070.7222 -1067.6392 + 6000 0.6 0.076457592 2584.5093 97.370119 -3.6379265 3.1339328 -1070.7732 -1067.6392 + 6050 0.605 0.076457628 2511.2983 98.197844 -3.6436108 3.1605738 -1070.7998 -1067.6392 + 6100 0.61 0.076457605 2460.1937 98.607325 -3.6641337 3.1737533 -1070.813 -1067.6392 + 6150 0.615 0.076457552 2425.1581 98.777199 -3.7023507 3.1792208 -1070.8185 -1067.6392 + 6200 0.62 0.076457529 2378.858 98.671036 -3.7529167 3.1758039 -1070.815 -1067.6392 + 6250 0.625 0.076457536 2373.6174 98.176109 -3.8075652 3.1598743 -1070.7991 -1067.6392 + 6300 0.63 0.076457584 2457.9895 97.287993 -3.8600038 3.1312896 -1070.7705 -1067.6392 + 6350 0.635 0.076457603 2571.5862 96.270876 -3.9092349 3.0985529 -1070.7378 -1067.6392 + 6400 0.64 0.076457558 2610.0136 95.435972 -3.9541069 3.0716808 -1070.7109 -1067.6392 + 6450 0.645 0.076457543 2587.7608 94.898692 -3.9898247 3.0543881 -1070.6936 -1067.6392 + 6500 0.65 0.076457571 2592.7016 94.731712 -4.0156706 3.0490137 -1070.6882 -1067.6392 + 6550 0.655 0.076457601 2601.6484 95.02635 -4.0381241 3.0584968 -1070.6977 -1067.6392 + 6600 0.66 0.076457634 2566.7083 95.637112 -4.0616073 3.0781547 -1070.7174 -1067.6392 + 6650 0.665 0.076457648 2514.9403 96.272248 -4.0866876 3.098597 -1070.7378 -1067.6392 + 6700 0.67 0.076457667 2469.8797 96.811623 -4.1148391 3.1159572 -1070.7552 -1067.6392 + 6750 0.675 0.076457679 2455.7631 97.232703 -4.1435988 3.12951 -1070.7687 -1067.6392 + 6800 0.68 0.076457673 2468.7416 97.598183 -4.1658052 3.1412733 -1070.7805 -1067.6392 + 6850 0.685 0.076457641 2449.95 98.364331 -4.1815152 3.1659323 -1070.8052 -1067.6392 + 6900 0.69 0.076457591 2353.8808 100.13602 -4.1974936 3.2229556 -1070.8622 -1067.6392 + 6950 0.695 0.076457574 2209.815 103.01374 -4.2144943 3.3155771 -1070.9548 -1067.6392 + 7000 0.7 0.07645757 2076.4955 106.68046 -4.2313525 3.4335935 -1071.0728 -1067.6392 + 7050 0.705 0.076457532 2018.5608 110.71726 -4.2520006 3.5635208 -1071.2028 -1067.6392 + 7100 0.71 0.076457492 2066.0289 114.55462 -4.2812097 3.6870294 -1071.3263 -1067.6392 + 7150 0.715 0.07645748 2155.5953 117.31153 -4.3158511 3.7757627 -1071.415 -1067.6392 + 7200 0.72 0.076457494 2209.404 118.11478 -4.3476294 3.8016159 -1071.4408 -1067.6392 + 7250 0.725 0.076457549 2217.455 116.73546 -4.3751645 3.7572213 -1071.3965 -1067.6392 + 7300 0.73 0.076457599 2194.7896 113.55484 -4.4007803 3.6548507 -1071.2941 -1067.6392 + 7350 0.735 0.07645757 2162.9678 109.25541 -4.4240013 3.5164702 -1071.1557 -1067.6392 + 7400 0.74 0.076457504 2179.1755 104.7762 -4.4454261 3.3723033 -1071.0115 -1067.6392 + 7450 0.745 0.076457518 2259.3755 101.07852 -4.4663804 3.2532905 -1070.8925 -1067.6392 + 7500 0.75 0.076457572 2343.5728 98.882923 -4.4874367 3.1826236 -1070.8219 -1067.6392 + 7550 0.755 0.076457589 2398.3228 98.458717 -4.5060637 3.1689702 -1070.8082 -1067.6392 + 7600 0.76 0.076457555 2420.6576 99.703599 -4.5200762 3.2090377 -1070.8483 -1067.6392 + 7650 0.765 0.076457552 2412.3104 102.42619 -4.5351178 3.2966665 -1070.9359 -1067.6392 + 7700 0.77 0.076457571 2388.742 106.24497 -4.5597331 3.4195769 -1071.0588 -1067.6392 + 7750 0.775 0.076457574 2379.8392 110.33126 -4.5953993 3.5510971 -1071.1903 -1067.6392 + 7800 0.78 0.076457547 2387.9692 113.47154 -4.6333122 3.6521696 -1071.2914 -1067.6392 + 7850 0.785 0.076457584 2375.3173 114.64931 -4.6633154 3.6900771 -1071.3293 -1067.6392 + 7900 0.79 0.076457607 2347.9452 113.52456 -4.6810365 3.6538759 -1071.2931 -1067.6392 + 7950 0.795 0.076457576 2325.3437 110.51925 -4.6879165 3.5571478 -1071.1964 -1067.6392 + 8000 0.8 0.076457576 2298.9574 106.80135 -4.6933853 3.4374844 -1071.0767 -1067.6392 + 8050 0.805 0.076457591 2279.7296 103.7714 -4.7072185 3.339963 -1070.9792 -1067.6392 + 8100 0.81 0.076457594 2277.4281 102.48909 -4.7324485 3.298691 -1070.9379 -1067.6392 + 8150 0.815 0.076457634 2249.9673 103.46477 -4.7678493 3.3300941 -1070.9693 -1067.6392 + 8200 0.82 0.076457642 2192.5499 106.44615 -4.8061066 3.4260518 -1071.0653 -1067.6392 + 8250 0.825 0.076457605 2153.4317 110.64954 -4.8384076 3.5613412 -1071.2006 -1067.6392 + 8300 0.83 0.07645754 2141.4131 115.25212 -4.8632501 3.709479 -1071.3487 -1067.6392 + 8350 0.835 0.076457494 2140.5445 119.40588 -4.8830278 3.8431708 -1071.4824 -1067.6392 + 8400 0.84 0.076457514 2137.788 122.1619 -4.8981204 3.9318754 -1071.5711 -1067.6392 + 8450 0.845 0.076457574 2137.0667 122.97752 -4.9139635 3.958127 -1071.5974 -1067.6392 + 8500 0.85 0.076457574 2145.0503 121.91147 -4.9379125 3.9238154 -1071.563 -1067.6392 + 8550 0.855 0.076457593 2147.0889 119.37696 -4.9688875 3.84224 -1071.4815 -1067.6392 + 8600 0.86 0.07645763 2081.6527 116.07646 -5.0006593 3.736011 -1071.3752 -1067.6392 + 8650 0.865 0.076457595 1962.5911 112.96131 -5.0308687 3.6357476 -1071.275 -1067.6392 + 8700 0.87 0.076457564 1869.6563 110.95387 -5.0615711 3.5711363 -1071.2104 -1067.6392 + 8750 0.875 0.076457589 1834.0748 110.57729 -5.0928561 3.5590158 -1071.1982 -1067.6392 + 8800 0.88 0.076457596 1854.43 111.81118 -5.1197787 3.5987297 -1071.238 -1067.6392 + 8850 0.885 0.076457575 1865.6826 114.38971 -5.1401001 3.6817215 -1071.321 -1067.6392 + 8900 0.89 0.076457601 1833.0206 117.96559 -5.1581048 3.796814 -1071.436 -1067.6392 + 8950 0.895 0.076457671 1792.8832 121.88891 -5.1778019 3.9230893 -1071.5623 -1067.6392 + 9000 0.9 0.076457726 1758.5023 125.25302 -5.2006688 4.0313657 -1071.6706 -1067.6392 + 9050 0.905 0.076457731 1735.1309 127.17393 -5.2254334 4.0931918 -1071.7324 -1067.6392 + 9100 0.91 0.076457741 1762.187 127.10436 -5.2491072 4.0909526 -1071.7302 -1067.6392 + 9150 0.915 0.076457708 1843.8804 124.99484 -5.2685152 4.0230558 -1071.6623 -1067.6392 + 9200 0.92 0.076457667 1957.8234 121.30407 -5.2827478 3.9042658 -1071.5435 -1067.6392 + 9250 0.925 0.076457686 2062.5914 117.02709 -5.2984278 3.7666077 -1071.4058 -1067.6392 + 9300 0.93 0.076457701 2105.5399 113.37476 -5.3254121 3.6490547 -1071.2883 -1067.6392 + 9350 0.935 0.076457698 2097.1011 111.14541 -5.3634987 3.5773012 -1071.2165 -1067.6392 + 9400 0.94 0.076457691 2074.0275 110.80542 -5.4086147 3.5663585 -1071.2056 -1067.6392 + 9450 0.945 0.076457741 2084.2231 112.48714 -5.4565921 3.6204859 -1071.2597 -1067.6392 + 9500 0.95 0.076457742 2098.9606 115.74433 -5.4989221 3.725321 -1071.3646 -1067.6392 + 9550 0.955 0.07645769 2076.1518 119.81614 -5.5288469 3.8563755 -1071.4956 -1067.6392 + 9600 0.96 0.076457671 2028.8268 123.94506 -5.5445735 3.989268 -1071.6285 -1067.6392 + 9650 0.965 0.0764577 2001.4552 127.5336 -5.548578 4.104768 -1071.744 -1067.6392 + 9700 0.97 0.076457704 1998.3789 130.13306 -5.5456805 4.1884336 -1071.8277 -1067.6392 + 9750 0.975 0.076457717 1975.232 131.4781 -5.5424564 4.2317247 -1071.871 -1067.6392 + 9800 0.98 0.076457754 1943.5946 131.52534 -5.543939 4.2332452 -1071.8725 -1067.6392 + 9850 0.985 0.076457767 1925.7258 130.61182 -5.5541538 4.2038429 -1071.8431 -1067.6392 + 9900 0.99 0.076457768 1912.4426 129.30485 -5.5732953 4.1617771 -1071.801 -1067.6392 + 9950 0.995 0.07645781 1906.7982 128.04744 -5.5944645 4.1213064 -1071.7605 -1067.6392 + 10000 1 0.076457853 1902.6667 127.24846 -5.6139316 4.0955905 -1071.7348 -1067.6392 + 10050 1.005 0.076457894 1903.6495 127.22624 -5.6350055 4.0948754 -1071.7341 -1067.6392 + 10100 1.01 0.076457899 1913.5279 127.69735 -5.6543581 4.1100384 -1071.7493 -1067.6392 + 10150 1.015 0.076457799 1907.6348 128.06173 -5.6658197 4.1217662 -1071.761 -1067.6392 + 10200 1.02 0.076457733 1899.2476 128.11218 -5.6733688 4.12339 -1071.7626 -1067.6392 + 10250 1.025 0.076457747 1895.8986 127.94169 -5.6840919 4.1179026 -1071.7571 -1067.6392 + 10300 1.03 0.076457816 1877.4598 127.6041 -5.7004798 4.107037 -1071.7463 -1067.6392 + 10350 1.035 0.076457876 1829.2074 127.11751 -5.7241722 4.0913757 -1071.7306 -1067.6392 + 10400 1.04 0.076457884 1806.0757 126.48167 -5.756364 4.0709108 -1071.7101 -1067.6392 + 10450 1.045 0.076457869 1822.1953 125.5947 -5.7930905 4.042363 -1071.6816 -1067.6392 + 10500 1.05 0.076457879 1827.9173 124.33858 -5.8252681 4.0019336 -1071.6412 -1067.6392 + 10550 1.055 0.076457858 1812.1963 122.79649 -5.8435788 3.9523004 -1071.5915 -1067.6392 + 10600 1.06 0.076457791 1797.2949 121.53225 -5.8488847 3.9116096 -1071.5508 -1067.6392 + 10650 1.065 0.076457757 1775.25 121.32451 -5.8518555 3.9049236 -1071.5442 -1067.6392 + 10700 1.07 0.076457792 1740.3273 122.44046 -5.8607258 3.9408413 -1071.5801 -1067.6392 + 10750 1.075 0.076457855 1729.7945 124.41086 -5.8780857 4.0042601 -1071.6435 -1067.6392 + 10800 1.08 0.076457901 1741.2893 126.28784 -5.9016509 4.0646721 -1071.7039 -1067.6392 + 10850 1.085 0.076457859 1751.6811 127.09185 -5.9236888 4.0905498 -1071.7298 -1067.6392 + 10900 1.09 0.076457795 1764.679 126.41883 -5.937278 4.0688881 -1071.7081 -1067.6392 + 10950 1.095 0.07645779 1769.3986 124.77704 -5.9433211 4.0160458 -1071.6553 -1067.6392 + 11000 1.1 0.076457827 1761.3552 123.29516 -5.9478426 3.9683506 -1071.6076 -1067.6392 + 11050 1.105 0.076457857 1751.4218 123.17488 -5.9566275 3.9644792 -1071.6037 -1067.6392 + 11100 1.11 0.076457863 1726.8666 125.22443 -5.9741936 4.0304456 -1071.6697 -1067.6392 + 11150 1.115 0.076457878 1735.2828 129.42028 -6.0014992 4.1654923 -1071.8047 -1067.6392 + 11200 1.12 0.076457903 1805.6904 134.81633 -6.0340926 4.3391683 -1071.9784 -1067.6392 + 11250 1.125 0.076457923 1847.8249 139.98198 -6.0631111 4.5054288 -1072.1447 -1067.6392 + 11300 1.13 0.076457865 1818.7912 143.90555 -6.0856034 4.6317119 -1072.2709 -1067.6392 + 11350 1.135 0.076457825 1798.9525 146.44555 -6.1101917 4.7134638 -1072.3527 -1067.6392 + 11400 1.14 0.076457815 1837.1775 147.67989 -6.1418356 4.7531917 -1072.3924 -1067.6392 + 11450 1.145 0.076457893 1909.6101 147.41836 -6.1737085 4.7447744 -1072.384 -1067.6392 + 11500 1.15 0.076457962 1946.7114 145.59364 -6.1998495 4.6860443 -1072.3253 -1067.6392 + 11550 1.155 0.076457957 1967.998 142.69304 -6.2256371 4.5926863 -1072.2319 -1067.6392 + 11600 1.16 0.076457903 2034.228 139.43936 -6.2585164 4.4879639 -1072.1272 -1067.6392 + 11650 1.165 0.076457847 2063.6908 136.1161 -6.2925345 4.3810023 -1072.0202 -1067.6392 + 11700 1.17 0.076457857 1990.1311 132.80435 -6.3184969 4.2744111 -1071.9136 -1067.6392 + 11750 1.175 0.076457901 1933.95 129.89649 -6.3394362 4.1808193 -1071.8201 -1067.6392 + 11800 1.18 0.076457953 1947.2099 127.68121 -6.3585167 4.1095189 -1071.7488 -1067.6392 + 11850 1.185 0.076457986 1940.4995 126.35451 -6.3779087 4.0668179 -1071.706 -1067.6392 + 11900 1.19 0.076457947 1896.3696 126.25109 -6.4040311 4.0634894 -1071.7027 -1067.6392 + 11950 1.195 0.076457956 1843.5682 127.5666 -6.4410172 4.1058301 -1071.7451 -1067.6392 + 12000 1.2 0.076457964 1811.4472 130.04643 -6.4846233 4.1856452 -1071.8249 -1067.6392 + 12050 1.205 0.076457972 1814.5828 133.04634 -6.5254215 4.2821996 -1071.9214 -1067.6392 + 12100 1.21 0.076457967 1813.6628 135.85077 -6.5555239 4.3724623 -1072.0117 -1067.6392 + 12150 1.215 0.076457935 1806.3763 138.19822 -6.5770911 4.448017 -1072.0872 -1067.6392 + 12200 1.22 0.076457946 1794.9644 140.31834 -6.5982636 4.5162546 -1072.1555 -1067.6392 + 12250 1.225 0.076457982 1772.5404 142.42677 -6.6192794 4.5841162 -1072.2233 -1067.6392 + 12300 1.23 0.076457963 1753.3843 144.61375 -6.6346864 4.6545058 -1072.2937 -1067.6392 + 12350 1.235 0.076457949 1737.1545 146.94235 -6.6429412 4.7294536 -1072.3687 -1067.6392 + 12400 1.24 0.076457977 1726.207 149.46271 -6.6518876 4.8105732 -1072.4498 -1067.6392 + 12450 1.245 0.076457983 1731.0662 151.80715 -6.6670425 4.8860309 -1072.5253 -1067.6392 + 12500 1.25 0.076457915 1760.4467 153.07641 -6.6813282 4.9268832 -1072.5661 -1067.6392 + 12550 1.255 0.076457879 1799.0622 152.72464 -6.6918933 4.9155611 -1072.5548 -1067.6392 + 12600 1.26 0.076457914 1822.2254 151.04918 -6.710248 4.861635 -1072.5009 -1067.6392 + 12650 1.265 0.07645795 1816.7324 148.37072 -6.7389019 4.7754268 -1072.4147 -1067.6392 + 12700 1.27 0.076457955 1812.8602 144.86733 -6.7666889 4.6626674 -1072.3019 -1067.6392 + 12750 1.275 0.076457984 1810.7634 141.22215 -6.788381 4.5453446 -1072.1846 -1067.6392 + 12800 1.28 0.076458017 1784.5198 138.39541 -6.8065328 4.4543636 -1072.0936 -1067.6392 + 12850 1.285 0.076458007 1723.1734 136.86317 -6.8200203 4.4050473 -1072.0443 -1067.6392 + 12900 1.29 0.076457981 1676.1889 136.77495 -6.8278227 4.4022078 -1072.0414 -1067.6392 + 12950 1.295 0.07645799 1686.883 138.26769 -6.8341741 4.4502528 -1072.0895 -1067.6392 + 13000 1.3 0.076458 1750.0412 141.08411 -6.841283 4.5409017 -1072.1801 -1067.6392 + 13050 1.305 0.076457933 1814.788 144.61706 -6.8510949 4.6546122 -1072.2938 -1067.6392 + 13100 1.31 0.076457918 1840.2708 148.22464 -6.8662706 4.770725 -1072.41 -1067.6392 + 13150 1.315 0.07645799 1855.2415 151.3832 -6.8883549 4.8723856 -1072.5116 -1067.6392 + 13200 1.32 0.076458049 1867.3248 153.53322 -6.9142169 4.9415857 -1072.5808 -1067.6392 + 13250 1.325 0.076458096 1847.9049 154.02873 -6.9377296 4.9575343 -1072.5968 -1067.6392 + 13300 1.33 0.076458112 1840.483 152.42018 -6.9562822 4.9057618 -1072.545 -1067.6392 + 13350 1.335 0.076458098 1855.9464 148.69839 -6.970188 4.7859732 -1072.4252 -1067.6392 + 13400 1.34 0.07645806 1820.6867 143.5401 -6.9830712 4.6199497 -1072.2592 -1067.6392 + 13450 1.345 0.076457976 1745.2435 138.19145 -6.9989611 4.4477992 -1072.087 -1067.6392 + 13500 1.35 0.076457963 1697.5473 133.92117 -7.0152512 4.310357 -1071.9496 -1067.6392 + 13550 1.355 0.076458016 1684.8882 131.80734 -7.0311044 4.2423215 -1071.8816 -1067.6392 + 13600 1.36 0.076458061 1708.2521 132.4772 -7.051885 4.2638815 -1071.9031 -1067.6392 + 13650 1.365 0.07645807 1723.4416 135.53906 -7.0750853 4.36243 -1072.0017 -1067.6392 + 13700 1.37 0.07645806 1706.999 139.94405 -7.0945976 4.5042079 -1072.1434 -1067.6392 + 13750 1.375 0.076458036 1712.8033 144.85597 -7.1159258 4.6623018 -1072.3015 -1067.6392 + 13800 1.38 0.076457971 1751.0123 149.63395 -7.1458169 4.8160849 -1072.4553 -1067.6392 + 13850 1.385 0.076458021 1772.9962 153.59227 -7.1786728 4.9434865 -1072.5827 -1067.6392 + 13900 1.39 0.076458106 1773.7385 156.28506 -7.2050465 5.030156 -1072.6694 -1067.6392 + 13950 1.395 0.076458102 1748.7335 157.81358 -7.2259294 5.0793525 -1072.7186 -1067.6392 + 14000 1.4 0.076458031 1718.5394 158.78508 -7.2557377 5.110621 -1072.7499 -1067.6392 + 14050 1.405 0.076457985 1759.6811 159.6226 -7.3026227 5.1375772 -1072.7768 -1067.6392 + 14100 1.41 0.076457949 1848.058 160.13835 -7.353886 5.154177 -1072.7934 -1067.6392 + 14150 1.415 0.07645791 1902.6843 160.00219 -7.387799 5.1497946 -1072.789 -1067.6392 + 14200 1.42 0.076457928 1921.0383 159.34446 -7.3946089 5.1286251 -1072.7679 -1067.6392 + 14250 1.425 0.076458016 1906.9383 158.81344 -7.3863965 5.111534 -1072.7508 -1067.6392 + 14300 1.43 0.076458065 1861.3283 158.866 -7.3810737 5.1132253 -1072.7525 -1067.6392 + 14350 1.435 0.076458033 1831.4331 159.34444 -7.3867848 5.1286245 -1072.7679 -1067.6392 + 14400 1.44 0.076457975 1816.0391 159.7047 -7.4029452 5.1402197 -1072.7795 -1067.6392 + 14450 1.445 0.076457983 1762.1574 159.29777 -7.4235285 5.1271223 -1072.7664 -1067.6392 + 14500 1.45 0.076458063 1709.2993 157.82112 -7.4454745 5.0795953 -1072.7188 -1067.6392 + 14550 1.455 0.076458051 1677.4867 155.54554 -7.4726077 5.0063538 -1072.6456 -1067.6392 + 14600 1.46 0.076457997 1654.1484 152.98432 -7.507262 4.9239192 -1072.5632 -1067.6392 + 14650 1.465 0.076457952 1662.1842 150.42233 -7.5432446 4.8414594 -1072.4807 -1067.6392 + 14700 1.47 0.076457903 1676.4959 147.93139 -7.5725021 4.7612867 -1072.4005 -1067.6392 + 14750 1.475 0.076457859 1647.8468 145.84289 -7.5959112 4.6940666 -1072.3333 -1067.6392 + 14800 1.48 0.076457877 1565.6357 144.8914 -7.6195017 4.6634423 -1072.3027 -1067.6392 + 14850 1.485 0.076457947 1482.0818 145.74233 -7.6439027 4.69083 -1072.3301 -1067.6392 + 14900 1.49 0.076457952 1458.8328 148.56937 -7.6680645 4.7818206 -1072.4211 -1067.6392 + 14950 1.495 0.076457894 1499.3699 152.90243 -7.6925072 4.9212832 -1072.5605 -1067.6392 + 15000 1.5 0.076457943 1551.7726 157.93125 -7.7198204 5.0831399 -1072.7224 -1067.6392 + 15050 1.505 0.076457986 1571.2434 162.8654 -7.7546524 5.2419492 -1072.8812 -1067.6392 + 15100 1.51 0.076457935 1575.6395 166.87268 -7.7966882 5.3709267 -1073.0102 -1067.6392 + 15150 1.515 0.076457852 1577.2167 169.36633 -7.8445178 5.4511868 -1073.0904 -1067.6392 + 15200 1.52 0.076457871 1551.3549 170.15934 -7.8947687 5.4767104 -1073.1159 -1067.6392 + 15250 1.525 0.076457931 1540.7825 169.38479 -7.9379114 5.4517809 -1073.091 -1067.6392 + 15300 1.53 0.076457872 1542.7519 167.721 -7.9689255 5.3982305 -1073.0375 -1067.6392 + 15350 1.535 0.076457794 1515.2436 166.07279 -7.9891151 5.3451817 -1072.9844 -1067.6392 + 15400 1.54 0.076457791 1471.3138 164.91456 -8.0001719 5.3079031 -1072.9471 -1067.6392 + 15450 1.545 0.076457806 1446.0781 164.17878 -8.005266 5.2842213 -1072.9235 -1067.6392 + 15500 1.55 0.076457866 1437.1273 163.51385 -8.007144 5.2628202 -1072.9021 -1067.6392 + 15550 1.555 0.076457955 1429.6394 162.9507 -8.0109974 5.2446946 -1072.8839 -1067.6392 + 15600 1.56 0.076457952 1428.0365 163.16031 -8.0290067 5.2514413 -1072.8907 -1067.6392 + 15650 1.565 0.076457861 1443.4131 164.39868 -8.0647449 5.291299 -1072.9305 -1067.6392 + 15700 1.57 0.076457793 1455.1522 165.85145 -8.105615 5.3380576 -1072.9773 -1067.6392 + 15750 1.575 0.076457798 1463.0529 166.37099 -8.1380795 5.3547794 -1072.994 -1067.6392 + 15800 1.58 0.0764579 1465.1315 165.43643 -8.1598171 5.3246998 -1072.9639 -1067.6392 + 15850 1.585 0.076457964 1481.9518 163.30816 -8.1737913 5.2561998 -1072.8954 -1067.6392 + 15900 1.59 0.076457915 1527.4564 160.78551 -8.1825869 5.1750065 -1072.8142 -1067.6392 + 15950 1.595 0.076457836 1575.6511 158.77652 -8.1876334 5.1103456 -1072.7496 -1067.6392 + 16000 1.6 0.07645778 1614.7527 157.95908 -8.1929355 5.0840356 -1072.7233 -1067.6392 + 16050 1.605 0.076457779 1617.7108 158.3895 -8.1978312 5.0978888 -1072.7371 -1067.6392 + 16100 1.61 0.076457748 1603.592 159.6981 -8.1974276 5.1400074 -1072.7792 -1067.6392 + 16150 1.615 0.076457683 1621.7853 161.62591 -8.1934309 5.2020553 -1072.8413 -1067.6392 + 16200 1.62 0.076457713 1666.2189 163.90851 -8.1904572 5.2755226 -1072.9148 -1067.6392 + 16250 1.625 0.076457784 1699.4521 166.19825 -8.1928336 5.3492197 -1072.9885 -1067.6392 + 16300 1.63 0.076457822 1732.0779 168.1831 -8.2032476 5.4131037 -1073.0523 -1067.6392 + 16350 1.635 0.076457792 1749.3266 169.69701 -8.2214781 5.4618299 -1073.1011 -1067.6392 + 16400 1.64 0.076457743 1727.9265 170.72169 -8.2470147 5.4948102 -1073.134 -1067.6392 + 16450 1.645 0.076457802 1695.7397 171.03962 -8.2748768 5.5050428 -1073.1443 -1067.6392 + 16500 1.65 0.076457865 1654.9001 170.1718 -8.2900487 5.4771114 -1073.1163 -1067.6392 + 16550 1.655 0.076457864 1599.4818 168.42964 -8.2855859 5.4210388 -1073.0603 -1067.6392 + 16600 1.66 0.076457829 1549.0403 167.32713 -8.2743004 5.3855536 -1073.0248 -1067.6392 + 16650 1.665 0.076457816 1552.8738 168.16653 -8.2712688 5.4125703 -1073.0518 -1067.6392 + 16700 1.67 0.076457855 1613.3994 170.72875 -8.278589 5.4950374 -1073.1343 -1067.6392 + 16750 1.675 0.076457923 1657.1911 173.60042 -8.287191 5.5874642 -1073.2267 -1067.6392 + 16800 1.68 0.076457913 1642.492 175.54043 -8.290541 5.6499049 -1073.2891 -1067.6392 + 16850 1.685 0.076457804 1591.5457 176.27819 -8.2944475 5.6736502 -1073.3129 -1067.6392 + 16900 1.69 0.076457721 1535.2384 176.07329 -8.3085794 5.6670554 -1073.3063 -1067.6392 + 16950 1.695 0.076457718 1505.622 175.05532 -8.3334071 5.6342912 -1073.2735 -1067.6392 + 17000 1.7 0.076457759 1497.9484 173.29107 -8.3636107 5.5775077 -1073.2167 -1067.6392 + 17050 1.705 0.076457839 1497.0049 170.93476 -8.3927083 5.5016678 -1073.1409 -1067.6392 + 17100 1.71 0.076457875 1511.4053 168.29935 -8.4139231 5.4168451 -1073.0561 -1067.6392 + 17150 1.715 0.076457846 1513.6863 166.13296 -8.4263326 5.3471182 -1072.9863 -1067.6392 + 17200 1.72 0.076457792 1500.5415 165.41134 -8.4331329 5.3238925 -1072.9631 -1067.6392 + 17250 1.725 0.076457779 1516.4257 166.86136 -8.4395441 5.3705623 -1073.0098 -1067.6392 + 17300 1.73 0.076457719 1560.1678 170.36031 -8.4473104 5.4831788 -1073.1224 -1067.6392 + 17350 1.735 0.076457713 1589.7681 174.76749 -8.4563024 5.6250272 -1073.2643 -1067.6392 + 17400 1.74 0.076457713 1591.6237 178.46853 -8.4713912 5.7441481 -1073.3834 -1067.6392 + 17450 1.745 0.076457675 1596.2649 179.85013 -8.4922285 5.7886159 -1073.4279 -1067.6392 + 17500 1.75 0.076457641 1584.0194 177.91175 -8.5124955 5.7262277 -1073.3655 -1067.6392 + 17550 1.755 0.076457729 1561.3047 172.8566 -8.5331849 5.5635239 -1073.2028 -1067.6392 + 17600 1.76 0.076457773 1572.5958 165.81832 -8.5554415 5.3369913 -1072.9762 -1067.6392 + 17650 1.765 0.076457741 1605.3403 158.62222 -8.5744278 5.1053792 -1072.7446 -1067.6392 + 17700 1.77 0.076457777 1625.9857 153.83663 -8.5928174 4.9513512 -1072.5906 -1067.6392 + 17750 1.775 0.076457794 1624.2493 153.59935 -8.6164551 4.9437143 -1072.5829 -1067.6392 + 17800 1.78 0.076457697 1600.4975 158.02997 -8.639484 5.0863173 -1072.7255 -1067.6392 + 17850 1.785 0.076457635 1572.3161 165.46312 -8.6573098 5.3255589 -1072.9648 -1067.6392 + 17900 1.79 0.076457609 1561.9769 173.49259 -8.6712589 5.5839937 -1073.2232 -1067.6392 + 17950 1.795 0.076457688 1562.7517 180.08491 -8.6850112 5.7961727 -1073.4354 -1067.6392 + 18000 1.8 0.076457774 1534.5231 184.30185 -8.7046968 5.9318979 -1073.5711 -1067.6392 + 18050 1.805 0.076457734 1514.7751 185.91513 -8.7282196 5.9838228 -1073.6231 -1067.6392 + 18100 1.81 0.076457673 1529.4218 185.3585 -8.7536862 5.9659073 -1073.6051 -1067.6392 + 18150 1.815 0.076457707 1528.0858 183.58143 -8.7834393 5.9087109 -1073.5479 -1067.6392 + 18200 1.82 0.0764577 1527.873 181.50762 -8.8147286 5.8419635 -1073.4812 -1067.6392 + 18250 1.825 0.076457665 1548.9614 179.99555 -8.8428647 5.7932965 -1073.4325 -1067.6392 + 18300 1.83 0.076457588 1549.3007 179.95539 -8.8681457 5.7920039 -1073.4312 -1067.6392 + 18350 1.835 0.076457533 1526.091 181.95841 -8.8948825 5.8564725 -1073.4957 -1067.6392 + 18400 1.84 0.076457629 1493.8372 185.43374 -8.9193239 5.968329 -1073.6076 -1067.6392 + 18450 1.845 0.076457747 1466.0305 188.93806 -8.9346392 6.0811179 -1073.7204 -1067.6392 + 18500 1.85 0.076457732 1463.6299 191.18823 -8.9432273 6.1535417 -1073.7928 -1067.6392 + 18550 1.855 0.076457611 1470.3581 191.71361 -8.9569487 6.1704514 -1073.8097 -1067.6392 + 18600 1.86 0.076457576 1465.3642 190.61383 -8.9856472 6.135054 -1073.7743 -1067.6392 + 18650 1.865 0.076457589 1435.5034 187.7372 -9.0216033 6.0424676 -1073.6817 -1067.6392 + 18700 1.87 0.076457602 1387.1168 182.94758 -9.0538168 5.8883099 -1073.5275 -1067.6392 + 18750 1.875 0.076457646 1370.2898 176.6874 -9.0814451 5.686821 -1073.3261 -1067.6392 + 18800 1.88 0.076457607 1396.5471 169.73777 -9.1008384 5.4631417 -1073.1024 -1067.6392 + 18850 1.885 0.076457617 1424.9718 163.2588 -9.109503 5.2546111 -1072.8938 -1067.6392 + 18900 1.89 0.076457679 1428.3173 158.69622 -9.1168953 5.107761 -1072.747 -1067.6392 + 18950 1.895 0.076457649 1439.2765 156.82172 -9.1272053 5.0474288 -1072.6867 -1067.6392 + 19000 1.9 0.076457629 1459.8802 157.73056 -9.1321959 5.0766804 -1072.7159 -1067.6392 + 19050 1.905 0.076457635 1504.363 162.01011 -9.1350256 5.2144212 -1072.8536 -1067.6392 + 19100 1.91 0.07645765 1534.7588 170.14098 -9.1510965 5.4761196 -1073.1153 -1067.6392 + 19150 1.915 0.076457653 1508.0173 180.71726 -9.1848155 5.8165254 -1073.4558 -1067.6392 + 19200 1.92 0.076457613 1467.829 190.69721 -9.2245704 6.1377378 -1073.777 -1067.6392 + 19250 1.925 0.076457631 1432.4759 197.48699 -9.2604662 6.3562721 -1073.9955 -1067.6392 + 19300 1.93 0.07645763 1411.3494 200.09216 -9.2919631 6.4401214 -1074.0794 -1067.6392 + 19350 1.935 0.076457594 1414.8241 198.83025 -9.3208023 6.399506 -1074.0387 -1067.6392 + 19400 1.94 0.076457607 1435.692 194.74665 -9.3453509 6.2680721 -1073.9073 -1067.6392 + 19450 1.945 0.076457654 1457.6905 189.4249 -9.3649457 6.0967875 -1073.736 -1067.6392 + 19500 1.95 0.076457645 1449.0474 184.9571 -9.3864711 5.9529879 -1073.5922 -1067.6392 + 19550 1.955 0.076457606 1409.8482 183.36678 -9.4200425 5.901802 -1073.541 -1067.6392 + 19600 1.96 0.076457637 1376.8581 185.3704 -9.4660084 5.9662902 -1073.6055 -1067.6392 + 19650 1.965 0.076457676 1394.1961 189.79341 -9.512099 6.1086483 -1073.7479 -1067.6392 + 19700 1.97 0.076457666 1444.3533 194.43969 -9.5410671 6.2581922 -1073.8974 -1067.6392 + 19750 1.975 0.076457652 1456.9001 197.74076 -9.5468975 6.3644397 -1074.0037 -1067.6392 + 19800 1.98 0.076457697 1416.4247 199.50327 -9.5434518 6.4211677 -1074.0604 -1067.6392 + 19850 1.985 0.07645765 1363.4589 200.03465 -9.5469461 6.4382705 -1074.0775 -1067.6392 + 19900 1.99 0.076457547 1331.9006 199.31164 -9.5615968 6.4149999 -1074.0542 -1067.6392 + 19950 1.995 0.076457526 1324.5585 197.29584 -9.5885975 6.3501197 -1073.9894 -1067.6392 + 20000 2 0.076457553 1337.069 194.04585 -9.6231448 6.2455162 -1073.8847 -1067.6392 + 20050 2.005 0.076457648 1351.0753 189.93086 -9.6575947 6.113072 -1073.7523 -1067.6392 + 20100 2.01 0.076457655 1339.7133 185.8145 -9.6913164 5.980584 -1073.6198 -1067.6392 + 20150 2.015 0.076457614 1318.0742 182.57664 -9.7225895 5.8763709 -1073.5156 -1067.6392 + 20200 2.02 0.076457601 1288.6368 180.87905 -9.7460096 5.8217325 -1073.461 -1067.6392 + 20250 2.025 0.076457595 1270.6138 181.09203 -9.7599966 5.8285875 -1073.4678 -1067.6392 + 20300 2.03 0.07645759 1297.0333 183.14558 -9.771863 5.8946825 -1073.5339 -1067.6392 + 20350 2.035 0.076457544 1322.481 186.19746 -9.7878745 5.9929098 -1073.6321 -1067.6392 + 20400 2.04 0.076457529 1321.8589 188.69758 -9.8051647 6.0733781 -1073.7126 -1067.6392 + 20450 2.045 0.076457552 1334.9839 189.43488 -9.8222144 6.0971087 -1073.7363 -1067.6392 + 20500 2.05 0.076457581 1383.7092 188.25801 -9.8390497 6.05923 -1073.6985 -1067.6392 + 20550 2.055 0.076457593 1422.9993 186.0328 -9.8547027 5.9876099 -1073.6268 -1067.6392 + 20600 2.06 0.07645748 1399.9508 184.16392 -9.8728024 5.9274586 -1073.5667 -1067.6392 + 20650 2.065 0.076457422 1335.1662 183.59411 -9.8931369 5.9091189 -1073.5483 -1067.6392 + 20700 2.07 0.076457465 1306.751 184.55079 -9.9118543 5.9399103 -1073.5791 -1067.6392 + 20750 2.075 0.076457483 1305.5888 187.07424 -9.9311695 6.0211296 -1073.6604 -1067.6392 + 20800 2.08 0.076457441 1294.1667 191.05858 -9.9508151 6.1493686 -1073.7886 -1067.6392 + 20850 2.085 0.076457401 1282.0253 196.07833 -9.9647464 6.3109334 -1073.9502 -1067.6392 + 20900 2.09 0.076457455 1292.0201 201.33144 -9.9711707 6.4800088 -1074.1192 -1067.6392 + 20950 2.095 0.076457576 1320.8835 205.6673 -9.9717153 6.6195616 -1074.2588 -1067.6392 + 21000 2.1 0.076457569 1327.4497 207.97171 -9.9627916 6.6937308 -1074.333 -1067.6392 + 21050 2.105 0.076457524 1302.0315 208.01339 -9.9425688 6.6950725 -1074.3343 -1067.6392 + 21100 2.11 0.076457555 1283.4817 206.79741 -9.9230585 6.6559351 -1074.2952 -1067.6392 + 21150 2.115 0.076457542 1295.1909 205.4375 -9.914788 6.6121654 -1074.2514 -1067.6392 + 21200 2.12 0.076457479 1321.5201 204.1527 -9.909418 6.5708132 -1074.21 -1067.6392 + 21250 2.125 0.076457453 1325.0561 202.79152 -9.8961399 6.5270024 -1074.1662 -1067.6392 + 21300 2.13 0.076457519 1301.9167 201.35361 -9.8787376 6.4807223 -1074.12 -1067.6392 + 21350 2.135 0.076457579 1274.9532 199.72664 -9.868175 6.428357 -1074.0676 -1067.6392 + 21400 2.14 0.076457544 1261.6495 197.3916 -9.8684802 6.3532018 -1073.9924 -1067.6392 + 21450 2.145 0.076457471 1267.8867 193.48031 -9.8693012 6.2273138 -1073.8665 -1067.6392 + 21500 2.15 0.076457431 1293.2863 187.70474 -9.8616374 6.0414226 -1073.6807 -1067.6392 + 21550 2.155 0.07645745 1323.0989 181.26349 -9.8574218 5.8341061 -1073.4733 -1067.6392 + 21600 2.16 0.076457464 1324.9095 175.93101 -9.8707078 5.662476 -1073.3017 -1067.6392 + 21650 2.165 0.076457483 1337.2372 172.83131 -9.9003355 5.56271 -1073.2019 -1067.6392 + 21700 2.17 0.076457536 1353.6476 172.28199 -9.9335024 5.5450296 -1073.1843 -1067.6392 + 21750 2.175 0.076457522 1337.4658 174.63693 -9.9656126 5.6208252 -1073.2601 -1067.6392 + 21800 2.18 0.076457492 1319.6144 180.27032 -10.002014 5.8021402 -1073.4414 -1067.6392 + 21850 2.185 0.076457468 1325.9534 188.6868 -10.042097 6.073031 -1073.7123 -1067.6392 + 21900 2.19 0.0764574 1351.519 198.20437 -10.076426 6.3793615 -1074.0186 -1067.6392 + 21950 2.195 0.076457412 1373.8526 206.68615 -10.099592 6.6523543 -1074.2916 -1067.6392 + 22000 2.2 0.076457518 1392.659 212.65494 -10.12001 6.8444642 -1074.4837 -1067.6392 + 22050 2.205 0.076457606 1390.3967 215.42094 -10.145572 6.93349 -1074.5727 -1067.6392 + 22100 2.21 0.076457602 1347.4452 214.94045 -10.173725 6.9180253 -1074.5573 -1067.6392 + 22150 2.215 0.076457513 1283.3202 211.98537 -10.199933 6.8229137 -1074.4621 -1067.6392 + 22200 2.22 0.076457494 1222.5665 207.95995 -10.224493 6.6933523 -1074.3326 -1067.6392 + 22250 2.225 0.076457542 1202.5195 204.45409 -10.254994 6.5805135 -1074.2197 -1067.6392 + 22300 2.23 0.076457582 1210.7113 202.41627 -10.292456 6.5149247 -1074.1542 -1067.6392 + 22350 2.235 0.076457593 1220.7645 201.90137 -10.329195 6.4983524 -1074.1376 -1067.6392 + 22400 2.24 0.076457607 1234.7446 202.62559 -10.36471 6.521662 -1074.1609 -1067.6392 + 22450 2.245 0.076457614 1256.0665 204.20591 -10.403554 6.5725258 -1074.2118 -1067.6392 + 22500 2.25 0.076457647 1289.6179 206.08787 -10.44356 6.6330979 -1074.2723 -1067.6392 + 22550 2.255 0.076457648 1318.2401 207.71118 -10.483186 6.6853454 -1074.3246 -1067.6392 + 22600 2.26 0.076457621 1319.5232 208.34289 -10.522979 6.7056776 -1074.3449 -1067.6392 + 22650 2.265 0.076457589 1316.8506 207.24251 -10.561044 6.670261 -1074.3095 -1067.6392 + 22700 2.27 0.076457617 1331.642 204.29832 -10.595084 6.5755001 -1074.2147 -1067.6392 + 22750 2.275 0.076457638 1346.6949 200.13918 -10.622417 6.4416347 -1074.0809 -1067.6392 + 22800 2.28 0.076457572 1347.787 196.067 -10.645862 6.3105686 -1073.9498 -1067.6392 + 22850 2.285 0.076457478 1357.3814 193.71126 -10.672581 6.2347474 -1073.874 -1067.6392 + 22900 2.29 0.076457506 1359.0604 194.23136 -10.704942 6.2514872 -1073.8907 -1067.6392 + 22950 2.295 0.07645755 1347.1653 197.67464 -10.741957 6.3623116 -1074.0015 -1067.6392 + 23000 2.3 0.076457564 1321.3672 202.79941 -10.780161 6.5272563 -1074.1665 -1067.6392 + 23050 2.305 0.076457626 1300.8493 207.8112 -10.812965 6.6885649 -1074.3278 -1067.6392 + 23100 2.31 0.076457662 1289.7113 211.5894 -10.839288 6.8101691 -1074.4494 -1067.6392 + 23150 2.315 0.076457654 1266.9494 213.84528 -10.86234 6.8827763 -1074.522 -1067.6392 + 23200 2.32 0.076457651 1237.4556 214.46793 -10.878861 6.9028167 -1074.542 -1067.6392 + 23250 2.325 0.076457588 1216.4817 213.53906 -10.88737 6.8729203 -1074.5122 -1067.6392 + 23300 2.33 0.076457561 1198.6768 211.4015 -10.892244 6.8041213 -1074.4434 -1067.6392 + 23350 2.335 0.076457617 1218.46 208.62206 -10.896503 6.714663 -1074.3539 -1067.6392 + 23400 2.34 0.076457697 1274.0141 206.18082 -10.898818 6.6360899 -1074.2753 -1067.6392 + 23450 2.345 0.076457697 1310.0462 205.39475 -10.899188 6.6107893 -1074.25 -1067.6392 + 23500 2.35 0.076457625 1309.8688 206.85671 -10.898274 6.6578437 -1074.2971 -1067.6392 + 23550 2.355 0.076457607 1294.4375 210.05998 -10.904793 6.7609436 -1074.4002 -1067.6392 + 23600 2.36 0.076457638 1272.3829 213.64213 -10.924411 6.8762376 -1074.5155 -1067.6392 + 23650 2.365 0.07645764 1263.3834 215.89726 -10.943246 6.9488208 -1074.5881 -1067.6392 + 23700 2.37 0.0764576 1265.3339 216.28708 -10.95133 6.9613674 -1074.6006 -1067.6392 + 23750 2.375 0.076457533 1265.7883 215.64775 -10.954658 6.9407901 -1074.58 -1067.6392 + 23800 2.38 0.076457509 1270.324 215.14847 -10.964811 6.9247203 -1074.564 -1067.6392 + 23850 2.385 0.076457647 1295.1389 215.59482 -10.992719 6.9390865 -1074.5783 -1067.6392 + 23900 2.39 0.07645774 1317.1304 216.50299 -11.032267 6.9683166 -1074.6075 -1067.6392 + 23950 2.395 0.076457678 1323.3993 216.86149 -11.06922 6.9798554 -1074.6191 -1067.6392 + 24000 2.4 0.076457616 1327.0079 216.51416 -11.098994 6.9686763 -1074.6079 -1067.6392 + 24050 2.405 0.076457602 1347.1187 215.98329 -11.123989 6.9515898 -1074.5908 -1067.6392 + 24100 2.41 0.076457633 1373.0058 215.6582 -11.147405 6.9411267 -1074.5804 -1067.6392 + 24150 2.415 0.076457606 1357.3622 215.33306 -11.168833 6.9306616 -1074.5699 -1067.6392 + 24200 2.42 0.076457558 1293.9783 214.6673 -11.190176 6.9092338 -1074.5485 -1067.6392 + 24250 2.425 0.076457575 1262.6983 213.59841 -11.211793 6.8748305 -1074.5141 -1067.6392 + 24300 2.43 0.076457586 1296.1082 212.60059 -11.234851 6.8427151 -1074.4819 -1067.6392 + 24350 2.435 0.07645758 1338.5152 212.36533 -11.263922 6.8351428 -1074.4744 -1067.6392 + 24400 2.44 0.07645762 1359.7328 212.76414 -11.288804 6.847979 -1074.4872 -1067.6392 + 24450 2.445 0.076457613 1354.6032 213.05104 -11.296422 6.8572131 -1074.4964 -1067.6392 + 24500 2.45 0.07645752 1340.1858 212.64499 -11.294481 6.8441441 -1074.4834 -1067.6392 + 24550 2.455 0.07645749 1331.5151 211.50434 -11.306624 6.8074314 -1074.4467 -1067.6392 + 24600 2.46 0.076457509 1316.1319 209.75998 -11.338874 6.7512878 -1074.3905 -1067.6392 + 24650 2.465 0.076457501 1303.2352 208.01652 -11.382268 6.6951732 -1074.3344 -1067.6392 + 24700 2.47 0.076457554 1316.5042 207.54508 -11.432653 6.6799995 -1074.3192 -1067.6392 + 24750 2.475 0.076457644 1323.4729 209.08952 -11.480943 6.7297085 -1074.3689 -1067.6392 + 24800 2.48 0.076457563 1316.2449 212.60405 -11.521223 6.8428264 -1074.4821 -1067.6392 + 24850 2.485 0.076457464 1303.023 217.39017 -11.549403 6.9968714 -1074.6361 -1067.6392 + 24900 2.49 0.076457476 1306.7431 222.37347 -11.558822 7.1572628 -1074.7965 -1067.6392 + 24950 2.495 0.07645745 1300.9383 226.66891 -11.5504 7.2955148 -1074.9347 -1067.6392 + 25000 2.5 0.076457461 1270.8966 229.83334 -11.536542 7.3973644 -1075.0366 -1067.6392 + 25050 2.505 0.076457456 1266.2646 231.90105 -11.533642 7.4639151 -1075.1031 -1067.6392 + 25100 2.51 0.076457446 1270.2017 233.06025 -11.547509 7.501225 -1075.1405 -1067.6392 + 25150 2.515 0.07645757 1231.6171 233.15738 -11.56954 7.5043513 -1075.1436 -1067.6392 + 25200 2.52 0.076457709 1191.0767 231.73714 -11.589225 7.4586397 -1075.0979 -1067.6392 + 25250 2.525 0.076457772 1193.1019 228.87762 -11.611584 7.366604 -1075.0058 -1067.6392 + 25300 2.53 0.076457705 1202.8442 225.48075 -11.647482 7.257273 -1074.8965 -1067.6392 + 25350 2.535 0.076457601 1201.3602 222.49225 -11.687125 7.1610856 -1074.8003 -1067.6392 + 25400 2.54 0.076457625 1191.7307 220.47028 -11.711225 7.0960072 -1074.7352 -1067.6392 + 25450 2.545 0.076457676 1184.558 219.7896 -11.72244 7.074099 -1074.7133 -1067.6392 + 25500 2.55 0.07645769 1209.0131 220.21101 -11.729634 7.0876623 -1074.7269 -1067.6392 + 25550 2.555 0.076457694 1252.4527 221.39919 -11.740381 7.1259047 -1074.7651 -1067.6392 + 25600 2.56 0.076457651 1266.8561 223.37443 -11.758317 7.1894793 -1074.8287 -1067.6392 + 25650 2.565 0.076457702 1260.0162 226.18443 -11.779767 7.2799214 -1074.9192 -1067.6392 + 25700 2.57 0.076457766 1258.0807 229.46946 -11.803244 7.3856527 -1075.0249 -1067.6392 + 25750 2.575 0.0764577 1260.0577 231.96891 -11.827028 7.4660992 -1075.1053 -1067.6392 + 25800 2.58 0.07645766 1263.5682 232.00397 -11.843175 7.4672278 -1075.1065 -1067.6392 + 25850 2.585 0.076457679 1267.6331 229.22367 -11.852724 7.3777416 -1075.017 -1067.6392 + 25900 2.59 0.076457667 1273.4873 224.95936 -11.864844 7.2404915 -1074.8797 -1067.6392 + 25950 2.595 0.076457638 1259.3238 220.69283 -11.875369 7.1031702 -1074.7424 -1067.6392 + 26000 2.6 0.07645756 1234.4517 217.53504 -11.87838 7.0015342 -1074.6408 -1067.6392 + 26050 2.605 0.076457531 1223.5843 216.47883 -11.885283 6.967539 -1074.6068 -1067.6392 + 26100 2.61 0.076457579 1239.4383 217.6799 -11.906525 7.0061965 -1074.6454 -1067.6392 + 26150 2.615 0.076457676 1254.9755 220.14626 -11.9364 7.0855781 -1074.7248 -1067.6392 + 26200 2.62 0.076457691 1263.4276 222.78599 -11.96794 7.17054 -1074.8098 -1067.6392 + 26250 2.625 0.076457661 1290.9982 225.11879 -12.002676 7.2456229 -1074.8849 -1067.6392 + 26300 2.63 0.076457625 1320.5003 226.53955 -12.032325 7.2913511 -1074.9306 -1067.6392 + 26350 2.635 0.076457604 1325.6925 226.42099 -12.045972 7.2875353 -1074.9268 -1067.6392 + 26400 2.64 0.076457635 1323.8314 225.04813 -12.050265 7.2433489 -1074.8826 -1067.6392 + 26450 2.645 0.076457683 1337.7763 223.39584 -12.056562 7.1901684 -1074.8294 -1067.6392 + 26500 2.65 0.076457646 1356.26 222.47285 -12.072437 7.1604612 -1074.7997 -1067.6392 + 26550 2.655 0.076457593 1368.7452 222.81131 -12.102517 7.1713548 -1074.8106 -1067.6392 + 26600 2.66 0.076457577 1372.4772 224.2612 -12.136283 7.2180208 -1074.8573 -1067.6392 + 26650 2.665 0.076457669 1353.1116 226.93203 -12.15666 7.3039835 -1074.9432 -1067.6392 + 26700 2.67 0.07645782 1296.4345 231.54488 -12.162395 7.4524517 -1075.0917 -1067.6392 + 26750 2.675 0.07645786 1233.171 238.00107 -12.16795 7.6602491 -1075.2995 -1067.6392 + 26800 2.68 0.0764578 1205.1226 244.60391 -12.18481 7.8727668 -1075.512 -1067.6392 + 26850 2.685 0.076457751 1203.9449 249.24116 -12.214765 8.0220202 -1075.6613 -1067.6392 + 26900 2.69 0.076457871 1220.793 250.32595 -12.247789 8.0569351 -1075.6962 -1067.6392 + 26950 2.695 0.07645797 1250.922 247.65941 -12.281839 7.9711102 -1075.6103 -1067.6392 + 27000 2.7 0.076457916 1272.2527 242.25891 -12.319204 7.7972911 -1075.4365 -1067.6392 + 27050 2.705 0.076457909 1260.7801 235.6016 -12.35094 7.5830204 -1075.2223 -1067.6392 + 27100 2.71 0.076457849 1229.7859 229.49227 -12.367756 7.3863867 -1075.0256 -1067.6392 + 27150 2.715 0.076457776 1230.1984 225.87326 -12.37385 7.2699062 -1074.9091 -1067.6392 + 27200 2.72 0.076457788 1256.5205 226.01981 -12.383103 7.2746231 -1074.9139 -1067.6392 + 27250 2.725 0.076457742 1269.109 229.57592 -12.401772 7.3890791 -1075.0283 -1067.6392 + 27300 2.73 0.076457757 1278.2216 234.37745 -12.41951 7.5436201 -1075.1829 -1067.6392 + 27350 2.735 0.076457815 1281.9146 237.72622 -12.426299 7.651403 -1075.2906 -1067.6392 + 27400 2.74 0.076457895 1266.5327 238.04161 -12.428658 7.6615539 -1075.3008 -1067.6392 + 27450 2.745 0.076457976 1238.9201 235.37217 -12.441314 7.5756359 -1075.2149 -1067.6392 + 27500 2.75 0.076457843 1230.4481 230.70667 -12.466737 7.4254733 -1075.0647 -1067.6392 + 27550 2.755 0.076457656 1236.7255 225.51713 -12.497899 7.2584439 -1074.8977 -1067.6392 + 27600 2.76 0.07645776 1238.11 221.28548 -12.52521 7.1222449 -1074.7615 -1067.6392 + 27650 2.765 0.076457889 1218.4037 219.08795 -12.543581 7.0515156 -1074.6907 -1067.6392 + 27700 2.77 0.076457882 1198.4777 219.33613 -12.554891 7.0595037 -1074.6987 -1067.6392 + 27750 2.775 0.076457863 1183.089 221.96976 -12.561518 7.144269 -1074.7835 -1067.6392 + 27800 2.78 0.076457885 1169.37 227.37353 -12.573341 7.3181935 -1074.9574 -1067.6392 + 27850 2.785 0.076457897 1169.7411 235.91312 -12.602269 7.5930469 -1075.2323 -1067.6392 + 27900 2.79 0.076457851 1151.3464 246.28711 -12.644365 7.9269419 -1075.5662 -1067.6392 + 27950 2.795 0.076457843 1106.9771 255.46726 -12.682364 8.2224121 -1075.8616 -1067.6392 + 28000 2.8 0.076457826 1068.9543 260.54346 -12.70329 8.3857935 -1076.025 -1067.6392 + 28050 2.805 0.076457783 1046.8631 260.38287 -12.707616 8.3806246 -1076.0199 -1067.6392 + 28100 2.81 0.076457851 1035.4028 255.75262 -12.701329 8.2315965 -1075.8708 -1067.6392 + 28150 2.815 0.076457914 1039.8478 248.80323 -12.698053 8.0079252 -1075.6472 -1067.6392 + 28200 2.82 0.076457945 1077.5288 241.99763 -12.714207 7.7888815 -1075.4281 -1067.6392 + 28250 2.825 0.076457907 1106.7726 236.8129 -12.748192 7.6220071 -1075.2612 -1067.6392 + 28300 2.83 0.076457858 1088.3383 233.07492 -12.770565 7.501697 -1075.1409 -1067.6392 + 28350 2.835 0.076457962 1067.6408 230.2341 -12.762291 7.4102632 -1075.0495 -1067.6392 + 28400 2.84 0.076458053 1085.7765 228.74782 -12.741859 7.362426 -1075.0017 -1067.6392 + 28450 2.845 0.076458069 1116.0156 229.35012 -12.732966 7.3818115 -1075.021 -1067.6392 + 28500 2.85 0.07645799 1140.0561 231.95241 -12.737452 7.4655684 -1075.1048 -1067.6392 + 28550 2.855 0.076457881 1175.3679 235.63809 -12.744967 7.5841948 -1075.2234 -1067.6392 + 28600 2.86 0.076457945 1191.5122 239.06582 -12.744692 7.6945191 -1075.3338 -1067.6392 + 28650 2.865 0.076458033 1165.8181 241.0619 -12.730571 7.7587645 -1075.398 -1067.6392 + 28700 2.87 0.076458003 1144.2872 241.42924 -12.708938 7.7705875 -1075.4098 -1067.6392 + 28750 2.875 0.076457916 1156.9296 241.00794 -12.69273 7.7570275 -1075.3963 -1067.6392 + 28800 2.88 0.076457978 1169.6062 241.01439 -12.691343 7.7572351 -1075.3965 -1067.6392 + 28850 2.885 0.076458067 1153.2461 242.11608 -12.703125 7.7926941 -1075.4319 -1067.6392 + 28900 2.89 0.076458128 1137.1648 244.24646 -12.730476 7.8612619 -1075.5005 -1067.6392 + 28950 2.895 0.076458132 1144.0676 245.87591 -12.765806 7.9137071 -1075.5529 -1067.6392 + 29000 2.9 0.076458055 1166.7003 244.81325 -12.786467 7.8795045 -1075.5187 -1067.6392 + 29050 2.905 0.076458115 1201.626 240.80417 -12.786117 7.7504692 -1075.3897 -1067.6392 + 29100 2.91 0.076458234 1227.2794 235.81398 -12.775018 7.5898561 -1075.2291 -1067.6392 + 29150 2.915 0.076458217 1233.5955 232.10337 -12.761015 7.470427 -1075.1097 -1067.6392 + 29200 2.92 0.076458111 1222.4273 231.10647 -12.757278 7.4383412 -1075.0776 -1067.6392 + 29250 2.925 0.076458074 1212.9521 232.98759 -12.778062 7.4988864 -1075.1381 -1067.6392 + 29300 2.93 0.076458082 1220.2844 236.56821 -12.814589 7.6141315 -1075.2534 -1067.6392 + 29350 2.935 0.076458085 1197.6267 240.71244 -12.847172 7.7475166 -1075.3867 -1067.6392 + 29400 2.94 0.076458174 1166.2296 245.3581 -12.871897 7.8970407 -1075.5363 -1067.6392 + 29450 2.945 0.0764582 1162.6548 250.15917 -12.892997 8.0515671 -1075.6908 -1067.6392 + 29500 2.95 0.076458192 1166.7685 253.39653 -12.905195 8.1557639 -1075.795 -1067.6392 + 29550 2.955 0.076458187 1155.8258 253.69254 -12.906863 8.1652912 -1075.8045 -1067.6392 + 29600 2.96 0.076458159 1155.2633 251.58259 -12.911192 8.0973809 -1075.7366 -1067.6392 + 29650 2.965 0.076458142 1187.0841 248.958 -12.92707 8.0129065 -1075.6521 -1067.6392 + 29700 2.97 0.076458107 1216.9951 247.40312 -12.945328 7.9628616 -1075.6021 -1067.6392 + 29750 2.975 0.076458054 1194.8857 246.85295 -12.955382 7.9451538 -1075.5844 -1067.6392 + 29800 2.98 0.076458024 1170.1087 246.10026 -12.960888 7.9209279 -1075.5602 -1067.6392 + 29850 2.985 0.076458073 1169.1596 244.20885 -12.971119 7.8600515 -1075.4993 -1067.6392 + 29900 2.99 0.076458181 1160.4286 240.86241 -12.984094 7.7523436 -1075.3916 -1067.6392 + 29950 2.995 0.076458232 1131.8843 236.46352 -12.994209 7.6107619 -1075.25 -1067.6392 + 30000 3 0.076458157 1094.5416 232.18947 -13.0017 7.4731984 -1075.1124 -1067.6392 + 30050 3.005 0.076458011 1065.8494 229.55114 -13.006404 7.3882816 -1075.0275 -1067.6392 + 30100 3.01 0.076458026 1061.4657 229.77899 -13.012924 7.3956153 -1075.0348 -1067.6392 + 30150 3.015 0.076458159 1064.4309 232.81858 -13.028261 7.4934467 -1075.1327 -1067.6392 + 30200 3.02 0.076458266 1064.5403 237.18963 -13.051358 7.6341323 -1075.2734 -1067.6392 + 30250 3.025 0.076458254 1077.435 241.1768 -13.07564 7.7624624 -1075.4017 -1067.6392 + 30300 3.03 0.076458129 1120.7955 244.00429 -13.099282 7.8534675 -1075.4927 -1067.6392 + 30350 3.035 0.076458123 1166.6115 245.76237 -13.120127 7.9100525 -1075.5493 -1067.6392 + 30400 3.04 0.076458222 1186.7887 246.73143 -13.12997 7.9412425 -1075.5805 -1067.6392 + 30450 3.045 0.076458192 1210.3729 247.3058 -13.131142 7.9597292 -1075.599 -1067.6392 + 30500 3.05 0.076458205 1226.7005 247.41892 -13.129466 7.9633701 -1075.6026 -1067.6392 + 30550 3.055 0.076458239 1218.1054 246.53578 -13.123602 7.9349454 -1075.5742 -1067.6392 + 30600 3.06 0.076458222 1213.5049 244.89144 -13.119076 7.882021 -1075.5213 -1067.6392 + 30650 3.065 0.076458209 1197.742 243.51998 -13.124172 7.8378794 -1075.4771 -1067.6392 + 30700 3.07 0.076458217 1173.0375 243.32265 -13.142559 7.8315283 -1075.4708 -1067.6392 + 30750 3.075 0.076458232 1174.7744 244.4044 -13.175375 7.8663454 -1075.5056 -1067.6392 + 30800 3.08 0.076458215 1182.8312 245.99614 -13.218442 7.9175767 -1075.5568 -1067.6392 + 30850 3.085 0.076458183 1183.66 247.03526 -13.258527 7.9510216 -1075.5903 -1067.6392 + 30900 3.09 0.076458319 1177.992 247.2078 -13.284596 7.9565748 -1075.5958 -1067.6392 + 30950 3.095 0.076458373 1176.7211 247.34132 -13.301899 7.9608722 -1075.6001 -1067.6392 + 31000 3.1 0.076458253 1164.7417 248.53603 -13.327025 7.9993251 -1075.6386 -1067.6392 + 31050 3.105 0.076458217 1128.9001 250.94808 -13.365858 8.0769586 -1075.7162 -1067.6392 + 31100 3.11 0.076458294 1092.9077 253.74162 -13.407353 8.1668708 -1075.8061 -1067.6392 + 31150 3.115 0.076458358 1079.4871 256.46396 -13.445278 8.2544917 -1075.8937 -1067.6392 + 31200 3.12 0.076458421 1088.7747 259.60213 -13.488098 8.3554961 -1075.9947 -1067.6392 + 31250 3.125 0.07645843 1133.6001 263.188 -13.540135 8.47091 -1076.1101 -1067.6392 + 31300 3.13 0.076458393 1192.6693 265.96082 -13.591815 8.5601553 -1076.1994 -1067.6392 + 31350 3.135 0.076458398 1206.7015 266.41337 -13.631689 8.5747211 -1076.214 -1067.6392 + 31400 3.14 0.07645845 1184.8303 264.21376 -13.660682 8.5039248 -1076.1432 -1067.6392 + 31450 3.145 0.07645848 1183.6347 260.39213 -13.689676 8.380923 -1076.0202 -1067.6392 + 31500 3.15 0.076458598 1199.1745 256.21199 -13.723387 8.2463816 -1075.8856 -1067.6392 + 31550 3.155 0.076458602 1226.3861 252.38445 -13.753029 8.1231895 -1075.7624 -1067.6392 + 31600 3.16 0.076458505 1232.7936 249.62393 -13.772372 8.0343401 -1075.6736 -1067.6392 + 31650 3.165 0.076458472 1194.1646 248.63142 -13.78451 8.0023952 -1075.6416 -1067.6392 + 31700 3.17 0.076458402 1135.0204 248.67712 -13.784757 8.0038662 -1075.6431 -1067.6392 + 31750 3.175 0.076458444 1088.5207 248.0804 -13.772118 7.9846602 -1075.6239 -1067.6392 + 31800 3.18 0.076458483 1079.5555 246.27927 -13.761932 7.9266895 -1075.5659 -1067.6392 + 31850 3.185 0.076458412 1103.2185 244.3339 -13.766697 7.8640762 -1075.5033 -1067.6392 + 31900 3.19 0.07645842 1120.0872 243.8787 -13.782801 7.8494252 -1075.4887 -1067.6392 + 31950 3.195 0.076458479 1119.4512 245.95725 -13.799444 7.9163248 -1075.5556 -1067.6392 + 32000 3.2 0.07645851 1092.4855 250.30658 -13.803665 8.0563117 -1075.6955 -1067.6392 + 32050 3.205 0.076458415 1067.424 255.82203 -13.785579 8.2338307 -1075.8731 -1067.6392 + 32100 3.21 0.076458345 1068.4429 261.44517 -13.748535 8.4148156 -1076.054 -1067.6392 + 32150 3.215 0.07645841 1080.7046 266.36957 -13.713453 8.5733114 -1076.2125 -1067.6392 + 32200 3.22 0.076458507 1092.5849 269.83978 -13.708135 8.6850028 -1076.3242 -1067.6392 + 32250 3.225 0.076458535 1099.8414 270.7057 -13.73358 8.7128731 -1076.3521 -1067.6392 + 32300 3.23 0.076458534 1114.7135 268.29144 -13.763677 8.6351683 -1076.2744 -1067.6392 + 32350 3.235 0.076458458 1109.1702 263.87403 -13.783235 8.4929906 -1076.1322 -1067.6392 + 32400 3.24 0.07645842 1084.0276 259.90176 -13.803644 8.36514 -1076.0044 -1067.6392 + 32450 3.245 0.076458464 1083.1937 257.32785 -13.835634 8.2822966 -1075.9215 -1067.6392 + 32500 3.25 0.07645845 1114.4646 255.14878 -13.870961 8.2121616 -1075.8514 -1067.6392 + 32550 3.255 0.076458381 1152.8289 252.6422 -13.897547 8.1314852 -1075.7707 -1067.6392 + 32600 3.26 0.076458468 1177.486 250.67802 -13.912211 8.0682668 -1075.7075 -1067.6392 + 32650 3.265 0.076458565 1185.3078 250.60277 -13.918256 8.0658447 -1075.7051 -1067.6392 + 32700 3.27 0.076458542 1191.2786 252.7908 -13.926328 8.136268 -1075.7755 -1067.6392 + 32750 3.275 0.076458529 1180.3288 256.6616 -13.948559 8.2608527 -1075.9001 -1067.6392 + 32800 3.28 0.076458451 1153.7783 261.08347 -13.985264 8.4031741 -1076.0424 -1067.6392 + 32850 3.285 0.076458392 1133.2496 264.84942 -14.024763 8.5243841 -1076.1636 -1067.6392 + 32900 3.29 0.076458438 1115.3658 267.38276 -14.053439 8.6059217 -1076.2452 -1067.6392 + 32950 3.295 0.076458471 1127.683 269.00733 -14.070131 8.6582097 -1076.2974 -1067.6392 + 33000 3.3 0.076458479 1149.7773 269.98003 -14.072925 8.6895169 -1076.3287 -1067.6392 + 33050 3.305 0.076458432 1151.5261 270.25086 -14.062159 8.6982337 -1076.3375 -1067.6392 + 33100 3.31 0.076458345 1155.116 269.80119 -14.049957 8.6837609 -1076.323 -1067.6392 + 33150 3.315 0.076458436 1135.61 268.22847 -14.036071 8.6331415 -1076.2724 -1067.6392 + 33200 3.32 0.076458577 1111.738 265.73519 -14.027508 8.5528932 -1076.1921 -1067.6392 + 33250 3.325 0.076458535 1116.9245 263.26799 -14.038682 8.4734846 -1076.1127 -1067.6392 + 33300 3.33 0.076458501 1131.8225 261.47169 -14.068281 8.4156693 -1076.0549 -1067.6392 + 33350 3.335 0.076458475 1120.8199 260.14815 -14.108099 8.3730701 -1076.0123 -1067.6392 + 33400 3.34 0.076458435 1094.4035 258.29932 -14.149771 8.3135641 -1075.9528 -1067.6392 + 33450 3.345 0.076458459 1082.1878 255.19265 -14.184258 8.2135735 -1075.8528 -1067.6392 + 33500 3.35 0.076458528 1083.2242 251.14433 -14.202792 8.0832751 -1075.7225 -1067.6392 + 33550 3.355 0.076458529 1103.4532 247.60346 -14.210592 7.9693094 -1075.6085 -1067.6392 + 33600 3.36 0.076458486 1137.7183 246.24059 -14.222506 7.9254445 -1075.5647 -1067.6392 + 33650 3.365 0.076458516 1150.4421 247.37214 -14.233399 7.9618644 -1075.6011 -1067.6392 + 33700 3.37 0.076458507 1143.7496 250.70305 -14.237383 8.0690723 -1075.7083 -1067.6392 + 33750 3.375 0.076458425 1135.9529 256.43973 -14.24743 8.2537116 -1075.8929 -1067.6392 + 33800 3.38 0.076458392 1126.2288 264.31662 -14.271937 8.5072354 -1076.1465 -1067.6392 + 33850 3.385 0.07645848 1105.1309 272.68103 -14.305504 8.7764506 -1076.4157 -1067.6392 + 33900 3.39 0.076458564 1085.1215 279.2817 -14.345574 8.9888984 -1076.6281 -1067.6392 + 33950 3.395 0.076458555 1076.9206 282.71636 -14.394902 9.0994454 -1076.7387 -1067.6392 + 34000 3.4 0.076458512 1086.4333 282.84295 -14.446959 9.10352 -1076.7428 -1067.6392 + 34050 3.405 0.07645848 1099.4638 280.63434 -14.486843 9.0324339 -1076.6717 -1067.6392 + 34100 3.41 0.076458382 1093.368 278.40903 -14.515246 8.9608108 -1076.6 -1067.6392 + 34150 3.415 0.076458423 1088.8094 278.43798 -14.545814 8.9617425 -1076.601 -1067.6392 + 34200 3.42 0.076458529 1070.3036 280.46333 -14.587151 9.0269298 -1076.6662 -1067.6392 + 34250 3.425 0.076458454 1052.8089 281.70843 -14.639127 9.0670046 -1076.7062 -1067.6392 + 34300 3.43 0.076458324 1067.0859 279.60749 -14.693017 8.9993839 -1076.6386 -1067.6392 + 34350 3.435 0.07645844 1078.4994 274.06548 -14.735218 8.8210102 -1076.4602 -1067.6392 + 34400 3.44 0.076458576 1065.194 267.45347 -14.7594 8.6081974 -1076.2474 -1067.6392 + 34450 3.445 0.076458493 1044.6764 262.6287 -14.769981 8.4529085 -1076.0921 -1067.6392 + 34500 3.45 0.076458493 1031.1327 261.22703 -14.778334 8.4077947 -1076.047 -1067.6392 + 34550 3.455 0.076458662 1001.3241 263.2628 -14.787349 8.4733177 -1076.1125 -1067.6392 + 34600 3.46 0.076458744 972.94591 267.72772 -14.797072 8.6170244 -1076.2563 -1067.6392 + 34650 3.465 0.076458639 990.70544 272.38909 -14.802726 8.7670542 -1076.4063 -1067.6392 + 34700 3.47 0.0764585 1025.1974 274.74718 -14.798109 8.8429511 -1076.4822 -1067.6392 + 34750 3.475 0.076458513 1061.0651 274.45565 -14.798547 8.8335681 -1076.4728 -1067.6392 + 34800 3.48 0.076458471 1123.989 273.19344 -14.824615 8.7929427 -1076.4322 -1067.6392 + 34850 3.485 0.07645842 1192.2777 272.33238 -14.868829 8.7652289 -1076.4045 -1067.6392 + 34900 3.49 0.076458595 1219.3889 271.4554 -14.89476 8.7370026 -1076.3762 -1067.6392 + 34950 3.495 0.076458742 1206.5159 270.21752 -14.898336 8.6971606 -1076.3364 -1067.6392 + 35000 3.5 0.076458628 1197.9968 269.40678 -14.907691 8.6710664 -1076.3103 -1067.6392 + 35050 3.505 0.076458539 1199.2614 270.09068 -14.937895 8.6930781 -1076.3323 -1067.6392 + 35100 3.51 0.076458542 1195.6006 272.66182 -14.979789 8.7758322 -1076.4151 -1067.6392 + 35150 3.515 0.076458532 1184.1758 276.31503 -15.015192 8.8934136 -1076.5326 -1067.6392 + 35200 3.52 0.076458506 1177.2232 279.44786 -15.03426 8.9942462 -1076.6335 -1067.6392 + 35250 3.525 0.076458498 1165.906 281.04835 -15.043888 9.0457593 -1076.685 -1067.6392 + 35300 3.53 0.076458547 1122.7378 281.23471 -15.05217 9.0517575 -1076.691 -1067.6392 + 35350 3.535 0.07645859 1089.1258 281.40192 -15.068688 9.0571393 -1076.6964 -1067.6392 + 35400 3.54 0.076458581 1071.6628 283.20912 -15.098467 9.1153054 -1076.7545 -1067.6392 + 35450 3.545 0.076458561 1061.0287 286.5938 -15.126471 9.224244 -1076.8635 -1067.6392 + 35500 3.55 0.076458577 1073.4644 290.07888 -15.144262 9.336414 -1076.9756 -1067.6392 + 35550 3.555 0.076458498 1108.9235 291.84501 -15.154818 9.3932582 -1077.0325 -1067.6392 + 35600 3.56 0.076458531 1144.2606 290.86582 -15.170369 9.3617421 -1077.001 -1067.6392 + 35650 3.565 0.076458588 1167.6046 287.19918 -15.196185 9.2437284 -1076.883 -1067.6392 + 35700 3.57 0.07645856 1179.6333 282.11602 -15.229568 9.0801229 -1076.7194 -1067.6392 + 35750 3.575 0.076458589 1168.0753 277.29692 -15.269679 8.9250164 -1076.5642 -1067.6392 + 35800 3.58 0.076458495 1150.8477 273.36789 -15.307138 8.7985576 -1076.4378 -1067.6392 + 35850 3.585 0.076458358 1134.8391 270.61841 -15.336424 8.7100634 -1076.3493 -1067.6392 + 35900 3.59 0.076458438 1131.4083 269.61936 -15.365921 8.6779085 -1076.3171 -1067.6392 + 35950 3.595 0.076458656 1156.3165 270.44071 -15.401487 8.704344 -1076.3436 -1067.6392 + 36000 3.6 0.076458662 1183.5929 272.83276 -15.446386 8.7813341 -1076.4206 -1067.6392 + 36050 3.605 0.076458511 1175.8081 276.36312 -15.497044 8.8949617 -1076.5342 -1067.6392 + 36100 3.61 0.076458487 1137.1434 280.08603 -15.537522 9.0147862 -1076.654 -1067.6392 + 36150 3.615 0.076458492 1123.4073 282.9067 -15.557122 9.1055719 -1076.7448 -1067.6392 + 36200 3.62 0.076458546 1127.9754 284.11149 -15.565186 9.1443489 -1076.7836 -1067.6392 + 36250 3.625 0.076458599 1122.4255 283.84703 -15.578297 9.1358371 -1076.7751 -1067.6392 + 36300 3.63 0.07645858 1122.041 283.02913 -15.596263 9.1095122 -1076.7487 -1067.6392 + 36350 3.635 0.076458589 1127.0768 282.3869 -15.600033 9.0888416 -1076.7281 -1067.6392 + 36400 3.64 0.07645861 1130.6907 282.23737 -15.584507 9.0840287 -1076.7233 -1067.6392 + 36450 3.645 0.076458646 1150.3415 282.27709 -15.560741 9.0853074 -1076.7245 -1067.6392 + 36500 3.65 0.076458621 1161.8202 282.18974 -15.546059 9.0824956 -1076.7217 -1067.6392 + 36550 3.655 0.076458506 1140.503 282.57893 -15.5606 9.0950221 -1076.7343 -1067.6392 + 36600 3.66 0.07645853 1126.9511 283.97898 -15.602756 9.1400839 -1076.7793 -1067.6392 + 36650 3.665 0.076458682 1117.8456 286.05487 -15.646548 9.2068979 -1076.8461 -1067.6392 + 36700 3.67 0.076458755 1118.3433 288.56573 -15.675811 9.2877121 -1076.9269 -1067.6392 + 36750 3.675 0.076458745 1135.4181 291.29108 -15.685173 9.3754294 -1077.0147 -1067.6392 + 36800 3.68 0.076458756 1121.3092 293.8519 -15.677476 9.4578516 -1077.0971 -1067.6392 + 36850 3.685 0.076458796 1089.7128 296.34944 -15.680319 9.5382369 -1077.1775 -1067.6392 + 36900 3.69 0.076458813 1078.8527 298.59269 -15.709588 9.6104374 -1077.2497 -1067.6392 + 36950 3.695 0.076458823 1068.4725 300.08588 -15.752456 9.6584969 -1077.2977 -1067.6392 + 37000 3.7 0.07645894 1065.6302 300.97074 -15.794642 9.6869768 -1077.3262 -1067.6392 + 37050 3.705 0.076458928 1060.1083 301.92719 -15.834491 9.7177609 -1077.357 -1067.6392 + 37100 3.71 0.076458812 1062.0442 303.02051 -15.872538 9.7529504 -1077.3922 -1067.6392 + 37150 3.715 0.076458776 1077.0906 303.12539 -15.902945 9.756326 -1077.3956 -1067.6392 + 37200 3.72 0.076458783 1094.3589 300.82035 -15.918455 9.6821365 -1077.3214 -1067.6392 + 37250 3.725 0.076458796 1106.983 295.78025 -15.917907 9.519917 -1077.1592 -1067.6392 + 37300 3.73 0.0764587 1117.8928 288.74175 -15.902363 9.2933774 -1076.9326 -1067.6392 + 37350 3.735 0.076458595 1115.003 281.03285 -15.877976 9.0452603 -1076.6845 -1067.6392 + 37400 3.74 0.076458589 1067.6392 274.76086 -15.863011 8.8433914 -1076.4826 -1067.6392 + 37450 3.745 0.076458768 1025.0964 271.80953 -15.86958 8.7484006 -1076.3876 -1067.6392 + 37500 3.75 0.076458888 1008.1779 272.35831 -15.896126 8.7660636 -1076.4053 -1067.6392 + 37550 3.755 0.076458753 1006.7337 275.07578 -15.933997 8.8535276 -1076.4928 -1067.6392 + 37600 3.76 0.07645857 1015.7845 279.29514 -15.983502 8.9893309 -1076.6286 -1067.6392 + 37650 3.765 0.076458646 1037.2238 285.21821 -16.044625 9.1799695 -1076.8192 -1067.6392 + 37700 3.77 0.076458804 1064.362 291.89353 -16.093253 9.3948198 -1077.0341 -1067.6392 + 37750 3.775 0.076458938 1093.2339 297.54927 -16.113154 9.5768541 -1077.2161 -1067.6392 + 37800 3.78 0.076459003 1111.3525 301.09404 -16.115824 9.6909453 -1077.3302 -1067.6392 + 37850 3.785 0.076458993 1106.8732 302.49314 -16.121107 9.7359763 -1077.3752 -1067.6392 + 37900 3.79 0.076458927 1063.9114 302.20192 -16.138918 9.7266034 -1077.3658 -1067.6392 + 37950 3.795 0.076458914 1026.1339 300.74509 -16.166089 9.679714 -1077.3189 -1067.6392 + 38000 3.8 0.076458899 1031.7602 298.64261 -16.19177 9.6120443 -1077.2513 -1067.6392 + 38050 3.805 0.076458867 1069.7247 296.45336 -16.206246 9.5415814 -1077.1808 -1067.6392 + 38100 3.81 0.076458911 1107.4666 295.0445 -16.217521 9.4962363 -1077.1355 -1067.6392 + 38150 3.815 0.076458901 1131.7783 294.91865 -16.235949 9.4921858 -1077.1314 -1067.6392 + 38200 3.82 0.076458864 1148.5656 295.74562 -16.253565 9.5188023 -1077.158 -1067.6392 + 38250 3.825 0.076458822 1148.7391 297.07753 -16.259815 9.5616709 -1077.2009 -1067.6392 + 38300 3.83 0.076458755 1156.7033 299.00407 -16.260728 9.623678 -1077.2629 -1067.6392 + 38350 3.835 0.076458804 1159.1829 301.28024 -16.263754 9.6969383 -1077.3362 -1067.6392 + 38400 3.84 0.076458983 1147.0294 302.84565 -16.273506 9.7473221 -1077.3866 -1067.6392 + 38450 3.845 0.076458991 1136.4112 302.27164 -16.282019 9.7288474 -1077.3681 -1067.6392 + 38500 3.85 0.07645888 1113.9868 298.97061 -16.274402 9.6226012 -1077.2618 -1067.6392 + 38550 3.855 0.076458691 1101.738 294.06527 -16.251341 9.464719 -1077.104 -1067.6392 + 38600 3.86 0.076458665 1085.4951 289.46444 -16.218831 9.3166378 -1076.9559 -1067.6392 + 38650 3.865 0.07645876 1061.2109 287.27235 -16.190308 9.2460835 -1076.8853 -1067.6392 + 38700 3.87 0.076458765 1055.773 288.81749 -16.176864 9.2958149 -1076.935 -1067.6392 + 38750 3.875 0.076458766 1051.082 293.80099 -16.177139 9.4562127 -1077.0954 -1067.6392 + 38800 3.88 0.076458791 1034.9231 300.50343 -16.186889 9.6719362 -1077.3112 -1067.6392 + 38850 3.885 0.076458765 1027.5343 306.11666 -16.197928 9.8526023 -1077.4918 -1067.6392 + 38900 3.89 0.076458838 1018.2888 308.22875 -16.207065 9.9205815 -1077.5598 -1067.6392 + 38950 3.895 0.076458884 1014.4073 306.63445 -16.226798 9.8692679 -1077.5085 -1067.6392 + 39000 3.9 0.076458788 1003.5264 302.69876 -16.256287 9.7425945 -1077.3818 -1067.6392 + 39050 3.905 0.076458731 996.07885 298.3808 -16.280659 9.6036175 -1077.2428 -1067.6392 + 39100 3.91 0.076458769 1027.0513 295.40443 -16.293344 9.5078209 -1077.1471 -1067.6392 + 39150 3.915 0.076458854 1072.3569 294.24208 -16.298011 9.4704097 -1077.1096 -1067.6392 + 39200 3.92 0.07645888 1080.7481 294.38216 -16.312666 9.4749184 -1077.1142 -1067.6392 + 39250 3.925 0.076458798 1074.2137 294.25738 -16.34058 9.4709023 -1077.1101 -1067.6392 + 39300 3.93 0.076458746 1072.9308 292.45791 -16.371754 9.4129849 -1077.0522 -1067.6392 + 39350 3.935 0.076458686 1052.258 289.46155 -16.40727 9.3165447 -1076.9558 -1067.6392 + 39400 3.94 0.076458677 1011.4712 286.99005 -16.441308 9.2369974 -1076.8762 -1067.6392 + 39450 3.945 0.076458657 968.89107 287.00247 -16.46678 9.2373973 -1076.8766 -1067.6392 + 39500 3.95 0.076458611 967.37752 290.38424 -16.48508 9.346242 -1076.9855 -1067.6392 + 39550 3.955 0.076458569 982.34862 295.78407 -16.492955 9.5200397 -1077.1593 -1067.6392 + 39600 3.96 0.076458595 978.6948 301.01012 -16.490336 9.6882442 -1077.3275 -1067.6392 + 39650 3.965 0.076458753 981.93177 304.90328 -16.481839 9.8135487 -1077.4528 -1067.6392 + 39700 3.97 0.076458768 1019.382 308.08081 -16.477585 9.9158201 -1077.5551 -1067.6392 + 39750 3.975 0.076458612 1051.8152 311.88767 -16.490813 10.038347 -1077.6776 -1067.6392 + 39800 3.98 0.076458521 1042.8378 316.19618 -16.511509 10.177019 -1077.8163 -1067.6392 + 39850 3.985 0.076458483 1001.149 319.35878 -16.519321 10.27881 -1077.918 -1067.6392 + 39900 3.99 0.076458542 973.4915 319.4656 -16.514459 10.282248 -1077.9215 -1067.6392 + 39950 3.995 0.076458719 972.67572 315.26025 -16.50944 10.146896 -1077.7861 -1067.6392 + 40000 4 0.076458687 994.49843 307.54177 -16.514066 9.8984707 -1077.5377 -1067.6392 + 40050 4.005 0.076458609 1020.1483 299.32861 -16.525567 9.6341236 -1077.2734 -1067.6392 + 40100 4.01 0.076458534 1028.6046 293.95707 -16.536961 9.4612366 -1077.1005 -1067.6392 + 40150 4.015 0.076458539 1021.124 292.82994 -16.54357 9.424959 -1077.0642 -1067.6392 + 40200 4.02 0.076458617 1003.8564 295.01881 -16.539479 9.4954094 -1077.1346 -1067.6392 + 40250 4.025 0.076458708 1006.3834 298.32236 -16.525081 9.6017365 -1077.241 -1067.6392 + 40300 4.03 0.076458753 1049.8514 300.72691 -16.515775 9.6791289 -1077.3184 -1067.6392 + 40350 4.035 0.076458712 1095.1887 301.23959 -16.528202 9.6956299 -1077.3349 -1067.6392 + 40400 4.04 0.07645859 1095.7277 299.27704 -16.553461 9.6324637 -1077.2717 -1067.6392 + 40450 4.045 0.076458512 1074.8132 294.7824 -16.567973 9.4878003 -1077.127 -1067.6392 + 40500 4.05 0.076458607 1054.9582 288.94001 -16.563212 9.2997586 -1076.939 -1067.6392 + 40550 4.055 0.076458679 1033.1657 283.78395 -16.555924 9.1338066 -1076.773 -1067.6392 + 40600 4.06 0.07645866 1029.0046 281.14635 -16.566778 9.0489136 -1076.6881 -1067.6392 + 40650 4.065 0.076458604 1026.6036 282.2669 -16.593805 9.0849793 -1076.7242 -1067.6392 + 40700 4.07 0.076458581 1024.2464 287.64133 -16.619273 9.2579595 -1076.8972 -1067.6392 + 40750 4.075 0.076458663 1014.2573 296.48178 -16.635414 9.5424961 -1077.1817 -1067.6392 + 40800 4.08 0.076458634 1003.9119 306.29768 -16.644226 9.8584286 -1077.4977 -1067.6392 + 40850 4.085 0.076458596 997.14687 313.7758 -16.644922 10.099118 -1077.7384 -1067.6392 + 40900 4.09 0.076458698 1003.6464 316.62645 -16.638874 10.190868 -1077.8301 -1067.6392 + 40950 4.095 0.076458737 1009.5074 314.15339 -16.626746 10.111271 -1077.7505 -1067.6392 + 41000 4.1 0.076458626 990.49508 306.88333 -16.607056 9.877278 -1077.5165 -1067.6392 + 41050 4.105 0.076458539 1003.9156 296.82556 -16.581033 9.5535609 -1077.1928 -1067.6392 + 41100 4.11 0.076458624 1025.7889 287.94279 -16.555411 9.2676623 -1076.9069 -1067.6392 + 41150 4.115 0.076458727 1019.8472 284.75687 -16.545411 9.1651209 -1076.8043 -1067.6392 + 41200 4.12 0.076458658 1009.1747 288.8934 -16.556045 9.2982584 -1076.9375 -1067.6392 + 41250 4.125 0.076458476 986.14702 297.74613 -16.573101 9.5831902 -1077.2224 -1067.6392 + 41300 4.13 0.076458533 970.56183 307.17123 -16.586828 9.8865443 -1077.5258 -1067.6392 + 41350 4.135 0.076458666 982.32883 313.98696 -16.593184 10.105914 -1077.7451 -1067.6392 + 41400 4.14 0.076458558 998.00634 316.68471 -16.585096 10.192743 -1077.832 -1067.6392 + 41450 4.145 0.076458375 988.08432 315.93321 -16.578349 10.168555 -1077.8078 -1067.6392 + 41500 4.15 0.076458387 968.13272 312.86745 -16.587207 10.069882 -1077.7091 -1067.6392 + 41550 4.155 0.07645851 962.22331 308.01319 -16.60083 9.9136436 -1077.5529 -1067.6392 + 41600 4.16 0.076458592 977.28521 302.567 -16.60995 9.7383536 -1077.3776 -1067.6392 + 41650 4.165 0.076458508 989.72477 297.98726 -16.609001 9.5909514 -1077.2302 -1067.6392 + 41700 4.17 0.076458343 1002.0807 295.07216 -16.600686 9.4971264 -1077.1364 -1067.6392 + 41750 4.175 0.076458382 1016.3945 293.91041 -16.584772 9.4597347 -1077.099 -1067.6392 + 41800 4.18 0.076458495 1009.6321 295.39416 -16.566658 9.5074902 -1077.1467 -1067.6392 + 41850 4.185 0.076458517 981.99051 300.65179 -16.561637 9.6767113 -1077.3159 -1067.6392 + 41900 4.19 0.076458508 963.70095 308.76413 -16.575186 9.9378133 -1077.577 -1067.6392 + 41950 4.195 0.07645848 934.77452 316.95219 -16.596303 10.201352 -1077.8406 -1067.6392 + 42000 4.2 0.076458508 904.42332 322.22055 -16.611182 10.370919 -1078.0102 -1067.6392 + 42050 4.205 0.07645857 902.29913 322.33865 -16.615342 10.37472 -1078.014 -1067.6392 + 42100 4.21 0.076458573 919.95355 316.51673 -16.615481 10.187337 -1077.8266 -1067.6392 + 42150 4.215 0.076458639 929.08587 305.64828 -16.617453 9.8375273 -1077.4768 -1067.6392 + 42200 4.22 0.076458638 921.14374 292.41301 -16.622157 9.4115396 -1077.0508 -1067.6392 + 42250 4.225 0.076458624 918.70221 281.1294 -16.634159 9.0483679 -1076.6876 -1067.6392 + 42300 4.23 0.076458699 936.43193 275.83201 -16.6517 8.8778674 -1076.5171 -1067.6392 + 42350 4.235 0.07645883 969.33399 278.31739 -16.669195 8.9578611 -1076.5971 -1067.6392 + 42400 4.24 0.076458843 1009.9309 287.35916 -16.679204 9.2488775 -1076.8881 -1067.6392 + 42450 4.245 0.07645864 1036.0019 299.66752 -16.672063 9.6450318 -1077.2843 -1067.6392 + 42500 4.25 0.076458571 1027.6855 312.04895 -16.657188 10.043538 -1077.6828 -1067.6392 + 42550 4.255 0.076458623 1015.0072 322.01276 -16.654314 10.364231 -1078.0035 -1067.6392 + 42600 4.26 0.076458688 1013.2933 327.27486 -16.660339 10.533595 -1078.1728 -1067.6392 + 42650 4.265 0.076458817 1018.1646 326.73267 -16.660439 10.516145 -1078.1554 -1067.6392 + 42700 4.27 0.076458894 1010.1919 321.82992 -16.65551 10.358346 -1077.9976 -1067.6392 + 42750 4.275 0.076458864 1005.0687 315.35709 -16.653726 10.150013 -1077.7892 -1067.6392 + 42800 4.28 0.076458884 1010.6833 308.9802 -16.655199 9.9447675 -1077.584 -1067.6392 + 42850 4.285 0.076458814 1016.6151 303.05879 -16.657304 9.7541825 -1077.3934 -1067.6392 + 42900 4.29 0.076458713 1017.0053 298.08717 -16.662548 9.5941669 -1077.2334 -1067.6392 + 42950 4.295 0.076458716 1044.7957 294.65223 -16.669187 9.4836106 -1077.1228 -1067.6392 + 43000 4.3 0.076458705 1100.4358 292.80033 -16.665407 9.4240058 -1077.0632 -1067.6392 + 43050 4.305 0.076458683 1131.0739 293.34724 -16.656462 9.4416087 -1077.0808 -1067.6392 + 43100 4.31 0.076458605 1142.3657 296.86691 -16.653769 9.554892 -1077.1941 -1067.6392 + 43150 4.315 0.076458599 1142.8044 301.19681 -16.655832 9.694253 -1077.3335 -1067.6392 + 43200 4.32 0.076458671 1131.7209 302.63924 -16.652234 9.7406789 -1077.3799 -1067.6392 + 43250 4.325 0.07645862 1107.868 299.38237 -16.640553 9.6358538 -1077.2751 -1067.6392 + 43300 4.33 0.076458564 1086.9877 293.0869 -16.632969 9.4332293 -1077.0725 -1067.6392 + 43350 4.335 0.076458694 1085.9393 287.23945 -16.637169 9.2450247 -1076.8843 -1067.6392 + 43400 4.34 0.076458728 1084.4536 284.62782 -16.651022 9.1609673 -1076.8002 -1067.6392 + 43450 4.345 0.076458737 1071.0304 286.42024 -16.664054 9.2186576 -1076.8579 -1067.6392 + 43500 4.35 0.07645867 1071.4218 292.14965 -16.663945 9.4030633 -1077.0423 -1067.6392 + 43550 4.355 0.076458545 1058.5175 299.7894 -16.651551 9.6489546 -1077.2882 -1067.6392 + 43600 4.36 0.076458522 1017.0691 307.34199 -16.653799 9.8920404 -1077.5313 -1067.6392 + 43650 4.365 0.07645853 984.06733 313.34684 -16.684092 10.085311 -1077.7245 -1067.6392 + 43700 4.37 0.076458526 972.47105 317.13488 -16.726591 10.207232 -1077.8465 -1067.6392 + 43750 4.375 0.076458563 982.95807 319.12477 -16.764918 10.271278 -1077.9105 -1067.6392 + 43800 4.38 0.076458569 1000.5706 319.98217 -16.791105 10.298874 -1077.9381 -1067.6392 + 43850 4.385 0.076458604 1012.6091 319.95908 -16.796106 10.298131 -1077.9374 -1067.6392 + 43900 4.39 0.076458647 1016.6021 319.07693 -16.782232 10.269739 -1077.909 -1067.6392 + 43950 4.395 0.076458717 1039.7933 317.11992 -16.765953 10.206751 -1077.846 -1067.6392 + 44000 4.4 0.07645855 1076.1914 313.94493 -16.75837 10.104561 -1077.7438 -1067.6392 + 44050 4.405 0.076458354 1103.7125 309.85364 -16.755308 9.9728798 -1077.6121 -1067.6392 + 44100 4.41 0.076458497 1123.4426 305.92806 -16.754699 9.8465319 -1077.4858 -1067.6392 + 44150 4.415 0.076458707 1128.503 303.80427 -16.759223 9.7781762 -1077.4174 -1067.6392 + 44200 4.42 0.07645872 1109.8757 305.14407 -16.773282 9.8212987 -1077.4605 -1067.6392 + 44250 4.425 0.076458604 1077.7556 310.10841 -16.799981 9.9810798 -1077.6203 -1067.6392 + 44300 4.43 0.076458461 1058.8761 316.28846 -16.829881 10.17999 -1077.8192 -1067.6392 + 44350 4.435 0.076458508 1050.5707 320.51508 -16.852668 10.316027 -1077.9553 -1067.6392 + 44400 4.44 0.076458673 1056.8449 320.97804 -16.866357 10.330927 -1077.9702 -1067.6392 + 44450 4.445 0.076458651 1050.8827 318.14487 -16.875492 10.239739 -1077.879 -1067.6392 + 44500 4.45 0.076458481 1013.764 314.16723 -16.897045 10.111716 -1077.7509 -1067.6392 + 44550 4.455 0.076458392 980.5404 310.15036 -16.935928 9.9824299 -1077.6217 -1067.6392 + 44600 4.46 0.076458504 982.46196 305.57929 -16.974614 9.8353065 -1077.4745 -1067.6392 + 44650 4.465 0.076458584 999.3409 300.38563 -17.000466 9.6681446 -1077.3074 -1067.6392 + 44700 4.47 0.076458532 1009.2469 295.28724 -17.008 9.5040491 -1077.1433 -1067.6392 + 44750 4.475 0.076458496 1041.4242 291.50055 -17.008549 9.3821713 -1077.0214 -1067.6392 + 44800 4.48 0.076458487 1086.602 289.52839 -17.016148 9.3186959 -1076.9579 -1067.6392 + 44850 4.485 0.076458613 1103.5806 288.55396 -17.029368 9.287333 -1076.9266 -1067.6392 + 44900 4.49 0.07645858 1102.8142 287.89912 -17.042093 9.2662566 -1076.9055 -1067.6392 + 44950 4.495 0.07645852 1106.0548 288.11976 -17.050281 9.273358 -1076.9126 -1067.6392 + 45000 4.5 0.076458412 1109.2471 290.73864 -17.064227 9.3576488 -1076.9969 -1067.6392 + 45050 4.505 0.076458467 1081.3367 296.40828 -17.091233 9.5401305 -1077.1794 -1067.6392 + 45100 4.51 0.076458612 1061.7915 304.1106 -17.120168 9.7880355 -1077.4273 -1067.6392 + 45150 4.515 0.076458508 1075.8664 312.21278 -17.139278 10.048811 -1077.688 -1067.6392 + 45200 4.52 0.076458381 1086.9758 319.4826 -17.149932 10.282795 -1077.922 -1067.6392 + 45250 4.525 0.076458463 1081.4821 325.45586 -17.161699 10.47505 -1078.1143 -1067.6392 + 45300 4.53 0.076458584 1102.657 330.33928 -17.184503 10.632226 -1078.2715 -1067.6392 + 45350 4.535 0.076458507 1115.9422 333.72518 -17.208225 10.741204 -1078.3804 -1067.6392 + 45400 4.54 0.076458398 1094.6076 334.77591 -17.228637 10.775023 -1078.4143 -1067.6392 + 45450 4.545 0.076458455 1089.9234 332.91387 -17.252893 10.715091 -1078.3543 -1067.6392 + 45500 4.55 0.076458651 1088.2901 328.25855 -17.279739 10.565256 -1078.2045 -1067.6392 + 45550 4.555 0.076458679 1067.4543 322.55465 -17.319717 10.381672 -1078.0209 -1067.6392 + 45600 4.56 0.076458491 1051.2478 317.7723 -17.374362 10.227748 -1077.867 -1067.6392 + 45650 4.565 0.076458315 1034.4257 314.73532 -17.430482 10.130001 -1077.7692 -1067.6392 + 45700 4.57 0.076458379 1013.128 312.65325 -17.476583 10.062987 -1077.7022 -1067.6392 + 45750 4.575 0.076458582 1006.4499 309.50085 -17.496142 9.9615252 -1077.6008 -1067.6392 + 45800 4.58 0.07645865 1024.4651 304.73909 -17.49261 9.8082641 -1077.4475 -1067.6392 + 45850 4.585 0.076458631 1046.9622 300.08416 -17.492695 9.6584417 -1077.2977 -1067.6392 + 45900 4.59 0.076458586 1042.5796 296.72782 -17.49113 9.5504152 -1077.1896 -1067.6392 + 45950 4.595 0.076458607 1008.0854 295.42286 -17.47404 9.508414 -1077.1476 -1067.6392 + 46000 4.6 0.07645866 1008.1817 297.6509 -17.457674 9.5801252 -1077.2194 -1067.6392 + 46050 4.605 0.076458648 1055.0177 303.82712 -17.454258 9.7789116 -1077.4181 -1067.6392 + 46100 4.61 0.076458681 1067.8096 312.06106 -17.459314 10.043927 -1077.6832 -1067.6392 + 46150 4.615 0.076458697 1032.3327 319.35809 -17.472054 10.278788 -1077.918 -1067.6392 + 46200 4.62 0.076458669 1011.4049 323.68987 -17.497176 10.41821 -1078.0574 -1067.6392 + 46250 4.625 0.076458694 1013.1694 324.55935 -17.524643 10.446195 -1078.0854 -1067.6392 + 46300 4.63 0.076458699 1019.9594 322.92316 -17.537516 10.393533 -1078.0328 -1067.6392 + 46350 4.635 0.076458638 1019.574 321.37933 -17.53535 10.343843 -1077.9831 -1067.6392 + 46400 4.64 0.076458549 1012.1208 322.2852 -17.529784 10.372999 -1078.0122 -1067.6392 + 46450 4.645 0.076458548 1009.7285 324.98438 -17.51749 10.459874 -1078.0991 -1067.6392 + 46500 4.65 0.076458739 1028.6359 327.73895 -17.495382 10.548533 -1078.1878 -1067.6392 + 46550 4.655 0.076458848 1054.5382 329.99374 -17.486615 10.621105 -1078.2603 -1067.6392 + 46600 4.66 0.076458871 1059.0432 330.41234 -17.496838 10.634578 -1078.2738 -1067.6392 + 46650 4.665 0.076458903 1042.6963 327.41225 -17.503279 10.538018 -1078.1773 -1067.6392 + 46700 4.67 0.076458964 1022.4908 322.64011 -17.50695 10.384422 -1078.0237 -1067.6392 + 46750 4.675 0.076458954 994.76603 319.77739 -17.52877 10.292284 -1077.9315 -1067.6392 + 46800 4.68 0.076458851 984.77354 320.04823 -17.564766 10.301001 -1077.9402 -1067.6392 + 46850 4.685 0.076458817 982.80807 322.12061 -17.59199 10.367702 -1078.0069 -1067.6392 + 46900 4.69 0.076458814 979.08705 324.60632 -17.607769 10.447706 -1078.0869 -1067.6392 + 46950 4.695 0.076458855 991.35981 325.87675 -17.625638 10.488596 -1078.1278 -1067.6392 + 47000 4.7 0.076459013 990.03823 324.25249 -17.644352 10.436318 -1078.0756 -1067.6392 + 47050 4.705 0.076459109 971.57257 320.13246 -17.664176 10.303712 -1077.9429 -1067.6392 + 47100 4.71 0.076459008 942.51677 315.82868 -17.695488 10.165191 -1077.8044 -1067.6392 + 47150 4.715 0.076458834 914.38458 312.92259 -17.729828 10.071656 -1077.7109 -1067.6392 + 47200 4.72 0.076458733 915.09427 311.73756 -17.757168 10.033515 -1077.6727 -1067.6392 + 47250 4.725 0.076458745 929.51292 311.72739 -17.778102 10.033188 -1077.6724 -1067.6392 + 47300 4.73 0.076458807 924.69906 311.5334 -17.787073 10.026944 -1077.6662 -1067.6392 + 47350 4.735 0.076458753 911.78727 310.21898 -17.784392 9.9846387 -1077.6239 -1067.6392 + 47400 4.74 0.076458811 927.84413 308.28881 -17.783399 9.9225147 -1077.5617 -1067.6392 + 47450 4.745 0.076458948 980.47197 307.41202 -17.799967 9.8942944 -1077.5335 -1067.6392 + 47500 4.75 0.076458921 1017.4095 308.92974 -17.837931 9.9431434 -1077.5824 -1067.6392 + 47550 4.755 0.076458813 1013.2842 313.10487 -17.889197 10.077523 -1077.7168 -1067.6392 + 47600 4.76 0.076458768 999.59926 319.59121 -17.94301 10.286291 -1077.9255 -1067.6392 + 47650 4.765 0.07645894 987.28899 327.28821 -17.990152 10.534025 -1078.1733 -1067.6392 + 47700 4.77 0.076459039 970.5822 333.98868 -18.025704 10.749685 -1078.3889 -1067.6392 + 47750 4.775 0.076458976 960.77569 337.1295 -18.039516 10.850774 -1078.49 -1067.6392 + 47800 4.78 0.076458945 970.90315 335.79522 -18.031317 10.80783 -1078.4471 -1067.6392 + 47850 4.785 0.07645907 982.20263 331.08028 -18.021902 10.656076 -1078.2953 -1067.6392 + 47900 4.79 0.076459119 990.67784 324.66683 -18.027289 10.449654 -1078.0889 -1067.6392 + 47950 4.795 0.076459083 998.43821 318.73987 -18.04994 10.25889 -1077.8981 -1067.6392 + 48000 4.8 0.076459069 1008.9151 315.53792 -18.077243 10.155833 -1077.7951 -1067.6392 + 48050 4.805 0.076458972 1028.1309 316.51509 -18.096678 10.187284 -1077.8265 -1067.6392 + 48100 4.81 0.076458972 1046.4248 321.4715 -18.10541 10.34681 -1077.986 -1067.6392 + 48150 4.815 0.076458847 1072.5091 328.3071 -18.108273 10.566819 -1078.2061 -1067.6392 + 48200 4.82 0.076458729 1115.3266 334.27433 -18.108253 10.758879 -1078.3981 -1067.6392 + 48250 4.825 0.076458863 1132.7705 338.0335 -18.108395 10.879871 -1078.5191 -1067.6392 + 48300 4.83 0.076458983 1104.4857 340.31669 -18.122648 10.953357 -1078.5926 -1067.6392 + 48350 4.835 0.076458942 1068.6895 341.52058 -18.147861 10.992105 -1078.6313 -1067.6392 + 48400 4.84 0.076458895 1050.2826 340.59905 -18.165876 10.962445 -1078.6017 -1067.6392 + 48450 4.845 0.076458979 1048.172 336.60118 -18.175839 10.83377 -1078.473 -1067.6392 + 48500 4.85 0.076458957 1026.5586 330.00847 -18.186406 10.621579 -1078.2608 -1067.6392 + 48550 4.855 0.076458886 999.91162 322.83938 -18.201023 10.390836 -1078.0301 -1067.6392 + 48600 4.86 0.076458961 989.90718 317.46387 -18.226455 10.217821 -1077.8571 -1067.6392 + 48650 4.865 0.076459015 982.96635 315.18649 -18.260376 10.144522 -1077.7838 -1067.6392 + 48700 4.87 0.076458922 987.30339 316.51586 -18.291398 10.187309 -1077.8265 -1067.6392 + 48750 4.875 0.076458754 1001.7173 321.20925 -18.314994 10.338369 -1077.9776 -1067.6392 + 48800 4.88 0.07645878 1018.8788 327.87563 -18.327226 10.552932 -1078.1922 -1067.6392 + 48850 4.885 0.076458771 1034.4957 334.62729 -18.332453 10.770239 -1078.4095 -1067.6392 + 48900 4.89 0.076458899 1028.6393 339.07218 -18.341739 10.913301 -1078.5525 -1067.6392 + 48950 4.895 0.076459103 1007.6856 338.61189 -18.356096 10.898487 -1078.5377 -1067.6392 + 49000 4.9 0.076459192 999.24745 332.23323 -18.365334 10.693184 -1078.3324 -1067.6392 + 49050 4.905 0.076459086 996.76706 322.52584 -18.367263 10.380744 -1078.02 -1067.6392 + 49100 4.91 0.076459029 995.85019 315.08451 -18.370824 10.14124 -1077.7805 -1067.6392 + 49150 4.915 0.076459032 983.16555 314.29119 -18.382926 10.115706 -1077.7549 -1067.6392 + 49200 4.92 0.076459075 965.8709 319.65382 -18.396231 10.288306 -1077.9275 -1067.6392 + 49250 4.925 0.076459124 962.09918 328.07092 -18.405747 10.559217 -1078.1984 -1067.6392 + 49300 4.93 0.076459019 986.327 337.01122 -18.409264 10.846968 -1078.4862 -1067.6392 + 49350 4.935 0.076458927 1004.57 345.36436 -18.407413 11.11582 -1078.7551 -1067.6392 + 49400 4.94 0.076458977 993.98483 352.63606 -18.40944 11.349865 -1078.9891 -1067.6392 + 49450 4.945 0.076459082 991.26185 357.60801 -18.416364 11.509891 -1079.1491 -1067.6392 + 49500 4.95 0.076459093 1024.0819 359.05103 -18.425791 11.556336 -1079.1956 -1067.6392 + 49550 4.955 0.076458927 1033.8368 356.67554 -18.441932 11.479879 -1079.1191 -1067.6392 + 49600 4.96 0.076458838 1019.5756 350.49667 -18.455292 11.281007 -1078.9202 -1067.6392 + 49650 4.965 0.076458925 1015.2811 341.2581 -18.44834 10.983657 -1078.6229 -1067.6392 + 49700 4.97 0.076458904 1000.5326 331.64361 -18.423481 10.674207 -1078.3134 -1067.6392 + 49750 4.975 0.076458763 997.47426 325.30523 -18.400499 10.470201 -1078.1094 -1067.6392 + 49800 4.98 0.076458774 1001.6165 323.8013 -18.387438 10.421796 -1078.061 -1067.6392 + 49850 4.985 0.076458923 1003.6919 325.43465 -18.371483 10.474367 -1078.1136 -1067.6392 + 49900 4.99 0.076458997 1014.0371 327.90126 -18.352198 10.553757 -1078.193 -1067.6392 + 49950 4.995 0.076458983 1024.0345 329.92754 -18.340929 10.618974 -1078.2582 -1067.6392 + 50000 5 0.076458894 1024.5951 330.62163 -18.327421 10.641314 -1078.2805 -1067.6392 +Loop time of 104.807 on 4 procs for 50000 steps with 250 atoms + +Performance: 4.122 ns/day, 5.823 hours/ns, 477.068 timesteps/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 | 16.436 | 16.633 | 16.862 | 4.5 | 15.87 +Neigh | 0.16699 | 0.17008 | 0.17166 | 0.4 | 0.16 +Comm | 4.1416 | 4.3331 | 4.5047 | 7.9 | 4.13 +Output | 10.767 | 11.845 | 12.706 | 20.7 | 11.30 +Modify | 70.815 | 71.648 | 72.683 | 8.2 | 68.36 +Other | | 0.1775 | | | 0.17 + +Nlocal: 62.5 ave 65 max 60 min +Histogram: 1 0 0 0 1 0 1 0 0 1 +Nghost: 757.75 ave 776 max 743 min +Histogram: 1 0 0 1 1 0 0 0 0 1 +Neighs: 1932.75 ave 2015 max 1844 min +Histogram: 1 0 0 0 1 1 0 0 0 1 +FullNghs: 3865.5 ave 4024 max 3710 min +Histogram: 1 0 0 1 0 0 1 0 0 1 + +Total # of neighbors = 15462 +Ave neighs/atom = 61.848 +Neighbor list builds = 612 +Dangerous builds = 0 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:01:45 diff --git a/examples/SPIN/iron/log.30Apr19.spin.iron_cubic.g++.1 b/examples/SPIN/iron/log.30Apr19.spin.iron_cubic.g++.1 new file mode 100644 index 0000000000..ee1e71131e --- /dev/null +++ b/examples/SPIN/iron/log.30Apr19.spin.iron_cubic.g++.1 @@ -0,0 +1,161 @@ +LAMMPS (30 Apr 2019) + using 1 OpenMP thread(s) per MPI task +# bcc iron in a 3d periodic box + +clear + using 1 OpenMP thread(s) per MPI task +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice bcc 2.8665 +Lattice spacing in x,y,z = 2.8665 2.8665 2.8665 +region box block 0.0 5.0 0.0 5.0 0.0 5.0 +create_box 1 box +Created orthogonal box = (0 0 0) to (14.3325 14.3325 14.3325) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 250 atoms + create_atoms CPU = 0.0527296 secs + +# setting mass, mag. moments, and interactions for bcc iron + +mass 1 55.845 +set group all spin 2.2 -1.0 0.0 0.0 + 250 settings made for spin +velocity all create 100 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 3.5 +pair_coeff * * eam/alloy Fe_Mishin2006.eam.alloy Fe +pair_coeff * * spin/exchange exchange 3.4 0.02726 0.2171 1.841 +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin cubic 0.001 0.0005 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.0 21 + +fix 3 all nve/spin lattice yes +timestep 0.0001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magx equal c_out_mag[1] +variable magy equal c_out_mag[2] +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magx v_magy v_magz v_magnorm v_tmag v_emag pe etotal +thermo 50 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 100 all custom 1 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +run 2000 +Neighbor list info ... + update every 10 steps, delay 20 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.77337 + ghost atom cutoff = 5.77337 + binsize = 2.88668, bins = 5 5 5 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair eam/alloy, perpetual, half/full from (2) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (2) pair spin/exchange, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.319 | 7.319 | 7.319 Mbytes +Step Time v_magx v_magy v_magz v_magnorm v_tmag v_emag PotEng TotEng + 0 0 -1 0 0 1 0 -55.58269 -1125.5827 -1122.364 + 50 0.005 -1 0 0 1 0 -55.581417 -1125.4672 -1122.364 + 100 0.01 -1 0 0 1 0 -55.577759 -1125.1389 -1122.364 + 150 0.015 -1 0 0 1 0 -55.57219 -1124.6538 -1122.364 + 200 0.02 -1 0 0 1 0 -55.565438 -1124.099 -1122.364 + 250 0.025 -1 0 0 1 0 -55.558379 -1123.5779 -1122.364 + 300 0.03 -1 0 0 1 0 -55.551886 -1123.1862 -1122.364 + 350 0.035 -1 0 0 1 0 -55.546675 -1122.9858 -1122.364 + 400 0.04 -1 0 0 1 0 -55.543187 -1122.9869 -1122.364 + 450 0.045 -1 0 0 1 0 -55.54154 -1123.1498 -1122.364 + 500 0.05 -1 0 0 1 0 -55.541574 -1123.4037 -1122.364 + 550 0.055 -1 0 0 1 0 -55.542941 -1123.672 -1122.364 + 600 0.06 -1 0 0 1 0 -55.545209 -1123.8931 -1122.364 + 650 0.065 -1 0 0 1 0 -55.547951 -1124.0315 -1122.364 + 700 0.07 -1 0 0 1 0 -55.550801 -1124.0798 -1122.364 + 750 0.075 -1 0 0 1 0 -55.553483 -1124.0546 -1122.364 + 800 0.08 -1 0 0 1 0 -55.555816 -1123.9877 -1122.364 + 850 0.085 -1 0 0 1 0 -55.557706 -1123.916 -1122.364 + 900 0.09 -1 0 0 1 0 -55.55913 -1123.8714 -1122.364 + 950 0.095 -1 0 0 1 0 -55.560111 -1123.8726 -1122.364 + 1000 0.1 -1 0 0 1 0 -55.560705 -1123.9215 -1122.364 + 1050 0.105 -1 0 0 1 0 -55.560979 -1124.0049 -1122.364 + 1100 0.11 -1 0 0 1 0 -55.561005 -1124.0998 -1122.364 + 1150 0.115 -1 0 0 1 0 -55.560847 -1124.1802 -1122.364 + 1200 0.12 -1 0 0 1 0 -55.560562 -1124.2247 -1122.364 + 1250 0.125 -1 0 0 1 0 -55.560199 -1124.2224 -1122.364 + 1300 0.13 -1 0 0 1 0 -55.559804 -1124.1752 -1122.364 + 1350 0.135 -1 0 0 1 0 -55.559416 -1124.0977 -1122.364 + 1400 0.14 -1 0 0 1 0 -55.559073 -1124.0124 -1122.364 + 1450 0.145 -1 0 0 1 0 -55.558803 -1123.9437 -1122.364 + 1500 0.15 -1 0 0 1 0 -55.558617 -1123.9107 -1122.364 + 1550 0.155 -1 0 0 1 0 -55.558503 -1123.9224 -1122.364 + 1600 0.16 -1 0 0 1 0 -55.558425 -1123.9749 -1122.364 + 1650 0.165 -1 0 0 1 0 -55.558323 -1124.0529 -1122.364 + 1700 0.17 -1 0 0 1 0 -55.558122 -1124.1331 -1122.364 + 1750 0.175 -1 0 0 1 0 -55.557751 -1124.1899 -1122.364 + 1800 0.18 -1 0 0 1 0 -55.557157 -1124.2023 -1122.364 + 1850 0.185 -1 0 0 1 0 -55.556326 -1124.1592 -1122.364 + 1900 0.19 -1 0 0 1 0 -55.555301 -1124.0633 -1122.364 + 1950 0.195 -1 0 0 1 0 -55.554178 -1123.9313 -1122.364 + 2000 0.2 -1 0 0 1 0 -55.553099 -1123.7904 -1122.364 +Loop time of 254.052 on 1 procs for 2000 steps with 250 atoms + +Performance: 0.068 ns/day, 352.850 hours/ns, 7.872 timesteps/s +99.5% CPU use with 1 MPI tasks x 1 OpenMP threads + +MPI task timing breakdown: +Section | min time | avg time | max time |%varavg| %total +--------------------------------------------------------------- +Pair | 60.584 | 60.584 | 60.584 | 0.0 | 23.85 +Neigh | 0.34793 | 0.34793 | 0.34793 | 0.0 | 0.14 +Comm | 1.9994 | 1.9994 | 1.9994 | 0.0 | 0.79 +Output | 126.24 | 126.24 | 126.24 | 0.0 | 49.69 +Modify | 64.475 | 64.475 | 64.475 | 0.0 | 25.38 +Other | | 0.4024 | | | 0.16 + +Nlocal: 250 ave 250 max 250 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1419 ave 1419 max 1419 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 7878 ave 7878 max 7878 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 15756 ave 15756 max 15756 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 15756 +Ave neighs/atom = 63.024 +Neighbor list builds = 12 +Dangerous builds = 0 +# min_style spin +# min_modify alpha_damp 1.0 discrete_factor 10 +# minimize 1.0e-16 1.0e-16 10000 10000 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:04:16 diff --git a/examples/SPIN/iron/log.30Apr19.spin.iron_cubic.g++.4 b/examples/SPIN/iron/log.30Apr19.spin.iron_cubic.g++.4 new file mode 100644 index 0000000000..677805d26a --- /dev/null +++ b/examples/SPIN/iron/log.30Apr19.spin.iron_cubic.g++.4 @@ -0,0 +1,161 @@ +LAMMPS (30 Apr 2019) + using 1 OpenMP thread(s) per MPI task +# bcc iron in a 3d periodic box + +clear + using 1 OpenMP thread(s) per MPI task +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice bcc 2.8665 +Lattice spacing in x,y,z = 2.8665 2.8665 2.8665 +region box block 0.0 5.0 0.0 5.0 0.0 5.0 +create_box 1 box +Created orthogonal box = (0 0 0) to (14.3325 14.3325 14.3325) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 250 atoms + create_atoms CPU = 0.000627756 secs + +# setting mass, mag. moments, and interactions for bcc iron + +mass 1 55.845 +set group all spin 2.2 -1.0 0.0 0.0 + 250 settings made for spin +velocity all create 100 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 3.5 +pair_coeff * * eam/alloy Fe_Mishin2006.eam.alloy Fe +pair_coeff * * spin/exchange exchange 3.4 0.02726 0.2171 1.841 +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin cubic 0.001 0.0005 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.0 21 + +fix 3 all nve/spin lattice yes +timestep 0.0001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magx equal c_out_mag[1] +variable magy equal c_out_mag[2] +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magx v_magy v_magz v_magnorm v_tmag v_emag pe etotal +thermo 50 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 100 all custom 1 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +run 2000 +Neighbor list info ... + update every 10 steps, delay 20 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.77337 + ghost atom cutoff = 5.77337 + binsize = 2.88668, bins = 5 5 5 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair eam/alloy, perpetual, half/full from (2) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (2) pair spin/exchange, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.265 | 7.265 | 7.265 Mbytes +Step Time v_magx v_magy v_magz v_magnorm v_tmag v_emag PotEng TotEng + 0 0 -1 0 0 1 0 -55.58269 -1125.5827 -1122.364 + 50 0.005 -1 0 0 1 0 -55.581457 -1125.4635 -1122.364 + 100 0.01 -1 0 0 1 0 -55.577922 -1125.1262 -1122.364 + 150 0.015 -1 0 0 1 0 -55.572562 -1124.6305 -1122.364 + 200 0.02 -1 0 0 1 0 -55.566098 -1124.067 -1122.364 + 250 0.025 -1 0 0 1 0 -55.559384 -1123.5412 -1122.364 + 300 0.03 -1 0 0 1 0 -55.553261 -1123.1491 -1122.364 + 350 0.035 -1 0 0 1 0 -55.548413 -1122.9526 -1122.364 + 400 0.04 -1 0 0 1 0 -55.545248 -1122.9623 -1122.364 + 450 0.045 -1 0 0 1 0 -55.54387 -1123.1395 -1122.364 + 500 0.05 -1 0 0 1 0 -55.544101 -1123.4126 -1122.364 + 550 0.055 -1 0 0 1 0 -55.54558 -1123.7021 -1122.364 + 600 0.06 -1 0 0 1 0 -55.547857 -1123.9414 -1122.364 + 650 0.065 -1 0 0 1 0 -55.550495 -1124.0897 -1122.364 + 700 0.07 -1 0 0 1 0 -55.553127 -1124.136 -1122.364 + 750 0.075 -1 0 0 1 0 -55.555497 -1124.0961 -1122.364 + 800 0.08 -1 0 0 1 0 -55.557466 -1124.0053 -1122.364 + 850 0.085 -1 0 0 1 0 -55.559001 -1123.9069 -1122.364 + 900 0.09 -1 0 0 1 0 -55.560147 -1123.8404 -1122.364 + 950 0.095 -1 0 0 1 0 -55.560992 -1123.8312 -1122.364 + 1000 0.1 -1 0 0 1 0 -55.561635 -1123.8853 -1122.364 + 1050 0.105 -1 0 0 1 0 -55.562156 -1123.9898 -1122.364 + 1100 0.11 -1 0 0 1 0 -55.562594 -1124.1174 -1122.364 + 1150 0.115 -1 0 0 1 0 -55.562944 -1124.2349 -1122.364 + 1200 0.12 -1 0 0 1 0 -55.563163 -1124.3115 -1122.364 + 1250 0.125 -1 0 0 1 0 -55.563193 -1124.3273 -1122.364 + 1300 0.13 -1 0 0 1 0 -55.562982 -1124.2776 -1122.364 + 1350 0.135 -1 0 0 1 0 -55.562513 -1124.1744 -1122.364 + 1400 0.14 -1 0 0 1 0 -55.561812 -1124.0433 -1122.364 + 1450 0.145 -1 0 0 1 0 -55.560956 -1123.9169 -1122.364 + 1500 0.15 -1 0 0 1 0 -55.560057 -1123.8268 -1122.364 + 1550 0.155 -1 0 0 1 0 -55.559235 -1123.7951 -1122.364 + 1600 0.16 -1 0 0 1 0 -55.55859 -1123.8282 -1122.364 + 1650 0.165 -1 0 0 1 0 -55.558174 -1123.9155 -1122.364 + 1700 0.17 -1 0 0 1 0 -55.557974 -1124.0311 -1122.364 + 1750 0.175 -1 0 0 1 0 -55.557913 -1124.1409 -1122.364 + 1800 0.18 -1 0 0 1 0 -55.55788 -1124.212 -1122.364 + 1850 0.185 -1 0 0 1 0 -55.557753 -1124.2208 -1122.364 + 1900 0.19 -1 0 0 1 0 -55.557448 -1124.1596 -1122.364 + 1950 0.195 -1 0 0 1 0 -55.556942 -1124.0384 -1122.364 + 2000 0.2 -1 0 0 1 0 -55.556288 -1123.883 -1122.364 +Loop time of 4.39485 on 4 procs for 2000 steps with 250 atoms + +Performance: 3.932 ns/day, 6.104 hours/ns, 455.078 timesteps/s +98.3% 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.64527 | 0.6695 | 0.71114 | 3.3 | 15.23 +Neigh | 0.0032711 | 0.0034365 | 0.0036387 | 0.3 | 0.08 +Comm | 0.14872 | 0.19108 | 0.21485 | 6.1 | 4.35 +Output | 0.40622 | 0.43119 | 0.45149 | 2.5 | 9.81 +Modify | 3.0688 | 3.0921 | 3.1179 | 1.0 | 70.36 +Other | | 0.007548 | | | 0.17 + +Nlocal: 62.5 ave 67 max 57 min +Histogram: 1 0 0 0 0 1 0 1 0 1 +Nghost: 850.5 ave 856 max 847 min +Histogram: 1 0 1 1 0 0 0 0 0 1 +Neighs: 1968.75 ave 2101 max 1792 min +Histogram: 1 0 0 0 0 1 0 1 0 1 +FullNghs: 3937.5 ave 4217 max 3583 min +Histogram: 1 0 0 0 0 1 0 1 0 1 + +Total # of neighbors = 15750 +Ave neighs/atom = 63 +Neighbor list builds = 12 +Dangerous builds = 0 +# min_style spin +# min_modify alpha_damp 1.0 discrete_factor 10 +# minimize 1.0e-16 1.0e-16 10000 10000 + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:04 diff --git a/examples/SPIN/nickel/log.11May18.spin.nickel.g++.1 b/examples/SPIN/nickel/log.30Apr19.spin.nickel.g++.1 similarity index 89% rename from examples/SPIN/nickel/log.11May18.spin.nickel.g++.1 rename to examples/SPIN/nickel/log.30Apr19.spin.nickel.g++.1 index 82f54f4e6b..8d7284f5e2 100644 --- a/examples/SPIN/nickel/log.11May18.spin.nickel.g++.1 +++ b/examples/SPIN/nickel/log.30Apr19.spin.nickel.g++.1 @@ -1,7 +1,9 @@ -LAMMPS (11 May 2018) +LAMMPS (30 Apr 2019) + using 1 OpenMP thread(s) per MPI task # fcc nickel in a 3d periodic box clear + using 1 OpenMP thread(s) per MPI task units metal atom_style spin @@ -19,7 +21,7 @@ Created orthogonal box = (0 0 0) to (17.62 17.62 17.62) 1 by 1 by 1 MPI processor grid create_atoms 1 box Created 500 atoms - Time spent = 0.000804186 secs + create_atoms CPU = 0.000835896 secs # setting mass, mag. moments, and interactions for cobalt @@ -45,7 +47,7 @@ timestep 0.0001 # compute and output options -compute out_mag all compute/spin +compute out_mag all spin compute out_pe all pe compute out_ke all ke compute out_temp all temp @@ -122,20 +124,20 @@ Step Time v_magnorm v_emag Temp v_tmag TotEng 1900 0.19 0.028733796 -28.785208 228.39889 316.9972 -2218.1018 1950 0.195 0.028733826 -28.9724 228.84666 309.8027 -2218.1018 2000 0.2 0.02873386 -29.175039 228.918 297.88519 -2218.1018 -Loop time of 10.033 on 1 procs for 2000 steps with 500 atoms +Loop time of 15.9256 on 1 procs for 2000 steps with 500 atoms -Performance: 1.722 ns/day, 13.935 hours/ns, 199.342 timesteps/s -99.4% CPU use with 1 MPI tasks x no OpenMP threads +Performance: 1.085 ns/day, 22.119 hours/ns, 125.584 timesteps/s +99.2% 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.909 | 3.909 | 3.909 | 0.0 | 38.96 -Neigh | 0.031031 | 0.031031 | 0.031031 | 0.0 | 0.31 -Comm | 0.046559 | 0.046559 | 0.046559 | 0.0 | 0.46 -Output | 2.4087 | 2.4087 | 2.4087 | 0.0 | 24.01 -Modify | 3.625 | 3.625 | 3.625 | 0.0 | 36.13 -Other | | 0.01268 | | | 0.13 +Pair | 5.8677 | 5.8677 | 5.8677 | 0.0 | 36.84 +Neigh | 0.051965 | 0.051965 | 0.051965 | 0.0 | 0.33 +Comm | 0.088829 | 0.088829 | 0.088829 | 0.0 | 0.56 +Output | 4.7019 | 4.7019 | 4.7019 | 0.0 | 29.52 +Modify | 5.199 | 5.199 | 5.199 | 0.0 | 32.65 +Other | | 0.01632 | | | 0.10 Nlocal: 500 ave 500 max 500 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -154,4 +156,4 @@ Dangerous builds = 0 Please see the log.cite file for references relevant to this simulation -Total wall time: 0:00:10 +Total wall time: 0:00:16 diff --git a/examples/SPIN/nickel/log.11May18.spin.nickel.g++.4 b/examples/SPIN/nickel/log.30Apr19.spin.nickel.g++.4 similarity index 89% rename from examples/SPIN/nickel/log.11May18.spin.nickel.g++.4 rename to examples/SPIN/nickel/log.30Apr19.spin.nickel.g++.4 index 373271459f..a186253db3 100644 --- a/examples/SPIN/nickel/log.11May18.spin.nickel.g++.4 +++ b/examples/SPIN/nickel/log.30Apr19.spin.nickel.g++.4 @@ -1,7 +1,9 @@ -LAMMPS (11 May 2018) +LAMMPS (30 Apr 2019) + using 1 OpenMP thread(s) per MPI task # fcc nickel in a 3d periodic box clear + using 1 OpenMP thread(s) per MPI task units metal atom_style spin @@ -19,7 +21,7 @@ Created orthogonal box = (0 0 0) to (17.62 17.62 17.62) 1 by 2 by 2 MPI processor grid create_atoms 1 box Created 500 atoms - Time spent = 0.000523567 secs + create_atoms CPU = 0.000492096 secs # setting mass, mag. moments, and interactions for cobalt @@ -45,7 +47,7 @@ timestep 0.0001 # compute and output options -compute out_mag all compute/spin +compute out_mag all spin compute out_pe all pe compute out_ke all ke compute out_temp all temp @@ -122,20 +124,20 @@ Step Time v_magnorm v_emag Temp v_tmag TotEng 1900 0.19 0.028733864 -27.967999 220.53947 322.9504 -2218.1018 1950 0.195 0.028733863 -28.173041 221.61407 318.63401 -2218.1018 2000 0.2 0.028733853 -28.362177 224.22281 310.55185 -2218.1018 -Loop time of 3.95094 on 4 procs for 2000 steps with 500 atoms +Loop time of 7.69012 on 4 procs for 2000 steps with 500 atoms -Performance: 4.374 ns/day, 5.487 hours/ns, 506.208 timesteps/s -98.1% CPU use with 4 MPI tasks x no OpenMP threads +Performance: 2.247 ns/day, 10.681 hours/ns, 260.074 timesteps/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 | 1.0289 | 1.0467 | 1.0811 | 2.0 | 26.49 -Neigh | 0.0079527 | 0.0081946 | 0.0084369 | 0.2 | 0.21 -Comm | 0.094456 | 0.13311 | 0.15138 | 6.2 | 3.37 -Output | 0.69702 | 0.71998 | 0.74483 | 2.1 | 18.22 -Modify | 2.0107 | 2.0383 | 2.0598 | 1.3 | 51.59 -Other | | 0.004668 | | | 0.12 +Pair | 1.5623 | 1.5999 | 1.6541 | 2.7 | 20.80 +Neigh | 0.012559 | 0.013043 | 0.013682 | 0.4 | 0.17 +Comm | 0.1843 | 0.24254 | 0.27935 | 7.2 | 3.15 +Output | 1.4749 | 1.5228 | 1.5694 | 2.9 | 19.80 +Modify | 4.2492 | 4.3019 | 4.3507 | 1.8 | 55.94 +Other | | 0.009925 | | | 0.13 Nlocal: 125 ave 132 max 120 min Histogram: 2 0 0 0 0 1 0 0 0 1 @@ -154,4 +156,4 @@ Dangerous builds = 0 Please see the log.cite file for references relevant to this simulation -Total wall time: 0:00:04 +Total wall time: 0:00:07 diff --git a/examples/SPIN/nickel/log.30Apr19.spin.nickel_cubic.g++.1 b/examples/SPIN/nickel/log.30Apr19.spin.nickel_cubic.g++.1 new file mode 100644 index 0000000000..425572dedf --- /dev/null +++ b/examples/SPIN/nickel/log.30Apr19.spin.nickel_cubic.g++.1 @@ -0,0 +1,160 @@ +LAMMPS (30 Apr 2019) + using 1 OpenMP thread(s) per MPI task +# fcc nickel in a 3d periodic box + +clear + using 1 OpenMP thread(s) per MPI task +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice fcc 3.524 +Lattice spacing in x,y,z = 3.524 3.524 3.524 +region box block 0.0 5.0 0.0 5.0 0.0 5.0 +create_box 1 box +Created orthogonal box = (0 0 0) to (17.62 17.62 17.62) + 1 by 1 by 1 MPI processor grid +create_atoms 1 box +Created 500 atoms + create_atoms CPU = 0.00068903 secs + +# setting mass, mag. moments, and interactions for cobalt + +mass 1 58.69 + +set group all spin/random 31 0.63 + 500 settings made for spin/random +#set group all spin 0.63 0.0 0.0 1.0 +velocity all create 100 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 4.0 +pair_coeff * * eam/alloy Ni99.eam.alloy Ni +pair_coeff * * spin/exchange exchange 4.0 0.50 0.2280246862 1.229983475 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin cubic -0.0001 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 zeeman 0.0 0.0 0.0 1.0 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.0 21 + +fix 3 all nve/spin lattice yes +timestep 0.0001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magnorm v_emag temp v_tmag etotal +thermo 50 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 50 all custom 1 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] + +run 2000 +Neighbor list info ... + update every 10 steps, delay 20 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.90375 + ghost atom cutoff = 5.90375 + binsize = 2.95187, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair eam/alloy, perpetual, half/full from (2) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (2) pair spin/exchange, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.384 | 7.384 | 7.384 Mbytes +Step Time v_magnorm v_emag Temp v_tmag TotEng + 0 0 0.028733803 0.455085 100.03408 -8603.706 -2218.0905 + 50 0.005 0.028732021 0.11535308 101.47887 -34407.888 -2218.0904 + 100 0.01 0.0287304 -0.665283 101.73105 6238.4535 -2218.09 + 150 0.015 0.028729403 -1.8105707 99.629794 2452.7607 -2218.0896 + 200 0.02 0.028731067 -3.224763 94.849715 1501.8625 -2218.0895 + 250 0.025 0.028732765 -4.8207784 88.447019 1110.3291 -2218.0895 + 300 0.03 0.028728169 -6.5331538 82.697813 905.2202 -2218.0896 + 350 0.035 0.02871707 -8.3059526 80.122838 772.40218 -2218.0896 + 400 0.04 0.028706605 -10.077613 82.389555 672.72236 -2218.0895 + 450 0.045 0.028701727 -11.78634 89.823176 595.82956 -2218.0894 + 500 0.05 0.028706691 -13.380919 101.39804 536.65866 -2218.0894 + 550 0.055 0.028714065 -14.824128 115.07511 491.25787 -2218.0893 + 600 0.06 0.028713691 -16.093505 128.58093 459.82107 -2218.089 + 650 0.065 0.028713232 -17.181217 140.22137 441.15183 -2218.089 + 700 0.07 0.02871245 -18.113035 149.60156 426.80154 -2218.0889 + 750 0.075 0.028712431 -18.954952 157.56849 413.61924 -2218.0891 + 800 0.08 0.02872489 -19.762756 164.91833 408.49483 -2218.0892 + 850 0.085 0.028733709 -20.538757 171.69348 407.47868 -2218.0894 + 900 0.09 0.028737031 -21.256095 177.71981 400.24086 -2218.0894 + 950 0.095 0.028743446 -21.908156 183.31613 390.46773 -2218.089 + 1000 0.1 0.028751809 -22.516179 189.01672 383.80802 -2218.0888 + 1050 0.105 0.028761625 -23.084057 194.48882 376.54433 -2218.089 + 1100 0.11 0.028768138 -23.565036 198.12295 366.13309 -2218.0891 + 1150 0.115 0.028770301 -23.937136 198.95102 354.82763 -2218.089 + 1200 0.12 0.028771334 -24.273509 198.31348 347.20512 -2218.0891 + 1250 0.125 0.028769662 -24.672789 198.26173 344.02095 -2218.0889 + 1300 0.13 0.028774175 -25.13917 199.48259 337.81596 -2218.0889 + 1350 0.135 0.028795936 -25.594094 201.33509 329.891 -2218.0889 + 1400 0.14 0.028824328 -25.978285 203.4984 328.81092 -2218.0886 + 1450 0.145 0.028846467 -26.299501 206.52931 328.61151 -2218.0886 + 1500 0.15 0.028858261 -26.605847 211.09044 324.29045 -2218.0888 + 1550 0.155 0.028852825 -26.92321 216.70656 317.24339 -2218.0888 + 1600 0.16 0.02885238 -27.232535 221.73117 312.50182 -2218.0888 + 1650 0.165 0.028857985 -27.513725 224.82466 312.32346 -2218.0887 + 1700 0.17 0.028863985 -27.764471 225.85697 312.80779 -2218.0887 + 1750 0.175 0.028868714 -27.983273 225.71411 315.37238 -2218.0888 + 1800 0.18 0.028871144 -28.187572 225.78979 319.44034 -2218.0888 + 1850 0.185 0.028865191 -28.395615 226.7477 321.25107 -2218.0889 + 1900 0.19 0.028855316 -28.597095 227.90237 319.98739 -2218.0889 + 1950 0.195 0.028853072 -28.79277 228.54008 313.04557 -2218.0886 + 2000 0.2 0.028855814 -29.015073 228.8643 300.40018 -2218.0885 +Loop time of 16.5858 on 1 procs for 2000 steps with 500 atoms + +Performance: 1.042 ns/day, 23.036 hours/ns, 120.585 timesteps/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 | 5.8835 | 5.8835 | 5.8835 | 0.0 | 35.47 +Neigh | 0.05244 | 0.05244 | 0.05244 | 0.0 | 0.32 +Comm | 0.092997 | 0.092997 | 0.092997 | 0.0 | 0.56 +Output | 5.213 | 5.213 | 5.213 | 0.0 | 31.43 +Modify | 5.3275 | 5.3275 | 5.3275 | 0.0 | 32.12 +Other | | 0.01636 | | | 0.10 + +Nlocal: 500 ave 500 max 500 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Nghost: 1956 ave 1956 max 1956 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +Neighs: 19507 ave 19507 max 19507 min +Histogram: 1 0 0 0 0 0 0 0 0 0 +FullNghs: 39014 ave 39014 max 39014 min +Histogram: 1 0 0 0 0 0 0 0 0 0 + +Total # of neighbors = 39014 +Ave neighs/atom = 78.028 +Neighbor list builds = 21 +Dangerous builds = 0 + + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:16 diff --git a/examples/SPIN/nickel/log.30Apr19.spin.nickel_cubic.g++.4 b/examples/SPIN/nickel/log.30Apr19.spin.nickel_cubic.g++.4 new file mode 100644 index 0000000000..fd9ce80533 --- /dev/null +++ b/examples/SPIN/nickel/log.30Apr19.spin.nickel_cubic.g++.4 @@ -0,0 +1,160 @@ +LAMMPS (30 Apr 2019) + using 1 OpenMP thread(s) per MPI task +# fcc nickel in a 3d periodic box + +clear + using 1 OpenMP thread(s) per MPI task +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice fcc 3.524 +Lattice spacing in x,y,z = 3.524 3.524 3.524 +region box block 0.0 5.0 0.0 5.0 0.0 5.0 +create_box 1 box +Created orthogonal box = (0 0 0) to (17.62 17.62 17.62) + 1 by 2 by 2 MPI processor grid +create_atoms 1 box +Created 500 atoms + create_atoms CPU = 0.000639439 secs + +# setting mass, mag. moments, and interactions for cobalt + +mass 1 58.69 + +set group all spin/random 31 0.63 + 500 settings made for spin/random +#set group all spin 0.63 0.0 0.0 1.0 +velocity all create 100 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 4.0 +pair_coeff * * eam/alloy Ni99.eam.alloy Ni +pair_coeff * * spin/exchange exchange 4.0 0.50 0.2280246862 1.229983475 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin cubic -0.0001 0.0 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 zeeman 0.0 0.0 0.0 1.0 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.0 21 + +fix 3 all nve/spin lattice yes +timestep 0.0001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magnorm v_emag temp v_tmag etotal +thermo 50 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 50 all custom 1 dump.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] c_outsp[4] c_outsp[5] c_outsp[6] c_outsp[7] + +run 2000 +Neighbor list info ... + update every 10 steps, delay 20 steps, check yes + max neighbors/atom: 2000, page size: 100000 + master list distance cutoff = 5.90375 + ghost atom cutoff = 5.90375 + binsize = 2.95187, bins = 6 6 6 + 2 neighbor lists, perpetual/occasional/extra = 2 0 0 + (1) pair eam/alloy, perpetual, half/full from (2) + attributes: half, newton on + pair build: halffull/newton + stencil: none + bin: none + (2) pair spin/exchange, perpetual + attributes: full, newton on + pair build: full/bin/atomonly + stencil: full/bin/3d + bin: standard +Per MPI rank memory allocation (min/avg/max) = 7.298 | 7.298 | 7.298 Mbytes +Step Time v_magnorm v_emag Temp v_tmag TotEng + 0 0 0.028733803 0.455085 100.03408 -8603.706 -2218.0905 + 50 0.005 0.028732088 0.2980989 98.74184 -13360.862 -2218.0904 + 100 0.01 0.02873076 -0.32911738 97.074246 12749.405 -2218.09 + 150 0.015 0.028730298 -1.3537059 94.073558 3353.8731 -2218.0897 + 200 0.02 0.028733079 -2.6807428 89.419616 1868.0661 -2218.0895 + 250 0.025 0.028735725 -4.2256641 84.074249 1317.4563 -2218.0893 + 300 0.03 0.028728939 -5.9209085 80.063263 1033.1632 -2218.0893 + 350 0.035 0.028716731 -7.6957087 79.36782 849.1925 -2218.0893 + 400 0.04 0.02871114 -9.4720832 83.055773 718.36408 -2218.0893 + 450 0.045 0.02870879 -11.19254 91.28713 624.04151 -2218.0891 + 500 0.05 0.028708873 -12.832707 103.50343 551.85983 -2218.0892 + 550 0.055 0.028710315 -14.370603 118.16778 497.19527 -2218.0893 + 600 0.06 0.028707016 -15.769641 132.83264 462.57721 -2218.089 + 650 0.065 0.028706727 -17.018362 145.39247 445.40608 -2218.0888 + 700 0.07 0.028710482 -18.137792 154.80131 439.71677 -2218.0889 + 750 0.075 0.028705169 -19.130471 160.53663 437.67621 -2218.0892 + 800 0.08 0.028695336 -19.988452 162.95918 430.42912 -2218.089 + 850 0.085 0.028688393 -20.758389 164.33238 420.42991 -2218.0889 + 900 0.09 0.028684101 -21.521505 167.76167 412.29955 -2218.089 + 950 0.095 0.028684705 -22.314351 174.918 403.31757 -2218.0891 + 1000 0.1 0.028691284 -23.080026 184.60192 391.677 -2218.0893 + 1050 0.105 0.028687846 -23.714845 193.76312 379.81345 -2218.0893 + 1100 0.11 0.028682371 -24.191738 200.43041 372.65414 -2218.0893 + 1150 0.115 0.028684765 -24.569816 204.39323 368.53291 -2218.0891 + 1200 0.12 0.028678139 -24.892093 205.879 364.46365 -2218.0892 + 1250 0.125 0.028669738 -25.160227 205.09197 361.98015 -2218.0893 + 1300 0.13 0.028666626 -25.367813 202.69136 360.10649 -2218.0891 + 1350 0.135 0.028665511 -25.520784 199.79027 359.68033 -2218.0892 + 1400 0.14 0.02866749 -25.655936 197.91217 361.218 -2218.0892 + 1450 0.145 0.028666916 -25.80086 198.1933 361.5167 -2218.0889 + 1500 0.15 0.028660248 -25.953194 200.8243 356.0167 -2218.089 + 1550 0.155 0.028641778 -26.137444 205.80307 349.94961 -2218.0887 + 1600 0.16 0.028626894 -26.393372 212.6879 347.30341 -2218.0888 + 1650 0.165 0.028619835 -26.707923 219.63834 340.80511 -2218.0885 + 1700 0.17 0.028615681 -27.023214 224.25635 329.60947 -2218.0882 + 1750 0.175 0.02861597 -27.301445 225.47908 321.35253 -2218.0884 + 1800 0.18 0.028614544 -27.53764 224.03527 320.92639 -2218.0884 + 1850 0.185 0.02860894 -27.741581 221.74286 323.07034 -2218.0884 + 1900 0.19 0.028604135 -27.943034 220.659 322.60989 -2218.0884 + 1950 0.195 0.028602672 -28.160901 221.85908 318.8957 -2218.0885 + 2000 0.2 0.028597155 -28.365986 224.55298 311.53587 -2218.0886 +Loop time of 7.21663 on 4 procs for 2000 steps with 500 atoms + +Performance: 2.394 ns/day, 10.023 hours/ns, 277.138 timesteps/s +98.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.6337 | 1.6726 | 1.7259 | 2.7 | 23.18 +Neigh | 0.013023 | 0.01361 | 0.014188 | 0.4 | 0.19 +Comm | 0.19005 | 0.24933 | 0.2905 | 7.5 | 3.45 +Output | 1.4595 | 1.5171 | 1.5725 | 3.4 | 21.02 +Modify | 3.6943 | 3.7537 | 3.8093 | 2.3 | 52.01 +Other | | 0.01025 | | | 0.14 + +Nlocal: 125 ave 132 max 121 min +Histogram: 2 0 0 0 1 0 0 0 0 1 +Nghost: 1099 ave 1103 max 1092 min +Histogram: 1 0 0 0 0 1 0 0 0 2 +Neighs: 4877 ave 5097 max 4747 min +Histogram: 2 0 0 0 1 0 0 0 0 1 +FullNghs: 9754 ave 10298 max 9440 min +Histogram: 2 0 0 0 1 0 0 0 0 1 + +Total # of neighbors = 39016 +Ave neighs/atom = 78.032 +Neighbor list builds = 21 +Dangerous builds = 0 + + +Please see the log.cite file for references relevant to this simulation + +Total wall time: 0:00:07 From 67532684f9d3b8b3cb642bc812ad8ecc6f1d7019 Mon Sep 17 00:00:00 2001 From: Steve Plimpton Date: Tue, 14 May 2019 14:02:54 -0600 Subject: [PATCH 152/311] add missing formatting info --- doc/src/fix_hyper_local.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/fix_hyper_local.txt b/doc/src/fix_hyper_local.txt index 185fa8f20b..6d7306c95b 100644 --- a/doc/src/fix_hyper_local.txt +++ b/doc/src/fix_hyper_local.txt @@ -322,13 +322,13 @@ vector stores the following quantities: 9 = fraction of biased bonds with negative strain during this run 10 = average bias coeff for all bonds during this run (unitless) 11 = min bias coeff for any bond during this run (unitless) -12 = max bias coeff for any bond during this run (unitless) +12 = max bias coeff for any bond during this run (unitless) :ul 13 = max drift distance of any bond atom during this run (distance units) 14 = max distance from proc subbox of any ghost atom with maxstrain < qfactor during this run (distance units) 15 = max distance outside my box of any ghost atom with any maxstrain during this run (distance units) 16 = count of ghost atoms that could not be found on reneighbor steps during this run -17 = count of bias overlaps (< Dcut) found during this run +17 = count of bias overlaps (< Dcut) found during this run :ul 18 = cumulative hyper time since fix created (time units) 19 = cumulative count of event timesteps since fix created From 30dc7f70b5a849f2aafd92c79df9329bc592ea14 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 14 May 2019 17:13:46 -0400 Subject: [PATCH 153/311] correct repeated words in docs --- doc/src/Examples.txt | 2 +- doc/src/Howto_drude2.txt | 2 +- doc/src/Install_git.txt | 2 +- doc/src/Install_svn.txt | 2 +- doc/src/Packages_details.txt | 6 +++--- doc/src/Python_library.txt | 2 +- doc/src/Run_options.txt | 2 +- doc/src/Run_output.txt | 2 +- doc/src/compute_chunk_atom.txt | 2 +- doc/src/compute_chunk_spread_atom.txt | 2 +- doc/src/compute_voronoi_atom.txt | 2 +- doc/src/dihedral_spherical.txt | 2 +- doc/src/dihedral_table_cut.txt | 2 +- doc/src/dump.txt | 6 +++--- doc/src/dump_modify.txt | 2 +- doc/src/fix_ave_chunk.txt | 2 +- doc/src/fix_halt.txt | 11 +++++------ doc/src/fix_hyper_global.txt | 2 +- doc/src/fix_hyper_local.txt | 2 +- doc/src/lattice.txt | 2 +- doc/src/molecule.txt | 2 +- doc/src/neigh_modify.txt | 6 +++--- doc/src/neighbor.txt | 2 +- doc/src/package.txt | 2 +- doc/src/pair_fep_soft.txt | 4 ++-- doc/src/pair_lj_long.txt | 2 +- doc/src/pair_vashishta.txt | 2 +- doc/src/python.txt | 2 +- doc/src/read_data.txt | 2 +- doc/src/server_md.txt | 2 +- doc/src/tad.txt | 2 +- doc/src/variable.txt | 6 +++--- doc/src/velocity.txt | 2 +- doc/src/write_data.txt | 2 +- 34 files changed, 47 insertions(+), 48 deletions(-) diff --git a/doc/src/Examples.txt b/doc/src/Examples.txt index e26e6abd99..daf9966155 100644 --- a/doc/src/Examples.txt +++ b/doc/src/Examples.txt @@ -11,7 +11,7 @@ Section"_Tools.html :c Example scripts :h3 The LAMMPS distribution includes an examples sub-directory with many -sample problems. Many are 2d models that run quickly are are +sample problems. Many are 2d models that run quickly and are straightforward to visualize, requiring at most a couple of minutes to run on a desktop machine. Each problem has an input script (in.*) and produces a log file (log.*) when it runs. Some use a data file diff --git a/doc/src/Howto_drude2.txt b/doc/src/Howto_drude2.txt index afb528eb4a..376ecb0292 100644 --- a/doc/src/Howto_drude2.txt +++ b/doc/src/Howto_drude2.txt @@ -274,7 +274,7 @@ crash. Even without reaching this extreme case, the correlation between nearby dipoles on the same molecule may be exaggerated. Often, special bond relations prevent bonded neighboring atoms to see the charge of each other's DP, so that the problem does not always appear. -It is possible to use screened dipole dipole interactions by using the +It is possible to use screened dipole-dipole interactions by using the "{pair_style thole}"_pair_thole.html. This is implemented as a correction to the Coulomb pair_styles, which dampens at short distance the interactions between the charges representing the induced dipoles. diff --git a/doc/src/Install_git.txt b/doc/src/Install_git.txt index bae5bef94f..19decde516 100644 --- a/doc/src/Install_git.txt +++ b/doc/src/Install_git.txt @@ -52,7 +52,7 @@ as if you unpacked a current LAMMPS tarball, with the exception, that the HTML documentation files are not included. They can be fetched from the LAMMPS website by typing "make fetch" in the doc directory. Or they can be generated from the content provided in doc/src by -typing "make html" from the the doc directory. +typing "make html" from the doc directory. After initial cloning, as bug fixes and new features are added to LAMMPS, as listed on "this page"_Errors_bugs.html, you can stay diff --git a/doc/src/Install_svn.txt b/doc/src/Install_svn.txt index 84a46865f3..b701c0b04d 100644 --- a/doc/src/Install_svn.txt +++ b/doc/src/Install_svn.txt @@ -40,7 +40,7 @@ as if you unpacked a current LAMMPS tarball, with the exception, that the HTML documentation files are not included. They can be fetched from the LAMMPS website by typing "make fetch" in the doc directory. Or they can be generated from the content provided in doc/src by -typing "make html" from the the doc directory. +typing "make html" from the doc directory. After initial checkout, as bug fixes and new features are added to LAMMPS, as listed on "this page"_Errors_bugs.html, you can stay diff --git a/doc/src/Packages_details.txt b/doc/src/Packages_details.txt index ae967c0927..4f9bcc1910 100644 --- a/doc/src/Packages_details.txt +++ b/doc/src/Packages_details.txt @@ -706,7 +706,7 @@ PERI package :link(PKG-PERI),h4 An atom style, several pair styles which implement different Peridynamics materials models, and several computes which calculate -diagnostics. Peridynamics is a a particle-based meshless continuum +diagnostics. Peridynamics is a particle-based meshless continuum model. [Authors:] The original package was created by Mike Parks (Sandia). @@ -1229,7 +1229,7 @@ isothermal, isoenergetic, isobaric and isenthalpic conditions are included. These enable long timesteps via the Shardlow splitting algorithm. -[Authors:] Jim Larentzos (ARL), Tim Mattox (Engility Corp), and and John +[Authors:] Jim Larentzos (ARL), Tim Mattox (Engility Corp), and John Brennan (ARL). [Supporting info:] @@ -1537,7 +1537,7 @@ USER-MESO package :link(PKG-USER-MESO),h4 [Contents:] -Several extensions of the the dissipative particle dynamics (DPD) +Several extensions of the dissipative particle dynamics (DPD) method. Specifically, energy-conserving DPD (eDPD) that can model non-isothermal processes, many-body DPD (mDPD) for simulating vapor-liquid coexistence, and transport DPD (tDPD) for modeling diff --git a/doc/src/Python_library.txt b/doc/src/Python_library.txt index e76af83962..d9ddbe0cbb 100644 --- a/doc/src/Python_library.txt +++ b/doc/src/Python_library.txt @@ -180,7 +180,7 @@ doubles is returned, one value per atom, which you can use via normal Python subscripting. The values will be zero for atoms not in the specified group. -The get_thermo() method returns returns the current value of a thermo +The get_thermo() method returns the current value of a thermo keyword as a float. The get_natoms() method returns the total number of atoms in the diff --git a/doc/src/Run_options.txt b/doc/src/Run_options.txt index 1c3cb60c5f..87b272a866 100644 --- a/doc/src/Run_options.txt +++ b/doc/src/Run_options.txt @@ -242,7 +242,7 @@ processors. Running with multiple partitions can be useful for running "multi-replica simulations"_Howto_replica.html, where each replica -runs on on one or a few processors. Note that with MPI installed on a +runs on one or a few processors. Note that with MPI installed on a machine (e.g. your desktop), you can run on more (virtual) processors than you have physical processors. diff --git a/doc/src/Run_output.txt b/doc/src/Run_output.txt index 7d5a9e6ae6..70eecff20d 100644 --- a/doc/src/Run_output.txt +++ b/doc/src/Run_output.txt @@ -93,7 +93,7 @@ monitor thread utilization and load balance is provided. A new {Thread timings} section is also added, which lists the time spent in reducing the per-thread data elements to the storage for non-threaded computation. These thread timings are measured for the first MPI rank -only and and thus, because the breakdown for MPI tasks can change from +only and thus, because the breakdown for MPI tasks can change from MPI rank to MPI rank, this breakdown can be very different for individual ranks. Here is an example output for this section: diff --git a/doc/src/compute_chunk_atom.txt b/doc/src/compute_chunk_atom.txt index b924f90da8..c6dfddbd55 100644 --- a/doc/src/compute_chunk_atom.txt +++ b/doc/src/compute_chunk_atom.txt @@ -468,7 +468,7 @@ property/chunk"_compute_property_chunk.html command. NOTE: The compression operation requires global communication across all processors to share their chunk ID values. It can require large memory on every processor to store them, even after they are -compressed, if there are are a large number of unique chunk IDs with +compressed, if there are a large number of unique chunk IDs with atoms assigned to them. It uses a STL map to find unique chunk IDs and store them in sorted order. Each time an atom is assigned a compressed chunk ID, it must access the STL map. All of this means diff --git a/doc/src/compute_chunk_spread_atom.txt b/doc/src/compute_chunk_spread_atom.txt index 5f65900a49..4afb62683e 100644 --- a/doc/src/compute_chunk_spread_atom.txt +++ b/doc/src/compute_chunk_spread_atom.txt @@ -49,7 +49,7 @@ For inputs that are computes, they must be a compute that calculates per-chunk values. These are computes whose style names end in "/chunk". -For inputs that are fixes, they should be a a fix that calculates +For inputs that are fixes, they should be a fix that calculates per-chunk values. For example, "fix ave/chunk"_fix_ave_chunk.html or "fix ave/time"_fix_ave_time.html (assuming it is time-averaging per-chunk data). diff --git a/doc/src/compute_voronoi_atom.txt b/doc/src/compute_voronoi_atom.txt index d01f4df712..4d7bd56838 100644 --- a/doc/src/compute_voronoi_atom.txt +++ b/doc/src/compute_voronoi_atom.txt @@ -96,7 +96,7 @@ group. The argument {maxedge} of the this keyword is the largest number of edges on a single Voronoi cell face expected to occur in the sample. This keyword adds the generation of a global vector with {maxedge}+1 entries. The last entry in the vector contains the number of -faces with with more than {maxedge} edges. Since the polygon with the +faces with more than {maxedge} edges. Since the polygon with the smallest amount of edges is a triangle, entries 1 and 2 of the vector will always be zero. diff --git a/doc/src/dihedral_spherical.txt b/doc/src/dihedral_spherical.txt index 61949174df..62ba6cf9e5 100644 --- a/doc/src/dihedral_spherical.txt +++ b/doc/src/dihedral_spherical.txt @@ -47,7 +47,7 @@ division by sin(74.4)*sin(48.1) (the minima positions for theta1 and theta2). The following coefficients must be defined for each dihedral type via the "dihedral_coeff"_dihedral_coeff.html command as in the example above, or in -the Dihedral Coeffs section of a data file file read by the +the Dihedral Coeffs section of a data file read by the "read_data"_read_data.html command: n (integer >= 1) diff --git a/doc/src/dihedral_table_cut.txt b/doc/src/dihedral_table_cut.txt index 6f3f6edbcc..b72f34e36e 100644 --- a/doc/src/dihedral_table_cut.txt +++ b/doc/src/dihedral_table_cut.txt @@ -174,7 +174,7 @@ radians instead of degrees. (Note: This changes the way the forces are scaled in the 4th column of the data file.) The optional "CHECKU" keyword is followed by a filename. This allows -the user to save all of the the {Ntable} different entries in the +the user to save all of the {Ntable} different entries in the interpolated energy table to a file to make sure that the interpolated function agrees with the user's expectations. (Note: You can temporarily increase the {Ntable} parameter to a high value for this diff --git a/doc/src/dump.txt b/doc/src/dump.txt index a776ff70fc..ff1b2dc3a6 100644 --- a/doc/src/dump.txt +++ b/doc/src/dump.txt @@ -21,7 +21,7 @@ dump ID group-ID style N file args :pre ID = user-assigned name for the dump :ulb,l group-ID = ID of the group of atoms to be dumped :l -style = {atom} or {atom/gz} or {atom/mpiio} or {cfg} or {cfg/gz} or {cfg/mpiio} or {custom} or {custom/gz} or {custom/mpiio} or {dcd} or {h5md} or {image} or or {local} or {molfile} or {movie} or {netcdf} or {netcdf/mpiio} or {vtk} or {xtc} or {xyz} or {xyz/gz} or {xyz/mpiio} :l +style = {atom} or {atom/gz} or {atom/mpiio} or {cfg} or {cfg/gz} or {cfg/mpiio} or {custom} or {custom/gz} or {custom/mpiio} or {dcd} or {h5md} or {image} or {local} or {molfile} or {movie} or {netcdf} or {netcdf/mpiio} or {vtk} or {xtc} or {xyz} or {xyz/gz} or {xyz/mpiio} :l N = dump every this many timesteps :l file = name of file to write dump info to :l args = list of arguments for a particular style :l @@ -196,7 +196,7 @@ For post-processing purposes the {atom}, {local}, and {custom} text files are self-describing in the following sense. The dimensions of the simulation box are included in each snapshot. -For an orthogonal simulation box this information is is formatted as: +For an orthogonal simulation box this information is formatted as: ITEM: BOX BOUNDS xx yy zz xlo xhi @@ -619,7 +619,7 @@ should be replaced by the actual name of the variable that has been defined previously in the input script. Only an atom-style variable can be referenced, since it is the only style that generates per-atom values. Variables of style {atom} can reference individual atom -attributes, per-atom atom attributes, thermodynamic keywords, or +attributes, per-atom attributes, thermodynamic keywords, or invoke other computes, fixes, or variables when they are evaluated, so this is a very general means of creating quantities to output to a dump file. diff --git a/doc/src/dump_modify.txt b/doc/src/dump_modify.txt index 9a35956055..6be0d26463 100644 --- a/doc/src/dump_modify.txt +++ b/doc/src/dump_modify.txt @@ -310,7 +310,7 @@ NOTE: Atom and molecule IDs are stored internally as 4-byte or 8-byte signed integers, depending on how LAMMPS was compiled. When specifying the {format int} option you can use a "%d"-style format identifier in the format string and LAMMPS will convert this to the -corresponding 8-byte form it it is needed when outputting those +corresponding 8-byte form if it is needed when outputting those values. However, when specifying the {line} option or {format M string} option for those values, you should specify a format string appropriate for an 8-byte signed integer, e.g. one with "%ld", if diff --git a/doc/src/fix_ave_chunk.txt b/doc/src/fix_ave_chunk.txt index 4e036367e2..a8bdef0425 100644 --- a/doc/src/fix_ave_chunk.txt +++ b/doc/src/fix_ave_chunk.txt @@ -361,7 +361,7 @@ computes that calculate a temperature to see which ones implement a bias. The {adof} and {cdof} keywords define the values used in the degree of -freedom (DOF) formula described above for for temperature calculation +freedom (DOF) formula described above for temperature calculation for each chunk. They are only used when the {temp} value is calculated. They can be used to calculate a more appropriate temperature for some kinds of chunks. Here are 3 examples: diff --git a/doc/src/fix_halt.txt b/doc/src/fix_halt.txt index 87ad97accf..8e85dc7ea5 100644 --- a/doc/src/fix_halt.txt +++ b/doc/src/fix_halt.txt @@ -113,12 +113,11 @@ state of the system, e.g. via a "write_dump"_write_dump.html or "write_restart"_write_restart.html command. If its value is {continue}, the behavior is the same as for {soft}, -except subsequent subsequent "run"_run.html or -"minimize"_minimize.html commands are executed. This allows your -script to remedy the condition that triggered the halt, if necessary. -Note that you may wish use the "unfix"_unfix.html command on the fix -halt ID, so that the same condition is not immediately triggered in a -subsequent run. +except subsequent "run"_run.html or "minimize"_minimize.html commands +are executed. This allows your script to remedy the condition that +triggered the halt, if necessary. Note that you may wish use the +"unfix"_unfix.html command on the fix halt ID, so that the same +condition is not immediately triggered in a subsequent run. The optional {message} keyword determines whether a message is printed to the screen and logfile when the halt condition is triggered. If diff --git a/doc/src/fix_hyper_global.txt b/doc/src/fix_hyper_global.txt index 81404ac6a2..bfe8203b50 100644 --- a/doc/src/fix_hyper_global.txt +++ b/doc/src/fix_hyper_global.txt @@ -188,7 +188,7 @@ No information about this fix is written to "binary restart files"_restart.html. The "fix_modify"_fix_modify.html {energy} option is supported by this -fix to add the energy of the bias potential to the the system's +fix to add the energy of the bias potential to the system's potential energy as part of "thermodynamic output"_thermo_style.html. This fix computes a global scalar and global vector of length 12, which diff --git a/doc/src/fix_hyper_local.txt b/doc/src/fix_hyper_local.txt index 185fa8f20b..daf861db92 100644 --- a/doc/src/fix_hyper_local.txt +++ b/doc/src/fix_hyper_local.txt @@ -301,7 +301,7 @@ No information about this fix is written to "binary restart files"_restart.html. The "fix_modify"_fix_modify.html {energy} option is supported by this -fix to add the energy of the bias potential to the the system's +fix to add the energy of the bias potential to the system's potential energy as part of "thermodynamic output"_thermo_style.html. This fix computes a global scalar and global vector of length 21, diff --git a/doc/src/lattice.txt b/doc/src/lattice.txt index 6f16dc5432..3b50dc044b 100644 --- a/doc/src/lattice.txt +++ b/doc/src/lattice.txt @@ -124,7 +124,7 @@ so that they describe a tilted parallelepiped. Via the {basis} keyword you add atoms, one at a time, to the unit cell. Its arguments are fractional coordinates (0.0 <= x,y,z < 1.0). The position vector x of a basis atom within the unit cell is thus a linear combination of -the the unit cell's 3 edge vectors, i.e. x = bx a1 + by a2 + bz a3, +the unit cell's 3 edge vectors, i.e. x = bx a1 + by a2 + bz a3, where bx,by,bz are the 3 values specified for the {basis} keyword. :line diff --git a/doc/src/molecule.txt b/doc/src/molecule.txt index 4c066b5e2e..e8b6bd8a7e 100644 --- a/doc/src/molecule.txt +++ b/doc/src/molecule.txt @@ -396,7 +396,7 @@ If flag = 0, no a,b,c,d values are listed on the line, just the If flag = 1, a,b,c are listed, where a = ID of central atom in the angle, and b,c the other two atoms in the angle. -If flag = 2, a,b are listed, where a = ID of atom in bond with the the +If flag = 2, a,b are listed, where a = ID of atom in bond with the lowest ID, and b = ID of atom in bond with the highest ID. If flag = 3, a,b,c are listed, where a = ID of central atom, diff --git a/doc/src/neigh_modify.txt b/doc/src/neigh_modify.txt index 6c4218cff5..e81393aa01 100644 --- a/doc/src/neigh_modify.txt +++ b/doc/src/neigh_modify.txt @@ -187,9 +187,9 @@ used in neighbor list construction to sort and find neighboring atoms. By default, for "neighbor style bin"_neighbor.html, LAMMPS uses bins that are 1/2 the size of the maximum pair cutoff. For "neighbor style multi"_neighbor.html, the bins are 1/2 the size of the minimum pair -cutoff. Typically these are good values values for minimizing the -time for neighbor list construction. This setting overrides the -default. If you make it too big, there is little overhead due to +cutoff. Typically these are good values for minimizing thetime for +neighbor list construction. This setting overrides the default. +If you make it too big, there is little overhead due to looping over bins, but more atoms are checked. If you make it too small, the optimal number of atoms is checked, but bin overhead goes up. If you set the binsize to 0.0, LAMMPS will use the default diff --git a/doc/src/neighbor.txt b/doc/src/neighbor.txt index 3e590eaff1..4a60f957d4 100644 --- a/doc/src/neighbor.txt +++ b/doc/src/neighbor.txt @@ -56,7 +56,7 @@ bin size is set to 1/2 of the shortest cutoff distance and multiple sets of bins are defined to search over for different atom types. This imposes some extra setup overhead, but the searches themselves may be much faster for the short-cutoff cases. See the "comm_modify -mode multi"_comm_modify.html command for a communication option option +mode multi"_comm_modify.html command for a communication option that may also be beneficial for simulations of this kind. The "neigh_modify"_neigh_modify.html command has additional options diff --git a/doc/src/package.txt b/doc/src/package.txt index a9412447b8..9e32afae0a 100644 --- a/doc/src/package.txt +++ b/doc/src/package.txt @@ -622,7 +622,7 @@ except "omp" and "mode", are ignored if LAMMPS was not built with Xeon Phi co-processor support. These settings are made automatically if the "-sf intel" "command-line switch"_Run_options.html is used. If it is not used, you must invoke the package intel command in your input -script or or via the "-pk intel" "command-line +script or via the "-pk intel" "command-line switch"_Run_options.html. For the KOKKOS package, the option defaults for GPUs are neigh = full, diff --git a/doc/src/pair_fep_soft.txt b/doc/src/pair_fep_soft.txt index d5e848cd1e..0cf2519c73 100644 --- a/doc/src/pair_fep_soft.txt +++ b/doc/src/pair_fep_soft.txt @@ -201,7 +201,7 @@ model. The usage of the TIP4P pair style is documented in the "pair_lj"_pair_lj.html styles. In the soft version the parameters n, alpha_LJ and alpha_C are set in the "pair_style"_pair_style.html command, after the specific parameters of the TIP4P water model and before the cutoffs. The -activation parameter lambda is supplied as an argument of the the +activation parameter lambda is supplied as an argument of the "pair_coeff"_pair_coeff.html command, after epsilon and sigma and before the optional cutoffs. @@ -210,7 +210,7 @@ Style {lj/charmm/coul/long/soft} implements a soft-core version of the modified "pair_lj_charmm"_pair_charmm.html style. In the soft version the parameters n, alpha_LJ and alpha_C are set in the "pair_style"_pair_style.html command, before the global cutoffs. The activation parameter lambda is introduced as an argument -of the the "pair_coeff"_pair_coeff.html command, after epsilon and sigma and +of the "pair_coeff"_pair_coeff.html command, after epsilon and sigma and before the optional eps14 and sigma14. Style {lj/class2/soft} implements a soft-core version of the 9-6 potential in diff --git a/doc/src/pair_lj_long.txt b/doc/src/pair_lj_long.txt index 4e8410d062..e371030a76 100644 --- a/doc/src/pair_lj_long.txt +++ b/doc/src/pair_lj_long.txt @@ -91,7 +91,7 @@ is to enable LAMMPS to "find" the 2 H atoms associated with each O atom. For example, if the atom ID of an O atom in a TIP4P water molecule is 500, then its 2 H atoms must have IDs 501 and 502. -See the the "Howto tip4p"_Howto_tip4p.html doc page for more +See the "Howto tip4p"_Howto_tip4p.html doc page for more information on how to use the TIP4P pair style. Note that the neighbor list cutoff for Coulomb interactions is effectively extended by a distance 2*qdist when using the TIP4P pair style, to account for diff --git a/doc/src/pair_vashishta.txt b/doc/src/pair_vashishta.txt index 01d089b4de..7ffb16cc83 100644 --- a/doc/src/pair_vashishta.txt +++ b/doc/src/pair_vashishta.txt @@ -63,7 +63,7 @@ equally spaced in R^2 space from cutinner^2 to cutoff^2. For the two-body term in the above equation, a linear interpolation for each pairwise distance between adjacent points in the table. In practice the tabulated version can run 3-5x faster than the analytic version -with with moderate to little loss of accuracy for Ntable values +with moderate to little loss of accuracy for Ntable values between 10000 and 1000000. It is not recommended to use less than 5000 tabulation points. diff --git a/doc/src/python.txt b/doc/src/python.txt index 54d18d2f60..851183ddf4 100644 --- a/doc/src/python.txt +++ b/doc/src/python.txt @@ -480,7 +480,7 @@ information on those settings. If you use Python code which calls back to LAMMPS, via the SELF input argument explained above, there is an extra step required when building LAMMPS. LAMMPS must also be built as a shared library and -your Python function must be able to to load the Python module in +your Python function must be able to load the Python module in python/lammps.py that wraps the LAMMPS library interface. These are the same steps required to use Python by itself to wrap LAMMPS. Details on these steps are explained on the "Python"_Python_head.html diff --git a/doc/src/read_data.txt b/doc/src/read_data.txt index 30ee1201d9..62112ea886 100644 --- a/doc/src/read_data.txt +++ b/doc/src/read_data.txt @@ -701,7 +701,7 @@ of 0 means the atom is still inside the box when unwrapped. A value of 2 means add 2 box lengths to get the unwrapped coordinate. A value of -1 means subtract 1 box length to get the unwrapped coordinate. LAMMPS updates these flags as atoms cross periodic boundaries during -the simulation. The "dump"_dump.html command can output atom atom +the simulation. The "dump"_dump.html command can output atom coordinates in wrapped or unwrapped form, as well as the 3 image flags. diff --git a/doc/src/server_md.txt b/doc/src/server_md.txt index 03f3db7e19..495c890c59 100644 --- a/doc/src/server_md.txt +++ b/doc/src/server_md.txt @@ -65,7 +65,7 @@ in this pseudo code is a pointer to an instance of the CSlib. See the src/MESSAGE/server_md.cpp and src/MESSAGE/fix_client_md.cpp files for details on how LAMMPS uses these messages. See the examples/COUPLE/lammps_vasp/vasp_wrapper.py file for an example of how -a quantum code (VASP) can use use these messages. +a quantum code (VASP) can use these messages. The following pseudo-code uses these values, defined as enums. diff --git a/doc/src/tad.txt b/doc/src/tad.txt index effb998f94..62407532d6 100644 --- a/doc/src/tad.txt +++ b/doc/src/tad.txt @@ -62,7 +62,7 @@ results at a specified lower temperature. A good overview of accelerated dynamics methods for such systems is given in "this review paper"_#Voter2002 from the same group. In general, these methods assume that the long-time dynamics is dominated by infrequent events i.e. the -system is is confined to low energy basins for long periods, +system is confined to low energy basins for long periods, punctuated by brief, randomly-occurring transitions to adjacent basins. TAD is suitable for infrequent-event systems, where in addition, the transition kinetics are well-approximated by harmonic diff --git a/doc/src/variable.txt b/doc/src/variable.txt index 77c1f6eeb0..e90e9bd04b 100644 --- a/doc/src/variable.txt +++ b/doc/src/variable.txt @@ -293,7 +293,7 @@ list of runs (e.g. 1000) without having to list N strings in the input script. For the {string} style, a single string is assigned to the variable. -Two differences between this this and using the {index} style exist: +Two differences between this style and using the {index} style exist: a variable with {string} style can be redefined, e.g. by another command later in the input script, or if the script is read again in a loop. The other difference is that {string} performs variable substitution even if the @@ -359,7 +359,7 @@ per-atom values is read, a non-blank line is searched for in the file. A comment character "#" can be used anywhere on a line; text starting with the comment character is stripped. Blank lines are skipped. The first "word" of a non-blank line, delimited by white-space, is read as -the count N of per-atom lines to immediately follow. N can be be the +the count N of per-atom lines to immediately follow. N can be the total number of atoms in the system, or only a subset. The next N lines have the following format @@ -931,7 +931,7 @@ with ID = 243. Or they can take a variable name, specified as v_name, where name is the name of the variable, like x\[v_myIndex\]. The variable can be of any style except {vector} or {atom} or {atomfile} variables. The variable is evaluated and the result is expected to be -numeric and is cast to an integer (i.e. 3.4 becomes 3), to use an an +numeric and is cast to an integer (i.e. 3.4 becomes 3), to use an index, which must be a value from 1 to N. Note that a "formula" cannot be used as the argument between the brackets, e.g. x\[243+10\] or x\[v_myIndex+1\] are not allowed. To do this a single variable can diff --git a/doc/src/velocity.txt b/doc/src/velocity.txt index decdf2a923..4bbbc5ad45 100644 --- a/doc/src/velocity.txt +++ b/doc/src/velocity.txt @@ -157,7 +157,7 @@ is issued. The {bias} keyword with a {yes} setting is used by {create} and {scale}, but only if the {temp} keyword is also used to specify a "compute"_compute.html that calculates temperature in a desired way. -If the temperature compute also calculates a velocity bias, the the +If the temperature compute also calculates a velocity bias, the bias is subtracted from atom velocities before the {create} and {scale} operations are performed. After the operations, the bias is added back to the atom velocities. See the "Howto diff --git a/doc/src/write_data.txt b/doc/src/write_data.txt index a8168b70a0..79e855dff3 100644 --- a/doc/src/write_data.txt +++ b/doc/src/write_data.txt @@ -106,7 +106,7 @@ written for all I,J pairs where I <= J. These coefficients will include any specific settings made in the input script up to that point. The presence of these I != J coefficients in the data file will effectively turn off the default mixing rule for the pair style. -Again, the coefficient values in the data file can can be overridden +Again, the coefficient values in the data file can be overridden in the input script after reading the data file, by specifying additional "pair_coeff"_pair_coeff.html commands for any desired I,J pairs. From 6e842ba84a8ec87ddfaa10b407d662186dd98693 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 14 May 2019 17:36:26 -0400 Subject: [PATCH 154/311] fix typo --- doc/src/neigh_modify.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/neigh_modify.txt b/doc/src/neigh_modify.txt index e81393aa01..c97cb53e43 100644 --- a/doc/src/neigh_modify.txt +++ b/doc/src/neigh_modify.txt @@ -187,7 +187,7 @@ used in neighbor list construction to sort and find neighboring atoms. By default, for "neighbor style bin"_neighbor.html, LAMMPS uses bins that are 1/2 the size of the maximum pair cutoff. For "neighbor style multi"_neighbor.html, the bins are 1/2 the size of the minimum pair -cutoff. Typically these are good values for minimizing thetime for +cutoff. Typically these are good values for minimizing the time for neighbor list construction. This setting overrides the default. If you make it too big, there is little overhead due to looping over bins, but more atoms are checked. If you make it too From 31789ad03bd7e31a009bbd1a9df26a98068574b3 Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 14 May 2019 17:44:35 -0600 Subject: [PATCH 155/311] Commit JT 051419 - added beginning doc - removed a remaining dipolar --- src/SPIN/pair_spin_dipolar_cut.cpp | 533 ----------------------------- 1 file changed, 533 deletions(-) delete mode 100644 src/SPIN/pair_spin_dipolar_cut.cpp diff --git a/src/SPIN/pair_spin_dipolar_cut.cpp b/src/SPIN/pair_spin_dipolar_cut.cpp deleted file mode 100644 index b8927d62e9..0000000000 --- a/src/SPIN/pair_spin_dipolar_cut.cpp +++ /dev/null @@ -1,533 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - www.cs.sandia.gov/~sjplimp/lammps.html - Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories - - 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 authors: Julien Tranchida (SNL) - Stan Moore (SNL) - - Please cite the related publication: - Tranchida, J., Plimpton, S. J., Thibaudeau, P., & Thompson, A. P. (2018). - Massively parallel symplectic algorithm for coupled magnetic spin dynamics - and molecular dynamics. Journal of Computational Physics. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include - -#include "pair_spin_dipolar_cut.h" -#include "atom.h" -#include "comm.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "fix_nve_spin.h" -#include "force.h" -#include "kspace.h" -#include "math_const.h" -#include "memory.h" -#include "modify.h" -#include "error.h" -#include "update.h" - - -using namespace LAMMPS_NS; -using namespace MathConst; - -#define EWALD_F 1.12837917 -#define EWALD_P 0.3275911 -#define A1 0.254829592 -#define A2 -0.284496736 -#define A3 1.421413741 -#define A4 -1.453152027 -#define A5 1.061405429 - -/* ---------------------------------------------------------------------- */ - -PairSpinDipolarCut::PairSpinDipolarCut(LAMMPS *lmp) : PairSpin(lmp), -lockfixnvespin(NULL) -{ - single_enable = 0; - spinflag = 1; - respa_enable = 0; - no_virial_fdotr_compute = 1; - lattice_flag = 0; - - hbar = force->hplanck/MY_2PI; // eV/(rad.THz) - mub = 9.274e-4; // in A.Ang^2 - mu_0 = 785.15; // in eV/Ang/A^2 - mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV.Ang^3 - mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV - mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz - -} - -/* ---------------------------------------------------------------------- - free all arrays -------------------------------------------------------------------------- */ - -PairSpinDipolarCut::~PairSpinDipolarCut() -{ - if (allocated) { - memory->destroy(setflag); - memory->destroy(cut_spin_long); - memory->destroy(cutsq); - } -} - -/* ---------------------------------------------------------------------- - global settings -------------------------------------------------------------------------- */ - -void PairSpinDipolarCut::settings(int narg, char **arg) -{ - if (narg < 1 || narg > 2) - error->all(FLERR,"Incorrect args in pair_style command"); - - if (strcmp(update->unit_style,"metal") != 0) - error->all(FLERR,"Spin simulations require metal unit style"); - - if (!atom->sp) - error->all(FLERR,"Pair/spin style requires atom attribute sp"); - - cut_spin_long_global = force->numeric(FLERR,arg[0]); - - // reset cutoffs that have been explicitly set - - if (allocated) { - int i,j; - for (i = 1; i <= atom->ntypes; i++) { - for (j = i+1; j <= atom->ntypes; j++) { - if (setflag[i][j]) { - cut_spin_long[i][j] = cut_spin_long_global; - } - } - } - } - -} - -/* ---------------------------------------------------------------------- - set coeffs for one or more type pairs -------------------------------------------------------------------------- */ - -void PairSpinDipolarCut::coeff(int narg, char **arg) -{ - if (!allocated) allocate(); - - // check if args correct - - if (strcmp(arg[2],"long") != 0) - error->all(FLERR,"Incorrect args in pair_style command"); - if (narg < 1 || narg > 4) - error->all(FLERR,"Incorrect args in pair_style command"); - - int ilo,ihi,jlo,jhi; - force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); - force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); - - double spin_long_cut_one = force->numeric(FLERR,arg[3]); - - int count = 0; - for (int i = ilo; i <= ihi; i++) { - for (int j = MAX(jlo,i); j <= jhi; j++) { - setflag[i][j] = 1; - cut_spin_long[i][j] = spin_long_cut_one; - count++; - } - } - - if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); -} - -/* ---------------------------------------------------------------------- - init specific to this pair style -------------------------------------------------------------------------- */ - -void PairSpinDipolarCut::init_style() -{ - if (!atom->sp_flag) - error->all(FLERR,"Pair spin requires atom/spin style"); - - // need a full neighbor list - - int irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->full = 1; - - // checking if nve/spin is a listed fix - - int ifix = 0; - while (ifix < modify->nfix) { - if (strcmp(modify->fix[ifix]->style,"nve/spin") == 0) break; - ifix++; - } - if (ifix == modify->nfix) - error->all(FLERR,"pair/spin style requires nve/spin"); - - // get the lattice_flag from nve/spin - - for (int i = 0; i < modify->nfix; i++) { - if (strcmp(modify->fix[i]->style,"nve/spin") == 0) { - lockfixnvespin = (FixNVESpin *) modify->fix[i]; - lattice_flag = lockfixnvespin->lattice_flag; - } - } - -} - -/* ---------------------------------------------------------------------- - init for one type pair i,j and corresponding j,i -------------------------------------------------------------------------- */ - -double PairSpinDipolarCut::init_one(int i, int j) -{ - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); - - cut_spin_long[j][i] = cut_spin_long[i][j]; - - return cut_spin_long_global; -} - -/* ---------------------------------------------------------------------- - extract the larger cutoff if "cut" or "cut_coul" -------------------------------------------------------------------------- */ - -void *PairSpinDipolarCut::extract(const char *str, int &dim) -{ - if (strcmp(str,"cut") == 0) { - dim = 0; - return (void *) &cut_spin_long_global; - } else if (strcmp(str,"cut_coul") == 0) { - dim = 0; - return (void *) &cut_spin_long_global; - } else if (strcmp(str,"ewald_order") == 0) { - ewald_order = 0; - ewald_order |= 1<<1; - ewald_order |= 1<<3; - dim = 0; - return (void *) &ewald_order; - } else if (strcmp(str,"ewald_mix") == 0) { - dim = 0; - return (void *) &mix_flag; - } - return NULL; -} - -/* ---------------------------------------------------------------------- */ - -void PairSpinDipolarCut::compute(int eflag, int vflag) -{ - int i,j,ii,jj,inum,jnum,itype,jtype; - double rinv,r2inv,r3inv,rsq; - double evdwl,ecoul; - double xi[3],rij[3],eij[3]; - double spi[4],spj[4],fi[3],fmi[3]; - double local_cut2; - int *ilist,*jlist,*numneigh,**firstneigh; - - evdwl = ecoul = 0.0; - if (eflag || vflag) ev_setup(eflag,vflag); - else evflag = vflag_fdotr = 0; - - double **x = atom->x; - double **f = atom->f; - double **fm = atom->fm; - double **sp = atom->sp; - int *type = atom->type; - int nlocal = atom->nlocal; - int newton_pair = force->newton_pair; - - inum = list->inum; - ilist = list->ilist; - numneigh = list->numneigh; - firstneigh = list->firstneigh; - - // computation of the exchange interaction - // loop over atoms and their neighbors - - for (ii = 0; ii < inum; ii++) { - i = ilist[ii]; - xi[0] = x[i][0]; - xi[1] = x[i][1]; - xi[2] = x[i][2]; - jlist = firstneigh[i]; - jnum = numneigh[i]; - spi[0] = sp[i][0]; - spi[1] = sp[i][1]; - spi[2] = sp[i][2]; - spi[3] = sp[i][3]; - itype = type[i]; - - for (jj = 0; jj < jnum; jj++) { - j = jlist[jj]; - j &= NEIGHMASK; - jtype = type[j]; - - spj[0] = sp[j][0]; - spj[1] = sp[j][1]; - spj[2] = sp[j][2]; - spj[3] = sp[j][3]; - - evdwl = 0.0; - fi[0] = fi[1] = fi[2] = 0.0; - fmi[0] = fmi[1] = fmi[2] = 0.0; - - rij[0] = x[j][0] - xi[0]; - rij[1] = x[j][1] - xi[1]; - rij[2] = x[j][2] - xi[2]; - rsq = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; - rinv = 1.0/sqrt(rsq); - eij[0] = rij[0]*rinv; - eij[1] = rij[1]*rinv; - eij[2] = rij[2]*rinv; - - local_cut2 = cut_spin_long[itype][jtype]*cut_spin_long[itype][jtype]; - - if (rsq < local_cut2) { - r2inv = 1.0/rsq; - r3inv = r2inv*rinv; - - compute_dipolar(i,j,eij,fmi,spi,spj,r3inv); - if (lattice_flag) compute_dipolar_mech(i,j,eij,fi,spi,spj,r2inv); - } - - // force accumulation - - f[i][0] += fi[0]; - f[i][1] += fi[1]; - f[i][2] += fi[2]; - fm[i][0] += fmi[0]; - fm[i][1] += fmi[1]; - fm[i][2] += fmi[2]; - - if (newton_pair || j < nlocal) { - f[j][0] -= fi[0]; - f[j][1] -= fi[1]; - f[j][2] -= fi[2]; - } - - if (eflag) { - if (rsq <= local_cut2) { - evdwl -= (spi[0]*fmi[0] + spi[1]*fmi[1] + spi[2]*fmi[2]); - evdwl *= hbar; - } - } else evdwl = 0.0; - - if (evflag) ev_tally_xyz(i,j,nlocal,newton_pair, - evdwl,ecoul,fi[0],fi[1],fi[2],rij[0],rij[1],rij[2]); - - } - } -} - -/* ---------------------------------------------------------------------- - update the pair interaction fmi acting on the spin ii - adding 1/r (for r in [0,rc]) contribution to the pair - removing erf(r)/r (for r in [0,rc]) from the kspace force -------------------------------------------------------------------------- */ - -void PairSpinDipolarCut::compute_single_pair(int ii, double fmi[3]) -{ - int i,j,jj,jnum,itype,jtype; - double rsq,rinv,r2inv,r3inv; - double xi[3],rij[3],eij[3]; - double spi[4],spj[4]; - double local_cut2; - int *ilist,*jlist,*numneigh,**firstneigh; - - double **x = atom->x; - double **sp = atom->sp; - int *type = atom->type; - - ilist = list->ilist; - numneigh = list->numneigh; - firstneigh = list->firstneigh; - - // computation of the exchange interaction - // loop over neighbors of atom i - - i = ilist[ii]; - xi[0] = x[i][0]; - xi[1] = x[i][1]; - xi[2] = x[i][2]; - spi[0] = sp[i][0]; - spi[1] = sp[i][1]; - spi[2] = sp[i][2]; - spi[3] = sp[i][3]; - jlist = firstneigh[i]; - jnum = numneigh[i]; - itype = type[i]; - - for (jj = 0; jj < jnum; jj++) { - j = jlist[jj]; - j &= NEIGHMASK; - jtype = type[j]; - - spj[0] = sp[j][0]; - spj[1] = sp[j][1]; - spj[2] = sp[j][2]; - spj[3] = sp[j][3]; - - rij[0] = x[j][0] - xi[0]; - rij[1] = x[j][1] - xi[1]; - rij[2] = x[j][2] - xi[2]; - rsq = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; - rinv = 1.0/sqrt(rsq); - eij[0] = rij[0]*rinv; - eij[1] = rij[1]*rinv; - eij[2] = rij[2]*rinv; - - local_cut2 = cut_spin_long[itype][jtype]*cut_spin_long[itype][jtype]; - - if (rsq < local_cut2) { - r2inv = 1.0/rsq; - r3inv = r2inv*rinv; - - // compute dipolar interaction - - compute_dipolar(i,j,eij,fmi,spi,spj,r3inv); - } - } -} - -/* ---------------------------------------------------------------------- - compute dipolar interaction between spins i and j -------------------------------------------------------------------------- */ - -void PairSpinDipolarCut::compute_dipolar(int i, int j, double eij[3], - double fmi[3], double spi[4], double spj[4], double r3inv) -{ - double sjdotr; - double gigjiri3,pre; - - sjdotr = spj[0]*eij[0] + spj[1]*eij[1] + spj[2]*eij[2]; - gigjiri3 = (spi[3] * spj[3])*r3inv; - pre = mub2mu0hbinv * gigjiri3; - - fmi[0] += pre * (3.0 * sjdotr *eij[0] - spj[0]); - fmi[1] += pre * (3.0 * sjdotr *eij[1] - spj[1]); - fmi[2] += pre * (3.0 * sjdotr *eij[2] - spj[2]); -} - -/* ---------------------------------------------------------------------- - compute the mechanical force due to the dipolar interaction between - atom i and atom j -------------------------------------------------------------------------- */ - -void PairSpinDipolarCut::compute_dipolar_mech(int i, int j, double eij[3], - double fi[3], double spi[3], double spj[3], double r2inv) -{ - double sisj,sieij,sjeij; - double gigjri4,bij,pre; - - gigjri4 = (spi[3] * spj[3])*r2inv*r2inv; - sisj = spi[0]*spj[0] + spi[1]*spj[1] + spi[2]*spj[2]; - sieij = spi[0]*eij[0] + spi[1]*eij[1] + spi[2]*eij[2]; - sjeij = spj[0]*eij[0] + spj[1]*eij[1] + spj[2]*eij[2]; - - bij = sisj - 5.0*sieij*sjeij; - pre = mub2mu0*gigjri4; - - fi[0] += pre * (eij[0] * bij + (sjeij*spi[0] + sieij*spj[0])); - fi[1] += pre * (eij[1] * bij + (sjeij*spi[1] + sieij*spj[1])); - fi[2] += pre * (eij[2] * bij + (sjeij*spi[2] + sieij*spj[2])); -} - -/* ---------------------------------------------------------------------- - allocate all arrays -------------------------------------------------------------------------- */ - -void PairSpinDipolarCut::allocate() -{ - allocated = 1; - int n = atom->ntypes; - - memory->create(setflag,n+1,n+1,"pair:setflag"); - for (int i = 1; i <= n; i++) - for (int j = i; j <= n; j++) - setflag[i][j] = 0; - - memory->create(cut_spin_long,n+1,n+1,"pair/spin/long:cut_spin_long"); - memory->create(cutsq,n+1,n+1,"pair/spin/long:cutsq"); -} - -/* ---------------------------------------------------------------------- - proc 0 writes to restart file -------------------------------------------------------------------------- */ - -void PairSpinDipolarCut::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(&cut_spin_long[i][j],sizeof(int),1,fp); - } - } - } -} - -/* ---------------------------------------------------------------------- - proc 0 reads from restart file, bcasts -------------------------------------------------------------------------- */ - -void PairSpinDipolarCut::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) fread(&setflag[i][j],sizeof(int),1,fp); - MPI_Bcast(&setflag[i][j],1,MPI_INT,0,world); - if (setflag[i][j]) { - if (me == 0) { - fread(&cut_spin_long[i][j],sizeof(int),1,fp); - } - MPI_Bcast(&cut_spin_long[i][j],1,MPI_INT,0,world); - } - } - } -} - -/* ---------------------------------------------------------------------- - proc 0 writes to restart file -------------------------------------------------------------------------- */ - -void PairSpinDipolarCut::write_restart_settings(FILE *fp) -{ - fwrite(&cut_spin_long_global,sizeof(double),1,fp); - fwrite(&mix_flag,sizeof(int),1,fp); -} - -/* ---------------------------------------------------------------------- - proc 0 reads from restart file, bcasts -------------------------------------------------------------------------- */ - -void PairSpinDipolarCut::read_restart_settings(FILE *fp) -{ - if (comm->me == 0) { - fread(&cut_spin_long_global,sizeof(double),1,fp); - fread(&mix_flag,sizeof(int),1,fp); - } - MPI_Bcast(&cut_spin_long_global,1,MPI_DOUBLE,0,world); - MPI_Bcast(&mix_flag,1,MPI_INT,0,world); -} From 084bb3c35b357f4eb3ef6fb24b22274666c21d6c Mon Sep 17 00:00:00 2001 From: julient31 Date: Wed, 15 May 2019 08:34:12 -0600 Subject: [PATCH 156/311] Commit JT 051519 - start doc pair_spin_dipole --- doc/src/pair_dipole_spin.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/src/pair_dipole_spin.txt b/doc/src/pair_dipole_spin.txt index c54d72cd7c..b1934033c0 100644 --- a/doc/src/pair_dipole_spin.txt +++ b/doc/src/pair_dipole_spin.txt @@ -12,6 +12,7 @@ pair_style spin/dipole/long/qsymp command :h3 [Syntax:] +pair_style spin/dipole/cut cutoff pair_style lj/cut/dipole/cut cutoff (cutoff2) pair_style lj/sf/dipole/sf cutoff (cutoff2) pair_style lj/cut/dipole/long cutoff (cutoff2) From 7b264d35fa7eadffafcbe9a22e67977d733c38b8 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 15 May 2019 14:53:51 -0400 Subject: [PATCH 157/311] remove dead code --- src/USER-OMP/pair_rebo_omp.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/USER-OMP/pair_rebo_omp.cpp b/src/USER-OMP/pair_rebo_omp.cpp index bd98c6426c..621de04ebb 100644 --- a/src/USER-OMP/pair_rebo_omp.cpp +++ b/src/USER-OMP/pair_rebo_omp.cpp @@ -41,8 +41,6 @@ void PairREBOOMP::settings(int narg, char ** /* arg */) void PairREBOOMP::spline_init() { PairAIREBO::spline_init(); - int i,j,k; - PCCf[0][2] = 0.007860700254745; PCCf[0][3] = 0.016125364564267; PCCf[1][1] = 0.003026697473481; From 98d9c45ad97be8e2f26a7310d2f0627429dc4a43 Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Wed, 15 May 2019 17:18:24 -0600 Subject: [PATCH 158/311] compute_bispectrum --- src/SNAP/pair_snap.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/SNAP/pair_snap.cpp b/src/SNAP/pair_snap.cpp index 0bf367b5dc..4913044369 100644 --- a/src/SNAP/pair_snap.cpp +++ b/src/SNAP/pair_snap.cpp @@ -1319,6 +1319,28 @@ void PairSNAP::compute_beta() } } +/* ---------------------------------------------------------------------- + compute bispectrum +------------------------------------------------------------------------- */ + +void PairSNAP::compute_bispectrum() +{ + int i; + int *type = atom->type; + + for (int ii = 0; ii < list->inum; ii++) { + i = list->ilist[ii]; + const int itype = type[i]; + const int ielem = map[itype]; + double* coeffi = coeffelem[ielem]; + snaptr->compute_bi(); + snaptr->copy_bi2bvec(); + + for (int k = 0; k < ncoeff; k++) + bispectrum[ii][k] = snaptr->bvec[k]; + } +} + /* ---------------------------------------------------------------------- allocate all arrays ------------------------------------------------------------------------- */ From 0c0b106924b56f2293c00fb2f6513648e62b5311 Mon Sep 17 00:00:00 2001 From: julient31 Date: Wed, 15 May 2019 20:49:05 -0600 Subject: [PATCH 159/311] Commit2 JT 051519 - started doc pair_spin_dipole.txt - renamed all pair/spin/dipole - created and tested example pair/spin/dipole/cut --- ...r_dipole_spin.txt => pair_spin_dipole.txt} | 42 +- .../SPIN/dipole_spin/Fe_Mishin2006.eam.alloy | 15009 ++++++++++++++++ .../exchange_bcc_iron.dat | 5 + .../exchange_fit_bcc_iron/exchange_fit.py | 32 + examples/SPIN/dipole_spin/fe_dd.dat | 19 + .../SPIN/dipole_spin/in.spin.iron_dipole_cut | 59 + examples/SPIN/dipole_spin/in.spin.iron_ewald | 60 + examples/SPIN/dipole_spin/in.spin.iron_pppm | 60 + src/SPIN/pair_spin_dipole_cut.cpp | 52 +- src/SPIN/pair_spin_dipole_cut.h | 12 +- src/SPIN/pair_spin_dipole_long.cpp | 34 +- src/SPIN/pair_spin_dipole_long.h | 12 +- src/SPIN/pair_spin_dipole_long_qsymp.cpp | 34 +- src/SPIN/pair_spin_dipole_long_qsymp.h | 12 +- 14 files changed, 15330 insertions(+), 112 deletions(-) rename doc/src/{pair_dipole_spin.txt => pair_spin_dipole.txt} (88%) create mode 100644 examples/SPIN/dipole_spin/Fe_Mishin2006.eam.alloy create mode 100644 examples/SPIN/dipole_spin/exchange_fit_bcc_iron/exchange_bcc_iron.dat create mode 100644 examples/SPIN/dipole_spin/exchange_fit_bcc_iron/exchange_fit.py create mode 100644 examples/SPIN/dipole_spin/fe_dd.dat create mode 100644 examples/SPIN/dipole_spin/in.spin.iron_dipole_cut create mode 100644 examples/SPIN/dipole_spin/in.spin.iron_ewald create mode 100644 examples/SPIN/dipole_spin/in.spin.iron_pppm diff --git a/doc/src/pair_dipole_spin.txt b/doc/src/pair_spin_dipole.txt similarity index 88% rename from doc/src/pair_dipole_spin.txt rename to doc/src/pair_spin_dipole.txt index c54d72cd7c..1c1b5b5f19 100644 --- a/doc/src/pair_dipole_spin.txt +++ b/doc/src/pair_spin_dipole.txt @@ -12,48 +12,36 @@ pair_style spin/dipole/long/qsymp command :h3 [Syntax:] -pair_style lj/cut/dipole/cut cutoff (cutoff2) -pair_style lj/sf/dipole/sf cutoff (cutoff2) -pair_style lj/cut/dipole/long cutoff (cutoff2) -pair_style lj/long/dipole/long flag_lj flag_coul cutoff (cutoff2) :pre +pair_style spin/dipole/cut cutoff +pair_style spin/dipole/long cutoff +pair_style spin/dipole/long/qsymp cutoff :pre -cutoff = global cutoff LJ (and Coulombic if only 1 arg) (distance units) :ulb,l -cutoff2 = global cutoff for Coulombic and dipole (optional) (distance units) :l -flag_lj = {long} or {cut} or {off} :l - {long} = use long-range damping on dispersion 1/r^6 term - {cut} = use a cutoff on dispersion 1/r^6 term - {off} = omit disperion 1/r^6 term entirely :pre -flag_coul = {long} or {off} :l - {long} = use long-range damping on Coulombic 1/r and point-dipole terms - {off} = omit Coulombic and point-dipole terms entirely :pre +cutoff = global cutoff for Magnetic dipole energy and forces +(optional) (distance units) :ulb,l :ule [Examples:] -pair_style lj/cut/dipole/cut 10.0 -pair_coeff * * 1.0 1.0 -pair_coeff 2 3 1.0 1.0 2.5 4.0 :pre +pair_style spin/dipole/cut 10.0 +pair_coeff * * 10.0 +pair_coeff 2 3 8.0 :pre -pair_style lj/sf/dipole/sf 9.0 +pair_style spin/dipole/long 9.0 pair_coeff * * 1.0 1.0 pair_coeff 2 3 1.0 1.0 2.5 4.0 scale 0.5 pair_coeff 2 3 1.0 1.0 2.5 4.0 :pre -pair_style lj/cut/dipole/long 10.0 -pair_coeff * * 1.0 1.0 -pair_coeff 2 3 1.0 1.0 2.5 4.0 :pre - -pair_style lj/long/dipole/long long long 3.5 10.0 +pair_style spin/dipole/long/qsymp 10.0 pair_coeff * * 1.0 1.0 pair_coeff 2 3 1.0 1.0 2.5 4.0 :pre [Description:] -Style {lj/cut/dipole/cut} computes interactions between pairs of particles -that each have a charge and/or a point dipole moment. In addition to -the usual Lennard-Jones interaction between the particles (Elj) the -charge-charge (Eqq), charge-dipole (Eqp), and dipole-dipole (Epp) -interactions are computed by these formulas for the energy (E), force +Style {spin/dipole/cut} computes a short-range dipole-dipole +interactions between pairs of magnetic particles that each +have a magnetic spin. +The magnetic dipole-dipole interactions are computed by the +following formulas for the energy (E), force (F), and torque (T) between particles I and J. :c,image(Eqs/pair_dipole.jpg) diff --git a/examples/SPIN/dipole_spin/Fe_Mishin2006.eam.alloy b/examples/SPIN/dipole_spin/Fe_Mishin2006.eam.alloy new file mode 100644 index 0000000000..69231bb7ee --- /dev/null +++ b/examples/SPIN/dipole_spin/Fe_Mishin2006.eam.alloy @@ -0,0 +1,15009 @@ +comment 1 +comment 2 +Converted by Ganga P Purja Pun using C++ code on Mon Nov 3 10:48:17 2014 +1 Fe +5001 2.400000000000000e-03 5001 1.134673400048920e-03 5.673367000244601e+00 +26 5.584700000000000e+01 2.855300000000000e+00 BCC + 0.000000000000000e+00 + -2.338738741480766e-02 + -4.628214468925276e-02 + -6.912258036387915e-02 + -9.175603963501618e-02 + -1.141497214000000e-01 + -1.363388222824136e-01 + -1.583226111166723e-01 + -1.800965752913192e-01 + -2.016645989796093e-01 + -2.230289901000000e-01 + -2.441907391820846e-01 + -2.651515164004249e-01 + -2.859130554412839e-01 + -3.064769176965011e-01 + -3.268446844000000e-01 + -3.470179531091855e-01 + -3.669982968636285e-01 + -3.867872784635140e-01 + -4.063864535839295e-01 + -4.257973671999999e-01 + -4.450215551034667e-01 + -4.640605423684923e-01 + -4.829158454463851e-01 + -5.015889707095635e-01 + -5.200814146000000e-01 + -5.383946650297390e-01 + -5.565301991603658e-01 + -5.744894857268537e-01 + -5.922739837155686e-01 + -6.098851423000000e-01 + -6.273244022645037e-01 + -6.445931939756846e-01 + -6.616929394780281e-01 + -6.786250511352716e-01 + -6.953909318999999e-01 + -7.119919765952718e-01 + -7.284295696432279e-01 + -7.447050873484842e-01 + -7.608198966551055e-01 + -7.767753551999997e-01 + -7.925728126189590e-01 + -8.082136084644670e-01 + -8.236990743647939e-01 + -8.390305327768360e-01 + -8.542092970000001e-01 + -8.692366724924486e-01 + -8.841139549244775e-01 + -8.988424321942350e-01 + -9.134233831702263e-01 + -9.278580778000000e-01 + -9.421477783833053e-01 + -9.562937376266863e-01 + -9.702972006149804e-01 + -9.841594035897939e-01 + -9.978815741999999e-01 + -1.011464932626877e+00 + -1.024910689374227e+00 + -1.038220047492379e+00 + -1.051394201530088e+00 + -1.064434338000000e+00 + -1.077341636148692e+00 + -1.090117264995124e+00 + -1.102762386491716e+00 + -1.115278154872840e+00 + -1.127665716000000e+00 + -1.139926208397942e+00 + -1.152060761127338e+00 + -1.164070496370367e+00 + -1.175956528594255e+00 + -1.187719964000000e+00 + -1.199361901614307e+00 + -1.210883431375302e+00 + -1.222285636497208e+00 + -1.233569592577916e+00 + -1.244736367000000e+00 + -1.255787020138112e+00 + -1.266722603828963e+00 + -1.277544163022812e+00 + -1.288252734706093e+00 + -1.298849349000000e+00 + -1.309335029515858e+00 + -1.319710789766606e+00 + -1.329977637188551e+00 + -1.340136572985217e+00 + -1.350188590000000e+00 + -1.360134674013246e+00 + -1.369975802739515e+00 + -1.379712947700534e+00 + -1.389347073262624e+00 + -1.398879136000000e+00 + -1.408310086019347e+00 + -1.417640866058629e+00 + -1.426872412303706e+00 + -1.436005653062347e+00 + -1.445041510000000e+00 + -1.453980898788701e+00 + -1.462824726507764e+00 + -1.471573894410746e+00 + -1.480229297407323e+00 + -1.488791823000000e+00 + -1.497262352264216e+00 + -1.505641758273629e+00 + -1.513930908641532e+00 + -1.522130664940848e+00 + -1.530241881000000e+00 + -1.538265404312065e+00 + -1.546202075663511e+00 + -1.554052729949587e+00 + -1.561818194964572e+00 + -1.569499292000000e+00 + -1.577096836740392e+00 + -1.584611637631811e+00 + -1.592044497451960e+00 + -1.599396212413425e+00 + -1.606667572000000e+00 + -1.613859360067553e+00 + -1.620972353850301e+00 + -1.628007324820493e+00 + -1.634965037585305e+00 + -1.641846251000000e+00 + -1.648651718746855e+00 + -1.655382187120556e+00 + -1.662038397074428e+00 + -1.668621083574689e+00 + -1.675130975000000e+00 + -1.681568794320005e+00 + -1.687935258528783e+00 + -1.694231079461267e+00 + -1.700456962682860e+00 + -1.706613607000000e+00 + -1.712701705964896e+00 + -1.718721948142722e+00 + -1.724675016499694e+00 + -1.730561586828580e+00 + -1.736382330000000e+00 + -1.742137912457411e+00 + -1.747828994017656e+00 + -1.753456229026646e+00 + -1.759020265526974e+00 + -1.764521747000000e+00 + -1.769961312537754e+00 + -1.775339594027171e+00 + -1.780657218386706e+00 + -1.785914807192779e+00 + -1.791112977000000e+00 + -1.796252339747382e+00 + -1.801333500673453e+00 + -1.806357060360666e+00 + -1.811323614328498e+00 + -1.816233753000000e+00 + -1.821088062150410e+00 + -1.825887120985276e+00 + -1.830631504346673e+00 + -1.835321782397329e+00 + -1.839958520000000e+00 + -1.844542277375300e+00 + -1.849073608812209e+00 + -1.853553064572349e+00 + -1.857981190434394e+00 + -1.862358526000000e+00 + -1.866685606181999e+00 + -1.870962962067843e+00 + -1.875191119963197e+00 + -1.879370599902195e+00 + -1.883501918000000e+00 + -1.887585586736770e+00 + -1.891622112755978e+00 + -1.895611998485404e+00 + -1.899555741651499e+00 + -1.903453835000000e+00 + -1.907306767129976e+00 + -1.911115021853308e+00 + -1.914879078883785e+00 + -1.918599413067872e+00 + -1.922276495000000e+00 + -1.925910791456493e+00 + -1.929502763824010e+00 + -1.933052869645757e+00 + -1.936561562187136e+00 + -1.940029290000000e+00 + -1.943456497684402e+00 + -1.946843625242175e+00 + -1.950191109032846e+00 + -1.953499381145042e+00 + -1.956768869000000e+00 + -1.959999996258605e+00 + -1.963193182622893e+00 + -1.966348843806269e+00 + -1.969467390558660e+00 + -1.972549230000000e+00 + -1.975594766012145e+00 + -1.978604397775412e+00 + -1.981578520793180e+00 + -1.984517526364655e+00 + -1.987421802000000e+00 + -1.990291731861874e+00 + -1.993127695559656e+00 + -1.995930069364364e+00 + -1.998699225767272e+00 + -2.001435533000000e+00 + -2.004139355858378e+00 + -2.006811055538481e+00 + -2.009450989763890e+00 + -2.012059511961222e+00 + -2.014636972000000e+00 + -2.017183716742461e+00 + -2.019700089231340e+00 + -2.022186429001382e+00 + -2.024643071393187e+00 + -2.027070349000000e+00 + -2.029468591629637e+00 + -2.031838124095820e+00 + -2.034179268100215e+00 + -2.036492342201070e+00 + -2.038777662000000e+00 + -2.041035540156417e+00 + -2.043266284490031e+00 + -2.045470200083453e+00 + -2.047647589335177e+00 + -2.049798751000000e+00 + -2.051923980684690e+00 + -2.054023570214561e+00 + -2.056097808968247e+00 + -2.058146983649728e+00 + -2.060171377000000e+00 + -2.062171268551674e+00 + -2.064146934640815e+00 + -2.066098649159696e+00 + -2.068026683134947e+00 + -2.069931304000000e+00 + -2.071812776276246e+00 + -2.073671361471072e+00 + -2.075507318519566e+00 + -2.077320903301032e+00 + -2.079112369000000e+00 + -2.080881966139512e+00 + -2.082629940879466e+00 + -2.084356537486872e+00 + -2.086061998635378e+00 + -2.087746563000000e+00 + -2.089410466229110e+00 + -2.091053941828707e+00 + -2.092677220771137e+00 + -2.094280530723314e+00 + -2.095864097000000e+00 + -2.097428142794787e+00 + -2.098972888139794e+00 + -2.100498550462023e+00 + -2.102005344216306e+00 + -2.103493482000000e+00 + -2.104963174393948e+00 + -2.106414628045970e+00 + -2.107848047779690e+00 + -2.109263636820768e+00 + -2.110661595000000e+00 + -2.112042119471926e+00 + -2.113405405101743e+00 + -2.114751645122076e+00 + -2.116081030815763e+00 + -2.117393750000000e+00 + -2.118689987937912e+00 + -2.119969928191390e+00 + -2.121233752504371e+00 + -2.122481640223532e+00 + -2.123713768000000e+00 + -2.124930310308645e+00 + -2.126131439345980e+00 + -2.127317325650607e+00 + -2.128488137848567e+00 + -2.129644042000000e+00 + -2.130785202020548e+00 + -2.131911779449632e+00 + -2.133023934312029e+00 + -2.134121824962966e+00 + -2.135205607000000e+00 + -2.136275433910872e+00 + -2.137331457489147e+00 + -2.138373827747866e+00 + -2.139402692469194e+00 + -2.140418197999999e+00 + -2.141420489142081e+00 + -2.142409707722756e+00 + -2.143385994030927e+00 + -2.144349486926974e+00 + -2.145300323000000e+00 + -2.146238637076898e+00 + -2.147164562479522e+00 + -2.148078231051947e+00 + -2.148979772720135e+00 + -2.149869315000000e+00 + -2.150746983835218e+00 + -2.151612904662093e+00 + -2.152467200947815e+00 + -2.153309993218032e+00 + -2.154141401000000e+00 + -2.154961542883784e+00 + -2.155770535619624e+00 + -2.156568494253713e+00 + -2.157355531798206e+00 + -2.158131760000000e+00 + -2.158897289576013e+00 + -2.159652229917454e+00 + -2.160396688379106e+00 + -2.161130769707277e+00 + -2.161854579000000e+00 + -2.162568220747540e+00 + -2.163271795520776e+00 + -2.163965403104795e+00 + -2.164649143391419e+00 + -2.165323114000000e+00 + -2.165987410839904e+00 + -2.166642128874188e+00 + -2.167287362019562e+00 + -2.167923202786971e+00 + -2.168549742000000e+00 + -2.169167069289456e+00 + -2.169775273557456e+00 + -2.170374442741976e+00 + -2.170964663390078e+00 + -2.171546020000000e+00 + -2.172118595836383e+00 + -2.172682474202094e+00 + -2.173237737093693e+00 + -2.173784464448991e+00 + -2.174322736000000e+00 + -2.174852630794634e+00 + -2.175374225221640e+00 + -2.175887595177988e+00 + -2.176392816678372e+00 + -2.176889964000000e+00 + -2.177379110090651e+00 + -2.177860327096639e+00 + -2.178333686466943e+00 + -2.178799258747679e+00 + -2.179257113000000e+00 + -2.179707317299531e+00 + -2.180149939409128e+00 + -2.180585046165010e+00 + -2.181012703042297e+00 + -2.181432975000000e+00 + -2.181845926509731e+00 + -2.182251621108717e+00 + -2.182650121032542e+00 + -2.183041486916871e+00 + -2.183425780000000e+00 + -2.183803061402426e+00 + -2.184173389857596e+00 + -2.184536823542827e+00 + -2.184893420600431e+00 + -2.185243238000000e+00 + -2.185586332004080e+00 + -2.185922759056265e+00 + -2.186252574500474e+00 + -2.186575831916728e+00 + -2.186892585000000e+00 + -2.187202887393400e+00 + -2.187506791832633e+00 + -2.187804350256584e+00 + -2.188095613705712e+00 + -2.188380633000000e+00 + -2.188659458643119e+00 + -2.188932140238827e+00 + -2.189198726845117e+00 + -2.189459267002233e+00 + -2.189713809000000e+00 + -2.189962400732430e+00 + -2.190205089044370e+00 + -2.190441920581333e+00 + -2.190672942002169e+00 + -2.190898199000000e+00 + -2.191117736662499e+00 + -2.191331600149922e+00 + -2.191539834109547e+00 + -2.191742482380937e+00 + -2.191939589000000e+00 + -2.192131197889608e+00 + -2.192317351831708e+00 + -2.192498093290244e+00 + -2.192673464653123e+00 + -2.192843508000000e+00 + -2.193008265149897e+00 + -2.193167777657277e+00 + -2.193322086821774e+00 + -2.193471233640668e+00 + -2.193615259000000e+00 + -2.193754203483761e+00 + -2.193888106693908e+00 + -2.194017008313546e+00 + -2.194140948496115e+00 + -2.194259967000000e+00 + -2.194374103230534e+00 + -2.194483396307522e+00 + -2.194587885225862e+00 + -2.194687608881331e+00 + -2.194782606000000e+00 + -2.194872915200472e+00 + -2.194958575082935e+00 + -2.195039623893670e+00 + -2.195116099394696e+00 + -2.195188040000000e+00 + -2.195255484352944e+00 + -2.195318470219860e+00 + -2.195377035223315e+00 + -2.195431217130485e+00 + -2.195481054000000e+00 + -2.195526583926446e+00 + -2.195567844428364e+00 + -2.195604873029958e+00 + -2.195637707516086e+00 + -2.195666386000000e+00 + -2.195690946583878e+00 + -2.195711426545218e+00 + -2.195727863658885e+00 + -2.195740296673043e+00 + -2.195748763000000e+00 + -2.195753299607926e+00 + -2.195753945356280e+00 + -2.195750739132009e+00 + -2.195743719093693e+00 + -2.195732923000000e+00 + -2.195718388771941e+00 + -2.195700155840199e+00 + -2.195678263244660e+00 + -2.195652748934943e+00 + -2.195623652000000e+00 + -2.195591012099144e+00 + -2.195554867993407e+00 + -2.195515258985693e+00 + -2.195472225489285e+00 + -2.195425807000000e+00 + -2.195376042760528e+00 + -2.195322973614639e+00 + -2.195266640267298e+00 + -2.195207082686241e+00 + -2.195144342000000e+00 + -2.195078459809379e+00 + -2.195009476453377e+00 + -2.194937433066797e+00 + -2.194862372466152e+00 + -2.194784337000000e+00 + -2.194703368615792e+00 + -2.194619509257747e+00 + -2.194532801771278e+00 + -2.194443290305841e+00 + -2.194351018000000e+00 + -2.194256027737437e+00 + -2.194158364279782e+00 + -2.194058072250755e+00 + -2.193955195446114e+00 + -2.193849779000000e+00 + -2.193741868885436e+00 + -2.193631510785602e+00 + -2.193518750557477e+00 + -2.193403634464252e+00 + -2.193286209000000e+00 + -2.193166521091908e+00 + -2.193044618884907e+00 + -2.192920550384463e+00 + -2.192794362988794e+00 + -2.192666105000000e+00 + -2.192535825071375e+00 + -2.192403570783236e+00 + -2.192269389306454e+00 + -2.192133327558461e+00 + -2.191995432000000e+00 + -2.191855748732582e+00 + -2.191714323538803e+00 + -2.191571201647935e+00 + -2.191426427571225e+00 + -2.191280046000000e+00 + -2.191132101498374e+00 + -2.190982637495000e+00 + -2.190831697104933e+00 + -2.190679323369808e+00 + -2.190525559000000e+00 + -2.190370446239990e+00 + -2.190214026313205e+00 + -2.190056340263544e+00 + -2.189897429222788e+00 + -2.189737334000000e+00 + -2.189576094894156e+00 + -2.189413751026334e+00 + -2.189250341662785e+00 + -2.189085906605225e+00 + -2.188920484000000e+00 + -2.188754111167896e+00 + -2.188586826517446e+00 + -2.188418667831656e+00 + -2.188249671505532e+00 + -2.188079874000000e+00 + -2.187909311655257e+00 + -2.187738019850499e+00 + -2.187566033827133e+00 + -2.187393388939138e+00 + -2.187220120000000e+00 + -2.187046261198758e+00 + -2.186871845656608e+00 + -2.186696906557450e+00 + -2.186521477499284e+00 + -2.186345591000000e+00 + -2.186169278929348e+00 + -2.185992573469870e+00 + -2.185815507881449e+00 + -2.185638116930091e+00 + -2.185460435000000e+00 + -2.185282496723147e+00 + -2.185104339046128e+00 + -2.184925999471230e+00 + -2.184747515559985e+00 + -2.184568926000000e+00 + -2.184390270419004e+00 + -2.184211589307456e+00 + -2.184032923638580e+00 + -2.183854314918697e+00 + -2.183675806000000e+00 + -2.183497440664645e+00 + -2.183319263062145e+00 + -2.183141318226586e+00 + -2.182963652427783e+00 + -2.182786312000000e+00 + -2.182609343803448e+00 + -2.182432796909005e+00 + -2.182256720850984e+00 + -2.182081165100584e+00 + -2.181906180000000e+00 + -2.181731816772078e+00 + -2.181558127901617e+00 + -2.181385166690271e+00 + -2.181212987245827e+00 + -2.181041644000000e+00 + -2.180871191888493e+00 + -2.180701687214938e+00 + -2.180533187286951e+00 + -2.180365750436408e+00 + -2.180199435000000e+00 + -2.180034299706266e+00 + -2.179870405073628e+00 + -2.179707812476292e+00 + -2.179546583956951e+00 + -2.179386782000000e+00 + -2.179228469569652e+00 + -2.179071710572415e+00 + -2.178916570209873e+00 + -2.178763115274171e+00 + -2.178611412000000e+00 + -2.178461526719817e+00 + -2.178313527960817e+00 + -2.178167485170301e+00 + -2.178023468394170e+00 + -2.177881548000000e+00 + -2.177741794911888e+00 + -2.177604281585152e+00 + -2.177469081134519e+00 + -2.177336267165003e+00 + -2.177205914000000e+00 + -2.177078096781969e+00 + -2.176952892179310e+00 + -2.176830377266735e+00 + -2.176710629289710e+00 + -2.176593727000000e+00 + -2.176479750089725e+00 + -2.176368778170715e+00 + -2.176260892035270e+00 + -2.176156174290115e+00 + -2.176054707000000e+00 + -2.175956572480315e+00 + -2.175861855847520e+00 + -2.175770642395214e+00 + -2.175683016800304e+00 + -2.175599066000000e+00 + -2.175518878125867e+00 + -2.175442540126260e+00 + -2.175370140365612e+00 + -2.175301769822078e+00 + -2.175237519000000e+00 + -2.175177478422601e+00 + -2.175121740498959e+00 + -2.175070398200953e+00 + -2.175023544771637e+00 + -2.174981275000000e+00 + -2.174943684570890e+00 + -2.174910868831887e+00 + -2.174882924320826e+00 + -2.174859949548785e+00 + -2.174842043000000e+00 + -2.174829303331104e+00 + -2.174821830410927e+00 + -2.174819725228089e+00 + -2.174823090027552e+00 + -2.174832027000000e+00 + -2.174846638699704e+00 + -2.174867029559900e+00 + -2.174893304738549e+00 + -2.174925569834485e+00 + -2.174963931000000e+00 + -2.175008495084293e+00 + -2.175059370394289e+00 + -2.175116665887380e+00 + -2.175180491027200e+00 + -2.175250956000000e+00 + -2.175328171805043e+00 + -2.175412250937077e+00 + -2.175503306357684e+00 + -2.175601451271103e+00 + -2.175706800000000e+00 + -2.175819467765500e+00 + -2.175939570549688e+00 + -2.176067225041086e+00 + -2.176202548787411e+00 + -2.176345660000000e+00 + -2.176496677644949e+00 + -2.176655722183164e+00 + -2.176822914601843e+00 + -2.176998376191533e+00 + -2.177182229000000e+00 + -2.177374595921169e+00 + -2.177575601341799e+00 + -2.177785370087074e+00 + -2.178004027196875e+00 + -2.178231699000000e+00 + -2.178468512862275e+00 + -2.178714597011325e+00 + -2.178970080062299e+00 + -2.179235091002944e+00 + -2.179509760000000e+00 + -2.179794218272507e+00 + -2.180088598277346e+00 + -2.180393032665419e+00 + -2.180707654074028e+00 + -2.181032597000000e+00 + -2.181367997183408e+00 + -2.181713990526695e+00 + -2.182070713375897e+00 + -2.182438302803596e+00 + -2.182816897000000e+00 + -2.183206635150288e+00 + -2.183607657686531e+00 + -2.184020105275964e+00 + -2.184444118610974e+00 + -2.184879840000000e+00 + -2.185327412889597e+00 + -2.185786981109685e+00 + -2.186258689137973e+00 + -2.186742682377725e+00 + -2.187239107000000e+00 + -2.187748109862624e+00 + -2.188269838801850e+00 + -2.188804442677439e+00 + -2.189352071523296e+00 + -2.189912875000000e+00 + -2.190487003093955e+00 + -2.191074608322116e+00 + -2.191675843787203e+00 + -2.192290862610885e+00 + -2.192919819000000e+00 + -2.193562867915730e+00 + -2.194220164552147e+00 + -2.194891865404003e+00 + -2.195578128862665e+00 + -2.196279113000000e+00 + -2.196994976008069e+00 + -2.197725877814248e+00 + -2.198471979076637e+00 + -2.199233441010543e+00 + -2.200010426000000e+00 + -2.200803097224683e+00 + -2.201611618154960e+00 + -2.202436152922896e+00 + -2.203276866629103e+00 + -2.204133924999999e+00 + -2.205007494076377e+00 + -2.205897739759803e+00 + -2.206804828380775e+00 + -2.207728927012060e+00 + -2.208670203000000e+00 + -2.209628824019662e+00 + -2.210604958519273e+00 + -2.211598775212799e+00 + -2.212610442959744e+00 + -2.213640131000000e+00 + -2.214688008997179e+00 + -2.215754247358006e+00 + -2.216839016713686e+00 + -2.217942487809252e+00 + -2.219064832000000e+00 + -2.220206221175054e+00 + -2.221366827800435e+00 + -2.222546824259503e+00 + -2.223746382727115e+00 + -2.224965677000000e+00 + -2.226204881636015e+00 + -2.227464170011377e+00 + -2.228743716360184e+00 + -2.230043696636770e+00 + -2.231364286000000e+00 + -2.232705659360148e+00 + -2.234067993079961e+00 + -2.235451464138931e+00 + -2.236856249856844e+00 + -2.238282527000000e+00 + -2.239730472524265e+00 + -2.241200265638654e+00 + -2.242692085287406e+00 + -2.244206109271373e+00 + -2.245742517000000e+00 + -2.247301488882056e+00 + -2.248883204910052e+00 + -2.250487845315945e+00 + -2.252115590911750e+00 + -2.253766623000000e+00 + -2.255441123360801e+00 + -2.257139274542631e+00 + -2.258861259219423e+00 + -2.260607260005651e+00 + -2.262377460000000e+00 + -2.264172042724291e+00 + -2.265991192137124e+00 + -2.267835092970031e+00 + -2.269703930922391e+00 + -2.271597891000000e+00 + -2.273517158096056e+00 + -2.275461918662951e+00 + -2.277432359442962e+00 + -2.279428667085979e+00 + -2.281451029000000e+00 + -2.283499633104788e+00 + -2.285574667389452e+00 + -2.287676320195930e+00 + -2.289804780398682e+00 + -2.291960237000000e+00 + -2.294142879454985e+00 + -2.296352898805551e+00 + -2.298590485768695e+00 + -2.300855830078550e+00 + -2.303149122999999e+00 + -2.305470556795997e+00 + -2.307820323545887e+00 + -2.310198615647936e+00 + -2.312605626084681e+00 + -2.315041548000000e+00 + -2.317506574745174e+00 + -2.320000900224320e+00 + -2.322524719122656e+00 + -2.325078227061991e+00 + -2.327661619000000e+00 + -2.330275089774933e+00 + -2.332918835677479e+00 + -2.335593053485966e+00 + -2.338297940187764e+00 + -2.341033693000000e+00 + -2.343800509406319e+00 + -2.346598587410773e+00 + -2.349428125303093e+00 + -2.352289321686241e+00 + -2.355182376000000e+00 + -2.358107488272472e+00 + -2.361064858786305e+00 + -2.364054687769198e+00 + -2.367077175375671e+00 + -2.370132523000000e+00 + -2.373220932737141e+00 + -2.376342606269360e+00 + -2.379497745810629e+00 + -2.382686554578887e+00 + -2.385909236000000e+00 + -2.389165993580208e+00 + -2.392457030846979e+00 + -2.395782552198058e+00 + -2.399142763298191e+00 + -2.402537869000000e+00 + -2.405968074028050e+00 + -2.409433584975734e+00 + -2.412934608682329e+00 + -2.416471351683178e+00 + -2.420044020999999e+00 + -2.423652824137149e+00 + -2.427297969206864e+00 + -2.430979664728804e+00 + -2.434698119632543e+00 + -2.438453543000000e+00 + -2.442246144168148e+00 + -2.446076133195298e+00 + -2.449943720571852e+00 + -2.453849117184546e+00 + -2.457792534000000e+00 + -2.461774182279110e+00 + -2.465794274341647e+00 + -2.469853022790889e+00 + -2.473950640299041e+00 + -2.478087340000000e+00 + -2.482263335430129e+00 + -2.486478840559030e+00 + -2.490734069661931e+00 + -2.495029237377275e+00 + -2.499364559000000e+00 + -2.503740250274207e+00 + -2.508156527124766e+00 + -2.512613605692700e+00 + -2.517111702474631e+00 + -2.521651035000000e+00 + -2.526231821279088e+00 + -2.530854278665131e+00 + -2.535518625205626e+00 + -2.540225080261870e+00 + -2.544973863000000e+00 + -2.549765192573217e+00 + -2.554599288888442e+00 + -2.559476372494764e+00 + -2.564396664604125e+00 + -2.569360386000000e+00 + -2.574367757513646e+00 + -2.579419001423863e+00 + -2.584514340338642e+00 + -2.589653996851589e+00 + -2.594838193999999e+00 + -2.600067155253186e+00 + -2.605341104662645e+00 + -2.610660266783872e+00 + -2.616024866689215e+00 + -2.621435129000000e+00 + -2.626891278432673e+00 + -2.632393541366548e+00 + -2.637942144571998e+00 + -2.643537314797249e+00 + -2.649179279000000e+00 + -2.654868264471787e+00 + -2.660604499292826e+00 + -2.666388211776204e+00 + -2.672219630341834e+00 + -2.678098984000000e+00 + -2.684026502306392e+00 + -2.690002415494505e+00 + -2.696026954017429e+00 + -2.702100348331385e+00 + -2.708222828000000e+00 + -2.714394620651795e+00 + -2.720615948464916e+00 + -2.726887030965477e+00 + -2.733208085290139e+00 + -2.739579324000000e+00 + -2.746000955816228e+00 + -2.752473185385865e+00 + -2.758996214641690e+00 + -2.765570242469367e+00 + -2.772195463000000e+00 + -2.778872066776275e+00 + -2.785600241574056e+00 + -2.792380171842594e+00 + -2.799212037606767e+00 + -2.806096015000000e+00 + -2.813032277129447e+00 + -2.820020994035244e+00 + -2.827062331911353e+00 + -2.834156451970738e+00 + -2.841303512999999e+00 + -2.848503671252426e+00 + -2.855757077985244e+00 + -2.863063881095023e+00 + -2.870424224890850e+00 + -2.877838249999999e+00 + -2.885306093928394e+00 + -2.892827890388094e+00 + -2.900403769651381e+00 + -2.908033857857018e+00 + -2.915718277999999e+00 + -2.923457150039019e+00 + -2.931250588977881e+00 + -2.939098706889091e+00 + -2.947001612872150e+00 + -2.954959411999998e+00 + -2.962972205810575e+00 + -2.971040091434060e+00 + -2.979163163083816e+00 + -2.987341511831155e+00 + -2.995575224999998e+00 + -3.003864386499012e+00 + -3.012209075546996e+00 + -3.020609368336417e+00 + -3.029065337835770e+00 + -3.037577052999999e+00 + -3.046144579520789e+00 + -3.054767979666142e+00 + -3.063447312238444e+00 + -3.072182631692820e+00 + -3.080973988999999e+00 + -3.089821432099915e+00 + -3.098725004829577e+00 + -3.107684748048404e+00 + -3.116700699185534e+00 + -3.125772890999999e+00 + -3.134901352715559e+00 + -3.144086110699870e+00 + -3.153327188100508e+00 + -3.162624603843408e+00 + -3.171978372999998e+00 + -3.181388507546933e+00 + -3.190855016073102e+00 + -3.200377903469057e+00 + -3.209957169965227e+00 + -3.219592812999998e+00 + -3.229284827363896e+00 + -3.239033203402719e+00 + -3.248837927724427e+00 + -3.258698982652799e+00 + -3.268616347999998e+00 + -3.278590000914418e+00 + -3.288619913401403e+00 + -3.298706054004673e+00 + -3.308848387625167e+00 + -3.319046875999998e+00 + -3.329301477934322e+00 + -3.339612147844228e+00 + -3.349978836592516e+00 + -3.360401490990458e+00 + -3.370880054999998e+00 + -3.381414469596773e+00 + -3.392004670266620e+00 + -3.402650589976440e+00 + -3.413352159446950e+00 + -3.424109303999998e+00 + -3.434921945057392e+00 + -3.445790001867386e+00 + -3.456713390096515e+00 + -3.467692020464062e+00 + -3.478725800999998e+00 + -3.489814636890736e+00 + -3.500958427789171e+00 + -3.512157070764700e+00 + -3.523410460589800e+00 + -3.534718486999998e+00 + -3.546081035880271e+00 + -3.557497990199610e+00 + -3.568969229634993e+00 + -3.580494629586285e+00 + -3.592074061999998e+00 + -3.603707395759104e+00 + -3.615394495446970e+00 + -3.627135222559569e+00 + -3.638929435115233e+00 + -3.650776987000000e+00 + -3.662677728742245e+00 + -3.674631507325805e+00 + -3.686638166579447e+00 + -3.698697546469576e+00 + -3.710809483000000e+00 + -3.722973808828209e+00 + -3.735190352595157e+00 + -3.747458940125227e+00 + -3.759779394010754e+00 + -3.772151532000000e+00 + -3.784575168342916e+00 + -3.797050115062026e+00 + -3.809576180292756e+00 + -3.822153166803174e+00 + -3.834780875000000e+00 + -3.847459102820189e+00 + -3.860187643203489e+00 + -3.872966285667494e+00 + -3.885794816080159e+00 + -3.898673017000000e+00 + -3.911600667911320e+00 + -3.924577543724543e+00 + -3.937603416269590e+00 + -3.950678053996523e+00 + -3.963801221000000e+00 + -3.976972678103186e+00 + -3.990192183512261e+00 + -4.003459491521890e+00 + -4.016774351164608e+00 + -4.030136509000000e+00 + -4.043545709147031e+00 + -4.057001691149858e+00 + -4.070504190840202e+00 + -4.084052939835804e+00 + -4.097647667000000e+00 + -4.111288098419088e+00 + -4.124973955231095e+00 + -4.138704955371648e+00 + -4.152480813397504e+00 + -4.166301240000000e+00 + -4.180165942572286e+00 + -4.194074624537170e+00 + -4.208026986370140e+00 + -4.222022725101974e+00 + -4.236061533000000e+00 + -4.250143098846027e+00 + -4.264267108996074e+00 + -4.278433246261039e+00 + -4.292641188627767e+00 + -4.306890611000000e+00 + -4.321181185386233e+00 + -4.335512579090955e+00 + -4.349884456391911e+00 + -4.364296478350024e+00 + -4.378748302000000e+00 + -4.393239580901771e+00 + -4.407769964394226e+00 + -4.422339098999587e+00 + -4.436946628138934e+00 + -4.451592191000000e+00 + -4.466275423153566e+00 + -4.480995955945297e+00 + -4.495753418053649e+00 + -4.510547435209278e+00 + -4.525377628000000e+00 + -4.540243613376725e+00 + -4.555145006346341e+00 + -4.570081418154680e+00 + -4.585052454714511e+00 + -4.600057719000000e+00 + -4.615096811360685e+00 + -4.630169328028963e+00 + -4.645274861878902e+00 + -4.660413001844071e+00 + -4.675583333000000e+00 + -4.690785437259527e+00 + -4.706018892955582e+00 + -4.721283275134317e+00 + -4.736578154793736e+00 + -4.751903099000000e+00 + -4.767257671719769e+00 + -4.782641433752779e+00 + -4.798053942304498e+00 + -4.813494749953581e+00 + -4.828963406000000e+00 + -4.844459456896403e+00 + -4.859982445123970e+00 + -4.875531909767719e+00 + -4.891107385884028e+00 + -4.906708405000000e+00 + -4.922334495555203e+00 + -4.937985181840751e+00 + -4.953659984814029e+00 + -4.969358421588884e+00 + -4.985080006000000e+00 + -5.000824248840914e+00 + -5.016590656340991e+00 + -5.032378731598668e+00 + -5.048187974277996e+00 + -5.064017880000000e+00 + -5.079867940973151e+00 + -5.095737645459726e+00 + -5.111626480823102e+00 + -5.127533934923204e+00 + -5.143459499999997e+00 + -5.159402672483111e+00 + -5.175362954369220e+00 + -5.191339851303958e+00 + -5.207332872891304e+00 + -5.223341533999998e+00 + -5.239365353688981e+00 + -5.255403855076862e+00 + -5.271456565155025e+00 + -5.287523015792912e+00 + -5.303602743999997e+00 + -5.319695290809813e+00 + -5.335800201177900e+00 + -5.351917023850607e+00 + -5.368045312413205e+00 + -5.384184625999997e+00 + -5.400334527792659e+00 + -5.416494583936292e+00 + -5.432664365069262e+00 + -5.448843447960337e+00 + -5.465031412999998e+00 + -5.481227843963791e+00 + -5.497432330198948e+00 + -5.513644465003656e+00 + -5.529863846001168e+00 + -5.546090074999998e+00 + -5.562322757794160e+00 + -5.578561506278419e+00 + -5.594805935740466e+00 + -5.611055664858841e+00 + -5.627310317999997e+00 + -5.643569523867812e+00 + -5.659832914603254e+00 + -5.676100126691991e+00 + -5.692370802379017e+00 + -5.708644587999997e+00 + -5.724921133351554e+00 + -5.741200092816319e+00 + -5.757481124931912e+00 + -5.773763893288205e+00 + -5.790048065999996e+00 + -5.806333315035348e+00 + -5.822619317227983e+00 + -5.838905753168464e+00 + -5.855192307810226e+00 + -5.871478670999998e+00 + -5.887764536642293e+00 + -5.904049603224381e+00 + -5.920333573291820e+00 + -5.936616154283948e+00 + -5.952897057999997e+00 + -5.969175999997380e+00 + -5.985452700712029e+00 + -6.001726884408804e+00 + -6.017998279848357e+00 + -6.034266620999998e+00 + -6.050531645917840e+00 + -6.066793096565948e+00 + -6.083050719154321e+00 + -6.099304265265417e+00 + -6.115553489999997e+00 + -6.131798152082848e+00 + -6.148038016850530e+00 + -6.164272852974367e+00 + -6.180502432221914e+00 + -6.196726531999996e+00 + -6.212944934149927e+00 + -6.229157424398349e+00 + -6.245363792906498e+00 + -6.261563835474968e+00 + -6.277757350999996e+00 + -6.293944141712862e+00 + -6.310124016459128e+00 + -6.326296787703612e+00 + -6.342462271423720e+00 + -6.358620288999997e+00 + -6.374770666045148e+00 + -6.390913231950829e+00 + -6.407047820441565e+00 + -6.423174270811367e+00 + -6.439292425999997e+00 + -6.455402132459349e+00 + -6.471503242529590e+00 + -6.487595612302881e+00 + -6.503679101824962e+00 + -6.519753575999998e+00 + -6.535818903908587e+00 + -6.551874959678351e+00 + -6.567921621040533e+00 + -6.583958769810407e+00 + -6.599986292999997e+00 + -6.616004081814032e+00 + -6.632012031732002e+00 + -6.648010042213294e+00 + -6.663998017633650e+00 + -6.679975866999997e+00 + -6.695943503153600e+00 + -6.711900843425355e+00 + -6.727847809100131e+00 + -6.743784326279565e+00 + -6.759710325999998e+00 + -6.775625743222601e+00 + -6.791530516957345e+00 + -6.807424590371784e+00 + -6.823307911868753e+00 + -6.839180434000000e+00 + -6.855042113095231e+00 + -6.870892911056689e+00 + -6.886732793343159e+00 + -6.902561729209182e+00 + -6.918379693000000e+00 + -6.934186663377454e+00 + -6.949982623974822e+00 + -6.965767562024019e+00 + -6.981541468861679e+00 + -6.997304341000000e+00 + -7.013056179149240e+00 + -7.028796988372566e+00 + -7.044526777567921e+00 + -7.060245560311449e+00 + -7.075953355000000e+00 + -7.091650184045992e+00 + -7.107336074531737e+00 + -7.123011057484204e+00 + -7.138675168614964e+00 + -7.154328448000000e+00 + -7.169970939523060e+00 + -7.185602692089082e+00 + -7.201223758621499e+00 + -7.216834196750369e+00 + -7.232434069000000e+00 + -7.248023441650831e+00 + -7.263602384451917e+00 + -7.279170972021925e+00 + -7.294729285389790e+00 + -7.310277408000000e+00 + -7.325815426345584e+00 + -7.341343434315181e+00 + -7.356861529294433e+00 + -7.372369811668458e+00 + -7.387868387000000e+00 + -7.403357365322682e+00 + -7.418836861854650e+00 + -7.434306995371617e+00 + -7.449767888578398e+00 + -7.465219669000000e+00 + -7.480662468362842e+00 + -7.496096423635060e+00 + -7.511521675509539e+00 + -7.526938368822738e+00 + -7.542346653000000e+00 + -7.557746681513402e+00 + -7.573138613106206e+00 + -7.588522610348394e+00 + -7.603898840111169e+00 + -7.619267474000000e+00 + -7.634628687556104e+00 + -7.649982660818226e+00 + -7.665329578157865e+00 + -7.680669629212444e+00 + -7.696003007000000e+00 + -7.711329908041110e+00 + -7.726650535322031e+00 + -7.741965095546557e+00 + -7.757273799081691e+00 + -7.772576861000000e+00 + -7.787874500482072e+00 + -7.803166941820082e+00 + -7.818454413357075e+00 + -7.833737148083599e+00 + -7.849015383000000e+00 + -7.864289358883056e+00 + -7.879559322305754e+00 + -7.894825523493435e+00 + -7.910088216491122e+00 + -7.925347660000000e+00 + -7.940604117030949e+00 + -7.955857856656654e+00 + -7.971109151088187e+00 + -7.986358275553978e+00 + -8.001605510999999e+00 + -8.016851143003514e+00 + -8.032095461580266e+00 + -8.047338760488806e+00 + -8.062581337981985e+00 + -8.077823497000001e+00 + -8.093065544394179e+00 + -8.108307791577566e+00 + -8.123550554205780e+00 + -8.138794153086785e+00 + -8.154038912999997e+00 + -8.169285162395173e+00 + -8.184533235306290e+00 + -8.199783469410583e+00 + -8.215036206329255e+00 + -8.230291792999997e+00 + -8.245550580528674e+00 + -8.260812923863309e+00 + -8.276079182235739e+00 + -8.291349720375887e+00 + -8.306624906999998e+00 + -8.321905114401627e+00 + -8.337190720129563e+00 + -8.352482105562956e+00 + -8.367779656388556e+00 + -8.383083762999997e+00 + -8.398394819954635e+00 + -8.413713227271362e+00 + -8.429039388338369e+00 + -8.444373710123081e+00 + -8.459716604999997e+00 + -8.475068489773328e+00 + -8.490429785807564e+00 + -8.505800918193746e+00 + -8.521182316459129e+00 + -8.536574414999997e+00 + -8.551977652264261e+00 + -8.567392471335332e+00 + -8.582819319266729e+00 + -8.598258647834163e+00 + -8.613710912999998e+00 + -8.629176574613023e+00 + -8.644656098315155e+00 + -8.660149953296175e+00 + -8.675658612460374e+00 + -8.691182553999997e+00 + -8.706722260346437e+00 + -8.722278218076596e+00 + -8.737850917931995e+00 + -8.753440855866357e+00 + -8.769048531999996e+00 + -8.784674450012169e+00 + -8.800319118245726e+00 + -8.815983049456063e+00 + -8.831666761752983e+00 + -8.847370776999997e+00 + -8.863095620572640e+00 + -8.878841823409489e+00 + -8.894609920288579e+00 + -8.910400450202564e+00 + -8.926213956999996e+00 + -8.942050988642462e+00 + -8.957912097948702e+00 + -8.973797841249739e+00 + -8.989708778929735e+00 + -9.005645476999996e+00 + -9.021608505891232e+00 + -9.037598440089864e+00 + -9.053615857732957e+00 + -9.069661341483132e+00 + -9.085735478999997e+00 + -9.101838862125330e+00 + -9.117972087538210e+00 + -9.134135755396374e+00 + -9.150330469883286e+00 + -9.166556840999997e+00 + -9.182815483079517e+00 + -9.199107013675079e+00 + -9.215432054583626e+00 + -9.231791233265957e+00 + -9.248185180999997e+00 + -9.264614532683632e+00 + -9.281079929109534e+00 + -9.297582014702897e+00 + -9.314121437654787e+00 + -9.330698850999996e+00 + -9.347314912003528e+00 + -9.363970283188971e+00 + -9.380665630745685e+00 + -9.397401624940878e+00 + -9.414178940999998e+00 + -9.430998258244742e+00 + -9.447860260503859e+00 + -9.464765635761319e+00 + -9.481715077019253e+00 + -9.498709280999996e+00 + -9.515748948037771e+00 + -9.532834784442173e+00 + -9.549967500513571e+00 + -9.567147810785697e+00 + -9.584376433999996e+00 + -9.601654092679016e+00 + -9.618981514566920e+00 + -9.636359431588877e+00 + -9.653788580476306e+00 + -9.671269701999998e+00 + -9.688803540653204e+00 + -9.706390846469759e+00 + -9.724032373152683e+00 + -9.741728878390186e+00 + -9.759481124999997e+00 + -9.777289880050315e+00 + -9.795155915261526e+00 + -9.813080006095444e+00 + -9.831062932433847e+00 + -9.849105478999997e+00 + -9.867208434586416e+00 + -9.885372592754736e+00 + -9.903598750780114e+00 + -9.921887710289466e+00 + -9.940240277999996e+00 + -9.958657264807959e+00 + -9.977139486156000e+00 + -9.995687760994512e+00 + -1.001430291248964e+01 + -1.003298577000000e+01 + -1.005173716741557e+01 + -1.007055794170109e+01 + -1.008944893313717e+01 + -1.010841098632109e+01 + -1.012744495000000e+01 + -1.014655167843811e+01 + -1.016573203809090e+01 + -1.018498689280856e+01 + -1.020431709913334e+01 + -1.022372353000000e+01 + -1.024320706932260e+01 + -1.026276860085199e+01 + -1.028240900753776e+01 + -1.030212917226508e+01 + -1.032192999000000e+01 + -1.034181236270672e+01 + -1.036177718920571e+01 + -1.038182537682789e+01 + -1.040195784652257e+01 + -1.042217551000000e+01 + -1.044247927800797e+01 + -1.046287008429113e+01 + -1.048334886197221e+01 + -1.050391653528098e+01 + -1.052457404000000e+01 + -1.054532232135862e+01 + -1.056616233045517e+01 + -1.058709501821704e+01 + -1.060812133414642e+01 + -1.062924224000000e+01 + -1.065045870478386e+01 + -1.067177169452023e+01 + -1.069318217826154e+01 + -1.071469113174534e+01 + -1.073629954000000e+01 + -1.075800839260036e+01 + -1.077981867489276e+01 + -1.080173138018267e+01 + -1.082374751517595e+01 + -1.084586808000000e+01 + -1.086809407471729e+01 + -1.089042651905600e+01 + -1.091286643223940e+01 + -1.093541482646511e+01 + -1.095807273000000e+01 + -1.098084118002027e+01 + -1.100372120627546e+01 + -1.102671384288809e+01 + -1.104982013415814e+01 + -1.107304113000000e+01 + -1.109637788366843e+01 + -1.111983144958023e+01 + -1.114340288661973e+01 + -1.116709326043168e+01 + -1.119090364000000e+01 + -1.121483509746141e+01 + -1.123888871051257e+01 + -1.126306556352589e+01 + -1.128736674843474e+01 + -1.131179335000000e+01 + -1.133634645465832e+01 + -1.136102717560643e+01 + -1.138583662099362e+01 + -1.141077588304154e+01 + -1.143584608000000e+01 + -1.146104834278586e+01 + -1.148638378227322e+01 + -1.151185351768562e+01 + -1.153745868860526e+01 + -1.156320043000000e+01 + -1.158907987623694e+01 + -1.161509817570602e+01 + -1.164125647703402e+01 + -1.166755592508495e+01 + -1.169399768000000e+01 + -1.172058291041322e+01 + -1.174731277861368e+01 + -1.177418844974534e+01 + -1.180121109657743e+01 + -1.182838189999999e+01 + -1.185570204579555e+01 + -1.188317272006268e+01 + -1.191079511332836e+01 + -1.193857042312863e+01 + -1.196649984999999e+01 + -1.199458459773775e+01 + -1.202282587700695e+01 + -1.205122490269986e+01 + -1.207978289369385e+01 + -1.210850107000000e+01 + -1.213738065440104e+01 + -1.216642287877588e+01 + -1.219562898067898e+01 + -1.222500020303083e+01 + -1.225453779000000e+01 + -1.228424298812801e+01 + -1.231411705144751e+01 + -1.234416123799292e+01 + -1.237437680934280e+01 + -1.240476502999999e+01 + -1.243532716862228e+01 + -1.246606450371358e+01 + -1.249697831672881e+01 + -1.252806989018327e+01 + -1.255934050999999e+01 + -1.259079146663310e+01 + -1.262242406008652e+01 + -1.265423959346900e+01 + -1.268623937120698e+01 + -1.271842469999999e+01 + -1.275079689157634e+01 + -1.278335727210730e+01 + -1.281610716656313e+01 + -1.284904789393346e+01 + -1.288218078999999e+01 + -1.291550719883721e+01 + -1.294902845305343e+01 + -1.298274589252790e+01 + -1.301666087289315e+01 + -1.305077474999999e+01 + -1.308508888000826e+01 + -1.311960462335401e+01 + -1.315432334734565e+01 + -1.318924642810263e+01 + -1.322437523999999e+01 + -1.325971115825294e+01 + -1.329525556797775e+01 + -1.333100986045822e+01 + -1.336697543256989e+01 + -1.340315367999999e+01 + -1.343954599979837e+01 + -1.347615379884262e+01 + -1.351297848978655e+01 + -1.355002149050285e+01 + -1.358728421999999e+01 + -1.362476809975143e+01 + -1.366247455932581e+01 + -1.370040503112116e+01 + -1.373856094968169e+01 + -1.377694375999999e+01 + -1.381555491216690e+01 + -1.385439585021465e+01 + -1.389346802391279e+01 + -1.393277289476898e+01 + -1.397231192999999e+01 + -1.401208659972945e+01 + -1.405209837359219e+01 + -1.409234872413346e+01 + -1.413283912961124e+01 + -1.417357107999999e+01 + -1.421454607102127e+01 + -1.425576559243092e+01 + -1.429723113890712e+01 + -1.433894421536596e+01 + -1.438090632999999e+01 + -1.442311899332400e+01 + -1.446558371903957e+01 + -1.450830202765583e+01 + -1.455127544879836e+01 + -1.459450550999999e+01 + -1.463799373973040e+01 + -1.468174167767078e+01 + -1.472575086722947e+01 + -1.477002285383887e+01 + -1.481455918999999e+01 + -1.485936143285468e+01 + -1.490443114031971e+01 + -1.494976987417127e+01 + -1.499537920245961e+01 + -1.504126069999999e+01 + -1.508741594534576e+01 + -1.513384651602358e+01 + -1.518055399754435e+01 + -1.522753998778076e+01 + -1.527480607999999e+01 + -1.532235386668537e+01 + -1.537018495189360e+01 + -1.541830094448208e+01 + -1.546670345694024e+01 + -1.551539410999999e+01 + -1.556437452805486e+01 + -1.561364632974880e+01 + -1.566321114034704e+01 + -1.571307059764629e+01 + -1.576322633999999e+01 + -1.581368000886133e+01 + -1.586443325932826e+01 + -1.591548774371123e+01 + -1.596684510633198e+01 + -1.601850700999999e+01 + -1.607047512763592e+01 + -1.612275112310131e+01 + -1.617533666634843e+01 + -1.622823344044972e+01 + -1.628144312999999e+01 + -1.633496741991010e+01 + -1.638880799548294e+01 + -1.644296655089035e+01 + -1.649744479372194e+01 + -1.655224442999999e+01 + -1.660736716535794e+01 + -1.666281471098534e+01 + -1.671858878335293e+01 + -1.677469110504862e+01 + -1.683112339999999e+01 + -1.688788739643611e+01 + -1.694498483759857e+01 + -1.700241746523662e+01 + -1.706018701398879e+01 + -1.711829522999999e+01 + -1.717674386844329e+01 + -1.723553468924849e+01 + -1.729466945458232e+01 + -1.735414992865347e+01 + -1.741397788000000e+01 + -1.747415508099178e+01 + -1.753468330867943e+01 + -1.759556434768274e+01 + -1.765679999203036e+01 + -1.771839203000000e+01 + -1.778034225038387e+01 + -1.784265246094084e+01 + -1.790532446959567e+01 + -1.796836007816754e+01 + -1.803176110000000e+01 + -1.809552935720682e+01 + -1.815966667575656e+01 + -1.822417488078262e+01 + -1.828905579597735e+01 + -1.835431126000000e+01 + -1.841994311958100e+01 + -1.848595321475806e+01 + -1.855234338946741e+01 + -1.861911549709020e+01 + -1.868627140000000e+01 + -1.875381296458075e+01 + -1.882174205218422e+01 + -1.889006052915166e+01 + -1.895877027181235e+01 + -1.902787316000000e+01 + -1.909737107797965e+01 + -1.916726592078253e+01 + -1.923755957952593e+01 + -1.930825393714747e+01 + -1.937935090000000e+01 + -1.945085238647674e+01 + -1.952276030080435e+01 + -1.959507655061933e+01 + -1.966780305499929e+01 + -1.974094174000000e+01 + -1.981449453618971e+01 + -1.988846337667131e+01 + -1.996285019538828e+01 + -2.003765692760933e+01 + -2.011288552000000e+01 + -2.018853792621815e+01 + -2.026461609876727e+01 + -2.034112199510926e+01 + -2.041805758075517e+01 + -2.049542482000000e+01 + -2.057322568006621e+01 + -2.065146214471047e+01 + -2.073013619484967e+01 + -2.080924980240138e+01 + -2.088880495999999e+01 + -2.096880367169853e+01 + -2.104924793164823e+01 + -2.113013973534757e+01 + -2.121148108557274e+01 + -2.129327399999999e+01 + -2.137552050224973e+01 + -2.145822260294134e+01 + -2.154138232011573e+01 + -2.162500168821614e+01 + -2.170908273999999e+01 + -2.179362750931509e+01 + -2.187863804236205e+01 + -2.196411638687395e+01 + -2.205006458870765e+01 + -2.213648469999998e+01 + -2.222337877888525e+01 + -2.231074889087196e+01 + -2.239859710699802e+01 + -2.248692550346576e+01 + -2.257573614999999e+01 + -2.266503111825121e+01 + -2.275481250533621e+01 + -2.284508240538831e+01 + -2.293584289979252e+01 + -2.302709608999998e+01 + -2.311884408797131e+01 + -2.321108899308483e+01 + -2.330383291176923e+01 + -2.339707796636268e+01 + -2.349082627999998e+01 + -2.358507997580010e+01 + -2.367984117841246e+01 + -2.377511201965127e+01 + -2.387089464198777e+01 + -2.396719118999998e+01 + -2.406400380890314e+01 + -2.416133464354705e+01 + -2.425918584868402e+01 + -2.435755959379285e+01 + -2.445645803999998e+01 + -2.455588334675619e+01 + -2.465583769169985e+01 + -2.475632325621871e+01 + -2.485734222078360e+01 + -2.495889676999998e+01 + -2.506098909313465e+01 + -2.516362138717989e+01 + -2.526679585042222e+01 + -2.537051468121954e+01 + -2.547478008999998e+01 + -2.557959429416147e+01 + -2.568495950782481e+01 + -2.579087794894506e+01 + -2.589735184307986e+01 + -2.600438342000000e+01 + -2.611197491414786e+01 + -2.622012856937007e+01 + -2.632884662779481e+01 + -2.643813132670684e+01 + -2.654798492000000e+01 + -2.665840967182968e+01 + -2.676940784333127e+01 + -2.688098169572292e+01 + -2.699313349264397e+01 + -2.710586551000000e+01 + -2.721918002998715e+01 + -2.733307932892397e+01 + -2.744756569229334e+01 + -2.756264142140602e+01 + -2.767830881000000e+01 + -2.779457014947893e+01 + -2.791142774510221e+01 + -2.802888390934165e+01 + -2.814694096000261e+01 + -2.826560121000000e+01 + -2.838486697334714e+01 + -2.850474058224100e+01 + -2.862522436986088e+01 + -2.874632066501767e+01 + -2.886803181000000e+01 + -2.899036015446983e+01 + -2.911330804180568e+01 + -2.923687781925054e+01 + -2.936107184331833e+01 + -2.948589248000000e+01 + -2.961134209910011e+01 + -2.973742306338333e+01 + -2.986413774439124e+01 + -2.999148852946843e+01 + -3.011947780000000e+01 + -3.024810793640462e+01 + -3.037738133418102e+01 + -3.050730039248281e+01 + -3.063786751048302e+01 + -3.076908508999995e+01 + -3.090095553801825e+01 + -3.103348127528379e+01 + -3.116666472242296e+01 + -3.130050829541340e+01 + -3.143501442000000e+01 + -3.157018552904646e+01 + -3.170602405762165e+01 + -3.184253244456109e+01 + -3.197971313442012e+01 + -3.211756857999995e+01 + -3.225610123724459e+01 + -3.239531355479052e+01 + -3.253520799120049e+01 + -3.267578702273956e+01 + -3.281705312000000e+01 + -3.295900875199519e+01 + -3.310165640007095e+01 + -3.324499854981137e+01 + -3.338903768896250e+01 + -3.353377630999994e+01 + -3.367921690900354e+01 + -3.382536198480008e+01 + -3.397221404252836e+01 + -3.411977559608952e+01 + -3.426804916000000e+01 + -3.441703725062087e+01 + -3.456674239208418e+01 + -3.471716711255165e+01 + -3.486831394366235e+01 + -3.502018541999994e+01 + -3.517278408030963e+01 + -3.532611247314257e+01 + -3.548017315006599e+01 + -3.563496866378715e+01 + -3.579050157000000e+01 + -3.594677442911821e+01 + -3.610378981290209e+01 + -3.626155029281482e+01 + -3.642005843692588e+01 + -3.657931682999995e+01 + -3.673932806450152e+01 + -3.690009471994529e+01 + -3.706161938636306e+01 + -3.722390467398576e+01 + -3.738695318000000e+01 + -3.755076749872251e+01 + -3.771535025114206e+01 + -3.788070405790332e+01 + -3.804683152981476e+01 + -3.821373528999994e+01 + -3.838141797088579e+01 + -3.854988220802454e+01 + -3.871913063690455e+01 + -3.888916589260551e+01 + -3.905999062000000e+01 + -3.923160747217621e+01 + -3.940401910958111e+01 + -3.957722819105772e+01 + -3.975123737141870e+01 + -3.992604931999993e+01 + -4.010166671506960e+01 + -4.027809223215413e+01 + -4.045532854769397e+01 + -4.063337834194039e+01 + -4.081224431000000e+01 + -4.099192915380458e+01 + -4.117243556512365e+01 + -4.135376624213356e+01 + -4.153592389680070e+01 + -4.171891123999993e+01 + -4.190273098404973e+01 + -4.208738585293229e+01 + -4.227287857304115e+01 + -4.245921187066173e+01 + -4.264638848000000e+01 + -4.283441114000928e+01 + -4.302328258823673e+01 + -4.321300556988346e+01 + -4.340358284230594e+01 + -4.359501715999993e+01 + -4.378731127802528e+01 + -4.398046796379431e+01 + -4.417448998677844e+01 + -4.436938011574802e+01 + -4.456514113000000e+01 + -4.476177581459606e+01 + -4.495928695037842e+01 + -4.515767732491430e+01 + -4.535694973791337e+01 + -4.555710698999992e+01 + -4.575815188265746e+01 + -4.596008722124420e+01 + -4.616291581815827e+01 + -4.636664049491562e+01 + -4.657126407000000e+01 + -4.677678936329625e+01 + -4.698321921012249e+01 + -4.719055644645270e+01 + -4.739880390447049e+01 + -4.760796442999992e+01 + -4.781804087601476e+01 + -4.802903608806237e+01 + -4.824095291782189e+01 + -4.845379422957746e+01 + -4.866756289000000e+01 + -4.888226176793614e+01 + -4.909789373759357e+01 + -4.931446167624577e+01 + -4.953196846445736e+01 + -4.975041698999991e+01 + -4.996981014490353e+01 + -5.019015082042799e+01 + -5.041144191483806e+01 + -5.063368633767777e+01 + -5.085688700000000e+01 + -5.108104681363623e+01 + -5.130616869222998e+01 + -5.153225555529192e+01 + -5.175931033093434e+01 + -5.198733594999992e+01 + -5.221633534632925e+01 + -5.244631146064819e+01 + -5.267726723814258e+01 + -5.290920562821528e+01 + -5.314212958000000e+01 + -5.337604204603855e+01 + -5.361094599406351e+01 + -5.384684439089011e+01 + -5.408374019738633e+01 + -5.432163638999991e+01 + -5.456053595406303e+01 + -5.480044186892415e+01 + -5.504135712069162e+01 + -5.528328470761400e+01 + -5.552622762000000e+01 + -5.577018884907901e+01 + -5.601517141284037e+01 + -5.626117832498171e+01 + -5.650821258404100e+01 + -5.675627720999991e+01 + -5.700537523542541e+01 + -5.725550968441112e+01 + -5.750668358361924e+01 + -5.775889996777224e+01 + -5.801216188000000e+01 + -5.826647236807500e+01 + -5.852183447842080e+01 + -5.877825126017432e+01 + -5.903572576827786e+01 + -5.929426106999990e+01 + -5.955386023803142e+01 + -5.981452633626228e+01 + -6.007626243395679e+01 + -6.033907161265666e+01 + -6.060295696000000e+01 + -6.086792156620618e+01 + -6.113396851889991e+01 + -6.140110091270849e+01 + -6.166932185413050e+01 + -6.193863444999990e+01 + -6.220904180836374e+01 + -6.248054704389698e+01 + -6.275315327303672e+01 + -6.302686361375484e+01 + -6.330168120000000e+01 + -6.357760917255472e+01 + -6.385465065869710e+01 + -6.413280879313753e+01 + -6.441208672717147e+01 + -6.469248761000000e+01 + -6.497401459207148e+01 + -6.525667083785252e+01 + -6.554045951020694e+01 + -6.582538376572784e+01 + -6.611144677999999e+01 + -6.639865173804421e+01 + -6.668700181225154e+01 + -6.697650018322166e+01 + -6.726715004865791e+01 + -6.755895460000001e+01 + -6.785191702754956e+01 + -6.814604053706709e+01 + -6.844132833746227e+01 + -6.873778363702108e+01 + -6.903540965000001e+01 + -6.933420959649558e+01 + -6.963418670433917e+01 + -6.993534420146086e+01 + -7.023768531400407e+01 + -7.054121327999999e+01 + -7.084593134500037e+01 + -7.115184275353549e+01 + -7.145895075432828e+01 + -7.176725860332733e+01 + -7.207676955999989e+01 + -7.238748688676215e+01 + -7.269941385037480e+01 + -7.301255372170849e+01 + -7.332690977697268e+01 + -7.364248530000000e+01 + -7.395928357816831e+01 + -7.427730789465394e+01 + -7.459656154154558e+01 + -7.491704782593285e+01 + -7.523877004999987e+01 + -7.556173151464178e+01 + -7.588593553169946e+01 + -7.621138541944168e+01 + -7.653808450163682e+01 + -7.686603610000000e+01 + -7.719524353805981e+01 + -7.752571015313293e+01 + -7.785743928572181e+01 + -7.819043427631229e+01 + -7.852469846999988e+01 + -7.886023521608357e+01 + -7.919704786882774e+01 + -7.953513978918475e+01 + -7.987451434652237e+01 + -8.021517491000000e+01 + -8.055712484895521e+01 + -8.090036753598372e+01 + -8.124490635250547e+01 + -8.159074469172391e+01 + -8.193788593999987e+01 + -8.228633348416081e+01 + -8.263609073313938e+01 + -8.298716109541151e+01 + -8.333954797103145e+01 + -8.369325477000000e+01 + -8.404828491028280e+01 + -8.440464181412719e+01 + -8.476232890793086e+01 + -8.512134962287996e+01 + -8.548170738999985e+01 + -8.584340564352934e+01 + -8.620644783199920e+01 + -8.657083740482393e+01 + -8.693657780824788e+01 + -8.730367250000000e+01 + -8.767212494371194e+01 + -8.804193859639375e+01 + -8.841311692593891e+01 + -8.878566341870939e+01 + -8.915958154999986e+01 + -8.953487479168578e+01 + -8.991154663471849e+01 + -9.028960057395298e+01 + -9.066904010318096e+01 + -9.104986872000001e+01 + -9.143208992686800e+01 + -9.181570723560402e+01 + -9.220072416114067e+01 + -9.258714421980083e+01 + -9.297497092999986e+01 + -9.336420781525349e+01 + -9.375485841426487e+01 + -9.414692626313253e+01 + -9.454041488965315e+01 + -9.493532784000000e+01 + -9.533166867059026e+01 + -9.572944092950100e+01 + -9.612864816948191e+01 + -9.652929395407540e+01 + -9.693138184999984e+01 + -9.733491542620831e+01 + -9.773989825487583e+01 + -9.814633391500892e+01 + -9.855422599474231e+01 + -9.896357808000000e+01 + -9.937439375553778e+01 + -9.978667660951464e+01 + -1.002004302498873e+02 + -1.006156583113964e+02 + -1.010323643999998e+02 + -1.014505521033422e+02 + -1.018702250167552e+02 + -1.022913867648504e+02 + -1.027140410123223e+02 + -1.031381914000000e+02 + -1.035638415489902e+02 + -1.039909950728156e+02 + -1.044196556182856e+02 + -1.048498268814360e+02 + -1.052815124999998e+02 + -1.057147160851634e+02 + -1.061494413040264e+02 + -1.065856918490972e+02 + -1.070234714266025e+02 + -1.074627837000000e+02 + -1.079036323073108e+02 + -1.083460208994117e+02 + -1.087899531790557e+02 + -1.092354329168266e+02 + -1.096824637999998e+02 + -1.101310494754678e+02 + -1.105811936593542e+02 + -1.110329000832090e+02 + -1.114861724712110e+02 + -1.119410145000000e+02 + -1.123974298499644e+02 + -1.128554223365672e+02 + -1.133149957276709e+02 + -1.137761536721920e+02 + -1.142388998999998e+02 + -1.147032381951767e+02 + -1.151691723223398e+02 + -1.156367060267053e+02 + -1.161058430340008e+02 + -1.165765871000000e+02 + -1.170489420136372e+02 + -1.175229116129598e+02 + -1.179984996644491e+02 + -1.184757098197581e+02 + -1.189545458999998e+02 + -1.194350118004852e+02 + -1.199171112501401e+02 + -1.204008480035419e+02 + -1.208862259161727e+02 + -1.213732488000000e+02 + -1.218619204419225e+02 + -1.223522446637547e+02 + -1.228442252993658e+02 + -1.233378661832514e+02 + -1.238331710999998e+02 + -1.243301438371392e+02 + -1.248287883218059e+02 + -1.253291084262349e+02 + -1.258311078947497e+02 + -1.263347906000000e+02 + -1.268401604692280e+02 + -1.273472212887372e+02 + -1.278559768940106e+02 + -1.283664312433523e+02 + -1.288785881999998e+02 + -1.293924515790011e+02 + -1.299080252758494e+02 + -1.304253131892150e+02 + -1.309443191941241e+02 + -1.314650472000000e+02 + -1.319875011267033e+02 + -1.325116848422910e+02 + -1.330376022476014e+02 + -1.335652573069860e+02 + -1.340946538999998e+02 + -1.346257958892211e+02 + -1.351586873010075e+02 + -1.356933320835031e+02 + -1.362297340185993e+02 + -1.367678971000000e+02 + -1.373078254089903e+02 + -1.378495227933144e+02 + -1.383929931342302e+02 + -1.389382404506380e+02 + -1.394852686999998e+02 + -1.400340818144768e+02 + -1.405846838138316e+02 + -1.411370786853171e+02 + -1.416912703410207e+02 + -1.422472628000000e+02 + -1.428050601118040e+02 + -1.433646661562381e+02 + -1.439260848884736e+02 + -1.444893204354731e+02 + -1.450543767999998e+02 + -1.456212579173106e+02 + -1.461899678121767e+02 + -1.467605105156440e+02 + -1.473328900351724e+02 + -1.479071104000000e+02 + -1.484831756560318e+02 + -1.490610898537698e+02 + -1.496408570188282e+02 + -1.502224811435522e+02 + -1.508059663000000e+02 + -1.513913165938295e+02 + -1.519785360517816e+02 + -1.525676287092765e+02 + -1.531585986433134e+02 + -1.537514498999998e+02 + -1.543461865304275e+02 + -1.549428126935839e+02 + -1.555413324987964e+02 + -1.561417499433451e+02 + -1.567440691000000e+02 + -1.573482940967384e+02 + -1.579544290618548e+02 + -1.585624781173004e+02 + -1.591724453723425e+02 + -1.597843348999998e+02 + -1.603981507727703e+02 + -1.610138971515657e+02 + -1.616315781879854e+02 + -1.622511979884414e+02 + -1.628727607000000e+02 + -1.634962704824068e+02 + -1.641217314319286e+02 + -1.647491476962519e+02 + -1.653785235159056e+02 + -1.660098629999998e+02 + -1.666431702132707e+02 + -1.672784494025457e+02 + -1.679157047805161e+02 + -1.685549404452619e+02 + -1.691961606000000e+02 + -1.698393694891200e+02 + -1.704845712252935e+02 + -1.711317699673001e+02 + -1.717809699904770e+02 + -1.724321754999998e+02 + -1.730853906636835e+02 + -1.737406197069920e+02 + -1.743978668390772e+02 + -1.750571362267288e+02 + -1.757184321000000e+02 + -1.763817587329360e+02 + -1.770471204015179e+02 + -1.777145213342737e+02 + -1.783839656916257e+02 + -1.790554576999997e+02 + -1.797290016348361e+02 + -1.804046017812607e+02 + -1.810822624074922e+02 + -1.817619877551305e+02 + -1.824437821000000e+02 + -1.831276497291853e+02 + -1.838135948809234e+02 + -1.845016218201234e+02 + -1.851917348679873e+02 + -1.858839382999998e+02 + -1.865782363787204e+02 + -1.872746334451072e+02 + -1.879731338116912e+02 + -1.886737417231232e+02 + -1.893764615000000e+02 + -1.900812975069574e+02 + -1.907882540726982e+02 + -1.914973354967214e+02 + -1.922085460544087e+02 + -1.929218900999998e+02 + -1.936373720194894e+02 + -1.943549961169706e+02 + -1.950747667123967e+02 + -1.957966881820183e+02 + -1.965207649000000e+02 + -1.972470012275908e+02 + -1.979754014928308e+02 + -1.987059700466389e+02 + -1.994387112870401e+02 + -2.001736295999997e+02 + -2.009107293657797e+02 + -2.016500149830146e+02 + -2.023914908231823e+02 + -2.031351612174878e+02 + -2.038810306000000e+02 + -2.046291034502658e+02 + -2.053793841544099e+02 + -2.061318770718700e+02 + -2.068865865659776e+02 + -2.076435170999997e+02 + -2.084026731731890e+02 + -2.091640591716557e+02 + -2.099276794995817e+02 + -2.106935386300690e+02 + -2.114616410000000e+02 + -2.122319910255027e+02 + -2.130045931490896e+02 + -2.137794518362718e+02 + -2.145565715736208e+02 + -2.153359567999997e+02 + -2.161176119510612e+02 + -2.169015415764713e+02 + -2.176877501734888e+02 + -2.184762421224458e+02 + -2.192670219000000e+02 + -2.200600940505141e+02 + -2.208554631128035e+02 + -2.216531335679009e+02 + -2.224531098207831e+02 + -2.232553963999997e+02 + -2.240599978997985e+02 + -2.248669188401317e+02 + -2.256761637092654e+02 + -2.264877369816284e+02 + -2.273016432000000e+02 + -2.281178869415660e+02 + -2.289364727411434e+02 + -2.297574051254879e+02 + -2.305806886273285e+02 + -2.314063277999997e+02 + -2.322343272067604e+02 + -2.330646913987978e+02 + -2.338974249389632e+02 + -2.347325324124834e+02 + -2.355700184000000e+02 + -2.364098874788788e+02 + -2.372521442301691e+02 + -2.380967932316097e+02 + -2.389438390563173e+02 + -2.397932862999997e+02 + -2.406451395699314e+02 + -2.414994034603918e+02 + -2.423560825773335e+02 + -2.432151815494090e+02 + -2.440767050000000e+02 + -2.449406575494712e+02 + -2.458070438246558e+02 + -2.466758684438366e+02 + -2.475471360143982e+02 + -2.484208511999996e+02 + -2.492970186823550e+02 + -2.501756430678903e+02 + -2.510567289807632e+02 + -2.519402811010791e+02 + -2.528263041000000e+02 + -2.537148026392507e+02 + -2.546057813786489e+02 + -2.554992449908618e+02 + -2.563951981686694e+02 + -2.572936455999996e+02 + -2.581945919701986e+02 + -2.590980419711499e+02 + -2.600040002856254e+02 + -2.609124715849065e+02 + -2.618234606000000e+02 + -2.627369720784054e+02 + -2.636530106775519e+02 + -2.645715811006028e+02 + -2.654926881465747e+02 + -2.664163364999997e+02 + -2.673425308135112e+02 + -2.682712759281322e+02 + -2.692025766270102e+02 + -2.701364375396030e+02 + -2.710728634000000e+02 + -2.720118590149941e+02 + -2.729534291763713e+02 + -2.738975786300543e+02 + -2.748443120676544e+02 + -2.757936342999997e+02 + -2.767455501787848e+02 + -2.777000643997414e+02 + -2.786571816989448e+02 + -2.796169069311608e+02 + -2.805792449000000e+02 + -2.815442003833780e+02 + -2.825117782146733e+02 + -2.834819832031981e+02 + -2.844548201023671e+02 + -2.854302936999997e+02 + -2.864084088239409e+02 + -2.873891703596309e+02 + -2.883725831483384e+02 + -2.893586519481404e+02 + -2.903473816000000e+02 + -2.913387769892773e+02 + -2.923328429461174e+02 + -2.933295843055886e+02 + -2.943290059327143e+02 + -2.953311126999996e+02 + -2.963359094688269e+02 + -2.973434010446480e+02 + -2.983535922946355e+02 + -2.993664881931061e+02 + -3.003820936000000e+02 + -3.014004133189056e+02 + -3.024214522481863e+02 + -3.034452153213495e+02 + -3.044717074825456e+02 + -3.055009335999997e+02 + -3.065328985120693e+02 + -3.075676071368449e+02 + -3.086050644279766e+02 + -3.096452753553112e+02 + -3.106882447999996e+02 + -3.117339776182681e+02 + -3.127824787990806e+02 + -3.138337533166528e+02 + -3.148878060732492e+02 + -3.159446419999996e+02 + -3.170042660531784e+02 + -3.180666831989414e+02 + -3.191318984100575e+02 + -3.201999166629245e+02 + -3.212707428999996e+02 + -3.223443820580361e+02 + -3.234208391391681e+02 + -3.245001191331626e+02 + -3.255822269890704e+02 + -3.266671677000000e+02 + -3.277549462905472e+02 + -3.288455677875165e+02 + -3.299390371822755e+02 + -3.310353594166140e+02 + -3.321345394999996e+02 + -3.332365824854958e+02 + -3.343414934139734e+02 + -3.354492773045120e+02 + -3.365599391517927e+02 + -3.376734840000000e+02 + -3.387899169180687e+02 + -3.399092429402671e+02 + -3.410314670886827e+02 + -3.421565943845668e+02 + -3.432846298999996e+02 + -3.444155787253185e+02 + -3.455494458929433e+02 + -3.466862364711880e+02 + -3.478259555971263e+02 + -3.489686083000000e+02 + -3.501141995805723e+02 + -3.512627346186799e+02 + -3.524142185495274e+02 + -3.535686563776662e+02 + -3.547260531999996e+02 + -3.558864141649047e+02 + -3.570497443588797e+02 + -3.582160488781844e+02 + -3.593853328562213e+02 + -3.605576014000000e+02 + -3.617328596203877e+02 + -3.629111127187760e+02 + -3.640923658296630e+02 + -3.652766239636252e+02 + -3.664638922999996e+02 + -3.676541760949210e+02 + -3.688474804479435e+02 + -3.700438104641370e+02 + -3.712431713192604e+02 + -3.724455682000000e+02 + -3.736510062917217e+02 + -3.748594907617601e+02 + -3.760710267615897e+02 + -3.772856194324323e+02 + -3.785032739999995e+02 + -3.797239957155368e+02 + -3.809477897125092e+02 + -3.821746611611994e+02 + -3.834046153278488e+02 + -3.846376574000000e+02 + -3.858737925371631e+02 + -3.871130260109560e+02 + -3.883553630688227e+02 + -3.896008088834330e+02 + -3.908493686999996e+02 + -3.921010477895665e+02 + -3.933558513233559e+02 + -3.946137845264227e+02 + -3.958748527376295e+02 + -3.971390612000000e+02 + -3.984064151109821e+02 + -3.996769197585321e+02 + -4.009505804131749e+02 + -4.022274022910074e+02 + -4.035073906999995e+02 + -4.047905509809469e+02 + -4.060768883569506e+02 + -4.073664080804837e+02 + -4.086591154923789e+02 + -4.099550159000000e+02 + -4.112541145837781e+02 + -4.125564168232350e+02 + -4.138619279264533e+02 + -4.151706532436620e+02 + -4.164825980999995e+02 + -4.177977678009782e+02 + -4.191161676484082e+02 + -4.204378029703449e+02 + -4.217626791355866e+02 + -4.230908015000000e+02 + -4.244221753941545e+02 + -4.257568060915354e+02 + -4.270946989435893e+02 + -4.284358594322071e+02 + -4.297802928999995e+02 + -4.311280046181774e+02 + -4.324789999621266e+02 + -4.338332843406102e+02 + -4.351908631680312e+02 + -4.365517418000000e+02 + -4.379159255766193e+02 + -4.392834199290754e+02 + -4.406542302894571e+02 + -4.420283620541414e+02 + -4.434058205999995e+02 + -4.447866113008026e+02 + -4.461707395611302e+02 + -4.475582108324218e+02 + -4.489490306166049e+02 + -4.503432043000000e+02 + -4.517407372272212e+02 + -4.531416348857516e+02 + -4.545459027469901e+02 + -4.559535462055746e+02 + -4.573645706999994e+02 + -4.587789817092769e+02 + -4.601967847429616e+02 + -4.616179852648949e+02 + -4.630425886631084e+02 + -4.644706004000000e+02 + -4.659020259847504e+02 + -4.673368709042424e+02 + -4.687751406384571e+02 + -4.702168406679589e+02 + -4.716619764999995e+02 + -4.731105536500806e+02 + -4.745625775980045e+02 + -4.760180538297375e+02 + -4.774769878558138e+02 + -4.789393852000000e+02 + -4.804052513950263e+02 + -4.818745919803221e+02 + -4.833474124743740e+02 + -4.848237183656923e+02 + -4.863035151999994e+02 + -4.877868085453354e+02 + -4.892736039052198e+02 + -4.907639068268139e+02 + -4.922577229425711e+02 + -4.937550578000000e+02 + -4.952559169027076e+02 + -4.967603058178435e+02 + -4.982682301416788e+02 + -4.997796954853789e+02 + -5.012947073999994e+02 + -5.028132714194502e+02 + -5.043353931676896e+02 + -5.058610782730644e+02 + -5.073903323321115e+02 + -5.089231609000000e+02 + -5.104595695386481e+02 + -5.119995639358939e+02 + -5.135431497453484e+02 + -5.150903325247945e+02 + -5.166411178999995e+02 + -5.181955115300345e+02 + -5.197535190105982e+02 + -5.213151459679927e+02 + -5.228803980937674e+02 + -5.244492810000000e+02 + -5.260218002787250e+02 + -5.275979616609960e+02 + -5.291777708470047e+02 + -5.307612334400695e+02 + -5.323483550999995e+02 + -5.339391415258532e+02 + -5.355335984055753e+02 + -5.371317314077364e+02 + -5.387335461786030e+02 + -5.403390484000000e+02 + -5.419482437848817e+02 + -5.435611380730882e+02 + -5.451777369746786e+02 + -5.467980461477442e+02 + -5.484220712999994e+02 + -5.500498181706811e+02 + -5.516812924850077e+02 + -5.533164999617454e+02 + -5.549554463178829e+02 + -5.565981372999994e+02 + -5.582445786620732e+02 + -5.598947761113077e+02 + -5.615487353817318e+02 + -5.632064622631164e+02 + -5.648679624999994e+02 + -5.665332418238921e+02 + -5.682023060429622e+02 + -5.698751609401672e+02 + -5.715518122344557e+02 + -5.732322656999993e+02 + -5.749165271427032e+02 + -5.766046023386582e+02 + -5.782964970855437e+02 + -5.799922172195480e+02 + -5.816917684999994e+02 + -5.833951566715182e+02 + -5.851023876259811e+02 + -5.868134672043320e+02 + -5.885284011210334e+02 + -5.902471951999993e+02 + -5.919698553287222e+02 + -5.936963873375214e+02 + -5.954267970459595e+02 + -5.971610902818754e+02 + -5.988992728999993e+02 + -6.006413507613062e+02 + -6.023873296844711e+02 + -6.041372155081436e+02 + -6.058910141182311e+02 + -6.076487313999993e+02 + -6.094103732273231e+02 + -6.111759454411804e+02 + -6.129454539033432e+02 + -6.147189045204622e+02 + -6.164963032000001e+02 + -6.182776558378988e+02 + -6.200629682925465e+02 + -6.218522464515877e+02 + -6.236454962577363e+02 + -6.254427235999993e+02 + -6.272439343587159e+02 + -6.290491345295636e+02 + -6.308583300588987e+02 + -6.326715267788347e+02 + -6.344887306000001e+02 + -6.363099474872770e+02 + -6.381351833941451e+02 + -6.399644442896572e+02 + -6.417977361628546e+02 + -6.436350648999993e+02 + -6.454764363684590e+02 + -6.473218566292518e+02 + -6.491713317125350e+02 + -6.510248675271151e+02 + -6.528824700000000e+02 + -6.547441451008573e+02 + -6.566098988943567e+02 + -6.584797373808955e+02 + -6.603536664383599e+02 + -6.622316920999993e+02 + -6.641138204605409e+02 + -6.660000574329696e+02 + -6.678904089961051e+02 + -6.697848812885560e+02 + -6.716834803000000e+02 + -6.735862119462199e+02 + -6.754930822688247e+02 + -6.774040973560088e+02 + -6.793192633079277e+02 + -6.812385860999992e+02 + -6.831620716800010e+02 + -6.850897262089175e+02 + -6.870215557906422e+02 + -6.889575663679858e+02 + -6.908977640000001e+02 + -6.928421548145254e+02 + -6.947907448778678e+02 + -6.967435402481692e+02 + -6.987005469959722e+02 + -7.006617711999993e+02 + -7.026272189534540e+02 + -7.045968963883171e+02 + -7.065708096021641e+02 + -7.085489646318440e+02 + -7.105313676000000e+02 + -7.125180246666655e+02 + -7.145089419064375e+02 + -7.165041254104643e+02 + -7.185035813280965e+02 + -7.205073157999993e+02 + -7.225153349567163e+02 + -7.245276449240899e+02 + -7.265442518464891e+02 + -7.285651618951177e+02 + -7.305903812000000e+02 + -7.326199158832851e+02 + -7.346537721472801e+02 + -7.366919561576724e+02 + -7.387344740033407e+02 + -7.407813318999993e+02 + -7.428325361060332e+02 + -7.448880927069067e+02 + -7.469480078569493e+02 + -7.490122878703525e+02 + -7.510809389000000e+02 + -7.531539670309830e+02 + -7.552313785295614e+02 + -7.573131796529314e+02 + -7.593993765758833e+02 + -7.614899754999992e+02 + -7.635849826556215e+02 + -7.656844042998581e+02 + -7.677882466626152e+02 + -7.698965159244972e+02 + -7.720092183000000e+02 + -7.741263600422619e+02 + -7.762479474594095e+02 + -7.783739868214470e+02 + -7.805044843222228e+02 + -7.826394461999992e+02 + -7.847788787331309e+02 + -7.869227882276110e+02 + -7.890711809493379e+02 + -7.912240631015031e+02 + -7.933814410000000e+02 + -7.955433210068886e+02 + -7.977097093640062e+02 + -7.998806123337483e+02 + -8.020560362523712e+02 + -8.042359873999992e+02 + -8.064204720446323e+02 + -8.086094965664213e+02 + -8.108030673053524e+02 + -8.130011905039750e+02 + -8.152038725000000e+02 + -8.174111196729889e+02 + -8.196229383028856e+02 + -8.218393347070877e+02 + -8.240603152936806e+02 + -8.262858863999992e+02 + -8.285160543327190e+02 + -8.307508254786889e+02 + -8.329902062108882e+02 + -8.352342028550189e+02 + -8.374828218000000e+02 + -8.397360694583805e+02 + -8.419939521636865e+02 + -8.442564762682848e+02 + -8.465236481828920e+02 + -8.487954742999991e+02 + -8.510719610066617e+02 + -8.533531147279726e+02 + -8.556389418758610e+02 + -8.579294488297842e+02 + -8.602246420000000e+02 + -8.625245278111681e+02 + -8.648291126593311e+02 + -8.671384029773127e+02 + -8.694524052578884e+02 + -8.717711258999991e+02 + -8.740945712693658e+02 + -8.764227478547659e+02 + -8.787556621558366e+02 + -8.810933206360036e+02 + -8.834357297000000e+02 + -8.857828957473700e+02 + -8.881348253000285e+02 + -8.904915248639498e+02 + -8.928530008754832e+02 + -8.952192597999992e+02 + -8.975903081273602e+02 + -8.999661523549036e+02 + -9.023467989915350e+02 + -9.047322545556517e+02 + -9.071225255000001e+02 + -9.095176182642568e+02 + -9.119175394073789e+02 + -9.143222954857910e+02 + -9.167318930073794e+02 + -9.191463384999990e+02 + -9.215656384936522e+02 + -9.239897994653498e+02 + -9.264188279352956e+02 + -9.288527305046009e+02 + -9.312915136999991e+02 + -9.337351840217814e+02 + -9.361837480744202e+02 + -9.386372124507991e+02 + -9.410955836845210e+02 + -9.435588682999991e+02 + -9.460270728408829e+02 + -9.485002039375468e+02 + -9.509782681943145e+02 + -9.534612721474879e+02 + -9.559492223999991e+02 + -9.584421255818636e+02 + -9.609399882443452e+02 + -9.634428169536077e+02 + -9.659506183300578e+02 + -9.684633989999990e+02 + -9.709811655949806e+02 + -9.735039247636544e+02 + -9.760316831188370e+02 + -9.785644472182881e+02 + -9.811022236999991e+02 + -9.836450192407020e+02 + -9.861928404528198e+02 + -9.887456939756197e+02 + -9.913035865101050e+02 + -9.938665246999991e+02 + -9.964345151588749e+02 + -9.990075645416573e+02 + -1.001585679508894e+03 + -1.004168866725833e+03 + -1.006757132999999e+03 + -1.009350485088950e+03 + -1.011948929193798e+03 + -1.014552472017065e+03 + -1.017161121149714e+03 + -1.019774882999999e+03 + -1.022393763477281e+03 + -1.025017769745607e+03 + -1.027646908706880e+03 + -1.030281186449000e+03 + -1.032920609999999e+03 + -1.035565186772393e+03 + -1.038214923106640e+03 + -1.040869825393126e+03 + -1.043529900494233e+03 + -1.046195154999999e+03 + -1.048865595518282e+03 + -1.051541229525064e+03 + -1.054222063914517e+03 + -1.056908104442841e+03 + -1.059599357999999e+03 + -1.062295832060889e+03 + -1.064997533253958e+03 + -1.067704468147946e+03 + -1.070416643533965e+03 + -1.073134066000000e+03 + -1.075856742179453e+03 + -1.078584679453085e+03 + -1.081317884808236e+03 + -1.084056364390976e+03 + -1.086800124999999e+03 + -1.089549173751501e+03 + -1.092303517161580e+03 + -1.095063162007773e+03 + -1.097828115663242e+03 + -1.100598385000000e+03 + -1.103373976558467e+03 + -1.106154896984741e+03 + -1.108941153067517e+03 + -1.111732751768433e+03 + -1.114529699999999e+03 + -1.117332004656191e+03 + -1.120139672719820e+03 + -1.122952711033347e+03 + -1.125771126202256e+03 + -1.128594925000000e+03 + -1.131424114391635e+03 + -1.134258701616623e+03 + -1.137098693726371e+03 + -1.139944097362279e+03 + -1.142794918999999e+03 + -1.145651165298781e+03 + -1.148512843975744e+03 + -1.151379962155369e+03 + -1.154252525751212e+03 + -1.157130542000000e+03 + -1.160014018647746e+03 + -1.162902961796701e+03 + -1.165797378002409e+03 + -1.168697275086654e+03 + -1.171602659999999e+03 + -1.174513539162380e+03 + -1.177429919411751e+03 + -1.180351807863387e+03 + -1.183279211838743e+03 + -1.186212138000000e+03 + -1.189150592852472e+03 + -1.192094584016226e+03 + -1.195044118757429e+03 + -1.197999203418656e+03 + -1.200959844999999e+03 + -1.203926050837031e+03 + -1.206897827704460e+03 + -1.209875182550288e+03 + -1.212858122751144e+03 + -1.215846655000000e+03 + -1.218840785789916e+03 + -1.221840522671824e+03 + -1.224845872987532e+03 + -1.227856843385819e+03 + -1.230873440999999e+03 + -1.233895673111333e+03 + -1.236923546192640e+03 + -1.239957067026041e+03 + -1.242996243170224e+03 + -1.246041082000000e+03 + -1.249091590572761e+03 + -1.252147775334870e+03 + -1.255209643154299e+03 + -1.258277201722480e+03 + -1.261350457999999e+03 + -1.264429418673061e+03 + -1.267514091394071e+03 + -1.270604483350415e+03 + -1.273700600740823e+03 + -1.276802451000000e+03 + -1.279910042060014e+03 + -1.283023380429426e+03 + -1.286142472688095e+03 + -1.289267326090673e+03 + -1.292397947999999e+03 + -1.295534345774196e+03 + -1.298676526619691e+03 + -1.301824497524618e+03 + -1.304978265240164e+03 + -1.308137837000000e+03 + -1.311303220289759e+03 + -1.314474422298625e+03 + -1.317651449999705e+03 + -1.320834310180745e+03 + -1.324023009999999e+03 + -1.327217556910311e+03 + -1.330417958531748e+03 + -1.333624221890711e+03 + -1.336836353161044e+03 + -1.340054360000000e+03 + -1.343278250622039e+03 + -1.346508031450468e+03 + -1.349743709083262e+03 + -1.352985291084887e+03 + -1.356232784999999e+03 + -1.359486198143600e+03 + -1.362745537187869e+03 + -1.366010809195683e+03 + -1.369282022032803e+03 + -1.372559183000000e+03 + -1.375842299046690e+03 + -1.379131377356324e+03 + -1.382426425045151e+03 + -1.385727449081319e+03 + -1.389034456999999e+03 + -1.392347456524483e+03 + -1.395666454635196e+03 + -1.398991458464414e+03 + -1.402322475610563e+03 + -1.405659513000000e+03 + -1.409002577344138e+03 + -1.412351676333446e+03 + -1.415706817605260e+03 + -1.419068008353351e+03 + -1.422435255999999e+03 + -1.425808567964313e+03 + -1.429187950969556e+03 + -1.432573411998037e+03 + -1.435964958719179e+03 + -1.439362599000000e+03 + -1.442766340439504e+03 + -1.446176189225631e+03 + -1.449592152360744e+03 + -1.453014238529275e+03 + -1.456442454999999e+03 + -1.459876808245435e+03 + -1.463317305593544e+03 + -1.466763954627232e+03 + -1.470216762966463e+03 + -1.473675738000000e+03 + -1.477140887005819e+03 + -1.480612217422037e+03 + -1.484089736511155e+03 + -1.487573451238554e+03 + -1.491063368999999e+03 + -1.494559497483912e+03 + -1.498061844364458e+03 + -1.501570417048641e+03 + -1.505085222548716e+03 + -1.508606267999999e+03 + -1.512133560790714e+03 + -1.515667108906144e+03 + -1.519206919999463e+03 + -1.522753000996140e+03 + -1.526305358999999e+03 + -1.529864001422905e+03 + -1.533428936276007e+03 + -1.537000171179230e+03 + -1.540577712963951e+03 + -1.544161568999999e+03 + -1.547751747018138e+03 + -1.551348254621497e+03 + -1.554951099280540e+03 + -1.558560288310355e+03 + -1.562175828999999e+03 + -1.565797728689906e+03 + -1.569425994958102e+03 + -1.573060635400619e+03 + -1.576701657553543e+03 + -1.580349068999999e+03 + -1.584002877314684e+03 + -1.587663089901193e+03 + -1.591329713983250e+03 + -1.595002756657312e+03 + -1.598682225999999e+03 + -1.602368130282464e+03 + -1.606060476003810e+03 + -1.609759270166310e+03 + -1.613464521194204e+03 + -1.617176236999999e+03 + -1.620894424965112e+03 + -1.624619091996676e+03 + -1.628350245392540e+03 + -1.632087893195996e+03 + -1.635832042999999e+03 + -1.639582702219653e+03 + -1.643339878880967e+03 + -1.647103580589531e+03 + -1.650873814125992e+03 + -1.654650586999999e+03 + -1.658433907212865e+03 + -1.662223782656940e+03 + -1.666020220927786e+03 + -1.669823229228366e+03 + -1.673632814999999e+03 + -1.677448985879331e+03 + -1.681271749582079e+03 + -1.685101113981527e+03 + -1.688937087086922e+03 + -1.692779675999999e+03 + -1.696628887589857e+03 + -1.700484730162859e+03 + -1.704347211664743e+03 + -1.708216339003609e+03 + -1.712092119999999e+03 + -1.715974562928047e+03 + -1.719863675285195e+03 + -1.723759464515762e+03 + -1.727661938269359e+03 + -1.731571103999999e+03 + -1.735486969207614e+03 + -1.739409542118944e+03 + -1.743338830603560e+03 + -1.747274841733617e+03 + -1.751217582999999e+03 + -1.755167062315964e+03 + -1.759123288009624e+03 + -1.763086267739076e+03 + -1.767056008086542e+03 + -1.771032516999999e+03 + -1.775015803098183e+03 + -1.779005873908525e+03 + -1.783002736756524e+03 + -1.787006399126180e+03 + -1.791016869000000e+03 + -1.795034154506543e+03 + -1.799058263107071e+03 + -1.803089202321619e+03 + -1.807126980015989e+03 + -1.811171603999998e+03 + -1.815223082025504e+03 + -1.819281421835726e+03 + -1.823346631247284e+03 + -1.827418718154363e+03 + -1.831497690000000e+03 + -1.835583554215247e+03 + -1.839676319355180e+03 + -1.843775993459518e+03 + -1.847882583413063e+03 + -1.851996096999998e+03 + -1.856116542493618e+03 + -1.860243927542824e+03 + -1.864378259929794e+03 + -1.868519547846306e+03 + -1.872667799000000e+03 + -1.876823020804590e+03 + -1.880985220849939e+03 + -1.885154407199114e+03 + -1.889330588466962e+03 + -1.893513771999998e+03 + -1.897703964771626e+03 + -1.901901175652285e+03 + -1.906105412964281e+03 + -1.910316683519642e+03 + -1.914534995000000e+03 + -1.918760355678869e+03 + -1.922992773607248e+03 + -1.927232256642219e+03 + -1.931478812455566e+03 + -1.935732448999998e+03 + -1.939993174351127e+03 + -1.944260996306766e+03 + -1.948535922544343e+03 + -1.952817960710870e+03 + -1.957107119000000e+03 + -1.961403405774432e+03 + -1.965706828656891e+03 + -1.970017395435863e+03 + -1.974335114379128e+03 + -1.978659992999998e+03 + -1.982992038634364e+03 + -1.987331259958815e+03 + -1.991677665406797e+03 + -1.996031262526477e+03 + -2.000392059000000e+03 + -2.004760062662544e+03 + -2.009135281420714e+03 + -2.013517723394651e+03 + -2.017907396963966e+03 + -2.022304309999998e+03 + -2.026708470129302e+03 + -2.031119885371980e+03 + -2.035538563783372e+03 + -2.039964513323241e+03 + -2.044397742000000e+03 + -2.048838257821666e+03 + -2.053286068652342e+03 + -2.057741182613919e+03 + -2.062203608203423e+03 + -2.066673352999998e+03 + -2.071150424296029e+03 + -2.075634830690161e+03 + -2.080126580708826e+03 + -2.084625682242698e+03 + -2.089132143000000e+03 + -2.093645970720743e+03 + -2.098167173603271e+03 + -2.102695759983049e+03 + -2.107231738184183e+03 + -2.111775115999998e+03 + -2.116325901057278e+03 + -2.120884101683680e+03 + -2.125449726108530e+03 + -2.130022782163747e+03 + -2.134603278000000e+03 + -2.139191221924691e+03 + -2.143786621957349e+03 + -2.148389485981318e+03 + -2.152999821836896e+03 + -2.157617637999998e+03 + -2.162242943074696e+03 + -2.166875744534069e+03 + -2.171516050262848e+03 + -2.176163869133622e+03 + -2.180819209000000e+03 + -2.185482077327040e+03 + -2.190152482871076e+03 + -2.194830433950524e+03 + -2.199515937814626e+03 + -2.204209002999998e+03 + -2.208909638535144e+03 + -2.213617851857877e+03 + -2.218333650781778e+03 + -2.223057044225780e+03 + -2.227788040000000e+03 + -2.232526645541351e+03 + -2.237272869895315e+03 + -2.242026721580949e+03 + -2.246788207788726e+03 + -2.251557336999999e+03 + -2.256334118250544e+03 + -2.261118559161676e+03 + -2.265910667352767e+03 + -2.270710451040453e+03 + -2.275517918999998e+03 + -2.280333080014267e+03 + -2.285155941593499e+03 + -2.289986511539142e+03 + -2.294824798563590e+03 + -2.299670810999998e+03 + -2.304524556927484e+03 + -2.309386044592275e+03 + -2.314255282195762e+03 + -2.319132277836808e+03 + -2.324017039999998e+03 + -2.328909577220459e+03 + -2.333809897224200e+03 + -2.338718008145149e+03 + -2.343633918994289e+03 + -2.348557637999998e+03 + -2.353489172912608e+03 + -2.358428531797252e+03 + -2.363375723128402e+03 + -2.368330755820120e+03 + -2.373293637999998e+03 + -2.378264377427878e+03 + -2.383242982526706e+03 + -2.388229461889857e+03 + -2.393223824063392e+03 + -2.398226076999998e+03 + -2.403236228525699e+03 + -2.408254287477974e+03 + -2.413280262494937e+03 + -2.418314161547432e+03 + -2.423355992999998e+03 + -2.428405765403690e+03 + -2.433463486890615e+03 + -2.438529165661329e+03 + -2.443602810190047e+03 + -2.448684428999998e+03 + -2.453774030522361e+03 + -2.458871622761939e+03 + -2.463977214083831e+03 + -2.469090813490053e+03 + -2.474212428999998e+03 + -2.479342068313477e+03 + -2.484479740528551e+03 + -2.489625454539379e+03 + -2.494779218375099e+03 + -2.499941039999998e+03 + -2.505110927624773e+03 + -2.510288890409285e+03 + -2.515474937052364e+03 + -2.520669075212765e+03 + -2.525871312999998e+03 + -2.531081658990217e+03 + -2.536300122220549e+03 + -2.541526711425658e+03 + -2.546761434689014e+03 + -2.552004299999998e+03 + -2.557255315555890e+03 + -2.562514490474060e+03 + -2.567781833501355e+03 + -2.573057352510476e+03 + -2.578341055999998e+03 + -2.583632952807378e+03 + -2.588933051312229e+03 + -2.594241359879810e+03 + -2.599557887014108e+03 + -2.604882640999998e+03 + -2.610215630196411e+03 + -2.615556863841929e+03 + -2.620906350516468e+03 + -2.626264097579904e+03 + -2.631630113999998e+03 + -2.637004409331177e+03 + -2.642386991059378e+03 + -2.647777867311749e+03 + -2.653177047878767e+03 + -2.658584540999998e+03 + -2.664000354190328e+03 + -2.669424496446296e+03 + -2.674856976816473e+03 + -2.680297803844182e+03 + -2.685746985999998e+03 + -2.691204531699670e+03 + -2.696670449221115e+03 + -2.702144747143579e+03 + -2.707627434527642e+03 + -2.713118519999998e+03 + -2.718618011850782e+03 + -2.724125918263655e+03 + -2.729642247949266e+03 + -2.735167010382318e+03 + -2.740700213999998e+03 + -2.746241866699575e+03 + -2.751791977076697e+03 + -2.757350554006517e+03 + -2.762917606479738e+03 + -2.768493143000000e+03 + -2.774077171851313e+03 + -2.779669701724049e+03 + -2.785270741295763e+03 + -2.790880299095185e+03 + -2.796498383999998e+03 + -2.802125004968091e+03 + -2.807760170344632e+03 + -2.813403888501788e+03 + -2.819056168106567e+03 + -2.824717018000000e+03 + -2.830386447079949e+03 + -2.836064464083062e+03 + -2.841751077483182e+03 + -2.847446295475182e+03 + -2.853150126999998e+03 + -2.858862581346520e+03 + -2.864583667200011e+03 + -2.870313392988722e+03 + -2.876051767015894e+03 + -2.881798798000000e+03 + -2.887554494917011e+03 + -2.893318866668325e+03 + -2.899091922031221e+03 + -2.904873669618204e+03 + -2.910664117999998e+03 + -2.916463275808826e+03 + -2.922271151990944e+03 + -2.928087755363771e+03 + -2.933913094445438e+03 + -2.939747178000000e+03 + -2.945590014959967e+03 + -2.951441614226611e+03 + -2.957301984588625e+03 + -2.963171134666888e+03 + -2.969049072999998e+03 + -2.974935808208847e+03 + -2.980831349417174e+03 + -2.986735705755709e+03 + -2.992648886132359e+03 + -2.998570899000000e+03 + -3.004501752659864e+03 + -3.010441455936329e+03 + -3.016390017858416e+03 + -3.022347447554316e+03 + -3.028313753999998e+03 + -3.034288946006182e+03 + -3.040273032141582e+03 + -3.046266021078663e+03 + -3.052267921739149e+03 + -3.058278743000000e+03 + -3.064298493698561e+03 + -3.070327182685398e+03 + -3.076364818827055e+03 + -3.082411411001809e+03 + -3.088466967999998e+03 + -3.094531498652569e+03 + -3.100605012177602e+03 + -3.106687517554494e+03 + -3.112779023262762e+03 + -3.118879538000000e+03 + -3.124989070695736e+03 + -3.131107630527278e+03 + -3.137235226491168e+03 + -3.143371867254447e+03 + -3.149517561999998e+03 + -3.155672319953097e+03 + -3.161836149115856e+03 + -3.168009058152651e+03 + -3.174191057129923e+03 + -3.180382155000000e+03 + -3.186582360055111e+03 + -3.192791681144167e+03 + -3.199010127274887e+03 + -3.205237707493432e+03 + -3.211474430999998e+03 + -3.217720306909038e+03 + -3.223975343611381e+03 + -3.230239549889151e+03 + -3.236512935355519e+03 + -3.242795509000000e+03 + -3.249087279482800e+03 + -3.255388255944051e+03 + -3.261698447489179e+03 + -3.268017862963467e+03 + -3.274346510999998e+03 + -3.280684400401313e+03 + -3.287031541121871e+03 + -3.293387942369432e+03 + -3.299753611888159e+03 + -3.306128559000000e+03 + -3.312512793688797e+03 + -3.318906324190636e+03 + -3.325309159228279e+03 + -3.331721308860119e+03 + -3.338142781999998e+03 + -3.344573586933190e+03 + -3.351013732692941e+03 + -3.357463228591956e+03 + -3.363922084041577e+03 + -3.370390307999997e+03 + -3.376867909193196e+03 + -3.383354896616435e+03 + -3.389851279509897e+03 + -3.396357067337695e+03 + -3.402872268999997e+03 + -3.409396893188545e+03 + -3.415930949268335e+03 + -3.422474446597307e+03 + -3.429027394238212e+03 + -3.435589800999997e+03 + -3.442161675674332e+03 + -3.448743027574159e+03 + -3.455333866086035e+03 + -3.461934200499129e+03 + -3.468544039999997e+03 + -3.475163393634110e+03 + -3.481792270131310e+03 + -3.488430678432703e+03 + -3.495078627927044e+03 + -3.501736127999997e+03 + -3.508403187927853e+03 + -3.515079816661691e+03 + -3.521766023349286e+03 + -3.528461817510494e+03 + -3.535167207999998e+03 + -3.541882203477436e+03 + -3.548606813620608e+03 + -3.555341047964333e+03 + -3.562084915431213e+03 + -3.568838424999997e+03 + -3.575601585773337e+03 + -3.582374407066678e+03 + -3.589156898185297e+03 + -3.595949068354316e+03 + -3.602750926999998e+03 + -3.609562483468940e+03 + -3.616383746264014e+03 + -3.623214724488114e+03 + -3.630055428392298e+03 + -3.636905866999997e+03 + -3.643766048793625e+03 + -3.650635983516456e+03 + -3.657515680680700e+03 + -3.664405149014039e+03 + -3.671304397999997e+03 + -3.678213437374473e+03 + -3.685132275760156e+03 + -3.692060922035369e+03 + -3.698999385901594e+03 + -3.705947676999997e+03 + -3.712905804797643e+03 + -3.719873778403308e+03 + -3.726851606752037e+03 + -3.733839298718909e+03 + -3.740836863999997e+03 + -3.747844312547997e+03 + -3.754861653211674e+03 + -3.761888895074585e+03 + -3.768926047955085e+03 + -3.775973120999997e+03 + -3.783030123074376e+03 + -3.790097063813473e+03 + -3.797173952745452e+03 + -3.804260798968512e+03 + -3.811357611999997e+03 + -3.818464401472386e+03 + -3.825581176303607e+03 + -3.832707945585785e+03 + -3.839844718954238e+03 + -3.846991505999998e+03 + -3.854148316201428e+03 + -3.861315158822798e+03 + -3.868492043129635e+03 + -3.875678978458987e+03 + -3.882875973999997e+03 + -3.890083038997269e+03 + -3.897300183310783e+03 + -3.904527416633095e+03 + -3.911764748154242e+03 + -3.919012186999997e+03 + -3.926269742452437e+03 + -3.933537424464352e+03 + -3.940815242621297e+03 + -3.948103205720294e+03 + -3.955401322999997e+03 + -3.962709604107895e+03 + -3.970028058998795e+03 + -3.977356697163350e+03 + -3.984695527326294e+03 + -3.992044558999997e+03 + -3.999403802144854e+03 + -4.006773266302151e+03 + -4.014152960820400e+03 + -4.021542894928240e+03 + -4.028943077999997e+03 + -4.036353519583599e+03 + -4.043774229513202e+03 + -4.051205217431756e+03 + -4.058646492564995e+03 + -4.066098063999997e+03 + -4.073559940995820e+03 + -4.081032133755226e+03 + -4.088514652104142e+03 + -4.096007504979870e+03 + -4.103510702000000e+03 + -4.111024253097677e+03 + -4.118548167510886e+03 + -4.126082454416708e+03 + -4.133627123225803e+03 + -4.141182184000000e+03 + -4.148747646853033e+03 + -4.156323520486682e+03 + -4.163909814098826e+03 + -4.171506538118098e+03 + -4.179113701999993e+03 + -4.186731314728609e+03 + -4.194359386189681e+03 + -4.201997926116393e+03 + -4.209646943720986e+03 + -4.217306449000000e+03 + -4.224976452122954e+03 + -4.232656961817923e+03 + -4.240347987240753e+03 + -4.248049538718602e+03 + -4.255761626000000e+03 + -4.263484258397591e+03 + -4.271217445246016e+03 + -4.278961196276451e+03 + -4.286715521743729e+03 + -4.294480431000000e+03 + -4.302255933066315e+03 + -4.310042038085233e+03 + -4.317838756007569e+03 + -4.325646096087124e+03 + -4.333464067999995e+03 + -4.341292681602012e+03 + -4.349131946225953e+03 + -4.356981871466000e+03 + -4.364842467485710e+03 + -4.372713744000000e+03 + -4.380595710372718e+03 + -4.388488375861229e+03 + -4.396391750264422e+03 + -4.404305844160006e+03 + -4.412230667000000e+03 + -4.420166227736474e+03 + -4.428112536405837e+03 + -4.436069603088062e+03 + -4.444037437481978e+03 + -4.452016049000000e+03 + -4.460005447074678e+03 + -4.468005641867199e+03 + -4.476016643204103e+03 + -4.484038460200805e+03 + -4.492071102999995e+03 + -4.500114582060231e+03 + -4.508168906299815e+03 + -4.516234085098625e+03 + -4.524310129075975e+03 + -4.532397048000000e+03 + -4.540494851104932e+03 + -4.548603547974418e+03 + -4.556723148595408e+03 + -4.564853663376500e+03 + -4.572995102000000e+03 + -4.581147473755137e+03 + -4.589310788334117e+03 + -4.597485055595826e+03 + -4.605670285497996e+03 + -4.613866488000000e+03 + -4.622073673035890e+03 + -4.630291850451470e+03 + -4.638521029781397e+03 + -4.646761220207367e+03 + -4.655012431999994e+03 + -4.663274675842531e+03 + -4.671547961173437e+03 + -4.679832297267551e+03 + -4.688127693710799e+03 + -4.696434161000000e+03 + -4.704751709752170e+03 + -4.713080348793824e+03 + -4.721420087561993e+03 + -4.729770937031085e+03 + -4.738132907000000e+03 + -4.746506006604411e+03 + -4.754890245715343e+03 + -4.763285634540516e+03 + -4.771692183448750e+03 + -4.780109901999994e+03 + -4.788538799466528e+03 + -4.796978886096308e+03 + -4.805430172162917e+03 + -4.813892667577567e+03 + -4.822366381999994e+03 + -4.830851325088147e+03 + -4.839347507060687e+03 + -4.847854938123849e+03 + -4.856373628221604e+03 + -4.864903587000000e+03 + -4.873444824101478e+03 + -4.881997349859994e+03 + -4.890561174364984e+03 + -4.899136307099045e+03 + -4.907722758000000e+03 + -4.916320537362784e+03 + -4.924929655587317e+03 + -4.933550122528648e+03 + -4.942181947260091e+03 + -4.950825139999994e+03 + -4.959479711457802e+03 + -4.968145671175524e+03 + -4.976823028809056e+03 + -4.985511794647833e+03 + -4.994211978999993e+03 + -5.002923592007461e+03 + -5.011646643245516e+03 + -5.020381142480443e+03 + -5.029127099988444e+03 + -5.037884526000000e+03 + -5.046653430641881e+03 + -5.055433823857634e+03 + -5.064225715527905e+03 + -5.073029115529123e+03 + -5.081844034000000e+03 + -5.090670481166524e+03 + -5.099508466925161e+03 + -5.108358001180135e+03 + -5.117219094017154e+03 + -5.126091755999993e+03 + -5.134975997626908e+03 + -5.143871827953957e+03 + -5.152779256704796e+03 + -5.161698295082459e+03 + -5.170628952999993e+03 + -5.179571239778229e+03 + -5.188525166029071e+03 + -5.197490742130520e+03 + -5.206467977662855e+03 + -5.215456883000000e+03 + -5.224457468752808e+03 + -5.233469744262066e+03 + -5.242493719420175e+03 + -5.251529405361101e+03 + -5.260576812000000e+03 + -5.269635948683524e+03 + -5.278706825911151e+03 + -5.287789454172008e+03 + -5.296883843495917e+03 + -5.305990003999993e+03 + -5.315107945871962e+03 + -5.324237679253967e+03 + -5.333379214299059e+03 + -5.342532561186867e+03 + -5.351697729999993e+03 + -5.360874730862462e+03 + -5.370063574314554e+03 + -5.379264270604972e+03 + -5.388476829418795e+03 + -5.397701261000000e+03 + -5.406937575887649e+03 + -5.416185784228891e+03 + -5.425445896082409e+03 + -5.434717921547790e+03 + -5.444001871000000e+03 + -5.453297754883592e+03 + -5.462605583222671e+03 + -5.471925366229407e+03 + -5.481257114511772e+03 + -5.490600837999993e+03 + -5.499956546429602e+03 + -5.509324250592133e+03 + -5.518703961068116e+03 + -5.528095687743725e+03 + -5.537499440999993e+03 + -5.546915231361128e+03 + -5.556343068498348e+03 + -5.565782962476614e+03 + -5.575234924238452e+03 + -5.584698964000000e+03 + -5.594175091687396e+03 + -5.603663318133420e+03 + -5.613163653827974e+03 + -5.622676108416792e+03 + -5.632200692000000e+03 + -5.641737415094019e+03 + -5.651286288507457e+03 + -5.660847322604374e+03 + -5.670420527008017e+03 + -5.680005911999993e+03 + -5.689603488367688e+03 + -5.699213267038800e+03 + -5.708835258184300e+03 + -5.718469470901945e+03 + -5.728115915999992e+03 + -5.737774605002216e+03 + -5.747445547634946e+03 + -5.757128753652110e+03 + -5.766824233562706e+03 + -5.776531998000000e+03 + -5.786252057564687e+03 + -5.795984422575620e+03 + -5.805729103393980e+03 + -5.815486110517342e+03 + -5.825255454000000e+03 + -5.835037143865786e+03 + -5.844831191184440e+03 + -5.854637606668529e+03 + -5.864456400127173e+03 + -5.874287581999993e+03 + -5.884131163070459e+03 + -5.893987153665426e+03 + -5.903855564090225e+03 + -5.913736404781277e+03 + -5.923629686000000e+03 + -5.933535418061928e+03 + -5.943453611973397e+03 + -5.953384278439786e+03 + -5.963327427438455e+03 + -5.973283069000000e+03 + -5.983251213525049e+03 + -5.993231872573540e+03 + -6.003225056744913e+03 + -6.013230774891098e+03 + -6.023249038000000e+03 + -6.033279857947543e+03 + -6.043323244258373e+03 + -6.053379206808452e+03 + -6.063447756872029e+03 + -6.073528904999992e+03 + -6.083622661322729e+03 + -6.093729036471069e+03 + -6.103848041095609e+03 + -6.113979685699232e+03 + -6.124123981000000e+03 + -6.134280937646101e+03 + -6.144450565430006e+03 + -6.154632874755873e+03 + -6.164827877191976e+03 + -6.175035583000000e+03 + -6.185256001935748e+03 + -6.195489145360168e+03 + -6.205735024246584e+03 + -6.215993648382001e+03 + -6.226265028000000e+03 + -6.236549173839082e+03 + -6.246846097225249e+03 + -6.257155808917487e+03 + -6.267478318647532e+03 + -6.277813636999993e+03 + -6.288161775039973e+03 + -6.298522743318929e+03 + -6.308896552332133e+03 + -6.319283212690151e+03 + -6.329682735000000e+03 + -6.340095129841887e+03 + -6.350520407726451e+03 + -6.360958579315570e+03 + -6.371409655512612e+03 + -6.381873647000000e+03 + -6.392350564293673e+03 + -6.402840417873253e+03 + -6.413343218449801e+03 + -6.423858977046060e+03 + -6.434387704000000e+03 + -6.444929409479182e+03 + -6.455484104800415e+03 + -6.466051800878468e+03 + -6.476632507643834e+03 + -6.487226235999992e+03 + -6.497832997260840e+03 + -6.508452801649206e+03 + -6.519085659445890e+03 + -6.529731581482401e+03 + -6.540390579000000e+03 + -6.551062663116751e+03 + -6.561747843536938e+03 + -6.572446130639311e+03 + -6.583157536279329e+03 + -6.593882071000000e+03 + -6.604619744763902e+03 + -6.615370568925604e+03 + -6.626134554413510e+03 + -6.636911711064461e+03 + -6.647702049999992e+03 + -6.658505582840396e+03 + -6.669322319643610e+03 + -6.680152270785791e+03 + -6.690995447680221e+03 + -6.701851860999993e+03 + -6.712721521095499e+03 + -6.723604439166686e+03 + -6.734500626205399e+03 + -6.745410092579864e+03 + -6.756332849000000e+03 + -6.767268906377159e+03 + -6.778218275408767e+03 + -6.789180966973428e+03 + -6.800156992270870e+03 + -6.811146362000000e+03 + -6.822149086596000e+03 + -6.833165176809022e+03 + -6.844194643583943e+03 + -6.855237498022965e+03 + -6.866293750999992e+03 + -6.877363413246921e+03 + -6.888446495554016e+03 + -6.899543008749155e+03 + -6.910652963678518e+03 + -6.921776370999992e+03 + -6.932913241460104e+03 + -6.944063586638155e+03 + -6.955227417524035e+03 + -6.966404743973952e+03 + -6.977595577000000e+03 + -6.988799928187199e+03 + -7.000017808173458e+03 + -7.011249227729020e+03 + -7.022494198140058e+03 + -7.033752730000000e+03 + -7.045024833685246e+03 + -7.056310520605544e+03 + -7.067609802022496e+03 + -7.078922688575014e+03 + -7.090249190999992e+03 + -7.101589320140114e+03 + -7.112943086874141e+03 + -7.124310502404821e+03 + -7.135691578318693e+03 + -7.147086324999992e+03 + -7.158494752468790e+03 + -7.169916872475182e+03 + -7.181352696510882e+03 + -7.192802235036809e+03 + -7.204265499000000e+03 + -7.215742499578333e+03 + -7.227233247391960e+03 + -7.238737753333357e+03 + -7.250256028887258e+03 + -7.261788085000000e+03 + -7.273333932305611e+03 + -7.284893581718426e+03 + -7.296467044458082e+03 + -7.308054332025791e+03 + -7.319655454999992e+03 + -7.331270423697963e+03 + -7.342899249833889e+03 + -7.354541944862027e+03 + -7.366198519315069e+03 + -7.377868983999992e+03 + -7.389553350032372e+03 + -7.401251628839381e+03 + -7.412963831476617e+03 + -7.424689968390403e+03 + -7.436430051000000e+03 + -7.448184091042194e+03 + -7.459952098877861e+03 + -7.471734085033887e+03 + -7.483530060856024e+03 + -7.495340038000000e+03 + -7.507164027981260e+03 + -7.519002041143363e+03 + -7.530854088088799e+03 + -7.542720180263871e+03 + -7.554600328999991e+03 + -7.566494545476364e+03 + -7.578402840747203e+03 + -7.590325225748156e+03 + -7.602261711334166e+03 + -7.614212308999990e+03 + -7.626177030375796e+03 + -7.638155885970103e+03 + -7.650148886679111e+03 + -7.662156044359298e+03 + -7.674177370000000e+03 + -7.686212874133715e+03 + -7.698262567927072e+03 + -7.710326462858042e+03 + -7.722404570574414e+03 + -7.734496902000000e+03 + -7.746603467726753e+03 + -7.758724278933637e+03 + -7.770859347070250e+03 + -7.783008683730720e+03 + -7.795172299999991e+03 + -7.807350206747154e+03 + -7.819542415323729e+03 + -7.831748936928582e+03 + -7.843969782379609e+03 + -7.856204962999991e+03 + -7.868454490389281e+03 + -7.880718375856472e+03 + -7.892996630459527e+03 + -7.905289265033489e+03 + -7.917596291000000e+03 + -7.929917719977670e+03 + -7.942253562811284e+03 + -7.954603830544003e+03 + -7.966968534806996e+03 + -7.979347687000000e+03 + -7.991741298275563e+03 + -8.004149379532312e+03 + -8.016571941875890e+03 + -8.029008996834256e+03 + -8.041460555999991e+03 + -8.053926630829063e+03 + -8.066407232164392e+03 + -8.078902371093302e+03 + -8.091412059283156e+03 + -8.103936307999991e+03 + -8.116475128348727e+03 + -8.129028531951320e+03 + -8.141596530160446e+03 + -8.154179133753471e+03 + -8.166776354000000e+03 + -8.179388202500601e+03 + -8.192014690774517e+03 + -8.204655830155478e+03 + -8.217311631752342e+03 + -8.229982107000000e+03 + -8.242667267443709e+03 + -8.255367124181290e+03 + -8.268081688506129e+03 + -8.280810972124258e+03 + -8.293554985999990e+03 + -8.306313740930424e+03 + -8.319087249046417e+03 + -8.331875522237864e+03 + -8.344678571514016e+03 + -8.357496408000001e+03 + -8.370329042981793e+03 + -8.383176487893126e+03 + -8.396038754236946e+03 + -8.408915853538949e+03 + -8.421807796999999e+03 + -8.434714595760075e+03 + -8.447636261558551e+03 + -8.460572806112319e+03 + -8.473524240852536e+03 + -8.486490577000000e+03 + -8.499471825734363e+03 + -8.512467998550057e+03 + -8.525479106914012e+03 + -8.538505162160651e+03 + -8.551546175999989e+03 + -8.564602160205039e+03 + -8.577673125806519e+03 + -8.590759084111069e+03 + -8.603860047081474e+03 + -8.616976026000000e+03 + -8.630107031891077e+03 + -8.643253076647045e+03 + -8.656414171854482e+03 + -8.669590328370747e+03 + -8.682781558000001e+03 + -8.695987872906602e+03 + -8.709209284090668e+03 + -8.722445802791402e+03 + -8.735697441007769e+03 + -8.748964210000000e+03 + -8.762246120773598e+03 + -8.775543185390141e+03 + -8.788855415760128e+03 + -8.802182823160678e+03 + -8.815525418999991e+03 + -8.828883214778334e+03 + -8.842256221886048e+03 + -8.855644451817980e+03 + -8.869047916276779e+03 + -8.882466627000000e+03 + -8.895900595656447e+03 + -8.909349833599377e+03 + -8.922814352320849e+03 + -8.936294163622882e+03 + -8.949789279000001e+03 + -8.963299709806102e+03 + -8.976825467697834e+03 + -8.990366564425331e+03 + -9.003923011733321e+03 + -9.017494820999989e+03 + -9.031082003570244e+03 + -9.044684571593196e+03 + -9.058302536801553e+03 + -9.071935910043938e+03 + -9.085584702999991e+03 + -9.099248927805194e+03 + -9.112928596071970e+03 + -9.126623719398038e+03 + -9.140334309541779e+03 + -9.154060378000000e+03 + -9.167801936143134e+03 + -9.181558995552323e+03 + -9.195331568052554e+03 + -9.209119665711642e+03 + -9.222923300000000e+03 + -9.236742482191501e+03 + -9.250577224366738e+03 + -9.264427538348678e+03 + -9.278293435300837e+03 + -9.292174926999989e+03 + -9.306072025514850e+03 + -9.319984742353185e+03 + -9.333913089239737e+03 + -9.347857078372264e+03 + -9.361816720999988e+03 + -9.375792028076301e+03 + -9.389783011923670e+03 + -9.403789684689073e+03 + -9.417812057757259e+03 + -9.431850143000000e+03 + -9.445903952452922e+03 + -9.459973497383473e+03 + -9.474058789280491e+03 + -9.488159840242311e+03 + -9.502276662000000e+03 + -9.516409266099370e+03 + -9.530557664431180e+03 + -9.544721868948835e+03 + -9.558901891554557e+03 + -9.573097743999990e+03 + -9.587309437907974e+03 + -9.601536984771086e+03 + -9.615780396443668e+03 + -9.630039685320193e+03 + -9.644314862999989e+03 + -9.658605940694017e+03 + -9.672912930240365e+03 + -9.687235843732506e+03 + -9.701574693379191e+03 + -9.715929491000001e+03 + -9.730300248146514e+03 + -9.744686976337332e+03 + -9.759089687418043e+03 + -9.773508393705906e+03 + -9.787943106999999e+03 + -9.802393838806964e+03 + -9.816860600913731e+03 + -9.831343405392694e+03 + -9.845842264577648e+03 + -9.860357189999990e+03 + -9.874888192875391e+03 + -9.889435285292540e+03 + -9.903998479577405e+03 + -9.918577788007758e+03 + -9.933173221999989e+03 + -9.947784792760667e+03 + -9.962412512866247e+03 + -9.977056394630243e+03 + -9.991716449514770e+03 + -1.000639269000000e+04 + -1.002108512827329e+04 + -1.003579377260607e+04 + -1.005051863510592e+04 + -1.006525973450424e+04 + -1.008001708000000e+04 + -1.009479067738785e+04 + -1.010958054488143e+04 + -1.012438669671707e+04 + -1.013920913701616e+04 + -1.015404787999999e+04 + -1.016890294387830e+04 + -1.018377433451942e+04 + -1.019866206104612e+04 + -1.021356614193473e+04 + -1.022848658999999e+04 + -1.024342341422066e+04 + -1.025837662498870e+04 + -1.027334623400460e+04 + -1.028833225445739e+04 + -1.030333470000000e+04 + -1.031835358368700e+04 + -1.033338891534757e+04 + -1.034844070623467e+04 + -1.036350897076085e+04 + -1.037859372000000e+04 + -1.039369496373519e+04 + -1.040881271589677e+04 + -1.042394698923176e+04 + -1.043909779325773e+04 + -1.045426513999999e+04 + -1.046944904320307e+04 + -1.048464951626011e+04 + -1.049986657147346e+04 + -1.051510021951631e+04 + -1.053035046999999e+04 + -1.054561733346490e+04 + -1.056090082649770e+04 + -1.057620096382862e+04 + -1.059151775501402e+04 + -1.060685121000000e+04 + -1.062220133982168e+04 + -1.063756815769902e+04 + -1.065295167679853e+04 + -1.066835190951487e+04 + -1.068376887000000e+04 + -1.069920257172756e+04 + -1.071465302083269e+04 + -1.073012022736731e+04 + -1.074560420973240e+04 + -1.076110497999999e+04 + -1.077662254698522e+04 + -1.079215692468130e+04 + -1.080770812602064e+04 + -1.082327616047952e+04 + -1.083886103999999e+04 + -1.085446277832030e+04 + -1.087008138917964e+04 + -1.088571688451933e+04 + -1.090136927381244e+04 + -1.091703857000000e+04 + -1.093272478707855e+04 + -1.094842793381667e+04 + -1.096414802233435e+04 + -1.097988507119364e+04 + -1.099563909000000e+04 + -1.101141008471468e+04 + -1.102719807131307e+04 + -1.104300306633410e+04 + -1.105882508291791e+04 + -1.107466412999999e+04 + -1.109052021511841e+04 + -1.110639335038349e+04 + -1.112228355101184e+04 + -1.113819083451417e+04 + -1.115411520999999e+04 + -1.117005668368749e+04 + -1.118601527242516e+04 + -1.120199099177015e+04 + -1.121798385114509e+04 + -1.123399386000000e+04 + -1.125002102929127e+04 + -1.126606537454743e+04 + -1.128212691149971e+04 + -1.129820565394142e+04 + -1.131430161000000e+04 + -1.133041478676655e+04 + -1.134654520134832e+04 + -1.136269286880464e+04 + -1.137885779750048e+04 + -1.139503999999999e+04 + -1.141123949060806e+04 + -1.142745627830015e+04 + -1.144369037489935e+04 + -1.145994179819328e+04 + -1.147621056000000e+04 + -1.149249666929363e+04 + -1.150880014040390e+04 + -1.152512098586926e+04 + -1.154145921396878e+04 + -1.155781484000000e+04 + -1.157418788116290e+04 + -1.159057834325663e+04 + -1.160698623573862e+04 + -1.162341157750990e+04 + -1.163985437999999e+04 + -1.165631465167572e+04 + -1.167279241049137e+04 + -1.168928767028212e+04 + -1.170580043559586e+04 + -1.172233071999999e+04 + -1.173887854137991e+04 + -1.175544390951204e+04 + -1.177202683447122e+04 + -1.178862732998528e+04 + -1.180524541000000e+04 + -1.182188108744826e+04 + -1.183853437152247e+04 + -1.185520527417456e+04 + -1.187189381268968e+04 + -1.188860000000000e+04 + -1.190532384555031e+04 + -1.192206535739879e+04 + -1.193882454957090e+04 + -1.195560144455150e+04 + -1.197239604999999e+04 + -1.198920836801576e+04 + -1.200603841862060e+04 + -1.202288622005816e+04 + -1.203975178087160e+04 + -1.205663510999999e+04 + -1.207353621858988e+04 + -1.209045512337030e+04 + -1.210739183876488e+04 + -1.212434637372514e+04 + -1.214131874000000e+04 + -1.215830895146994e+04 + -1.217531702204386e+04 + -1.219234296344827e+04 + -1.220938678454126e+04 + -1.222644850000000e+04 + -1.224352812665298e+04 + -1.226062567426862e+04 + -1.227774115320455e+04 + -1.229487457740941e+04 + -1.231202595999999e+04 + -1.232919531361497e+04 + -1.234638265190763e+04 + -1.236358798719477e+04 + -1.238081132944854e+04 + -1.239805268999999e+04 + -1.241531208224867e+04 + -1.243258952373459e+04 + -1.244988502746729e+04 + -1.246719859854622e+04 + -1.248453025000000e+04 + -1.250187999937352e+04 + -1.251924785997314e+04 + -1.253663384322633e+04 + -1.255403795942784e+04 + -1.257146022000000e+04 + -1.258890063824787e+04 + -1.260635923174130e+04 + -1.262383601348307e+04 + -1.264133098848631e+04 + -1.265884416999999e+04 + -1.267637557565735e+04 + -1.269392521755929e+04 + -1.271149310837373e+04 + -1.272907926320349e+04 + -1.274668368999999e+04 + -1.276430639533002e+04 + -1.278194739917555e+04 + -1.279960671868295e+04 + -1.281728436173200e+04 + -1.283498034000000e+04 + -1.285269466774105e+04 + -1.287042735763161e+04 + -1.288817842259290e+04 + -1.290594787633268e+04 + -1.292373573000000e+04 + -1.294154199365508e+04 + -1.295936667981993e+04 + -1.297720980264566e+04 + -1.299507137776778e+04 + -1.301295141999999e+04 + -1.303084994203483e+04 + -1.304876695061188e+04 + -1.306670245535235e+04 + -1.308465647270176e+04 + -1.310262901999999e+04 + -1.312062011245361e+04 + -1.313862975604251e+04 + -1.315665796055223e+04 + -1.317470474462057e+04 + -1.319277012000000e+04 + -1.321085409533674e+04 + -1.322895668661698e+04 + -1.324707790969205e+04 + -1.326521777718879e+04 + -1.328337630000000e+04 + -1.330155348851537e+04 + -1.331974935491385e+04 + -1.333796391362056e+04 + -1.335619718140170e+04 + -1.337444916999999e+04 + -1.339271988874384e+04 + -1.341100935082290e+04 + -1.342931756987852e+04 + -1.344764455872234e+04 + -1.346599032999999e+04 + -1.348435489664480e+04 + -1.350273827293541e+04 + -1.352114047045672e+04 + -1.353956149695641e+04 + -1.355800137000000e+04 + -1.357646010972569e+04 + -1.359493772045508e+04 + -1.361343421245217e+04 + -1.363194960986463e+04 + -1.365048392000000e+04 + -1.366903714425879e+04 + -1.368760930691950e+04 + -1.370620042690972e+04 + -1.372481050688227e+04 + -1.374343955999999e+04 + -1.376208760473736e+04 + -1.378075465005087e+04 + -1.379944070672178e+04 + -1.381814579185646e+04 + -1.383686991999999e+04 + -1.385561310323773e+04 + -1.387437535187516e+04 + -1.389315667691767e+04 + -1.391195709130158e+04 + -1.393077661000000e+04 + -1.394961524865979e+04 + -1.396847302075987e+04 + -1.398734993803961e+04 + -1.400624601054151e+04 + -1.402516125000000e+04 + -1.404409566989268e+04 + -1.406304928589068e+04 + -1.408202211294199e+04 + -1.410101416389908e+04 + -1.412002544999999e+04 + -1.413905598164077e+04 + -1.415810576964489e+04 + -1.417717482985645e+04 + -1.419626318438561e+04 + -1.421537083999999e+04 + -1.423449779870650e+04 + -1.425364408441530e+04 + -1.427280971628262e+04 + -1.429199469812906e+04 + -1.431119904000000e+04 + -1.433042275698022e+04 + -1.434966586475864e+04 + -1.436892837784737e+04 + -1.438821030874347e+04 + -1.440751167000000e+04 + -1.442683247464153e+04 + -1.444617273693482e+04 + -1.446553246845352e+04 + -1.448491167696990e+04 + -1.450431037999999e+04 + -1.452372859766022e+04 + -1.454316633455064e+04 + -1.456262360064903e+04 + -1.458210041914065e+04 + -1.460159679999998e+04 + -1.462111274782618e+04 + -1.464064828275210e+04 + -1.466020342227678e+04 + -1.467977817411577e+04 + -1.469937255000000e+04 + -1.471898656425745e+04 + -1.473862022905967e+04 + -1.475827355783788e+04 + -1.477794656667906e+04 + -1.479763927000000e+04 + -1.481735168022591e+04 + -1.483708380678435e+04 + -1.485683566151257e+04 + -1.487660726097236e+04 + -1.489639861999999e+04 + -1.491620975095499e+04 + -1.493604066191429e+04 + -1.495589136614776e+04 + -1.497576188555746e+04 + -1.499565223000000e+04 + -1.501556240451360e+04 + -1.503549242791256e+04 + -1.505544231896391e+04 + -1.507541209051985e+04 + -1.509540175000000e+04 + -1.511541130465759e+04 + -1.513544077375174e+04 + -1.515549017500820e+04 + -1.517555951933053e+04 + -1.519564881999999e+04 + -1.521575809081157e+04 + -1.523588734003694e+04 + -1.525603658036919e+04 + -1.527620583277191e+04 + -1.529639510999998e+04 + -1.531660442034102e+04 + -1.533683377728779e+04 + -1.535708319443415e+04 + -1.537735268372974e+04 + -1.539764226000000e+04 + -1.541795193921473e+04 + -1.543828173411788e+04 + -1.545863165713528e+04 + -1.547900172144165e+04 + -1.549939194000000e+04 + -1.551980232569260e+04 + -1.554023289178161e+04 + -1.556068365093051e+04 + -1.558115461506463e+04 + -1.560164579999999e+04 + -1.562215722197032e+04 + -1.564268888875843e+04 + -1.566324081295743e+04 + -1.568381301679686e+04 + -1.570440550999999e+04 + -1.572501829745089e+04 + -1.574565139909988e+04 + -1.576630483256334e+04 + -1.578697860613842e+04 + -1.580767273000000e+04 + -1.582838721786272e+04 + -1.584912209052793e+04 + -1.586987736246908e+04 + -1.589065303680525e+04 + -1.591144913000000e+04 + -1.593226566336701e+04 + -1.595310264072689e+04 + -1.597396007256353e+04 + -1.599483798518879e+04 + -1.601573638999999e+04 + -1.603665529105288e+04 + -1.605759470511345e+04 + -1.607855464838671e+04 + -1.609953513161670e+04 + -1.612053616999998e+04 + -1.614155778004294e+04 + -1.616259997081388e+04 + -1.618366275348782e+04 + -1.620474614514243e+04 + -1.622585016000000e+04 + -1.624697481007329e+04 + -1.626812010728422e+04 + -1.628928606592670e+04 + -1.631047270337715e+04 + -1.633168003000000e+04 + -1.635290805454565e+04 + -1.637415679800609e+04 + -1.639542627592296e+04 + -1.641671649164588e+04 + -1.643802745999998e+04 + -1.645935920179283e+04 + -1.648071172935930e+04 + -1.650208505431875e+04 + -1.652347919039644e+04 + -1.654489414999998e+04 + -1.656632994566724e+04 + -1.658778659427021e+04 + -1.660926410974226e+04 + -1.663076250029903e+04 + -1.665228178000000e+04 + -1.667382196574960e+04 + -1.669538306946903e+04 + -1.671696510420377e+04 + -1.673856808645374e+04 + -1.676019203000000e+04 + -1.678183694695306e+04 + -1.680350285053965e+04 + -1.682518975366077e+04 + -1.684689766850574e+04 + -1.686862660999998e+04 + -1.689037659405139e+04 + -1.691214763326874e+04 + -1.693393974023558e+04 + -1.695575292860696e+04 + -1.697758720999999e+04 + -1.699944259677470e+04 + -1.702131910964586e+04 + -1.704321676352935e+04 + -1.706513556209216e+04 + -1.708707552000000e+04 + -1.710903665790321e+04 + -1.713101898938551e+04 + -1.715302252479822e+04 + -1.717504727292061e+04 + -1.719709325000000e+04 + -1.721916047545785e+04 + -1.724124896174670e+04 + -1.726335872072246e+04 + -1.728548976595536e+04 + -1.730764210999998e+04 + -1.732981576548871e+04 + -1.735201074834581e+04 + -1.737422707347338e+04 + -1.739646475299950e+04 + -1.741872379999999e+04 + -1.744100422776899e+04 + -1.746330604747148e+04 + -1.748562927386205e+04 + -1.750797392735042e+04 + -1.753034002000000e+04 + -1.755272756012299e+04 + -1.757513656385630e+04 + -1.759756704698003e+04 + -1.762001902165879e+04 + -1.764249250000000e+04 + -1.766498749503509e+04 + -1.768750402279969e+04 + -1.771004209797560e+04 + -1.773260173223158e+04 + -1.775518293999998e+04 + -1.777778573725219e+04 + -1.780041013823985e+04 + -1.782305615380817e+04 + -1.784572379125812e+04 + -1.786841306999998e+04 + -1.789112401297027e+04 + -1.791385662520795e+04 + -1.793661091551944e+04 + -1.795938690506571e+04 + -1.798218461000000e+04 + -1.800500404157250e+04 + -1.802784520726593e+04 + -1.805070812126097e+04 + -1.807359280836476e+04 + -1.809649928000000e+04 + -1.811942754077938e+04 + -1.814237760512274e+04 + -1.816534949154946e+04 + -1.818834322012563e+04 + -1.821135879999998e+04 + -1.823439623670011e+04 + -1.825745554979138e+04 + -1.828053675712656e+04 + -1.830363986886144e+04 + -1.832676489999998e+04 + -1.834991186721417e+04 + -1.837308077964562e+04 + -1.839627164834952e+04 + -1.841948449011883e+04 + -1.844271932000000e+04 + -1.846597615248214e+04 + -1.848925500551537e+04 + -1.851255589141731e+04 + -1.853587881367952e+04 + -1.855922379000000e+04 + -1.858259084403384e+04 + -1.860597998459446e+04 + -1.862939122130964e+04 + -1.865282457086503e+04 + -1.867628004999998e+04 + -1.869975767367864e+04 + -1.872325745125265e+04 + -1.874677939400045e+04 + -1.877032351829797e+04 + -1.879388983999998e+04 + -1.881747837395618e+04 + -1.884108913346766e+04 + -1.886472213066709e+04 + -1.888837737699991e+04 + -1.891205489000000e+04 + -1.893575468867888e+04 + -1.895947678210836e+04 + -1.898322118083019e+04 + -1.900698790146692e+04 + -1.903077696000000e+04 + -1.905458837122149e+04 + -1.907842214817702e+04 + -1.910227830328199e+04 + -1.912615684887913e+04 + -1.915005779999998e+04 + -1.917398117252360e+04 + -1.919792697876641e+04 + -1.922189523162585e+04 + -1.924588594641727e+04 + -1.926989913999998e+04 + -1.929393482787026e+04 + -1.931799301676958e+04 + -1.934207372057390e+04 + -1.936617696590223e+04 + -1.939030276000000e+04 + -1.941445110358184e+04 + -1.943862202401437e+04 + -1.946281554213054e+04 + -1.948703165938676e+04 + -1.951127038999998e+04 + -1.953553175531375e+04 + -1.955981576784185e+04 + -1.958412243887696e+04 + -1.960845178142548e+04 + -1.963280380999998e+04 + -1.965717854010317e+04 + -1.968157598764983e+04 + -1.970599616682758e+04 + -1.973043908928781e+04 + -1.975490477000000e+04 + -1.977939322508017e+04 + -1.980390446612710e+04 + -1.982843850672890e+04 + -1.985299536464853e+04 + -1.987757505000000e+04 + -1.990217757132781e+04 + -1.992680295149982e+04 + -1.995145120910892e+04 + -1.997612235106852e+04 + -2.000081638999998e+04 + -2.002553334291399e+04 + -2.005027322692212e+04 + -2.007503605456619e+04 + -2.009982183242756e+04 + -2.012463057999998e+04 + -2.014946232050470e+04 + -2.017431705750974e+04 + -2.019919480128925e+04 + -2.022409557869796e+04 + -2.024901940000000e+04 + -2.027396626876084e+04 + -2.029893620825063e+04 + -2.032392923791251e+04 + -2.034894536415857e+04 + -2.037398460000000e+04 + -2.039904696273123e+04 + -2.042413246681671e+04 + -2.044924112749899e+04 + -2.047437296177629e+04 + -2.049952797999998e+04 + -2.052470619105544e+04 + -2.054990761544010e+04 + -2.057513226917888e+04 + -2.060038015795331e+04 + -2.062565129999998e+04 + -2.065094571854568e+04 + -2.067626342205840e+04 + -2.070160442063917e+04 + -2.072696873225083e+04 + -2.075235637000000e+04 + -2.077776734528838e+04 + -2.080320167696219e+04 + -2.082865938214449e+04 + -2.085414047244347e+04 + -2.087964496000000e+04 + -2.090517285805777e+04 + -2.093072418166662e+04 + -2.095629894648643e+04 + -2.098189716820891e+04 + -2.100751885999998e+04 + -2.103316403410750e+04 + -2.105883270565323e+04 + -2.108452489048020e+04 + -2.111024060421226e+04 + -2.113597985999998e+04 + -2.116174267011207e+04 + -2.118752904964539e+04 + -2.121333901446366e+04 + -2.123917258027344e+04 + -2.126502976000000e+04 + -2.129091056582378e+04 + -2.131681501406569e+04 + -2.134274311932949e+04 + -2.136869489244911e+04 + -2.139467035000000e+04 + -2.142066951097057e+04 + -2.144669238829770e+04 + -2.147273899344209e+04 + -2.149880933837191e+04 + -2.152490343999998e+04 + -2.155102131698669e+04 + -2.157716298229367e+04 + -2.160332844744082e+04 + -2.162951772437019e+04 + -2.165573082999998e+04 + -2.168196778300156e+04 + -2.170822859627157e+04 + -2.173451328139519e+04 + -2.176082185053812e+04 + -2.178715432000000e+04 + -2.181351070821111e+04 + -2.183989103150391e+04 + -2.186629530288904e+04 + -2.189272353140778e+04 + -2.191917573000000e+04 + -2.194565191497987e+04 + -2.197215210512397e+04 + -2.199867631637375e+04 + -2.202522455969623e+04 + -2.205179684999998e+04 + -2.207839320363563e+04 + -2.210501363148952e+04 + -2.213165814783550e+04 + -2.215832677350680e+04 + -2.218501951999998e+04 + -2.221173639532642e+04 + -2.223847741910094e+04 + -2.226524260850044e+04 + -2.229203197306979e+04 + -2.231884553000000e+04 + -2.234568329890952e+04 + -2.237254528774074e+04 + -2.239943150806158e+04 + -2.242634198094407e+04 + -2.245327672000000e+04 + -2.248023573585785e+04 + -2.250721904853940e+04 + -2.253422667413636e+04 + -2.256125861967753e+04 + -2.258831489999998e+04 + -2.261539553480252e+04 + -2.264250054093014e+04 + -2.266962993052693e+04 + -2.269678371062339e+04 + -2.272396189999998e+04 + -2.275116452153000e+04 + -2.277839158301363e+04 + -2.280564309534358e+04 + -2.283291907950545e+04 + -2.286021955000000e+04 + -2.288754451771620e+04 + -2.291489399812011e+04 + -2.294226800704672e+04 + -2.296966655917324e+04 + -2.299708967000000e+04 + -2.302453735490683e+04 + -2.305200962641978e+04 + -2.307950649734620e+04 + -2.310702798236498e+04 + -2.313457409999998e+04 + -2.316214486856879e+04 + -2.318974029613145e+04 + -2.321736039447026e+04 + -2.324500518448656e+04 + -2.327267467999998e+04 + -2.330036889175501e+04 + -2.332808783850466e+04 + -2.335583153764027e+04 + -2.338360000121357e+04 + -2.341139324000000e+04 + -2.343921126672951e+04 + -2.346705410394532e+04 + -2.349492176951476e+04 + -2.352281427072812e+04 + -2.355073162000000e+04 + -2.357867383414989e+04 + -2.360664093193761e+04 + -2.363463292919098e+04 + -2.366264983684289e+04 + -2.369069166999998e+04 + -2.371875844507638e+04 + -2.374685017193912e+04 + -2.377496686591387e+04 + -2.380310855200050e+04 + -2.383127523999998e+04 + -2.385946693403709e+04 + -2.388768365690810e+04 + -2.391592542840760e+04 + -2.394419225713039e+04 + -2.397248416000000e+04 + -2.400080115691363e+04 + -2.402914325571854e+04 + -2.405751046800998e+04 + -2.408590281513924e+04 + -2.411432031000000e+04 + -2.414276296293371e+04 + -2.417123079796694e+04 + -2.419972383203242e+04 + -2.422824206706797e+04 + -2.425678551999998e+04 + -2.428535421485334e+04 + -2.431394816200073e+04 + -2.434256737430352e+04 + -2.437121187300517e+04 + -2.439988166999998e+04 + -2.442857677325164e+04 + -2.445729720103540e+04 + -2.448604297194451e+04 + -2.451481410082247e+04 + -2.454361060000000e+04 + -2.457243248182022e+04 + -2.460127976431730e+04 + -2.463015246522100e+04 + -2.465905059942621e+04 + -2.468797417999998e+04 + -2.471692321945616e+04 + -2.474589773222362e+04 + -2.477489773480251e+04 + -2.480392324581322e+04 + -2.483297427999998e+04 + -2.486205084917968e+04 + -2.489115296405446e+04 + -2.492028064024748e+04 + -2.494943390068509e+04 + -2.497861275999998e+04 + -2.500781722863925e+04 + -2.503704732334474e+04 + -2.506630305872901e+04 + -2.509558444448151e+04 + -2.512489150000000e+04 + -2.515422424757818e+04 + -2.518358269497819e+04 + -2.521296685328307e+04 + -2.524237674371633e+04 + -2.527181237999998e+04 + -2.530127377273551e+04 + -2.533076094162915e+04 + -2.536027390311031e+04 + -2.538981266594794e+04 + -2.541937724999998e+04 + -2.544896767801531e+04 + -2.547858395406606e+04 + -2.550822608802068e+04 + -2.553789410507042e+04 + -2.556758802000000e+04 + -2.559730784246711e+04 + -2.562705359189478e+04 + -2.565682528525429e+04 + -2.568662293247029e+04 + -2.571644655000000e+04 + -2.574629615713407e+04 + -2.577617176604459e+04 + -2.580607338891535e+04 + -2.583600104095400e+04 + -2.586595473999998e+04 + -2.589593450400127e+04 + -2.592594034522632e+04 + -2.595597227610649e+04 + -2.598603031176017e+04 + -2.601611446999998e+04 + -2.604622476879967e+04 + -2.607636122042706e+04 + -2.610652383730750e+04 + -2.613671263455693e+04 + -2.616692763000000e+04 + -2.619716884161440e+04 + -2.622743628160562e+04 + -2.625772996246335e+04 + -2.628804989951923e+04 + -2.631839611000000e+04 + -2.634876861165059e+04 + -2.637916741999917e+04 + -2.640959254907723e+04 + -2.644004401148305e+04 + -2.647052181999998e+04 + -2.650102598983489e+04 + -2.653155654491748e+04 + -2.656211350103963e+04 + -2.659269685960091e+04 + -2.662330663999998e+04 + -2.665394286925502e+04 + -2.668460555517195e+04 + -2.671529470758218e+04 + -2.674601034670874e+04 + -2.677675249000000e+04 + -2.680752115154265e+04 + -2.683831634157976e+04 + -2.686913807564717e+04 + -2.689998637786448e+04 + -2.693086126000000e+04 + -2.696176272916689e+04 + -2.699269080763921e+04 + -2.702364551500381e+04 + -2.705462686113689e+04 + -2.708563485999998e+04 + -2.711666952809900e+04 + -2.714773087942122e+04 + -2.717881892991400e+04 + -2.720993369901594e+04 + -2.724107519999998e+04 + -2.727224344400496e+04 + -2.730343845029767e+04 + -2.733466023562860e+04 + -2.736590881019403e+04 + -2.739718419000000e+04 + -2.742848639412166e+04 + -2.745981543741902e+04 + -2.749117133427855e+04 + -2.752255410001475e+04 + -2.755396375000000e+04 + -2.758540029934807e+04 + -2.761686376223195e+04 + -2.764835415476579e+04 + -2.767987149599797e+04 + -2.771141579999997e+04 + -2.774298707825893e+04 + -2.777458534547961e+04 + -2.780621061813955e+04 + -2.783786291408934e+04 + -2.786954224999998e+04 + -2.790124864062599e+04 + -2.793298209650868e+04 + -2.796474263269793e+04 + -2.799653027215609e+04 + -2.802834503000000e+04 + -2.806018691678819e+04 + -2.809205594694776e+04 + -2.812395213748840e+04 + -2.815587550739401e+04 + -2.818782607000000e+04 + -2.821980383662756e+04 + -2.825180882556652e+04 + -2.828384105454396e+04 + -2.831590053775406e+04 + -2.834798728999998e+04 + -2.838010132665882e+04 + -2.841224266303304e+04 + -2.844441131398464e+04 + -2.847660729395342e+04 + -2.850883061999998e+04 + -2.854108131015271e+04 + -2.857335937943549e+04 + -2.860566484233479e+04 + -2.863799771378746e+04 + -2.867035801000000e+04 + -2.870274574643904e+04 + -2.873516093256026e+04 + -2.876760358436649e+04 + -2.880007372909855e+04 + -2.883257138000000e+04 + -2.886509654365616e+04 + -2.889764923870952e+04 + -2.893022948372628e+04 + -2.896283729252707e+04 + -2.899547267999998e+04 + -2.902813566168059e+04 + -2.906082625190441e+04 + -2.909354446650575e+04 + -2.912629032389195e+04 + -2.915906383999998e+04 + -2.919186502919167e+04 + -2.922469390650106e+04 + -2.925755048733507e+04 + -2.929043478725063e+04 + -2.932334682000000e+04 + -2.935628660019129e+04 + -2.938925415043921e+04 + -2.942224948806936e+04 + -2.945527261979538e+04 + -2.948832356000000e+04 + -2.952140232838030e+04 + -2.955450894361826e+04 + -2.958764342089699e+04 + -2.962080577090842e+04 + -2.965399600999997e+04 + -2.968721415715336e+04 + -2.972046022629084e+04 + -2.975373423280592e+04 + -2.978703619592538e+04 + -2.982036612999997e+04 + -2.985372404652352e+04 + -2.988710995909819e+04 + -2.992052388535540e+04 + -2.995396584761164e+04 + -2.998743586000000e+04 + -3.002093393306212e+04 + -3.005446008516229e+04 + -3.008801433415196e+04 + -3.012159669410924e+04 + -3.015520717999998e+04 + -3.018884580728562e+04 + -3.022251259030155e+04 + -3.025620754490144e+04 + -3.028993068950620e+04 + -3.032368203999997e+04 + -3.035746161072607e+04 + -3.039126941699663e+04 + -3.042510547393189e+04 + -3.045896979612689e+04 + -3.049286239999998e+04 + -3.052678330335746e+04 + -3.056073252467363e+04 + -3.059471007984014e+04 + -3.062871598061521e+04 + -3.066275024000000e+04 + -3.069681287356475e+04 + -3.073090390293319e+04 + -3.076502334621974e+04 + -3.079917121404217e+04 + -3.083334751999997e+04 + -3.086755228023463e+04 + -3.090178551167921e+04 + -3.093604723225209e+04 + -3.097033746063074e+04 + -3.100465620999998e+04 + -3.103900349175437e+04 + -3.107337932446759e+04 + -3.110778372555016e+04 + -3.114221670819769e+04 + -3.117667828999997e+04 + -3.121116848957679e+04 + -3.124568731744623e+04 + -3.128023478769976e+04 + -3.131481092268889e+04 + -3.134941574000000e+04 + -3.138404925321087e+04 + -3.141871147408727e+04 + -3.145340241670125e+04 + -3.148812209933996e+04 + -3.152287053999997e+04 + -3.155764775577736e+04 + -3.159245376185456e+04 + -3.162728857279384e+04 + -3.166215220315186e+04 + -3.169704466999997e+04 + -3.173196599132658e+04 + -3.176691618227545e+04 + -3.180189525721778e+04 + -3.183690323068162e+04 + -3.187194012000000e+04 + -3.190700594323912e+04 + -3.194210071422084e+04 + -3.197722444868163e+04 + -3.201237716636405e+04 + -3.204755888000000e+04 + -3.208276960047787e+04 + -3.211800935023939e+04 + -3.215327814773632e+04 + -3.218857600158763e+04 + -3.222390292999997e+04 + -3.225925895535199e+04 + -3.229464408973093e+04 + -3.233005834462857e+04 + -3.236550173499735e+04 + -3.240097427999997e+04 + -3.243647600017841e+04 + -3.247200691143220e+04 + -3.250756702669824e+04 + -3.254315635678932e+04 + -3.257877492000000e+04 + -3.261442273792899e+04 + -3.265009982555360e+04 + -3.268580619650297e+04 + -3.272154186523808e+04 + -3.275730685000000e+04 + -3.279310116911321e+04 + -3.282892483177912e+04 + -3.286477785354587e+04 + -3.290066026202923e+04 + -3.293657206999998e+04 + -3.297251328378459e+04 + -3.300848392497173e+04 + -3.304448401407080e+04 + -3.308051356412061e+04 + -3.311657258999998e+04 + -3.315266110752813e+04 + -3.318877912993135e+04 + -3.322492667413289e+04 + -3.326110376297835e+04 + -3.329731041000000e+04 + -3.333354662539115e+04 + -3.336981243131684e+04 + -3.340610784669931e+04 + -3.344243288124504e+04 + -3.347878755000000e+04 + -3.351517187197135e+04 + -3.355158586607149e+04 + -3.358802954742114e+04 + -3.362450292603845e+04 + -3.366100601999997e+04 + -3.369753885113907e+04 + -3.373410143432544e+04 + -3.377069378324004e+04 + -3.380731591267414e+04 + -3.384396783999997e+04 + -3.388064958319757e+04 + -3.391736115628571e+04 + -3.395410257481684e+04 + -3.399087385786547e+04 + -3.402767502000000e+04 + -3.406450607498593e+04 + -3.410136704569621e+04 + -3.413825794940452e+04 + -3.417517879208190e+04 + -3.421212959000000e+04 + -3.424911036577375e+04 + -3.428612113814977e+04 + -3.432316192150666e+04 + -3.436023272579379e+04 + -3.439733356999998e+04 + -3.443446447621852e+04 + -3.447162545467578e+04 + -3.450881651888796e+04 + -3.454603769159935e+04 + -3.458328898999997e+04 + -3.462057042742187e+04 + -3.465788201822977e+04 + -3.469522377879945e+04 + -3.473259572783916e+04 + -3.476999788000000e+04 + -3.480743024920274e+04 + -3.484489285737491e+04 + -3.488238572274076e+04 + -3.491990885516477e+04 + -3.495746227000000e+04 + -3.499504598627476e+04 + -3.503266002163332e+04 + -3.507030439252002e+04 + -3.510797911399110e+04 + -3.514568419999997e+04 + -3.518341966538968e+04 + -3.522118553105182e+04 + -3.525898181605689e+04 + -3.529680853433678e+04 + -3.533466569999997e+04 + -3.537255332834070e+04 + -3.541047143775194e+04 + -3.544842004484196e+04 + -3.548639916273562e+04 + -3.552440881000000e+04 + -3.556244900769237e+04 + -3.560051977192599e+04 + -3.563862111528000e+04 + -3.567675304773126e+04 + -3.571491559000000e+04 + -3.575310876677514e+04 + -3.579133259025522e+04 + -3.582958707123636e+04 + -3.586787222387752e+04 + -3.590618806999997e+04 + -3.594453463328037e+04 + -3.598291192576281e+04 + -3.602131995866808e+04 + -3.605975874687618e+04 + -3.609822830999997e+04 + -3.613672866872384e+04 + -3.617525983663845e+04 + -3.621382182906358e+04 + -3.625241466608051e+04 + -3.629103836000000e+04 + -3.632969292147818e+04 + -3.636837837559645e+04 + -3.640709474306420e+04 + -3.644584203277781e+04 + -3.648462026000000e+04 + -3.652342944409004e+04 + -3.656226960170399e+04 + -3.660114075023598e+04 + -3.664004290875195e+04 + -3.667897608999997e+04 + -3.671794030512006e+04 + -3.675693557547587e+04 + -3.679596192058374e+04 + -3.683501935339895e+04 + -3.687410788999997e+04 + -3.691322754870546e+04 + -3.695237834723054e+04 + -3.699156030212950e+04 + -3.703077342834224e+04 + -3.707001774000000e+04 + -3.710929325203417e+04 + -3.714859998429457e+04 + -3.718793795692067e+04 + -3.722730718808447e+04 + -3.726670768999997e+04 + -3.730613947399677e+04 + -3.734560256273038e+04 + -3.738509697431393e+04 + -3.742462271654350e+04 + -3.746417980999997e+04 + -3.750376828013417e+04 + -3.754338813660564e+04 + -3.758303939267375e+04 + -3.762272207245150e+04 + -3.766243618999997e+04 + -3.770218175518502e+04 + -3.774195878945678e+04 + -3.778176731257176e+04 + -3.782160733741773e+04 + -3.786147888000000e+04 + -3.790138195864309e+04 + -3.794131659132003e+04 + -3.798128279431332e+04 + -3.802128058166662e+04 + -3.806130996999997e+04 + -3.810137097737330e+04 + -3.814146362046005e+04 + -3.818158791697343e+04 + -3.822174388615621e+04 + -3.826193153999997e+04 + -3.830215088938532e+04 + -3.834240195971708e+04 + -3.838268477130731e+04 + -3.842299933188884e+04 + -3.846334565999997e+04 + -3.850372377842891e+04 + -3.854413369633216e+04 + -3.858457542816681e+04 + -3.862504900090371e+04 + -3.866555443000000e+04 + -3.870609172486966e+04 + -3.874666090332934e+04 + -3.878726198409722e+04 + -3.882789498399841e+04 + -3.886855991999997e+04 + -3.890925680946781e+04 + -3.894998567054054e+04 + -3.899074651957592e+04 + -3.903153937021765e+04 + -3.907236423999997e+04 + -3.911322114736439e+04 + -3.915411010384250e+04 + -3.919503112747372e+04 + -3.923598424716172e+04 + -3.927696946999997e+04 + -3.931798680038228e+04 + -3.935903628964794e+04 + -3.940011793259103e+04 + -3.944123164809230e+04 + -3.948237770000000e+04 + -3.952355620675491e+04 + -3.956476584662273e+04 + -3.960600801403134e+04 + -3.964728735507886e+04 + -3.968859104999997e+04 + 1.819886919039960e+01 + 1.816405130921966e+01 + 1.812918280091599e+01 + 1.809426424653407e+01 + 1.805929622711938e+01 + 1.802427932371738e+01 + 1.798921411737356e+01 + 1.795410118913339e+01 + 1.791894112004234e+01 + 1.788373449114589e+01 + 1.784848188348950e+01 + 1.781318387811866e+01 + 1.777784105607885e+01 + 1.774245399841551e+01 + 1.770702328617416e+01 + 1.767154950040025e+01 + 1.763603322213927e+01 + 1.760047503243666e+01 + 1.756487551233793e+01 + 1.752923524288855e+01 + 1.749355480513398e+01 + 1.745783478011969e+01 + 1.742207574889119e+01 + 1.738627829249391e+01 + 1.735044299197335e+01 + 1.731457042837498e+01 + 1.727866118274428e+01 + 1.724271583612671e+01 + 1.720673496956776e+01 + 1.717071916411290e+01 + 1.713466900080759e+01 + 1.709858506069732e+01 + 1.706246792482757e+01 + 1.702631817424381e+01 + 1.699013638999150e+01 + 1.695392315311613e+01 + 1.691767904466317e+01 + 1.688140464567809e+01 + 1.684510053720637e+01 + 1.680876730029348e+01 + 1.677240551598491e+01 + 1.673601576532611e+01 + 1.669959862936258e+01 + 1.666315468913977e+01 + 1.662668452570318e+01 + 1.659018872009826e+01 + 1.655366785337049e+01 + 1.651712250656536e+01 + 1.648055326072833e+01 + 1.644396069690488e+01 + 1.640734539614049e+01 + 1.637070793948063e+01 + 1.633404890797076e+01 + 1.629736888265638e+01 + 1.626066844458294e+01 + 1.622394817479593e+01 + 1.618720865434082e+01 + 1.615045046426309e+01 + 1.611367418560821e+01 + 1.607688039942165e+01 + 1.604006968674890e+01 + 1.600324262863542e+01 + 1.596639980612668e+01 + 1.592954180026817e+01 + 1.589266919210536e+01 + 1.585578256268371e+01 + 1.581888249304872e+01 + 1.578196956424585e+01 + 1.574504435732057e+01 + 1.570810745331836e+01 + 1.567115943328470e+01 + 1.563420087826506e+01 + 1.559723236930490e+01 + 1.556025448744972e+01 + 1.552326781374499e+01 + 1.548627292923617e+01 + 1.544927041496875e+01 + 1.541226085198818e+01 + 1.537524482133997e+01 + 1.533822290406956e+01 + 1.530119568122245e+01 + 1.526416373384410e+01 + 1.522712764298000e+01 + 1.519008798967561e+01 + 1.515304535497640e+01 + 1.511600031992786e+01 + 1.507895346557546e+01 + 1.504190537296467e+01 + 1.500485662314096e+01 + 1.496780779714983e+01 + 1.493075947603672e+01 + 1.489371224084713e+01 + 1.485666667262652e+01 + 1.481962335242037e+01 + 1.478258286127416e+01 + 1.474554578023335e+01 + 1.470851269034343e+01 + 1.467148417264987e+01 + 1.463446080819813e+01 + 1.459744317803371e+01 + 1.456043186320207e+01 + 1.452342744474869e+01 + 1.448643050371903e+01 + 1.444944162115858e+01 + 1.441246137811282e+01 + 1.437549035562720e+01 + 1.433852913474722e+01 + 1.430157829651834e+01 + 1.426463842198604e+01 + 1.422771009219579e+01 + 1.419079388819307e+01 + 1.415389039102334e+01 + 1.411700018173210e+01 + 1.408012384136481e+01 + 1.404326195096694e+01 + 1.400641509158398e+01 + 1.396958384426139e+01 + 1.393276879004464e+01 + 1.389597050997923e+01 + 1.385918958511061e+01 + 1.382242659648426e+01 + 1.378568212514566e+01 + 1.374895675214029e+01 + 1.371225105851361e+01 + 1.367556562531110e+01 + 1.363890103357824e+01 + 1.360225786436050e+01 + 1.356563669870335e+01 + 1.352903811765228e+01 + 1.349246270225274e+01 + 1.345591103355023e+01 + 1.341938369259021e+01 + 1.338288126041816e+01 + 1.334640431807955e+01 + 1.330995344661985e+01 + 1.327352922708455e+01 + 1.323713224051912e+01 + 1.320076306796902e+01 + 1.316442229047974e+01 + 1.312811048909675e+01 + 1.309182824486553e+01 + 1.305557613883154e+01 + 1.301935475204027e+01 + 1.298316466553718e+01 + 1.294700646036776e+01 + 1.291088071757748e+01 + 1.287478801821181e+01 + 1.283872894331622e+01 + 1.280270407393619e+01 + 1.276671399111720e+01 + 1.273075927590472e+01 + 1.269484050934423e+01 + 1.265895827248119e+01 + 1.262311314636109e+01 + 1.258730571202939e+01 + 1.255153655053158e+01 + 1.251580624291313e+01 + 1.248011537021950e+01 + 1.244446451349619e+01 + 1.240885425378865e+01 + 1.237328517214237e+01 + 1.233775784960283e+01 + 1.230227286721548e+01 + 1.226683080602582e+01 + 1.223143224707931e+01 + 1.219607777142142e+01 + 1.216076796009764e+01 + 1.212550339415344e+01 + 1.209028465463429e+01 + 1.205511232258567e+01 + 1.201998697905305e+01 + 1.198490920508190e+01 + 1.194987958171770e+01 + 1.191489869000593e+01 + 1.187996711099206e+01 + 1.184508542572157e+01 + 1.181025421523992e+01 + 1.177547406059259e+01 + 1.174074554282507e+01 + 1.170606924298281e+01 + 1.167144574211130e+01 + 1.163687562125602e+01 + 1.160235946146243e+01 + 1.156789784377601e+01 + 1.153349134924223e+01 + 1.149914055890657e+01 + 1.146484605381452e+01 + 1.143060841501152e+01 + 1.139642822354308e+01 + 1.136230606045464e+01 + 1.132824250679170e+01 + 1.129423814359974e+01 + 1.126029355192421e+01 + 1.122640931281059e+01 + 1.119258600730437e+01 + 1.115882421645102e+01 + 1.112512452129600e+01 + 1.109148750288479e+01 + 1.105791374226288e+01 + 1.102440382047573e+01 + 1.099095831856882e+01 + 1.095757781758762e+01 + 1.092426289857761e+01 + 1.089101414258426e+01 + 1.085783213065305e+01 + 1.082471744382945e+01 + 1.079167066315892e+01 + 1.075869236968697e+01 + 1.072578314445905e+01 + 1.069294356852064e+01 + 1.066017422291721e+01 + 1.062747568869424e+01 + 1.059484854689720e+01 + 1.056229337857157e+01 + 1.052981076476282e+01 + 1.049740128651643e+01 + 1.046506552487787e+01 + 1.043280406089261e+01 + 1.040061747560614e+01 + 1.036850635006392e+01 + 1.033647126531143e+01 + 1.030451280239414e+01 + 1.027263154235754e+01 + 1.024082806624708e+01 + 1.020910295510825e+01 + 1.017745678998653e+01 + 1.014589015192738e+01 + 1.011440362197629e+01 + 1.008299778117872e+01 + 1.005167321058014e+01 + 1.002043049122605e+01 + 9.989270204161905e+00 + 9.958192930433185e+00 + 9.927199251085362e+00 + 9.896289747163912e+00 + 9.865464999714312e+00 + 9.834725589782032e+00 + 9.804072098412551e+00 + 9.773505106651340e+00 + 9.743025195543877e+00 + 9.712632946135633e+00 + 9.682328939472086e+00 + 9.652113756598707e+00 + 9.621987978560973e+00 + 9.591952186404358e+00 + 9.562006961174337e+00 + 9.532152883916382e+00 + 9.502390535675973e+00 + 9.472720497498580e+00 + 9.443143350429677e+00 + 9.413659675514742e+00 + 9.384270053799249e+00 + 9.354975066328668e+00 + 9.325775294148480e+00 + 9.296671318304156e+00 + 9.267663719841170e+00 + 9.238753079804999e+00 + 9.209939979241115e+00 + 9.181224999194994e+00 + 9.152608720712111e+00 + 9.124091724837941e+00 + 9.095674592617954e+00 + 9.067357905097630e+00 + 9.039142243322441e+00 + 9.011028188337864e+00 + 8.983016292445305e+00 + 8.955106689123129e+00 + 8.927299195109086e+00 + 8.899593619314148e+00 + 8.871989770649284e+00 + 8.844487458025464e+00 + 8.817086490353660e+00 + 8.789786676544839e+00 + 8.762587825509975e+00 + 8.735489746160036e+00 + 8.708492247405990e+00 + 8.681595138158814e+00 + 8.654798227329470e+00 + 8.628101323828931e+00 + 8.601504236568170e+00 + 8.575006774458155e+00 + 8.548608746409855e+00 + 8.522309961334242e+00 + 8.496110228142285e+00 + 8.470009355744955e+00 + 8.444007153053219e+00 + 8.418103428978053e+00 + 8.392297992430423e+00 + 8.366590652321301e+00 + 8.340981217561657e+00 + 8.315469497062459e+00 + 8.290055299734679e+00 + 8.264738434489287e+00 + 8.239518710237252e+00 + 8.214395935889545e+00 + 8.189369920357137e+00 + 8.164440472550996e+00 + 8.139607401382095e+00 + 8.114870515761401e+00 + 8.090229624599887e+00 + 8.065684536808520e+00 + 8.041235061298275e+00 + 8.016881006980118e+00 + 7.992622182765018e+00 + 7.968458397563950e+00 + 7.944389460287880e+00 + 7.920415179847782e+00 + 7.896535365154623e+00 + 7.872749825119373e+00 + 7.849058368653004e+00 + 7.825460804666484e+00 + 7.801956942070785e+00 + 7.778546589776878e+00 + 7.755229556695729e+00 + 7.732005651738313e+00 + 7.708874683815599e+00 + 7.685836461838553e+00 + 7.662890794718152e+00 + 7.640037491365358e+00 + 7.617276360691148e+00 + 7.594607211606489e+00 + 7.572029853022352e+00 + 7.549544093849708e+00 + 7.527149742999527e+00 + 7.504846609382777e+00 + 7.482634501910429e+00 + 7.460513229493455e+00 + 7.438482601042820e+00 + 7.416542425469502e+00 + 7.394692511684465e+00 + 7.372932668598682e+00 + 7.351262705123121e+00 + 7.329682430168755e+00 + 7.308191652646553e+00 + 7.286790181467484e+00 + 7.265477825542517e+00 + 7.244254393782626e+00 + 7.223119695098779e+00 + 7.202073538401945e+00 + 7.181115732603097e+00 + 7.160246086613204e+00 + 7.139464409343233e+00 + 7.118770509704159e+00 + 7.098164196606950e+00 + 7.077645278962576e+00 + 7.057213565682006e+00 + 7.036868865676214e+00 + 7.016610987856166e+00 + 6.996439741132834e+00 + 6.976354934417186e+00 + 6.956356376620197e+00 + 6.936443876652832e+00 + 6.916617243426063e+00 + 6.896876285850862e+00 + 6.877220812838198e+00 + 6.857650633299039e+00 + 6.838165556144358e+00 + 6.818765390285123e+00 + 6.799449944632306e+00 + 6.780219028096876e+00 + 6.761072449589803e+00 + 6.742010018022058e+00 + 6.723031542304612e+00 + 6.704136831348434e+00 + 6.685325694064492e+00 + 6.666597939363759e+00 + 6.647953376157203e+00 + 6.629391813355797e+00 + 6.610913059870509e+00 + 6.592516924612310e+00 + 6.574203216492170e+00 + 6.555971744421058e+00 + 6.537822317309946e+00 + 6.519754744069803e+00 + 6.501768833611600e+00 + 6.483864394846306e+00 + 6.466041236684891e+00 + 6.448299168038327e+00 + 6.430637997817582e+00 + 6.413057534933630e+00 + 6.395557588297437e+00 + 6.378137966819973e+00 + 6.360798479412210e+00 + 6.343538934985117e+00 + 6.326359142449666e+00 + 6.309258910716826e+00 + 6.292238048697567e+00 + 6.275296365302859e+00 + 6.258433669443673e+00 + 6.241649770030978e+00 + 6.224944475975745e+00 + 6.208317596188945e+00 + 6.191768939581546e+00 + 6.175298315064517e+00 + 6.158905531548833e+00 + 6.142590397945462e+00 + 6.126352723165372e+00 + 6.110192316119535e+00 + 6.094108985718921e+00 + 6.078102540874499e+00 + 6.062172790497243e+00 + 6.046319543498117e+00 + 6.030542608788095e+00 + 6.014841795278149e+00 + 5.999216911879244e+00 + 5.983667767502356e+00 + 5.968194171058448e+00 + 5.952795931458497e+00 + 5.937472857613470e+00 + 5.922224758434336e+00 + 5.907051442832068e+00 + 5.891952719717633e+00 + 5.876928398002004e+00 + 5.861978286596150e+00 + 5.847102194411042e+00 + 5.832299930357648e+00 + 5.817571303346941e+00 + 5.802916122289888e+00 + 5.788334196097460e+00 + 5.773825333680629e+00 + 5.759389343950365e+00 + 5.745026035817635e+00 + 5.730735218193414e+00 + 5.716516699988668e+00 + 5.702370290114368e+00 + 5.688295797481486e+00 + 5.674293031000990e+00 + 5.660361799583851e+00 + 5.646501912141039e+00 + 5.632713177583526e+00 + 5.618995404822279e+00 + 5.605348402768269e+00 + 5.591771980332467e+00 + 5.578265946425844e+00 + 5.564830109959368e+00 + 5.551464279844009e+00 + 5.538168264990741e+00 + 5.524941874310529e+00 + 5.511784916714348e+00 + 5.498697201113163e+00 + 5.485678536417949e+00 + 5.472728731539672e+00 + 5.459847595389306e+00 + 5.447031950668924e+00 + 5.434258417587328e+00 + 5.421509378931341e+00 + 5.408790202589383e+00 + 5.396101725502927e+00 + 5.383442552149385e+00 + 5.370812984345576e+00 + 5.358213038980171e+00 + 5.345642546622406e+00 + 5.333101463094469e+00 + 5.320589727671893e+00 + 5.308107264570896e+00 + 5.295654006874094e+00 + 5.283229887334054e+00 + 5.270834837715376e+00 + 5.258468789944041e+00 + 5.246131676000384e+00 + 5.233823428164784e+00 + 5.221543979540164e+00 + 5.209293263422158e+00 + 5.197071212820756e+00 + 5.184877759775030e+00 + 5.172712837552656e+00 + 5.160576380473933e+00 + 5.148468322098453e+00 + 5.136388595958436e+00 + 5.124337135726472e+00 + 5.112313875048248e+00 + 5.100318748362747e+00 + 5.088351690727316e+00 + 5.076412636057685e+00 + 5.064501518839616e+00 + 5.052618274474592e+00 + 5.040762837425790e+00 + 5.028935142799786e+00 + 5.017135126690616e+00 + 5.005362723409764e+00 + 4.993617868159293e+00 + 4.981900498164465e+00 + 4.970210548621045e+00 + 4.958547954855285e+00 + 4.946912653797631e+00 + 4.935304581602165e+00 + 4.923723674430540e+00 + 4.912169869219803e+00 + 4.900643102722201e+00 + 4.889143311682699e+00 + 4.877670433140317e+00 + 4.866224404407401e+00 + 4.854805162838305e+00 + 4.843412645620055e+00 + 4.832046790470948e+00 + 4.820707535433044e+00 + 4.809394818449872e+00 + 4.798108577205163e+00 + 4.786848749644187e+00 + 4.775615274885523e+00 + 4.764408091170769e+00 + 4.753227136475494e+00 + 4.742072350593207e+00 + 4.730943672320340e+00 + 4.719841039761676e+00 + 4.708764392793848e+00 + 4.697713670947889e+00 + 4.686688813308958e+00 + 4.675689760077749e+00 + 4.664716450776882e+00 + 4.653768824355144e+00 + 4.642846821849820e+00 + 4.631950383864691e+00 + 4.621079449911801e+00 + 4.610233960271208e+00 + 4.599413855814052e+00 + 4.588619077726644e+00 + 4.577849566594633e+00 + 4.567105263324451e+00 + 4.556386109499332e+00 + 4.545692045920192e+00 + 4.535023013830533e+00 + 4.524378955558838e+00 + 4.513759812087895e+00 + 4.503165524982657e+00 + 4.492596037765430e+00 + 4.482051291649467e+00 + 4.471531227881555e+00 + 4.461035790191556e+00 + 4.450564920902143e+00 + 4.440118561957067e+00 + 4.429696656605228e+00 + 4.419299148008472e+00 + 4.408925979093191e+00 + 4.398577092681390e+00 + 4.388252432408600e+00 + 4.377951941955149e+00 + 4.367675563647617e+00 + 4.357423241911437e+00 + 4.347194921954801e+00 + 4.336990545878941e+00 + 4.326810057907454e+00 + 4.316653403787664e+00 + 4.306520526395858e+00 + 4.296411370095723e+00 + 4.286325880845187e+00 + 4.276264002847886e+00 + 4.266225680614548e+00 + 4.256210859410026e+00 + 4.246219484255977e+00 + 4.236251500111860e+00 + 4.226306852214246e+00 + 4.216385487075638e+00 + 4.206487350454588e+00 + 4.196612386873075e+00 + 4.186760542346591e+00 + 4.176931763412669e+00 + 4.167125996517556e+00 + 4.157343187931778e+00 + 4.147583283659849e+00 + 4.137846229598449e+00 + 4.128131973158434e+00 + 4.118440461620333e+00 + 4.108771640965568e+00 + 4.099125458381889e+00 + 4.089501861348100e+00 + 4.079900796648449e+00 + 4.070322211621146e+00 + 4.060766054068578e+00 + 4.051232271987449e+00 + 4.041720812903752e+00 + 4.032231624389123e+00 + 4.022764654839604e+00 + 4.013319852102482e+00 + 4.003897163974346e+00 + 3.994496539375360e+00 + 3.985117927005318e+00 + 3.975761275162846e+00 + 3.966426531955261e+00 + 3.957113646635731e+00 + 3.947822569087183e+00 + 3.938553247905866e+00 + 3.929305631685672e+00 + 3.920079669524097e+00 + 3.910875311427285e+00 + 3.901692507178291e+00 + 3.892531206204140e+00 + 3.883391358396833e+00 + 3.874272913657344e+00 + 3.865175821793835e+00 + 3.856100032879644e+00 + 3.847045497225832e+00 + 3.838012165320722e+00 + 3.828999987558789e+00 + 3.820008914413926e+00 + 3.811038896595444e+00 + 3.802089885254187e+00 + 3.793161831237620e+00 + 3.784254684890362e+00 + 3.775368398252875e+00 + 3.766502923100440e+00 + 3.757658209579520e+00 + 3.748834209295840e+00 + 3.740030874433959e+00 + 3.731248156753105e+00 + 3.722486008117639e+00 + 3.713744380387517e+00 + 3.705023225280349e+00 + 3.696322495070079e+00 + 3.687642142318910e+00 + 3.678982119432947e+00 + 3.670342378801804e+00 + 3.661722872867589e+00 + 3.653123554235752e+00 + 3.644544376023881e+00 + 3.635985291634798e+00 + 3.627446254192749e+00 + 3.618927216218316e+00 + 3.610428130335504e+00 + 3.601948951051534e+00 + 3.593489632231203e+00 + 3.585050126838500e+00 + 3.576630388153148e+00 + 3.568230370457688e+00 + 3.559850028500160e+00 + 3.551489315016799e+00 + 3.543148183918080e+00 + 3.534826590807976e+00 + 3.526524489935861e+00 + 3.518241835011243e+00 + 3.509978579991082e+00 + 3.501734680809670e+00 + 3.493510092697708e+00 + 3.485304769188242e+00 + 3.477118665289576e+00 + 3.468951736765370e+00 + 3.460803939385451e+00 + 3.452675227557384e+00 + 3.444565556219660e+00 + 3.436474882078371e+00 + 3.428403160505571e+00 + 3.420350346590145e+00 + 3.412316396304707e+00 + 3.404301265792477e+00 + 3.396304911176187e+00 + 3.388327288491305e+00 + 3.380368354160161e+00 + 3.372428064623584e+00 + 3.364506375833607e+00 + 3.356603244211646e+00 + 3.348718626640740e+00 + 3.340852480236101e+00 + 3.333004761693424e+00 + 3.325175427644580e+00 + 3.317364435527293e+00 + 3.309571742493616e+00 + 3.301797305408617e+00 + 3.294041081414062e+00 + 3.286303028194412e+00 + 3.278583103726798e+00 + 3.270881265443555e+00 + 3.263197471011956e+00 + 3.255531678390248e+00 + 3.247883845209004e+00 + 3.240253929642225e+00 + 3.232641890347850e+00 + 3.225047684908113e+00 + 3.217471271425511e+00 + 3.209912608923088e+00 + 3.202371655667555e+00 + 3.194848370181972e+00 + 3.187342711658790e+00 + 3.179854638881827e+00 + 3.172384110380890e+00 + 3.164931084707051e+00 + 3.157495521384956e+00 + 3.150077380058776e+00 + 3.142676619877814e+00 + 3.135293200073600e+00 + 3.127927079946843e+00 + 3.120578218905895e+00 + 3.113246577218404e+00 + 3.105932114937815e+00 + 3.098634790846833e+00 + 3.091354565058342e+00 + 3.084091398271724e+00 + 3.076845250485478e+00 + 3.069616081755534e+00 + 3.062403852244847e+00 + 3.055208522175611e+00 + 3.048030052549899e+00 + 3.040868404439169e+00 + 3.033723537524932e+00 + 3.026595412527113e+00 + 3.019483991059011e+00 + 3.012389234177664e+00 + 3.005311102428361e+00 + 2.998249556405217e+00 + 2.991204558170310e+00 + 2.984176069441633e+00 + 2.977164051262350e+00 + 2.970168464749357e+00 + 2.963189271462946e+00 + 2.956226433370632e+00 + 2.949279912203107e+00 + 2.942349669912605e+00 + 2.935435668735732e+00 + 2.928537870478263e+00 + 2.921656236941307e+00 + 2.914790730227295e+00 + 2.907941313056430e+00 + 2.901107948114753e+00 + 2.894290597705669e+00 + 2.887489224186201e+00 + 2.880703790004707e+00 + 2.873934257778331e+00 + 2.867180590721052e+00 + 2.860442752157053e+00 + 2.853720705060128e+00 + 2.847014412004529e+00 + 2.840323835735203e+00 + 2.833648939802342e+00 + 2.826989688360529e+00 + 2.820346045051714e+00 + 2.813717971838249e+00 + 2.807105432809830e+00 + 2.800508392739872e+00 + 2.793926814285955e+00 + 2.787360661385112e+00 + 2.780809898806732e+00 + 2.774274490318202e+00 + 2.767754399418414e+00 + 2.761249589980850e+00 + 2.754760027276096e+00 + 2.748285675987487e+00 + 2.741826499952791e+00 + 2.735382462817888e+00 + 2.728953529693038e+00 + 2.722539666591989e+00 + 2.716140837199994e+00 + 2.709757005928732e+00 + 2.703388138477217e+00 + 2.697034199719776e+00 + 2.690695154612969e+00 + 2.684370968516638e+00 + 2.678061606722120e+00 + 2.671767034388748e+00 + 2.665487216663756e+00 + 2.659222119420964e+00 + 2.652971708466898e+00 + 2.646735949170681e+00 + 2.640514807328682e+00 + 2.634308248813400e+00 + 2.628116239351709e+00 + 2.621938745026414e+00 + 2.615775731978081e+00 + 2.609627166192403e+00 + 2.603493014125890e+00 + 2.597373242133807e+00 + 2.591267815972944e+00 + 2.585176702619338e+00 + 2.579099869106871e+00 + 2.573037281022092e+00 + 2.566988905295047e+00 + 2.560954709471109e+00 + 2.554934660124372e+00 + 2.548928723658388e+00 + 2.542936866838776e+00 + 2.536959057454498e+00 + 2.530995262744329e+00 + 2.525045449466102e+00 + 2.519109584724339e+00 + 2.513187636248425e+00 + 2.507279571988880e+00 + 2.501385358975255e+00 + 2.495504964649074e+00 + 2.489638357011514e+00 + 2.483785503877440e+00 + 2.477946372993181e+00 + 2.472120932153270e+00 + 2.466309149445497e+00 + 2.460510993028623e+00 + 2.454726431004756e+00 + 2.448955431279121e+00 + 2.443197962222979e+00 + 2.437453992749473e+00 + 2.431723490873920e+00 + 2.426006424702946e+00 + 2.420302763016215e+00 + 2.414612474849150e+00 + 2.408935529060812e+00 + 2.403271894158963e+00 + 2.397621539164549e+00 + 2.391984432987164e+00 + 2.386360544006294e+00 + 2.380749841635097e+00 + 2.375152295549876e+00 + 2.369567874852914e+00 + 2.363996548806182e+00 + 2.358438286639424e+00 + 2.352893057314327e+00 + 2.347360830870365e+00 + 2.341841577523073e+00 + 2.336335266205249e+00 + 2.330841866367291e+00 + 2.325361348038680e+00 + 2.319893681430557e+00 + 2.314438836350213e+00 + 2.308996782525400e+00 + 2.303567490482044e+00 + 2.298150930506590e+00 + 2.292747072570897e+00 + 2.287355886755380e+00 + 2.281977343203661e+00 + 2.276611412298537e+00 + 2.271258065216148e+00 + 2.265917272602903e+00 + 2.260589004572198e+00 + 2.255273232290290e+00 + 2.249969926489583e+00 + 2.244679057245269e+00 + 2.239400595715412e+00 + 2.234134513404378e+00 + 2.228880781619142e+00 + 2.223639370658599e+00 + 2.218410251587366e+00 + 2.213193396784469e+00 + 2.207988776668006e+00 + 2.202796362022329e+00 + 2.197616125439223e+00 + 2.192448038696543e+00 + 2.187292072961057e+00 + 2.182148199232985e+00 + 2.177016389630072e+00 + 2.171896616273634e+00 + 2.166788850281173e+00 + 2.161693063906081e+00 + 2.156609229682959e+00 + 2.151537319229026e+00 + 2.146477304323076e+00 + 2.141429157241363e+00 + 2.136392850965788e+00 + 2.131368357474257e+00 + 2.126355648357996e+00 + 2.121354696293322e+00 + 2.116365474412895e+00 + 2.111387955644702e+00 + 2.106422111701483e+00 + 2.101467915161587e+00 + 2.096525339256323e+00 + 2.091594356269759e+00 + 2.086674939419586e+00 + 2.081767062556874e+00 + 2.076870697792070e+00 + 2.071985817585338e+00 + 2.067112395385072e+00 + 2.062250405333861e+00 + 2.057399820685575e+00 + 2.052560613690088e+00 + 2.047732757766644e+00 + 2.042916226752948e+00 + 2.038110994473384e+00 + 2.033317034456518e+00 + 2.028534320143143e+00 + 2.023762825026766e+00 + 2.019002522786289e+00 + 2.014253387371010e+00 + 2.009515392980107e+00 + 2.004788513366984e+00 + 2.000072722331970e+00 + 1.995367994084281e+00 + 1.990674302528751e+00 + 1.985991621875054e+00 + 1.981319927135009e+00 + 1.976659192144684e+00 + 1.972009390577169e+00 + 1.967370497271926e+00 + 1.962742487042732e+00 + 1.958125334423246e+00 + 1.953519013586483e+00 + 1.948923499307053e+00 + 1.944338766657414e+00 + 1.939764790288013e+00 + 1.935201544608222e+00 + 1.930649004305472e+00 + 1.926107145248571e+00 + 1.921575942429786e+00 + 1.917055370205972e+00 + 1.912545403920843e+00 + 1.908046018818900e+00 + 1.903557190023903e+00 + 1.899078893306255e+00 + 1.894611103753838e+00 + 1.890153795996532e+00 + 1.885706946418488e+00 + 1.881270530851602e+00 + 1.876844524133795e+00 + 1.872428902057808e+00 + 1.868023640555410e+00 + 1.863628715350075e+00 + 1.859244102235784e+00 + 1.854869776995271e+00 + 1.850505715382929e+00 + 1.846151893336109e+00 + 1.841808287113597e+00 + 1.837474873250078e+00 + 1.833151627500553e+00 + 1.828838525627810e+00 + 1.824535544058799e+00 + 1.820242659570220e+00 + 1.815959848693184e+00 + 1.811687087278560e+00 + 1.807424351697017e+00 + 1.803171618832717e+00 + 1.798928865872756e+00 + 1.794696068965575e+00 + 1.790473204047284e+00 + 1.786260248130819e+00 + 1.782057178544553e+00 + 1.777863972462110e+00 + 1.773680606381003e+00 + 1.769507057021776e+00 + 1.765343301422396e+00 + 1.761189316819223e+00 + 1.757045080431908e+00 + 1.752910569457795e+00 + 1.748785761158555e+00 + 1.744670632638435e+00 + 1.740565161064786e+00 + 1.736469324420783e+00 + 1.732383100261040e+00 + 1.728306465595185e+00 + 1.724239397824929e+00 + 1.720181874717039e+00 + 1.716133874165168e+00 + 1.712095373335323e+00 + 1.708066350172305e+00 + 1.704046783495335e+00 + 1.700036650108550e+00 + 1.696035927584721e+00 + 1.692044595228792e+00 + 1.688062630443701e+00 + 1.684090010658294e+00 + 1.680126714513943e+00 + 1.676172720475745e+00 + 1.672228006742128e+00 + 1.668292551293985e+00 + 1.664366332353613e+00 + 1.660449328407859e+00 + 1.656541518177628e+00 + 1.652642880144113e+00 + 1.648753392536404e+00 + 1.644873033459887e+00 + 1.641001782122826e+00 + 1.637139617814172e+00 + 1.633286518510287e+00 + 1.629442462986198e+00 + 1.625607430332010e+00 + 1.621781398816242e+00 + 1.617964347766720e+00 + 1.614156256896447e+00 + 1.610357104501046e+00 + 1.606566869528149e+00 + 1.602785531410984e+00 + 1.599013068753329e+00 + 1.595249460964023e+00 + 1.591494688099418e+00 + 1.587748729316499e+00 + 1.584011563661260e+00 + 1.580283170366302e+00 + 1.576563528988570e+00 + 1.572852618951484e+00 + 1.569150419635379e+00 + 1.565456911345500e+00 + 1.561772073862832e+00 + 1.558095886092752e+00 + 1.554428327545355e+00 + 1.550769378486889e+00 + 1.547119019605569e+00 + 1.543477229774924e+00 + 1.539843988467248e+00 + 1.536219276909035e+00 + 1.532603074921508e+00 + 1.528995362108325e+00 + 1.525396118748853e+00 + 1.521805324624735e+00 + 1.518222960029189e+00 + 1.514649006474386e+00 + 1.511083443428444e+00 + 1.507526250258141e+00 + 1.503977408416516e+00 + 1.500436898413773e+00 + 1.496904700394939e+00 + 1.493380795245864e+00 + 1.489865163193006e+00 + 1.486357784560608e+00 + 1.482858641108495e+00 + 1.479367713055452e+00 + 1.475884980161266e+00 + 1.472410424507970e+00 + 1.468944026943859e+00 + 1.465485767394345e+00 + 1.462035627142284e+00 + 1.458593587684006e+00 + 1.455159630175685e+00 + 1.451733734815932e+00 + 1.448315882934573e+00 + 1.444906056735074e+00 + 1.441504236540235e+00 + 1.438110403156542e+00 + 1.434724538391589e+00 + 1.431346623689521e+00 + 1.427976640530080e+00 + 1.424614570482120e+00 + 1.421260394583763e+00 + 1.417914094214416e+00 + 1.414575651360096e+00 + 1.411245047472556e+00 + 1.407922264020345e+00 + 1.404607282835409e+00 + 1.401300085863839e+00 + 1.398000654669480e+00 + 1.394708970355802e+00 + 1.391425015768138e+00 + 1.388148773421020e+00 + 1.384880223867722e+00 + 1.381619349200565e+00 + 1.378366132070768e+00 + 1.375120554406545e+00 + 1.371882598139520e+00 + 1.368652245409923e+00 + 1.365429478679455e+00 + 1.362214280063096e+00 + 1.359006631544336e+00 + 1.355806515436745e+00 + 1.352613914349998e+00 + 1.349428810943258e+00 + 1.346251187518860e+00 + 1.343081026346772e+00 + 1.339918309785753e+00 + 1.336763020411036e+00 + 1.333615141050152e+00 + 1.330474654669161e+00 + 1.327341544046787e+00 + 1.324215791384803e+00 + 1.321097378844990e+00 + 1.317986290481943e+00 + 1.314882509034005e+00 + 1.311786015892630e+00 + 1.308696795174431e+00 + 1.305614830505543e+00 + 1.302540104058677e+00 + 1.299472598550161e+00 + 1.296412297281467e+00 + 1.293359183920592e+00 + 1.290313241355424e+00 + 1.287274452437336e+00 + 1.284242800425524e+00 + 1.281218268758570e+00 + 1.278200840971845e+00 + 1.275190500607243e+00 + 1.272187230813499e+00 + 1.269191014801793e+00 + 1.266201836184906e+00 + 1.263219678244913e+00 + 1.260244524601725e+00 + 1.257276359774731e+00 + 1.254315166659556e+00 + 1.251360928048363e+00 + 1.248413628680403e+00 + 1.245473252809453e+00 + 1.242539783866816e+00 + 1.239613204552696e+00 + 1.236693499248504e+00 + 1.233780652886690e+00 + 1.230874648458874e+00 + 1.227975469917747e+00 + 1.225083101914005e+00 + 1.222197528080320e+00 + 1.219318732110022e+00 + 1.216446698153004e+00 + 1.213581411119631e+00 + 1.210722855169846e+00 + 1.207871013783067e+00 + 1.205025871252235e+00 + 1.202187412198626e+00 + 1.199355621285526e+00 + 1.196530482820713e+00 + 1.193711981112556e+00 + 1.190900100540550e+00 + 1.188094825240966e+00 + 1.185296139829988e+00 + 1.182504029475636e+00 + 1.179718478336080e+00 + 1.176939470878376e+00 + 1.174166992368249e+00 + 1.171401026812090e+00 + 1.168641558834780e+00 + 1.165888574598542e+00 + 1.163142057955574e+00 + 1.160401992993886e+00 + 1.157668365957760e+00 + 1.154941161055026e+00 + 1.152220362585152e+00 + 1.149505957086653e+00 + 1.146797929075238e+00 + 1.144096262593592e+00 + 1.141400943461258e+00 + 1.138711957183691e+00 + 1.136029288721929e+00 + 1.133352922646698e+00 + 1.130682844729473e+00 + 1.128019040871752e+00 + 1.125361495026299e+00 + 1.122710192813904e+00 + 1.120065120718956e+00 + 1.117426263156838e+00 + 1.114793605478939e+00 + 1.112167133798269e+00 + 1.109546832911627e+00 + 1.106932688501257e+00 + 1.104324686965964e+00 + 1.101722813149718e+00 + 1.099127052563592e+00 + 1.096537391606932e+00 + 1.093953815681381e+00 + 1.091376310184498e+00 + 1.088804860939953e+00 + 1.086239454210304e+00 + 1.083680075729654e+00 + 1.081126710640132e+00 + 1.078579345517792e+00 + 1.076037966489376e+00 + 1.073502558540405e+00 + 1.070973108232868e+00 + 1.068449602380304e+00 + 1.065932027008114e+00 + 1.063420367175204e+00 + 1.060914608734753e+00 + 1.058414739347230e+00 + 1.055920744292059e+00 + 1.053432609053344e+00 + 1.050950321750202e+00 + 1.048473868029229e+00 + 1.046003233045439e+00 + 1.043538404185668e+00 + 1.041079368203120e+00 + 1.038626111099421e+00 + 1.036178618557632e+00 + 1.033736877638818e+00 + 1.031300875738098e+00 + 1.028870598541307e+00 + 1.026446032279889e+00 + 1.024027163804816e+00 + 1.021613979927458e+00 + 1.019206467749757e+00 + 1.016804614201984e+00 + 1.014408404816817e+00 + 1.012017826403038e+00 + 1.009632866898133e+00 + 1.007253512894913e+00 + 1.004879750675442e+00 + 1.002511566831996e+00 + 1.000148949144661e+00 + 9.977918847145494e-01 + 9.954403597206510e-01 + 9.930943614528360e-01 + 9.907538771638876e-01 + 9.884188936740620e-01 + 9.860893982148410e-01 + 9.837653780132122e-01 + 9.814468200970017e-01 + 9.791337116433633e-01 + 9.768260399168340e-01 + 9.745237922184445e-01 + 9.722269558574113e-01 + 9.699355181124353e-01 + 9.676494662336389e-01 + 9.653687876978898e-01 + 9.630934699744002e-01 + 9.608235003289306e-01 + 9.585588662885656e-01 + 9.562995554410040e-01 + 9.540455551859868e-01 + 9.517968530931009e-01 + 9.495534368089285e-01 + 9.473152938858177e-01 + 9.450824119343849e-01 + 9.428547786515334e-01 + 9.406323818265262e-01 + 9.384152091378831e-01 + 9.362032482272097e-01 + 9.339964869112888e-01 + 9.317949130473703e-01 + 9.295985145023118e-01 + 9.274072791539573e-01 + 9.252211948367504e-01 + 9.230402494034374e-01 + 9.208644309329761e-01 + 9.186937274260252e-01 + 9.165281267878318e-01 + 9.143676170947915e-01 + 9.122121864230248e-01 + 9.100618228160294e-01 + 9.079165144228375e-01 + 9.057762494101416e-01 + 9.036410159434681e-01 + 9.015108022852656e-01 + 8.993855966397851e-01 + 8.972653871281971e-01 + 8.951501621417270e-01 + 8.930399100640233e-01 + 8.909346191274636e-01 + 8.888342777366450e-01 + 8.867388743114113e-01 + 8.846483971822027e-01 + 8.825628348501290e-01 + 8.804821758633001e-01 + 8.784064086961259e-01 + 8.763355218399448e-01 + 8.742695038377348e-01 + 8.722083433110044e-01 + 8.701520288632569e-01 + 8.681005490981059e-01 + 8.660538926659707e-01 + 8.640120483003465e-01 + 8.619750047630993e-01 + 8.599427507590320e-01 + 8.579152750196485e-01 + 8.558925663402844e-01 + 8.538746136199826e-01 + 8.518614056598554e-01 + 8.498529312415619e-01 + 8.478491793952468e-01 + 8.458501390477595e-01 + 8.438557990450950e-01 + 8.418661484572341e-01 + 8.398811762963594e-01 + 8.379008715007146e-01 + 8.359252231704962e-01 + 8.339542204095658e-01 + 8.319878522912720e-01 + 8.300261079597043e-01 + 8.280689765769632e-01 + 8.261164473121154e-01 + 8.241685093974929e-01 + 8.222251520716921e-01 + 8.202863645582569e-01 + 8.183521361157176e-01 + 8.164224560764958e-01 + 8.144973138478017e-01 + 8.125766987264839e-01 + 8.106606000443977e-01 + 8.087490072689457e-01 + 8.068419098143643e-01 + 8.049392971238847e-01 + 8.030411587461223e-01 + 8.011474841608780e-01 + 7.992582628576694e-01 + 7.973734844327619e-01 + 7.954931384582111e-01 + 7.936172145055983e-01 + 7.917457022017643e-01 + 7.898785912282000e-01 + 7.880158712799969e-01 + 7.861575320154112e-01 + 7.843035631939634e-01 + 7.824539546080472e-01 + 7.806086959262468e-01 + 7.787677769423338e-01 + 7.769311875560446e-01 + 7.750989176225404e-01 + 7.732709569908990e-01 + 7.714472955211897e-01 + 7.696279231052234e-01 + 7.678128297211314e-01 + 7.660020053954494e-01 + 7.641954400346342e-01 + 7.623931236302374e-01 + 7.605950462809293e-01 + 7.588011979868697e-01 + 7.570115688113509e-01 + 7.552261489288551e-01 + 7.534449284973839e-01 + 7.516678976340316e-01 + 7.498950464317325e-01 + 7.481263651057625e-01 + 7.463618439154999e-01 + 7.446014731170009e-01 + 7.428452429690515e-01 + 7.410931437272748e-01 + 7.393451656574506e-01 + 7.376012991597445e-01 + 7.358615346418724e-01 + 7.341258624174279e-01 + 7.323942728636854e-01 + 7.306667564033948e-01 + 7.289433034811010e-01 + 7.272239046205010e-01 + 7.255085503342084e-01 + 7.237972310231134e-01 + 7.220899372662432e-01 + 7.203866596915919e-01 + 7.186873887451811e-01 + 7.169921150530395e-01 + 7.153008293485266e-01 + 7.136135222426403e-01 + 7.119301843519804e-01 + 7.102508063464710e-01 + 7.085753789925818e-01 + 7.069038930034782e-01 + 7.052363390742027e-01 + 7.035727080638011e-01 + 7.019129907750439e-01 + 7.002571779481277e-01 + 6.986052604437083e-01 + 6.969572291357313e-01 + 6.953130748988353e-01 + 6.936727887020229e-01 + 6.920363614522840e-01 + 6.904037839913317e-01 + 6.887750473773369e-01 + 6.871501426160253e-01 + 6.855290605871678e-01 + 6.839117924040222e-01 + 6.822983292013320e-01 + 6.806886620123715e-01 + 6.790827818618205e-01 + 6.774806798407976e-01 + 6.758823471448717e-01 + 6.742877749381793e-01 + 6.726969543916550e-01 + 6.711098767181217e-01 + 6.695265330883416e-01 + 6.679469147191758e-01 + 6.663710129607012e-01 + 6.647988190816884e-01 + 6.632303243195694e-01 + 6.616655199754741e-01 + 6.601043974442724e-01 + 6.585469481315596e-01 + 6.569931633409668e-01 + 6.554430344698831e-01 + 6.538965529680326e-01 + 6.523537102216029e-01 + 6.508144977390269e-01 + 6.492789070902356e-01 + 6.477469297088367e-01 + 6.462185570471877e-01 + 6.446937806333431e-01 + 6.431725921186934e-01 + 6.416549831028872e-01 + 6.401409451291091e-01 + 6.386304698205402e-01 + 6.371235488250266e-01 + 6.356201737964903e-01 + 6.341203364004929e-01 + 6.326240283504814e-01 + 6.311312414023209e-01 + 6.296419672600960e-01 + 6.281561976359686e-01 + 6.266739242956670e-01 + 6.251951391194286e-01 + 6.237198339322255e-01 + 6.222480004492102e-01 + 6.207796305731890e-01 + 6.193147162378443e-01 + 6.178532493027741e-01 + 6.163952216645050e-01 + 6.149406252489860e-01 + 6.134894519984210e-01 + 6.120416938491114e-01 + 6.105973427932988e-01 + 6.091563909278429e-01 + 6.077188302116784e-01 + 6.062846526061169e-01 + 6.048538502614210e-01 + 6.034264152733694e-01 + 6.020023397068369e-01 + 6.005816156757759e-01 + 5.991642353027361e-01 + 5.977501907311656e-01 + 5.963394741611191e-01 + 5.949320777981851e-01 + 5.935279938331314e-01 + 5.921272144271874e-01 + 5.907297318514260e-01 + 5.893355384452119e-01 + 5.879446264415406e-01 + 5.865569881004723e-01 + 5.851726157460215e-01 + 5.837915017610071e-01 + 5.824136384878618e-01 + 5.810390182425506e-01 + 5.796676334763571e-01 + 5.782994765837256e-01 + 5.769345398883866e-01 + 5.755728159164172e-01 + 5.742142971757567e-01 + 5.728589760824728e-01 + 5.715068451452269e-01 + 5.701578968814059e-01 + 5.688121237820786e-01 + 5.674695184134964e-01 + 5.661300733449661e-01 + 5.647937811172017e-01 + 5.634606343850478e-01 + 5.621306258016221e-01 + 5.608037479323033e-01 + 5.594799934047830e-01 + 5.581593548937616e-01 + 5.568418251014721e-01 + 5.555273967809645e-01 + 5.542160626584934e-01 + 5.529078153599613e-01 + 5.516026476869607e-01 + 5.503005524879265e-01 + 5.490015224489507e-01 + 5.477055503706971e-01 + 5.464126291394721e-01 + 5.451227516109934e-01 + 5.438359105997491e-01 + 5.425520989229732e-01 + 5.412713094911021e-01 + 5.399935352390902e-01 + 5.387187691034094e-01 + 5.374470040087604e-01 + 5.361782329113639e-01 + 5.349124487848638e-01 + 5.336496445514358e-01 + 5.323898132502169e-01 + 5.311329480044003e-01 + 5.298790417206248e-01 + 5.286280874266170e-01 + 5.273800783238198e-01 + 5.261350074387794e-01 + 5.248928678300107e-01 + 5.236536526638225e-01 + 5.224173550711992e-01 + 5.211839681868924e-01 + 5.199534851768893e-01 + 5.187258992380968e-01 + 5.175012035574781e-01 + 5.162793913049719e-01 + 5.150604557657682e-01 + 5.138443902158373e-01 + 5.126311878387027e-01 + 5.114208419243966e-01 + 5.102133457996210e-01 + 5.090086927559088e-01 + 5.078068761246483e-01 + 5.066078892445277e-01 + 5.054117254264059e-01 + 5.042183780707232e-01 + 5.030278406156905e-01 + 5.018401064512819e-01 + 5.006551689399448e-01 + 4.994730214827681e-01 + 4.982936576173500e-01 + 4.971170708196209e-01 + 4.959432545161117e-01 + 4.947722021784954e-01 + 4.936039073158257e-01 + 4.924383634713059e-01 + 4.912755642215030e-01 + 4.901155031029966e-01 + 4.889581736357913e-01 + 4.878035694426762e-01 + 4.866516841617155e-01 + 4.855025114095978e-01 + 4.843560447562852e-01 + 4.832122778219742e-01 + 4.820712043014287e-01 + 4.809328179063641e-01 + 4.797971123302187e-01 + 4.786640812406847e-01 + 4.775337183184862e-01 + 4.764060173050261e-01 + 4.752809720122764e-01 + 4.741585762111217e-01 + 4.730388236459319e-01 + 4.719217080626099e-01 + 4.708072233097221e-01 + 4.696953632391141e-01 + 4.685861216425942e-01 + 4.674794923970907e-01 + 4.663754693817960e-01 + 4.652740464091041e-01 + 4.641752174102053e-01 + 4.630789763262008e-01 + 4.619853169869301e-01 + 4.608942333544824e-01 + 4.598057194461572e-01 + 4.587197692038988e-01 + 4.576363766028796e-01 + 4.565555356433393e-01 + 4.554772403132010e-01 + 4.544014845983438e-01 + 4.533282625263808e-01 + 4.522575682421708e-01 + 4.511893957834002e-01 + 4.501237391381080e-01 + 4.490605924783677e-01 + 4.479999499003729e-01 + 4.469418054464263e-01 + 4.458861533467765e-01 + 4.448329877503518e-01 + 4.437823027182840e-01 + 4.427340924804984e-01 + 4.416883512661691e-01 + 4.406450732493647e-01 + 4.396042525949710e-01 + 4.385658835318161e-01 + 4.375299603591805e-01 + 4.364964773180230e-01 + 4.354654286529535e-01 + 4.344368086449737e-01 + 4.334106115882546e-01 + 4.323868317973252e-01 + 4.313654636098987e-01 + 4.303465013528135e-01 + 4.293299393608014e-01 + 4.283157719943348e-01 + 4.273039936389254e-01 + 4.262945986862648e-01 + 4.252875815207442e-01 + 4.242829365388910e-01 + 4.232806581737543e-01 + 4.222807409163533e-01 + 4.212831792180283e-01 + 4.202879675160039e-01 + 4.192951002821390e-01 + 4.183045720190468e-01 + 4.173163772308877e-01 + 4.163305103895081e-01 + 4.153469660738844e-01 + 4.143657388899517e-01 + 4.133868232899575e-01 + 4.124102138463511e-01 + 4.114359052122226e-01 + 4.104638919136763e-01 + 4.094941685453110e-01 + 4.085267297797091e-01 + 4.075615702608746e-01 + 4.065986846247451e-01 + 4.056380675149961e-01 + 4.046797136100241e-01 + 4.037236175791848e-01 + 4.027697740867438e-01 + 4.018181778668817e-01 + 4.008688236537185e-01 + 3.999217061664900e-01 + 3.989768201804763e-01 + 3.980341604347806e-01 + 3.970937216243767e-01 + 3.961554986257766e-01 + 3.952194862561716e-01 + 3.942856791749246e-01 + 3.933540722797152e-01 + 3.924246604937682e-01 + 3.914974386057962e-01 + 3.905724013991230e-01 + 3.896495437210211e-01 + 3.887288605266558e-01 + 3.878103467384126e-01 + 3.868939972364765e-01 + 3.859798068708922e-01 + 3.850677705778728e-01 + 3.841578833358520e-01 + 3.832501400994028e-01 + 3.823445358203205e-01 + 3.814410654593080e-01 + 3.805397240004402e-01 + 3.796405064500310e-01 + 3.787434078281850e-01 + 3.778484231550217e-01 + 3.769555474293507e-01 + 3.760647756653435e-01 + 3.751761029803938e-01 + 3.742895244689736e-01 + 3.734050351897463e-01 + 3.725226302131253e-01 + 3.716423046174657e-01 + 3.707640535037849e-01 + 3.698878720450124e-01 + 3.690137553825144e-01 + 3.681416986254492e-01 + 3.672716969834960e-01 + 3.664037456169829e-01 + 3.655378396196581e-01 + 3.646739742353085e-01 + 3.638121447254376e-01 + 3.629523462980791e-01 + 3.620945741078652e-01 + 3.612388233782960e-01 + 3.603850894480597e-01 + 3.595333675652969e-01 + 3.586836529581271e-01 + 3.578359408972814e-01 + 3.569902267099870e-01 + 3.561465057284826e-01 + 3.553047732480240e-01 + 3.544650245489661e-01 + 3.536272549462773e-01 + 3.527914598373741e-01 + 3.519576346281267e-01 + 3.511257746893044e-01 + 3.502958753213151e-01 + 3.494679319027064e-01 + 3.486419398734283e-01 + 3.478178946841421e-01 + 3.469957917542031e-01 + 3.461756264906874e-01 + 3.453573943334770e-01 + 3.445410907466465e-01 + 3.437267112053919e-01 + 3.429142511753236e-01 + 3.421037061357636e-01 + 3.412950715914754e-01 + 3.404883430871680e-01 + 3.396835161220511e-01 + 3.388805861778083e-01 + 3.380795488742585e-01 + 3.372803997559251e-01 + 3.364831342820857e-01 + 3.356877480644493e-01 + 3.348942367473924e-01 + 3.341025959445759e-01 + 3.333128211902062e-01 + 3.325249080644813e-01 + 3.317388522349806e-01 + 3.309546493345364e-01 + 3.301722950123494e-01 + 3.293917849546400e-01 + 3.286131147929292e-01 + 3.278362801760134e-01 + 3.270612768173198e-01 + 3.262881004205997e-01 + 3.255167466776044e-01 + 3.247472112772871e-01 + 3.239794899591130e-01 + 3.232135784952971e-01 + 3.224494726613195e-01 + 3.216871681318617e-01 + 3.209266606147330e-01 + 3.201679460077643e-01 + 3.194110200806869e-01 + 3.186558785671545e-01 + 3.179025173467112e-01 + 3.171509322207308e-01 + 3.164011189537259e-01 + 3.156530734030461e-01 + 3.149067914068442e-01 + 3.141622688005587e-01 + 3.134195014964591e-01 + 3.126784853846941e-01 + 3.119392163234083e-01 + 3.112016901727622e-01 + 3.104659028247113e-01 + 3.097318502149898e-01 + 3.089995283319454e-01 + 3.082689330721005e-01 + 3.075400602663161e-01 + 3.068129059444455e-01 + 3.060874661234649e-01 + 3.053637367362504e-01 + 3.046417137079979e-01 + 3.039213930418579e-01 + 3.032027708160949e-01 + 3.024858429572295e-01 + 3.017706054435225e-01 + 3.010570543910775e-01 + 3.003451858060657e-01 + 2.996349956970866e-01 + 2.989264801519126e-01 + 2.982196352437723e-01 + 2.975144570351090e-01 + 2.968109415899733e-01 + 2.961090850010212e-01 + 2.954088833712375e-01 + 2.947103327960572e-01 + 2.940134293733013e-01 + 2.933181692489545e-01 + 2.926245486550200e-01 + 2.919325636534309e-01 + 2.912422103009782e-01 + 2.905534849067459e-01 + 2.898663836341845e-01 + 2.891809025716850e-01 + 2.884970379499296e-01 + 2.878147859946116e-01 + 2.871341429080666e-01 + 2.864551048929091e-01 + 2.857776681836698e-01 + 2.851018290276999e-01 + 2.844275836247271e-01 + 2.837549281975342e-01 + 2.830838590248334e-01 + 2.824143724756855e-01 + 2.817464648036653e-01 + 2.810801321714598e-01 + 2.804153709678348e-01 + 2.797521775256636e-01 + 2.790905480675208e-01 + 2.784304789557904e-01 + 2.777719665515425e-01 + 2.771150071618110e-01 + 2.764595971293084e-01 + 2.758057328280932e-01 + 2.751534106502780e-01 + 2.745026269461392e-01 + 2.738533780697315e-01 + 2.732056604090851e-01 + 2.725594703611444e-01 + 2.719148043516682e-01 + 2.712716588414341e-01 + 2.706300302048149e-01 + 2.699899148252890e-01 + 2.693513091897057e-01 + 2.687142097803046e-01 + 2.680786130525787e-01 + 2.674445154290628e-01 + 2.668119133864937e-01 + 2.661808034370396e-01 + 2.655511820876730e-01 + 2.649230457933240e-01 + 2.642963910212357e-01 + 2.636712143601993e-01 + 2.630475123173707e-01 + 2.624252813696634e-01 + 2.618045181320832e-01 + 2.611852191534089e-01 + 2.605673809346502e-01 + 2.599510000768786e-01 + 2.593360731482656e-01 + 2.587225966857610e-01 + 2.581105673020023e-01 + 2.574999816218594e-01 + 2.568908362541323e-01 + 2.562831277681717e-01 + 2.556768527608984e-01 + 2.550720078808991e-01 + 2.544685898158210e-01 + 2.538665952029344e-01 + 2.532660206235198e-01 + 2.526668627769018e-01 + 2.520691183671673e-01 + 2.514727840477828e-01 + 2.508778564832650e-01 + 2.502843323450471e-01 + 2.496922083184503e-01 + 2.491014811741685e-01 + 2.485121476502302e-01 + 2.479242043768022e-01 + 2.473376480750936e-01 + 2.467524755330193e-01 + 2.461686835577825e-01 + 2.455862688342147e-01 + 2.450052280577099e-01 + 2.444255580815592e-01 + 2.438472556710649e-01 + 2.432703175621061e-01 + 2.426947405763887e-01 + 2.421205215374063e-01 + 2.415476572469543e-01 + 2.409761444715131e-01 + 2.404059800179439e-01 + 2.398371607406130e-01 + 2.392696835287547e-01 + 2.387035451998669e-01 + 2.381387425460481e-01 + 2.375752724876774e-01 + 2.370131319015487e-01 + 2.364523176042576e-01 + 2.358928264341899e-01 + 2.353346553264918e-01 + 2.347778012643444e-01 + 2.342222610470114e-01 + 2.336680315481888e-01 + 2.331151097630285e-01 + 2.325634926002070e-01 + 2.320131769932555e-01 + 2.314641599195968e-01 + 2.309164382391606e-01 + 2.303700088852327e-01 + 2.298248689205450e-01 + 2.292810152383314e-01 + 2.287384447851956e-01 + 2.281971546639490e-01 + 2.276571417710518e-01 + 2.271184030444375e-01 + 2.265809356255705e-01 + 2.260447364485637e-01 + 2.255098024678978e-01 + 2.249761308577043e-01 + 2.244437185775247e-01 + 2.239125625576918e-01 + 2.233826599324974e-01 + 2.228540078061592e-01 + 2.223266032159731e-01 + 2.218004431318401e-01 + 2.212755246546400e-01 + 2.207518449320089e-01 + 2.202294009962271e-01 + 2.197081899542086e-01 + 2.191882089472320e-01 + 2.186694550184439e-01 + 2.181519252528444e-01 + 2.176356167922184e-01 + 2.171205268020538e-01 + 2.166066524055817e-01 + 2.160939907132310e-01 + 2.155825389406823e-01 + 2.150722942170351e-01 + 2.145632535999474e-01 + 2.140554143128364e-01 + 2.135487735713488e-01 + 2.130433285376680e-01 + 2.125390763961598e-01 + 2.120360143225986e-01 + 2.115341394866721e-01 + 2.110334491301104e-01 + 2.105339404911263e-01 + 2.100356107692428e-01 + 2.095384571593845e-01 + 2.090424768875718e-01 + 2.085476672286868e-01 + 2.080540254649787e-01 + 2.075615488420417e-01 + 2.070702345483775e-01 + 2.065800798220710e-01 + 2.060910819584345e-01 + 2.056032383022174e-01 + 2.051165461242101e-01 + 2.046310026800104e-01 + 2.041466052775261e-01 + 2.036633511978056e-01 + 2.031812377402102e-01 + 2.027002622847228e-01 + 2.022204221329609e-01 + 2.017417145657832e-01 + 2.012641369577989e-01 + 2.007876866366623e-01 + 2.003123609141739e-01 + 1.998381571847571e-01 + 1.993650728223044e-01 + 1.988931051658790e-01 + 1.984222515391579e-01 + 1.979525093566432e-01 + 1.974838760798574e-01 + 1.970163490394448e-01 + 1.965499255924087e-01 + 1.960846031634822e-01 + 1.956203792216227e-01 + 1.951572511456189e-01 + 1.946952162469976e-01 + 1.942342720345011e-01 + 1.937744160087473e-01 + 1.933156455855021e-01 + 1.928579581617409e-01 + 1.924013511601302e-01 + 1.919458220512063e-01 + 1.914913683490730e-01 + 1.910379875218400e-01 + 1.905856769690048e-01 + 1.901344342343178e-01 + 1.896842568245793e-01 + 1.892351421122624e-01 + 1.887870876905098e-01 + 1.883400911382459e-01 + 1.878941498265747e-01 + 1.874492612709913e-01 + 1.870054230608876e-01 + 1.865626327533365e-01 + 1.861208878413260e-01 + 1.856801858136446e-01 + 1.852405242290795e-01 + 1.848019006561455e-01 + 1.843643126785636e-01 + 1.839277579090688e-01 + 1.834922338318696e-01 + 1.830577379260484e-01 + 1.826242679175190e-01 + 1.821918214082343e-01 + 1.817603959062191e-01 + 1.813299890419420e-01 + 1.809005984096844e-01 + 1.804722215715290e-01 + 1.800448561676805e-01 + 1.796184998471616e-01 + 1.791931502428031e-01 + 1.787688049585256e-01 + 1.783454616010165e-01 + 1.779231178061076e-01 + 1.775017712916434e-01 + 1.770814197185338e-01 + 1.766620606643876e-01 + 1.762436917707559e-01 + 1.758263107475443e-01 + 1.754099153420786e-01 + 1.749945031691721e-01 + 1.745800718793870e-01 + 1.741666192327871e-01 + 1.737541428912765e-01 + 1.733426405128906e-01 + 1.729321098263452e-01 + 1.725225486037993e-01 + 1.721139545737653e-01 + 1.717063253659770e-01 + 1.712996586978482e-01 + 1.708939523524782e-01 + 1.704892041326627e-01 + 1.700854117308264e-01 + 1.696825728315613e-01 + 1.692806852413719e-01 + 1.688797467224855e-01 + 1.684797550119726e-01 + 1.680807078836749e-01 + 1.676826031516292e-01 + 1.672854386236076e-01 + 1.668892120257625e-01 + 1.664939211364053e-01 + 1.660995637803862e-01 + 1.657061377653481e-01 + 1.653136408872399e-01 + 1.649220709518862e-01 + 1.645314258210089e-01 + 1.641417032838678e-01 + 1.637529010922642e-01 + 1.633650171697226e-01 + 1.629780493848234e-01 + 1.625919955117979e-01 + 1.622068533722165e-01 + 1.618226208359533e-01 + 1.614392958070308e-01 + 1.610568761629498e-01 + 1.606753597398519e-01 + 1.602947443525945e-01 + 1.599150279328092e-01 + 1.595362083976419e-01 + 1.591582835876941e-01 + 1.587812513806259e-01 + 1.584051096895935e-01 + 1.580298564486488e-01 + 1.576554895336735e-01 + 1.572820068494865e-01 + 1.569094063844064e-01 + 1.565376859935812e-01 + 1.561668435389086e-01 + 1.557968770322644e-01 + 1.554277844430587e-01 + 1.550595637013555e-01 + 1.546922127252644e-01 + 1.543257294352004e-01 + 1.539601117962810e-01 + 1.535953578647676e-01 + 1.532314655336160e-01 + 1.528684326732572e-01 + 1.525062574192351e-01 + 1.521449377506904e-01 + 1.517844715391133e-01 + 1.514248568043021e-01 + 1.510660915767141e-01 + 1.507081738546517e-01 + 1.503511015850067e-01 + 1.499948728018673e-01 + 1.496394855976185e-01 + 1.492849379312514e-01 + 1.489312277844460e-01 + 1.485783532079666e-01 + 1.482263122946834e-01 + 1.478751030581660e-01 + 1.475247234388987e-01 + 1.471751715323068e-01 + 1.468264454469171e-01 + 1.464785432366154e-01 + 1.461314629165984e-01 + 1.457852025452889e-01 + 1.454397602433564e-01 + 1.450951340257908e-01 + 1.447513219420110e-01 + 1.444083221508569e-01 + 1.440661327109938e-01 + 1.437247516822454e-01 + 1.433841772072484e-01 + 1.430444073901374e-01 + 1.427054403077353e-01 + 1.423672740371242e-01 + 1.420299067307786e-01 + 1.416933365389871e-01 + 1.413575615237460e-01 + 1.410225798197031e-01 + 1.406883895901710e-01 + 1.403549889435149e-01 + 1.400223760032770e-01 + 1.396905489310608e-01 + 1.393595059398338e-01 + 1.390292451224472e-01 + 1.386997645496112e-01 + 1.383710625136722e-01 + 1.380431371824567e-01 + 1.377159866326167e-01 + 1.373896091055998e-01 + 1.370640027752214e-01 + 1.367391657592925e-01 + 1.364150963290927e-01 + 1.360917926783734e-01 + 1.357692529162330e-01 + 1.354474752994454e-01 + 1.351264580487222e-01 + 1.348061993122180e-01 + 1.344866973181728e-01 + 1.341679503229942e-01 + 1.338499565682958e-01 + 1.335327142013654e-01 + 1.332162214320106e-01 + 1.329004765902875e-01 + 1.325854779258548e-01 + 1.322712236439755e-01 + 1.319577119415115e-01 + 1.316449410589970e-01 + 1.313329092858229e-01 + 1.310216149439378e-01 + 1.307110562100912e-01 + 1.304012313067827e-01 + 1.300921386594473e-01 + 1.297837764741680e-01 + 1.294761429396481e-01 + 1.291692364743583e-01 + 1.288630553353233e-01 + 1.285575977268189e-01 + 1.282528620001082e-01 + 1.279488464604472e-01 + 1.276455493846629e-01 + 1.273429690961771e-01 + 1.270411039265308e-01 + 1.267399521912149e-01 + 1.264395121606617e-01 + 1.261397821624623e-01 + 1.258407605612416e-01 + 1.255424456647032e-01 + 1.252448358003494e-01 + 1.249479293256652e-01 + 1.246517245985584e-01 + 1.243562199440227e-01 + 1.240614136699035e-01 + 1.237673041530004e-01 + 1.234738897833225e-01 + 1.231811689369122e-01 + 1.228891399541342e-01 + 1.225978011897444e-01 + 1.223071510285007e-01 + 1.220171878485729e-01 + 1.217279100221359e-01 + 1.214393159216827e-01 + 1.211514039479249e-01 + 1.208641725134118e-01 + 1.205776200272462e-01 + 1.202917448643591e-01 + 1.200065453999493e-01 + 1.197220200388544e-01 + 1.194381672203820e-01 + 1.191549853738593e-01 + 1.188724728867774e-01 + 1.185906281982059e-01 + 1.183094497403516e-01 + 1.180289358802264e-01 + 1.177490851172322e-01 + 1.174698959467804e-01 + 1.171913666738082e-01 + 1.169134957966049e-01 + 1.166362818664215e-01 + 1.163597231976005e-01 + 1.160838182295854e-01 + 1.158085654926154e-01 + 1.155339634301463e-01 + 1.152600105152270e-01 + 1.149867052503320e-01 + 1.147140461081585e-01 + 1.144420315115333e-01 + 1.141706598827868e-01 + 1.138999297876022e-01 + 1.136298397724347e-01 + 1.133603883121320e-01 + 1.130915738073908e-01 + 1.128233947404400e-01 + 1.125558496925181e-01 + 1.122889371862514e-01 + 1.120226557224089e-01 + 1.117570037925019e-01 + 1.114919798574519e-01 + 1.112275824488763e-01 + 1.109638101830490e-01 + 1.107006615250319e-01 + 1.104381349837027e-01 + 1.101762291935612e-01 + 1.099149425817940e-01 + 1.096542736337556e-01 + 1.093942210611990e-01 + 1.091347833750166e-01 + 1.088759590309823e-01 + 1.086177465849946e-01 + 1.083601446468375e-01 + 1.081031518187680e-01 + 1.078467666394599e-01 + 1.075909876365943e-01 + 1.073358133695979e-01 + 1.070812424691808e-01 + 1.068272734935852e-01 + 1.065739049762412e-01 + 1.063211355273724e-01 + 1.060689637753818e-01 + 1.058173883167701e-01 + 1.055664076522099e-01 + 1.053160204177178e-01 + 1.050662253083730e-01 + 1.048170208178578e-01 + 1.045684055544151e-01 + 1.043203782231123e-01 + 1.040729373745031e-01 + 1.038260815947437e-01 + 1.035798095388146e-01 + 1.033341198496129e-01 + 1.030890111353506e-01 + 1.028444819874746e-01 + 1.026005310752415e-01 + 1.023571570589419e-01 + 1.021143585605686e-01 + 1.018721342063349e-01 + 1.016304826397723e-01 + 1.013894025261397e-01 + 1.011488925387934e-01 + 1.009089513225976e-01 + 1.006695774897203e-01 + 1.004307697412456e-01 + 1.001925267601519e-01 + 9.995484714928184e-02 + 9.971772961029543e-02 + 9.948117285600222e-02 + 9.924517553207431e-02 + 9.900973631553432e-02 + 9.877485389836264e-02 + 9.854052696321766e-02 + 9.830675420513860e-02 + 9.807353432053509e-02 + 9.784086599274402e-02 + 9.760874792461041e-02 + 9.737717882679013e-02 + 9.714615739564664e-02 + 9.691568233864475e-02 + 9.668575237168565e-02 + 9.645636620785530e-02 + 9.622752256709627e-02 + 9.599922017186617e-02 + 9.577145773476621e-02 + 9.554423398421420e-02 + 9.531754766036228e-02 + 9.509139748951084e-02 + 9.486578220406576e-02 + 9.464070054491446e-02 + 9.441615125061270e-02 + 9.419213306609350e-02 + 9.396864474309072e-02 + 9.374568502973517e-02 + 9.352325267700241e-02 + 9.330134644110695e-02 + 9.307996508088016e-02 + 9.285910736057421e-02 + 9.263877204899980e-02 + 9.241895790580944e-02 + 9.219966369924239e-02 + 9.198088821288498e-02 + 9.176263021506216e-02 + 9.154488848131032e-02 + 9.132766180778470e-02 + 9.111094897456264e-02 + 9.089474876186458e-02 + 9.067905996494766e-02 + 9.046388137755315e-02 + 9.024921179550818e-02 + 9.003505002157913e-02 + 8.982139485394958e-02 + 8.960824509461397e-02 + 8.939559956013639e-02 + 8.918345705664489e-02 + 8.897181638949078e-02 + 8.876067638185769e-02 + 8.855003585659860e-02 + 8.833989363307079e-02 + 8.813024852794749e-02 + 8.792109937217552e-02 + 8.771244500411417e-02 + 8.750428424959714e-02 + 8.729661594151820e-02 + 8.708943892038122e-02 + 8.688275202450782e-02 + 8.667655409894154e-02 + 8.647084399500883e-02 + 8.626562056133152e-02 + 8.606088264727801e-02 + 8.585662910508592e-02 + 8.565285879275303e-02 + 8.544957056834111e-02 + 8.524676329099723e-02 + 8.504443583456130e-02 + 8.484258706983651e-02 + 8.464121585953427e-02 + 8.444032107793580e-02 + 8.423990160173883e-02 + 8.403995630660985e-02 + 8.384048408000297e-02 + 8.364148380739438e-02 + 8.344295436518863e-02 + 8.324489464319758e-02 + 8.304730353631981e-02 + 8.285017993778075e-02 + 8.265352274723796e-02 + 8.245733086610936e-02 + 8.226160319325253e-02 + 8.206633863307464e-02 + 8.187153609323948e-02 + 8.167719448173898e-02 + 8.148331271120264e-02 + 8.128988969775824e-02 + 8.109692435907066e-02 + 8.090441561287741e-02 + 8.071236238052074e-02 + 8.052076359329230e-02 + 8.032961817777003e-02 + 8.013892505875637e-02 + 7.994868317110082e-02 + 7.975889145271257e-02 + 7.956954884117817e-02 + 7.938065427030368e-02 + 7.919220668490153e-02 + 7.900420503735811e-02 + 7.881664826626886e-02 + 7.862953532075569e-02 + 7.844286516277023e-02 + 7.825663674598571e-02 + 7.807084902471831e-02 + 7.788550095723919e-02 + 7.770059150356423e-02 + 7.751611963202924e-02 + 7.733208431808952e-02 + 7.714848452080215e-02 + 7.696531920714285e-02 + 7.678258736267791e-02 + 7.660028796508990e-02 + 7.641841999039113e-02 + 7.623698241865759e-02 + 7.605597423593993e-02 + 7.587539442823407e-02 + 7.569524197859213e-02 + 7.551551588287067e-02 + 7.533621514035872e-02 + 7.515733874432233e-02 + 7.497888568830134e-02 + 7.480085497230264e-02 + 7.462324560850588e-02 + 7.444605660139321e-02 + 7.426928695221670e-02 + 7.409293566891996e-02 + 7.391700176673981e-02 + 7.374148426439617e-02 + 7.356638217848553e-02 + 7.339169452681224e-02 + 7.321742033027905e-02 + 7.304355861552074e-02 + 7.287010840815517e-02 + 7.269706873346385e-02 + 7.252443862192341e-02 + 7.235221710900047e-02 + 7.218040323296335e-02 + 7.200899602923243e-02 + 7.183799453782064e-02 + 7.166739780328910e-02 + 7.149720486628935e-02 + 7.132741477295296e-02 + 7.115802657678706e-02 + 7.098903933028558e-02 + 7.082045208266741e-02 + 7.065226388294948e-02 + 7.048447379884398e-02 + 7.031708089501212e-02 + 7.015008422428966e-02 + 6.998348285005500e-02 + 6.981727584178653e-02 + 6.965146227138255e-02 + 6.948604121024822e-02 + 6.932101172952453e-02 + 6.915637290177927e-02 + 6.899212381049466e-02 + 6.882826353831664e-02 + 6.866479115768206e-02 + 6.850170575553913e-02 + 6.833900642241270e-02 + 6.817669223943085e-02 + 6.801476230171261e-02 + 6.785321570853013e-02 + 6.769205154760372e-02 + 6.753126891476798e-02 + 6.737086691265436e-02 + 6.721084464422118e-02 + 6.705120121123045e-02 + 6.689193571639933e-02 + 6.673304726820108e-02 + 6.657453497707803e-02 + 6.641639795452120e-02 + 6.625863531334618e-02 + 6.610124617104705e-02 + 6.594422964866814e-02 + 6.578758486543299e-02 + 6.563131094165708e-02 + 6.547540700031643e-02 + 6.531987216906585e-02 + 6.516470557837332e-02 + 6.500990635997374e-02 + 6.485547364331327e-02 + 6.470140656204018e-02 + 6.454770425495959e-02 + 6.439436585565442e-02 + 6.424139050518185e-02 + 6.408877735587415e-02 + 6.393652554954243e-02 + 6.378463422860429e-02 + 6.363310254304622e-02 + 6.348192964216136e-02 + 6.333111467891862e-02 + 6.318065681259971e-02 + 6.303055519506789e-02 + 6.288080898167979e-02 + 6.273141734118348e-02 + 6.258237943694549e-02 + 6.243369443027962e-02 + 6.228536148636779e-02 + 6.213737977420020e-02 + 6.198974846629291e-02 + 6.184246673830131e-02 + 6.169553375986874e-02 + 6.154894870195880e-02 + 6.140271075002260e-02 + 6.125681908485271e-02 + 6.111127288458502e-02 + 6.096607133498923e-02 + 6.082121362330186e-02 + 6.067669893778977e-02 + 6.053252647002724e-02 + 6.038869541057570e-02 + 6.024520494995262e-02 + 6.010205428441878e-02 + 5.995924261312039e-02 + 5.981676913606451e-02 + 5.967463305068377e-02 + 5.953283356000520e-02 + 5.939136987405440e-02 + 5.925024120274393e-02 + 5.910944675075109e-02 + 5.896898572024133e-02 + 5.882885733338872e-02 + 5.868906080796419e-02 + 5.854959534943303e-02 + 5.841046018167366e-02 + 5.827165452667381e-02 + 5.813317759547484e-02 + 5.799502862000658e-02 + 5.785720683145133e-02 + 5.771971144629215e-02 + 5.758254169802959e-02 + 5.744569682168989e-02 + 5.730917604038396e-02 + 5.717297859181381e-02 + 5.703710371771920e-02 + 5.690155065150715e-02 + 5.676631863514842e-02 + 5.663140691176988e-02 + 5.649681471550019e-02 + 5.636254129818796e-02 + 5.622858591623749e-02 + 5.609494780637568e-02 + 5.596162621719655e-02 + 5.582862040612746e-02 + 5.569592962469259e-02 + 5.556355312969728e-02 + 5.543149018219354e-02 + 5.529974004038473e-02 + 5.516830196534387e-02 + 5.503717522021812e-02 + 5.490635906464716e-02 + 5.477585276550550e-02 + 5.464565559606692e-02 + 5.451576682310098e-02 + 5.438618571514530e-02 + 5.425691154653305e-02 + 5.412794360021059e-02 + 5.399928115030668e-02 + 5.387092346220070e-02 + 5.374286982722595e-02 + 5.361511953114147e-02 + 5.348767184376742e-02 + 5.336052605560348e-02 + 5.323368145967647e-02 + 5.310713734132736e-02 + 5.298089299097181e-02 + 5.285494769998652e-02 + 5.272930075794034e-02 + 5.260395145882699e-02 + 5.247889910164562e-02 + 5.235414299012888e-02 + 5.222968242359068e-02 + 5.210551670083303e-02 + 5.198164512479836e-02 + 5.185806699751586e-02 + 5.173478162567831e-02 + 5.161178832737659e-02 + 5.148908640731603e-02 + 5.136667516904735e-02 + 5.124455393713079e-02 + 5.112272202541198e-02 + 5.100117874145336e-02 + 5.087992340415878e-02 + 5.075895533879782e-02 + 5.063827387090040e-02 + 5.051787831631814e-02 + 5.039776799903027e-02 + 5.027794224956293e-02 + 5.015840039018700e-02 + 5.003914174911826e-02 + 4.992016566217095e-02 + 4.980147146451835e-02 + 4.968305848565534e-02 + 4.956492605368701e-02 + 4.944707351707827e-02 + 4.932950021762891e-02 + 4.921220548403189e-02 + 4.909518865563611e-02 + 4.897844908008390e-02 + 4.886198610990230e-02 + 4.874579909103274e-02 + 4.862988736593407e-02 + 4.851425027765261e-02 + 4.839888718215429e-02 + 4.828379743688660e-02 + 4.816898039344981e-02 + 4.805443540666063e-02 + 4.794016183433197e-02 + 4.782615903628512e-02 + 4.771242637003347e-02 + 4.759896319572905e-02 + 4.748576888074151e-02 + 4.737284278529100e-02 + 4.726018427180961e-02 + 4.714779271742187e-02 + 4.703566749191604e-02 + 4.692380796083007e-02 + 4.681221349433169e-02 + 4.670088346648602e-02 + 4.658981725459431e-02 + 4.647901423861556e-02 + 4.636847379587147e-02 + 4.625819530165282e-02 + 4.614817813294777e-02 + 4.603842167462240e-02 + 4.592892531626435e-02 + 4.581968844113481e-02 + 4.571071043517037e-02 + 4.560199068716930e-02 + 4.549352858172214e-02 + 4.538532351139604e-02 + 4.527737487551017e-02 + 4.516968206047602e-02 + 4.506224446147816e-02 + 4.495506148526871e-02 + 4.484813252205796e-02 + 4.474145696749865e-02 + 4.463503423038843e-02 + 4.452886371233129e-02 + 4.442294481444441e-02 + 4.431727694184067e-02 + 4.421185950249874e-02 + 4.410669190344264e-02 + 4.400177354999718e-02 + 4.389710385863231e-02 + 4.379268224561385e-02 + 4.368850811842072e-02 + 4.358458089102907e-02 + 4.348089998166713e-02 + 4.337746480946211e-02 + 4.327427479290449e-02 + 4.317132935104961e-02 + 4.306862790538591e-02 + 4.296616988021409e-02 + 4.286395470044128e-02 + 4.276198178905291e-02 + 4.266025057462805e-02 + 4.255876048879523e-02 + 4.245751096050290e-02 + 4.235650142249979e-02 + 4.225573130868781e-02 + 4.215520004666404e-02 + 4.205490707118502e-02 + 4.195485182346907e-02 + 4.185503374212908e-02 + 4.175545226547943e-02 + 4.165610683241490e-02 + 4.155699688308426e-02 + 4.145812186261490e-02 + 4.135948121993713e-02 + 4.126107439911159e-02 + 4.116290084444992e-02 + 4.106496000347922e-02 + 4.096725133001662e-02 + 4.086977427671171e-02 + 4.077252829257245e-02 + 4.067551282880393e-02 + 4.057872734137224e-02 + 4.048217129089726e-02 + 4.038584413229004e-02 + 4.028974532214836e-02 + 4.019387432351806e-02 + 4.009823059884492e-02 + 4.000281360871143e-02 + 3.990762281263916e-02 + 3.981265768084040e-02 + 3.971791768404272e-02 + 3.962340228400397e-02 + 3.952911094818634e-02 + 3.943504314911767e-02 + 3.934119836154264e-02 + 3.924757605343093e-02 + 3.915417569553582e-02 + 3.906099677494528e-02 + 3.896803876462888e-02 + 3.887530113159737e-02 + 3.878278335807980e-02 + 3.869048493136602e-02 + 3.859840533540703e-02 + 3.850654403935494e-02 + 3.841490053099362e-02 + 3.832347430867683e-02 + 3.823226484521238e-02 + 3.814127162485314e-02 + 3.805049414568009e-02 + 3.795993189727254e-02 + 3.786958436838804e-02 + 3.777945104950908e-02 + 3.768953143238456e-02 + 3.759982501241896e-02 + 3.751033128919119e-02 + 3.742104976390229e-02 + 3.733197993101921e-02 + 3.724312127956968e-02 + 3.715447331892652e-02 + 3.706603555538170e-02 + 3.697780748276271e-02 + 3.688978860838169e-02 + 3.680197844047203e-02 + 3.671437648083043e-02 + 3.662698223859462e-02 + 3.653979522528233e-02 + 3.645281495050149e-02 + 3.636604092401768e-02 + 3.627947265609178e-02 + 3.619310965841749e-02 + 3.610695145022991e-02 + 3.602099755007137e-02 + 3.593524746722872e-02 + 3.584970072102484e-02 + 3.576435683502647e-02 + 3.567921532660211e-02 + 3.559427571435374e-02 + 3.550953752116312e-02 + 3.542500027693078e-02 + 3.534066350384148e-02 + 3.525652672170999e-02 + 3.517258946309138e-02 + 3.508885125628003e-02 + 3.500531162678291e-02 + 3.492197010940873e-02 + 3.483882623525817e-02 + 3.475587953263527e-02 + 3.467312953919303e-02 + 3.459057578876406e-02 + 3.450821781198862e-02 + 3.442605515251815e-02 + 3.434408734999198e-02 + 3.426231393723483e-02 + 3.418073445581654e-02 + 3.409934844816886e-02 + 3.401815545480084e-02 + 3.393715501912345e-02 + 3.385634668688416e-02 + 3.377573000557660e-02 + 3.369530452244349e-02 + 3.361506978424043e-02 + 3.353502533757853e-02 + 3.345517073173793e-02 + 3.337550551749302e-02 + 3.329602924688495e-02 + 3.321674147756795e-02 + 3.313764176353938e-02 + 3.305872964905672e-02 + 3.298000469915312e-02 + 3.290146647870388e-02 + 3.282311452928582e-02 + 3.274494841443989e-02 + 3.266696770524984e-02 + 3.258917195579586e-02 + 3.251156072835543e-02 + 3.243413358906379e-02 + 3.235689009597382e-02 + 3.227982981604406e-02 + 3.220295232152501e-02 + 3.212625717796667e-02 + 3.204974395335523e-02 + 3.197341221860803e-02 + 3.189726154412311e-02 + 3.182129149811844e-02 + 3.174550164996338e-02 + 3.166989158019418e-02 + 3.159446086552403e-02 + 3.151920907660396e-02 + 3.144413578635114e-02 + 3.136924057603768e-02 + 3.129452303273958e-02 + 3.121998273049806e-02 + 3.114561924523454e-02 + 3.107143216011856e-02 + 3.099742105799270e-02 + 3.092358552474080e-02 + 3.084992514925186e-02 + 3.077643951122557e-02 + 3.070312819305190e-02 + 3.062999078663620e-02 + 3.055702688363699e-02 + 3.048423607160382e-02 + 3.041161793396379e-02 + 3.033917207015753e-02 + 3.026689807846873e-02 + 3.019479554128978e-02 + 3.012286404982057e-02 + 3.005110320361238e-02 + 2.997951260681279e-02 + 2.990809185255966e-02 + 2.983684053226568e-02 + 2.976575824919644e-02 + 2.969484460522792e-02 + 2.962409920087884e-02 + 2.955352163824170e-02 + 2.948311151647172e-02 + 2.941286843696999e-02 + 2.934279201383451e-02 + 2.927288185012002e-02 + 2.920313754405053e-02 + 2.913355871301240e-02 + 2.906414496442064e-02 + 2.899489589842786e-02 + 2.892581113440367e-02 + 2.885689028447655e-02 + 2.878813295173805e-02 + 2.871953875071393e-02 + 2.865110730129668e-02 + 2.858283822298987e-02 + 2.851473112218837e-02 + 2.844678561226344e-02 + 2.837900131834860e-02 + 2.831137785774055e-02 + 2.824391484910513e-02 + 2.817661191561155e-02 + 2.810946867322990e-02 + 2.804248474261467e-02 + 2.797565975421473e-02 + 2.790899332866750e-02 + 2.784248508684310e-02 + 2.777613465729838e-02 + 2.770994166752542e-02 + 2.764390574354870e-02 + 2.757802651096095e-02 + 2.751230360164656e-02 + 2.744673664902718e-02 + 2.738132528259552e-02 + 2.731606912935157e-02 + 2.725096782054994e-02 + 2.718602099881922e-02 + 2.712122829441404e-02 + 2.705658933533107e-02 + 2.699210376654040e-02 + 2.692777122629619e-02 + 2.686359134766074e-02 + 2.679956376855050e-02 + 2.673568813034148e-02 + 2.667196407449100e-02 + 2.660839123653040e-02 + 2.654496925932325e-02 + 2.648169779209303e-02 + 2.641857647953893e-02 + 2.635560496230991e-02 + 2.629278288047702e-02 + 2.623010988365326e-02 + 2.616758562366618e-02 + 2.610520975031933e-02 + 2.604298190560967e-02 + 2.598090173551063e-02 + 2.591896889422694e-02 + 2.585718303968204e-02 + 2.579554382343284e-02 + 2.573405088890056e-02 + 2.567270388987125e-02 + 2.561150248485746e-02 + 2.555044633271165e-02 + 2.548953508798725e-02 + 2.542876840653832e-02 + 2.536814594843316e-02 + 2.530766736730480e-02 + 2.524733231969847e-02 + 2.518714047250964e-02 + 2.512709148651639e-02 + 2.506718502244662e-02 + 2.500742074738894e-02 + 2.494779831751132e-02 + 2.488831739145854e-02 + 2.482897764751662e-02 + 2.476977875068464e-02 + 2.471072035836960e-02 + 2.465180213557270e-02 + 2.459302375909131e-02 + 2.453438490494015e-02 + 2.447588522684439e-02 + 2.441752439632618e-02 + 2.435930209686822e-02 + 2.430121799563831e-02 + 2.424327176191257e-02 + 2.418546306971884e-02 + 2.412779159320392e-02 + 2.407025701015483e-02 + 2.401285899981317e-02 + 2.395559723318545e-02 + 2.389847138352894e-02 + 2.384148113010493e-02 + 2.378462615809818e-02 + 2.372790614977233e-02 + 2.367132078182184e-02 + 2.361486973012364e-02 + 2.355855267628842e-02 + 2.350236930912776e-02 + 2.344631931433045e-02 + 2.339040237260871e-02 + 2.333461816188979e-02 + 2.327896637661412e-02 + 2.322344670789084e-02 + 2.316805883183489e-02 + 2.311280243515378e-02 + 2.305767721100430e-02 + 2.300268285332459e-02 + 2.294781904779433e-02 + 2.289308548135576e-02 + 2.283848185163481e-02 + 2.278400785322520e-02 + 2.272966317657758e-02 + 2.267544750906289e-02 + 2.262136054576819e-02 + 2.256740198705395e-02 + 2.251357153295969e-02 + 2.245986887460843e-02 + 2.240629370372433e-02 + 2.235284572997816e-02 + 2.229952464835474e-02 + 2.224633014749699e-02 + 2.219326193897085e-02 + 2.214031972536749e-02 + 2.208750320104361e-02 + 2.203481207216736e-02 + 2.198224604054712e-02 + 2.192980480490446e-02 + 2.187748807809197e-02 + 2.182529556587840e-02 + 2.177322696546572e-02 + 2.172128198614426e-02 + 2.166946034002218e-02 + 2.161776173674180e-02 + 2.156618587797776e-02 + 2.151473246970182e-02 + 2.146340122648612e-02 + 2.141219186176581e-02 + 2.136110408595206e-02 + 2.131013760699968e-02 + 2.125929213929720e-02 + 2.120856739943827e-02 + 2.115796310282077e-02 + 2.110747896148574e-02 + 2.105711468773744e-02 + 2.100686999708853e-02 + 2.095674460640470e-02 + 2.090673823470377e-02 + 2.085685060390323e-02 + 2.080708143284909e-02 + 2.075743043865024e-02 + 2.070789733896461e-02 + 2.065848185338519e-02 + 2.060918370358626e-02 + 2.056000261352416e-02 + 2.051093830731156e-02 + 2.046199050841276e-02 + 2.041315893918832e-02 + 2.036444332670061e-02 + 2.031584339811113e-02 + 2.026735887003067e-02 + 2.021898947028043e-02 + 2.017073493461869e-02 + 2.012259498752183e-02 + 2.007456935661649e-02 + 2.002665777297167e-02 + 1.997885996051357e-02 + 1.993117564943755e-02 + 1.988360457741823e-02 + 1.983614647798445e-02 + 1.978880107994216e-02 + 1.974156811085027e-02 + 1.969444731166336e-02 + 1.964743841723802e-02 + 1.960054115227784e-02 + 1.955375525837354e-02 + 1.950708047707909e-02 + 1.946051654129042e-02 + 1.941406318497287e-02 + 1.936772014474174e-02 + 1.932148716119990e-02 + 1.927536398140690e-02 + 1.922935034564512e-02 + 1.918344598004621e-02 + 1.913765063001423e-02 + 1.909196404425976e-02 + 1.904638595925336e-02 + 1.900091612254435e-02 + 1.895555428061772e-02 + 1.891030016469744e-02 + 1.886515352637163e-02 + 1.882011411999479e-02 + 1.877518167521970e-02 + 1.873035594232305e-02 + 1.868563668110157e-02 + 1.864102363246424e-02 + 1.859651653826993e-02 + 1.855211514697215e-02 + 1.850781921692858e-02 + 1.846362849811174e-02 + 1.841954273425713e-02 + 1.837556167722399e-02 + 1.833168508274460e-02 + 1.828791270638760e-02 + 1.824424429587613e-02 + 1.820067960186819e-02 + 1.815721838079814e-02 + 1.811386039242822e-02 + 1.807060539155448e-02 + 1.802745312809132e-02 + 1.798440336027523e-02 + 1.794145584667328e-02 + 1.789861034396235e-02 + 1.785586661445831e-02 + 1.781322441713358e-02 + 1.777068350457842e-02 + 1.772824363606736e-02 + 1.768590457480606e-02 + 1.764366608520215e-02 + 1.760152792777148e-02 + 1.755948986314423e-02 + 1.751755165530868e-02 + 1.747571306959304e-02 + 1.743397386795286e-02 + 1.739233380686453e-02 + 1.735079266012027e-02 + 1.730935019969591e-02 + 1.726800617515195e-02 + 1.722676035861175e-02 + 1.718561252878033e-02 + 1.714456244423200e-02 + 1.710360987245781e-02 + 1.706275458478830e-02 + 1.702199634263978e-02 + 1.698133492251816e-02 + 1.694077010510486e-02 + 1.690030164730331e-02 + 1.685992932068962e-02 + 1.681965290804600e-02 + 1.677947217681714e-02 + 1.673938689521877e-02 + 1.669939683666028e-02 + 1.665950177991986e-02 + 1.661970150205939e-02 + 1.657999577711447e-02 + 1.654038437906895e-02 + 1.650086708478969e-02 + 1.646144367321789e-02 + 1.642211391798679e-02 + 1.638287759543946e-02 + 1.634373448754158e-02 + 1.630468437732129e-02 + 1.626572704186934e-02 + 1.622686225251448e-02 + 1.618808979718675e-02 + 1.614940946170872e-02 + 1.611082101996680e-02 + 1.607232425440962e-02 + 1.603391895041710e-02 + 1.599560489122978e-02 + 1.595738185903658e-02 + 1.591924963852954e-02 + 1.588120801872957e-02 + 1.584325677844977e-02 + 1.580539569909259e-02 + 1.576762457813194e-02 + 1.572994319938502e-02 + 1.569235134492561e-02 + 1.565484881311209e-02 + 1.561743538476679e-02 + 1.558011083839993e-02 + 1.554287497958433e-02 + 1.550572759639263e-02 + 1.546866846769255e-02 + 1.543169739218311e-02 + 1.539481416304957e-02 + 1.535801856691179e-02 + 1.532131039389481e-02 + 1.528468944222785e-02 + 1.524815551153465e-02 + 1.521170838270258e-02 + 1.517534784896265e-02 + 1.513907371629201e-02 + 1.510288577422132e-02 + 1.506678381600347e-02 + 1.503076764230081e-02 + 1.499483704594779e-02 + 1.495899182406707e-02 + 1.492323178010325e-02 + 1.488755670734373e-02 + 1.485196640180961e-02 + 1.481646066682016e-02 + 1.478103929846549e-02 + 1.474570209596410e-02 + 1.471044886603309e-02 + 1.467527940456368e-02 + 1.464019351058384e-02 + 1.460519099481427e-02 + 1.457027165550810e-02 + 1.453543528903122e-02 + 1.450068170024789e-02 + 1.446601069487559e-02 + 1.443142207965322e-02 + 1.439691566271563e-02 + 1.436249124410753e-02 + 1.432814862414793e-02 + 1.429388761459182e-02 + 1.425970802314729e-02 + 1.422560965483165e-02 + 1.419159231701311e-02 + 1.415765581387266e-02 + 1.412379995194592e-02 + 1.409002455116132e-02 + 1.405632941792580e-02 + 1.402271435207008e-02 + 1.398917917303820e-02 + 1.395572369124169e-02 + 1.392234770932106e-02 + 1.388905104392205e-02 + 1.385583350997071e-02 + 1.382269491788422e-02 + 1.378963507987753e-02 + 1.375665380791922e-02 + 1.372375091366015e-02 + 1.369092621121959e-02 + 1.365817951715469e-02 + 1.362551064978645e-02 + 1.359291942581090e-02 + 1.356040565686591e-02 + 1.352796915179558e-02 + 1.349560973812908e-02 + 1.346332723540702e-02 + 1.343112144483463e-02 + 1.339899219360082e-02 + 1.336693930891053e-02 + 1.333496260043193e-02 + 1.330306188734133e-02 + 1.327123699224855e-02 + 1.323948773476910e-02 + 1.320781393642416e-02 + 1.317621541705235e-02 + 1.314469199166208e-02 + 1.311324348463446e-02 + 1.308186972415766e-02 + 1.305057053367403e-02 + 1.301934573289238e-02 + 1.298819514247371e-02 + 1.295711859027024e-02 + 1.292611590142988e-02 + 1.289518689817567e-02 + 1.286433140253433e-02 + 1.283354924175516e-02 + 1.280284024626999e-02 + 1.277220424320462e-02 + 1.274164105512193e-02 + 1.271115050454398e-02 + 1.268073242580564e-02 + 1.265038664885281e-02 + 1.262011299771964e-02 + 1.258991130045622e-02 + 1.255978138928737e-02 + 1.252972309744999e-02 + 1.249973624798444e-02 + 1.246982067106488e-02 + 1.243997620568067e-02 + 1.241020267461013e-02 + 1.238049990730756e-02 + 1.235086774662455e-02 + 1.232130602051964e-02 + 1.229181455798258e-02 + 1.226239319685087e-02 + 1.223304176770951e-02 + 1.220376010347082e-02 + 1.217454804486660e-02 + 1.214540542341299e-02 + 1.211633207079968e-02 + 1.208732782681391e-02 + 1.205839252771904e-02 + 1.202952600673308e-02 + 1.200072809652295e-02 + 1.197199864009422e-02 + 1.194333748171596e-02 + 1.191474445503102e-02 + 1.188621939116683e-02 + 1.185776212675846e-02 + 1.182937251288597e-02 + 1.180105038815069e-02 + 1.177279558400601e-02 + 1.174460794107161e-02 + 1.171648730396891e-02 + 1.168843351609301e-02 + 1.166044641171630e-02 + 1.163252583370262e-02 + 1.160467163102319e-02 + 1.157688364263099e-02 + 1.154916170933044e-02 + 1.152150567570712e-02 + 1.149391538555893e-02 + 1.146639068095789e-02 + 1.143893140447911e-02 + 1.141153740781534e-02 + 1.138420853673168e-02 + 1.135694462854312e-02 + 1.132974552839056e-02 + 1.130261108533809e-02 + 1.127554114921167e-02 + 1.124853556496432e-02 + 1.122159417997002e-02 + 1.119471684585664e-02 + 1.116790340283271e-02 + 1.114115369710312e-02 + 1.111446758944324e-02 + 1.108784492177717e-02 + 1.106128553754357e-02 + 1.103478929728668e-02 + 1.100835604711145e-02 + 1.098198563223047e-02 + 1.095567791133747e-02 + 1.092943273475230e-02 + 1.090324994987072e-02 + 1.087712940981543e-02 + 1.085107096608238e-02 + 1.082507447053145e-02 + 1.079913977931768e-02 + 1.077326674497864e-02 + 1.074745521859533e-02 + 1.072170505538783e-02 + 1.069601611066200e-02 + 1.067038823886727e-02 + 1.064482129354728e-02 + 1.061931513219808e-02 + 1.059386961330933e-02 + 1.056848458681972e-02 + 1.054315990640127e-02 + 1.051789543133304e-02 + 1.049269102209236e-02 + 1.046754653920045e-02 + 1.044246184044743e-02 + 1.041743677288729e-02 + 1.039247119540387e-02 + 1.036756497988909e-02 + 1.034271797805630e-02 + 1.031793004647734e-02 + 1.029320105343422e-02 + 1.026853085073464e-02 + 1.024391929539164e-02 + 1.021936625852857e-02 + 1.019487159885800e-02 + 1.017043517132599e-02 + 1.014605683522427e-02 + 1.012173646293816e-02 + 1.009747392058842e-02 + 1.007326905588179e-02 + 1.004912173629082e-02 + 1.002503183346208e-02 + 1.000099920653610e-02 + 9.977023717087764e-03 + 9.953105229386335e-03 + 9.929243608872406e-03 + 9.905438720973011e-03 + 9.881690430827046e-03 + 9.857998603258316e-03 + 9.834363104786413e-03 + 9.810783802355094e-03 + 9.787260560990621e-03 + 9.763793247942843e-03 + 9.740381731591760e-03 + 9.717025877967826e-03 + 9.693725554510663e-03 + 9.670480630152000e-03 + 9.647290973567844e-03 + 9.624156453317901e-03 + 9.601076938062841e-03 + 9.578052297039983e-03 + 9.555082399653962e-03 + 9.532167115690399e-03 + 9.509306316445141e-03 + 9.486499872512266e-03 + 9.463747653553711e-03 + 9.441049530896879e-03 + 9.418405376662433e-03 + 9.395815063104617e-03 + 9.373278461427175e-03 + 9.350795443499088e-03 + 9.328365882617906e-03 + 9.305989651970981e-03 + 9.283666624824176e-03 + 9.261396674723778e-03 + 9.239179675408710e-03 + 9.217015500757821e-03 + 9.194904024947497e-03 + 9.172845123632957e-03 + 9.150838672277813e-03 + 9.128884544858834e-03 + 9.106982617538152e-03 + 9.085132766987650e-03 + 9.063334868396023e-03 + 9.041588798714301e-03 + 9.019894435479832e-03 + 8.998251654894885e-03 + 8.976660334271958e-03 + 8.955120351755344e-03 + 8.933631585369030e-03 + 8.912193913264732e-03 + 8.890807213885918e-03 + 8.869471366214972e-03 + 8.848186249259440e-03 + 8.826951742251321e-03 + 8.805767725383001e-03 + 8.784634078744540e-03 + 8.763550682317645e-03 + 8.742517416743529e-03 + 8.721534162832835e-03 + 8.700600801502468e-03 + 8.679717214101214e-03 + 8.658883282492529e-03 + 8.638098888885700e-03 + 8.617363915025602e-03 + 8.596678243443276e-03 + 8.576041757693640e-03 + 8.555454340593486e-03 + 8.534915875110577e-03 + 8.514426244844865e-03 + 8.493985333674233e-03 + 8.473593025909724e-03 + 8.453249206335058e-03 + 8.432953759374154e-03 + 8.412706569850796e-03 + 8.392507523503252e-03 + 8.372356505624580e-03 + 8.352253401838657e-03 + 8.332198098800467e-03 + 8.312190482450988e-03 + 8.292230438871008e-03 + 8.272317855399050e-03 + 8.252452619663047e-03 + 8.232634619050869e-03 + 8.212863740331295e-03 + 8.193139871755427e-03 + 8.173462902270600e-03 + 8.153832719956143e-03 + 8.134249213438031e-03 + 8.114712271802299e-03 + 8.095221784035302e-03 + 8.075777639824947e-03 + 8.056379729417138e-03 + 8.037027942938956e-03 + 8.017722170154111e-03 + 7.998462301028743e-03 + 7.979248227381455e-03 + 7.960079840401237e-03 + 7.940957030626293e-03 + 7.921879690329333e-03 + 7.902847711453821e-03 + 7.883860985421759e-03 + 7.864919405368889e-03 + 7.846022864037674e-03 + 7.827171253341911e-03 + 7.808364466777525e-03 + 7.789602397948123e-03 + 7.770884940051978e-03 + 7.752211987488857e-03 + 7.733583434567862e-03 + 7.714999174963997e-03 + 7.696459103766686e-03 + 7.677963116338556e-03 + 7.659511107448910e-03 + 7.641102971817726e-03 + 7.622738605046243e-03 + 7.604417904226960e-03 + 7.586140765207791e-03 + 7.567907083543369e-03 + 7.549716755813157e-03 + 7.531569679511053e-03 + 7.513465752109027e-03 + 7.495404870064185e-03 + 7.477386931039745e-03 + 7.459411833357052e-03 + 7.441479474804043e-03 + 7.423589753808636e-03 + 7.405742569108545e-03 + 7.387937818890154e-03 + 7.370175402616828e-03 + 7.352455220325825e-03 + 7.334777170378787e-03 + 7.317141152312192e-03 + 7.299547066866589e-03 + 7.281994814230038e-03 + 7.264484294760120e-03 + 7.247015409129196e-03 + 7.229588058070396e-03 + 7.212202142721502e-03 + 7.194857564639825e-03 + 7.177554225359851e-03 + 7.160292026920549e-03 + 7.143070871828701e-03 + 7.125890661781023e-03 + 7.108751299151369e-03 + 7.091652687463649e-03 + 7.074594729473165e-03 + 7.057577328092346e-03 + 7.040600386920140e-03 + 7.023663809440293e-03 + 7.006767499621119e-03 + 6.989911362283671e-03 + 6.973095301761098e-03 + 6.956319222246642e-03 + 6.939583028242014e-03 + 6.922886624933184e-03 + 6.906229917977133e-03 + 6.889612813237578e-03 + 6.873035215956658e-03 + 6.856497031627250e-03 + 6.839998167124653e-03 + 6.823538528849983e-03 + 6.807118022950776e-03 + 6.790736556102037e-03 + 6.774394036012678e-03 + 6.758090370503938e-03 + 6.741825465874382e-03 + 6.725599229831710e-03 + 6.709411571076730e-03 + 6.693262397262002e-03 + 6.677151616823099e-03 + 6.661079138883049e-03 + 6.645044871881905e-03 + 6.629048724424302e-03 + 6.613090605727208e-03 + 6.597170426169362e-03 + 6.581288095176429e-03 + 6.565443521393368e-03 + 6.549636616015259e-03 + 6.533867289690503e-03 + 6.518135451870410e-03 + 6.502441013826720e-03 + 6.486783886693610e-03 + 6.471163980906190e-03 + 6.455581208648475e-03 + 6.440035481784445e-03 + 6.424526710952946e-03 + 6.409054808194274e-03 + 6.393619686148648e-03 + 6.378221257389647e-03 + 6.362859434216829e-03 + 6.347534129405275e-03 + 6.332245256702231e-03 + 6.316992728926398e-03 + 6.301776458848883e-03 + 6.286596360249587e-03 + 6.271452347303485e-03 + 6.256344334335297e-03 + 6.241272235637497e-03 + 6.226235965289892e-03 + 6.211235437617355e-03 + 6.196270567881593e-03 + 6.181341271239764e-03 + 6.166447462747857e-03 + 6.151589057705613e-03 + 6.136765971896623e-03 + 6.121978121401951e-03 + 6.107225422158738e-03 + 6.092507790132517e-03 + 6.077825141615326e-03 + 6.063177393866219e-03 + 6.048564463915550e-03 + 6.033986268442907e-03 + 6.019442724444331e-03 + 6.004933749322879e-03 + 5.990459260846786e-03 + 5.976019176895193e-03 + 5.961613415583682e-03 + 5.947241895231883e-03 + 5.932904533953020e-03 + 5.918601250164555e-03 + 5.904331962789744e-03 + 5.890096590861083e-03 + 5.875895053571317e-03 + 5.861727270328322e-03 + 5.847593160694864e-03 + 5.833492644473149e-03 + 5.819425641715960e-03 + 5.805392072163253e-03 + 5.791391855962741e-03 + 5.777424914193254e-03 + 5.763491167389796e-03 + 5.749590536018355e-03 + 5.735722941127108e-03 + 5.721888304505554e-03 + 5.708086547766434e-03 + 5.694317591457392e-03 + 5.680581357894303e-03 + 5.666877769868901e-03 + 5.653206748498332e-03 + 5.639568216215936e-03 + 5.625962096156960e-03 + 5.612388310444156e-03 + 5.598846782244085e-03 + 5.585337435180374e-03 + 5.571860191464977e-03 + 5.558414974887664e-03 + 5.545001710146245e-03 + 5.531620319651646e-03 + 5.518270727342278e-03 + 5.504952858629092e-03 + 5.491666637149790e-03 + 5.478411987013346e-03 + 5.465188833301630e-03 + 5.451997101098349e-03 + 5.438836715460566e-03 + 5.425707601454353e-03 + 5.412609684284744e-03 + 5.399542889597323e-03 + 5.386507143481766e-03 + 5.373502371672819e-03 + 5.360528500347250e-03 + 5.347585456320476e-03 + 5.334673165238440e-03 + 5.321791553290573e-03 + 5.308940548233661e-03 + 5.296120077396591e-03 + 5.283330067535706e-03 + 5.270570445063373e-03 + 5.257841138170363e-03 + 5.245142075198895e-03 + 5.232473183108559e-03 + 5.219834389656078e-03 + 5.207225623450342e-03 + 5.194646813662877e-03 + 5.182097888019903e-03 + 5.169578774433769e-03 + 5.157089403379224e-03 + 5.144629703265777e-03 + 5.132199601938705e-03 + 5.119799030212023e-03 + 5.107427917986021e-03 + 5.095086194230444e-03 + 5.082773788422456e-03 + 5.070490630851877e-03 + 5.058236652191947e-03 + 5.046011782411770e-03 + 5.033815952050060e-03 + 5.021649092096963e-03 + 5.009511132708167e-03 + 4.997402004872952e-03 + 4.985321640554899e-03 + 4.973269971256597e-03 + 4.961246927915243e-03 + 4.949252441362114e-03 + 4.937286444284467e-03 + 4.925348869112448e-03 + 4.913439647407981e-03 + 4.901558711796497e-03 + 4.889705994683389e-03 + 4.877881427891544e-03 + 4.866084944974813e-03 + 4.854316479151838e-03 + 4.842575962313763e-03 + 4.830863328342665e-03 + 4.819178511323663e-03 + 4.807521444209243e-03 + 4.795892060902922e-03 + 4.784290295384500e-03 + 4.772716080911616e-03 + 4.761169351999607e-03 + 4.749650043687660e-03 + 4.738158090505544e-03 + 4.726693426328077e-03 + 4.715255985490762e-03 + 4.703845704177584e-03 + 4.692462517255530e-03 + 4.681106359266913e-03 + 4.669777166671382e-03 + 4.658474874679097e-03 + 4.647199418051047e-03 + 4.635950733693824e-03 + 4.624728757814554e-03 + 4.613533426035275e-03 + 4.602364675085555e-03 + 4.591222441193854e-03 + 4.580106660340010e-03 + 4.569017270133631e-03 + 4.557954207729684e-03 + 4.546917409606468e-03 + 4.535906813063030e-03 + 4.524922355662980e-03 + 4.513963975024341e-03 + 4.503031608847450e-03 + 4.492125194604706e-03 + 4.481244669721014e-03 + 4.470389973075004e-03 + 4.459561043403103e-03 + 4.448757818627942e-03 + 4.437980237157132e-03 + 4.427228237584914e-03 + 4.416501758569245e-03 + 4.405800739475310e-03 + 4.395125119625431e-03 + 4.384474837838549e-03 + 4.373849833628650e-03 + 4.363250046735974e-03 + 4.352675416676511e-03 + 4.342125883231542e-03 + 4.331601386396421e-03 + 4.321101866314548e-03 + 4.310627263408189e-03 + 4.300177518182486e-03 + 4.289752570999768e-03 + 4.279352362569397e-03 + 4.268976833692708e-03 + 4.258625924837488e-03 + 4.248299577436886e-03 + 4.237997733292803e-03 + 4.227720333115902e-03 + 4.217467318344088e-03 + 4.207238631130676e-03 + 4.197034213451204e-03 + 4.186854006892898e-03 + 4.176697952964437e-03 + 4.166565994071401e-03 + 4.156458073034852e-03 + 4.146374132669977e-03 + 4.136314114934178e-03 + 4.126277962231265e-03 + 4.116265617785051e-03 + 4.106277025130100e-03 + 4.096312127225507e-03 + 4.086370866498099e-03 + 4.076453186851077e-03 + 4.066559032318193e-03 + 4.056688346384167e-03 + 4.046841072375552e-03 + 4.037017154234894e-03 + 4.027216536753351e-03 + 4.017439163691562e-03 + 4.007684978984143e-03 + 3.997953927616382e-03 + 3.988245954341580e-03 + 3.978561003853811e-03 + 3.968899020987378e-03 + 3.959259950174110e-03 + 3.949643736363211e-03 + 3.940050325917084e-03 + 3.930479663940112e-03 + 3.920931695287086e-03 + 3.911406366153988e-03 + 3.901903622192779e-03 + 3.892423408886956e-03 + 3.882965672529350e-03 + 3.873530359308857e-03 + 3.864117415340676e-03 + 3.854726787040829e-03 + 3.845358421069152e-03 + 3.836012264203419e-03 + 3.826688263119290e-03 + 3.817386364639579e-03 + 3.808106515834866e-03 + 3.798848664119608e-03 + 3.789612756624806e-03 + 3.780398740246358e-03 + 3.771206562411011e-03 + 3.762036171140922e-03 + 3.752887514765301e-03 + 3.743760540740341e-03 + 3.734655196719529e-03 + 3.725571430980986e-03 + 3.716509192135922e-03 + 3.707468428387338e-03 + 3.698449087559120e-03 + 3.689451119263604e-03 + 3.680474472533827e-03 + 3.671519094850921e-03 + 3.662584935894309e-03 + 3.653671945297336e-03 + 3.644780071212910e-03 + 3.635909263417586e-03 + 3.627059471971036e-03 + 3.618230645951014e-03 + 3.609422734605362e-03 + 3.600635687799489e-03 + 3.591869456282116e-03 + 3.583123989955615e-03 + 3.574399238584414e-03 + 3.565695152845392e-03 + 3.557011682930304e-03 + 3.548348778903569e-03 + 3.539706391532652e-03 + 3.531084471778191e-03 + 3.522482970666699e-03 + 3.513901839239252e-03 + 3.505341028388093e-03 + 3.496800489111114e-03 + 3.488280173119797e-03 + 3.479780031892506e-03 + 3.471300016604386e-03 + 3.462840078578430e-03 + 3.454400170006921e-03 + 3.445980243580072e-03 + 3.437580250715228e-03 + 3.429200142992534e-03 + 3.420839872683964e-03 + 3.412499392748279e-03 + 3.404178655562702e-03 + 3.395877612913789e-03 + 3.387596218304602e-03 + 3.379334424898988e-03 + 3.371092184764359e-03 + 3.362869450661228e-03 + 3.354666175991870e-03 + 3.346482314543412e-03 + 3.338317819175880e-03 + 3.330172642972068e-03 + 3.322046740007612e-03 + 3.313940064235304e-03 + 3.305852569386344e-03 + 3.297784208976364e-03 + 3.289734936574093e-03 + 3.281704706272533e-03 + 3.273693473070924e-03 + 3.265701191257636e-03 + 3.257727814803984e-03 + 3.249773298074863e-03 + 3.241837595979994e-03 + 3.233920663596386e-03 + 3.226022455622204e-03 + 3.218142926555998e-03 + 3.210282031163023e-03 + 3.202439725215123e-03 + 3.194615964134223e-03 + 3.186810703067027e-03 + 3.179023897602838e-03 + 3.171255503398923e-03 + 3.163505475998486e-03 + 3.155773770652277e-03 + 3.148060343553685e-03 + 3.140365151430291e-03 + 3.132688149313277e-03 + 3.125029293443853e-03 + 3.117388541383308e-03 + 3.109765848736372e-03 + 3.102161171408776e-03 + 3.094574466373093e-03 + 3.087005690728782e-03 + 3.079454801280003e-03 + 3.071921754555924e-03 + 3.064406507880629e-03 + 3.056909018530570e-03 + 3.049429243338136e-03 + 3.041967139485151e-03 + 3.034522664377966e-03 + 3.027095775562892e-03 + 3.019686430816400e-03 + 3.012294588055786e-03 + 3.004920205212209e-03 + 2.997563239705405e-03 + 2.990223649173174e-03 + 2.982901392198357e-03 + 2.975596427311395e-03 + 2.968308712822513e-03 + 2.961038206776656e-03 + 2.953784867392937e-03 + 2.946548653201694e-03 + 2.939329523194637e-03 + 2.932127436582907e-03 + 2.924942352269057e-03 + 2.917774228121468e-03 + 2.910623023643702e-03 + 2.903488699056754e-03 + 2.896371212514376e-03 + 2.889270523304112e-03 + 2.882186591679052e-03 + 2.875119376658924e-03 + 2.868068837676741e-03 + 2.861034934776638e-03 + 2.854017627809473e-03 + 2.847016876513213e-03 + 2.840032640686938e-03 + 2.833064880681456e-03 + 2.826113557103426e-03 + 2.819178630449384e-03 + 2.812260060105674e-03 + 2.805357806481411e-03 + 2.798471831428214e-03 + 2.791602094948384e-03 + 2.784748557109701e-03 + 2.777911179108391e-03 + 2.771089922400815e-03 + 2.764284748007964e-03 + 2.757495616304825e-03 + 2.750722488782177e-03 + 2.743965327115693e-03 + 2.737224092409578e-03 + 2.730498746008289e-03 + 2.723789249648372e-03 + 2.717095565426717e-03 + 2.710417654358784e-03 + 2.703755477800617e-03 + 2.697108999073383e-03 + 2.690478179939920e-03 + 2.683862981660020e-03 + 2.677263366970269e-03 + 2.670679298051182e-03 + 2.664110736894467e-03 + 2.657557646411518e-03 + 2.651019989061974e-03 + 2.644497727126834e-03 + 2.637990823748049e-03 + 2.631499241776077e-03 + 2.625022943767310e-03 + 2.618561892619121e-03 + 2.612116051581085e-03 + 2.605685383984310e-03 + 2.599269852507916e-03 + 2.592869420565223e-03 + 2.586484052278204e-03 + 2.580113710814501e-03 + 2.573758359383719e-03 + 2.567417961609419e-03 + 2.561092481362380e-03 + 2.554781882413309e-03 + 2.548486128464411e-03 + 2.542205184036424e-03 + 2.535939013422343e-03 + 2.529687580238901e-03 + 2.523450848436006e-03 + 2.517228782352248e-03 + 2.511021346720505e-03 + 2.504828506444104e-03 + 2.498650225958320e-03 + 2.492486468967693e-03 + 2.486337200680032e-03 + 2.480202386472821e-03 + 2.474081990653096e-03 + 2.467975978460781e-03 + 2.461884315215007e-03 + 2.455806965243642e-03 + 2.449743893777428e-03 + 2.443695066608286e-03 + 2.437660449328877e-03 + 2.431640007119714e-03 + 2.425633705211946e-03 + 2.419641509634817e-03 + 2.413663385966202e-03 + 2.407699299632079e-03 + 2.401749216909934e-03 + 2.395813103777745e-03 + 2.389890925926915e-03 + 2.383982649399740e-03 + 2.378088240561300e-03 + 2.372207665865560e-03 + 2.366340891258303e-03 + 2.360487883037754e-03 + 2.354648608018378e-03 + 2.348823033118129e-03 + 2.343011124539103e-03 + 2.337212848054228e-03 + 2.331428171390765e-03 + 2.325657062040943e-03 + 2.319899486412222e-03 + 2.314155410784699e-03 + 2.308424802407836e-03 + 2.302707629600105e-03 + 2.297003858807791e-03 + 2.291313456815245e-03 + 2.285636391934661e-03 + 2.279972631361444e-03 + 2.274322142294874e-03 + 2.268684892803898e-03 + 2.263060850445441e-03 + 2.257449982675230e-03 + 2.251852257331842e-03 + 2.246267642469826e-03 + 2.240696106224612e-03 + 2.235137616698782e-03 + 2.229592141925271e-03 + 2.224059650030012e-03 + 2.218540109447705e-03 + 2.213033488566449e-03 + 2.207539755750870e-03 + 2.202058879448589e-03 + 2.196590827868759e-03 + 2.191135569406817e-03 + 2.185693073538250e-03 + 2.180263309295804e-03 + 2.174846245146934e-03 + 2.169441849486111e-03 + 2.164050091629877e-03 + 2.158670941358884e-03 + 2.153304367034930e-03 + 2.147950337590323e-03 + 2.142608822828710e-03 + 2.137279792340324e-03 + 2.131963215445541e-03 + 2.126659061301170e-03 + 2.121367299363035e-03 + 2.116087899310018e-03 + 2.110820830985273e-03 + 2.105566064252215e-03 + 2.100323568822542e-03 + 2.095093314356113e-03 + 2.089875271479949e-03 + 2.084669410319118e-03 + 2.079475699908646e-03 + 2.074294110902819e-03 + 2.069124614088778e-03 + 2.063967179294363e-03 + 2.058821776747180e-03 + 2.053688376991423e-03 + 2.048566950718572e-03 + 2.043457468582260e-03 + 2.038359901240009e-03 + 2.033274219398007e-03 + 2.028200393563254e-03 + 2.023138394473247e-03 + 2.018088193625467e-03 + 2.013049761808302e-03 + 2.008023069533293e-03 + 2.003008088023720e-03 + 1.998004788922133e-03 + 1.993013143739461e-03 + 1.988033123025423e-03 + 1.983064698401174e-03 + 1.978107841939004e-03 + 1.973162523959716e-03 + 1.968228716337500e-03 + 1.963306391971906e-03 + 1.958395521239848e-03 + 1.953496075620802e-03 + 1.948608028019931e-03 + 1.943731350228688e-03 + 1.938866013789267e-03 + 1.934011990485791e-03 + 1.929169252901841e-03 + 1.924337773155020e-03 + 1.919517522737516e-03 + 1.914708474346116e-03 + 1.909910600724645e-03 + 1.905123874118434e-03 + 1.900348266781407e-03 + 1.895583751238830e-03 + 1.890830300301618e-03 + 1.886087886140893e-03 + 1.881356481302734e-03 + 1.876636059328014e-03 + 1.871926593048255e-03 + 1.867228054886164e-03 + 1.862540417322874e-03 + 1.857863653843670e-03 + 1.853197738035545e-03 + 1.848542642643349e-03 + 1.843898340659710e-03 + 1.839264805482605e-03 + 1.834642010884087e-03 + 1.830029929675155e-03 + 1.825428534756660e-03 + 1.820837800826725e-03 + 1.816257700994342e-03 + 1.811688207883416e-03 + 1.807129296515363e-03 + 1.802580940478343e-03 + 1.798043112569654e-03 + 1.793515787775185e-03 + 1.788998939681262e-03 + 1.784492541016137e-03 + 1.779996567290557e-03 + 1.775510992946437e-03 + 1.771035790955467e-03 + 1.766570935188881e-03 + 1.762116400368900e-03 + 1.757672161650980e-03 + 1.753238193179788e-03 + 1.748814468721301e-03 + 1.744400962234815e-03 + 1.739997649147064e-03 + 1.735604504535336e-03 + 1.731221502449809e-03 + 1.726848617398671e-03 + 1.722485824273258e-03 + 1.718133098140551e-03 + 1.713790413411143e-03 + 1.709457744960287e-03 + 1.705135068710917e-03 + 1.700822359316501e-03 + 1.696519591326764e-03 + 1.692226740206531e-03 + 1.687943780998710e-03 + 1.683670689031842e-03 + 1.679407440586236e-03 + 1.675154010255336e-03 + 1.670910372590760e-03 + 1.666676504276520e-03 + 1.662452380680008e-03 + 1.658237976786625e-03 + 1.654033269138933e-03 + 1.649838233189823e-03 + 1.645652843894769e-03 + 1.641477077483747e-03 + 1.637310910181093e-03 + 1.633154317979306e-03 + 1.629007276710043e-03 + 1.624869761977525e-03 + 1.620741749539434e-03 + 1.616623216289868e-03 + 1.612514138626602e-03 + 1.608414492386588e-03 + 1.604324254066237e-03 + 1.600243399893093e-03 + 1.596171905775712e-03 + 1.592109748332882e-03 + 1.588056904380057e-03 + 1.584013350591343e-03 + 1.579979063015354e-03 + 1.575954018417919e-03 + 1.571938194458784e-03 + 1.567931567017785e-03 + 1.563934112240304e-03 + 1.559945807641685e-03 + 1.555966630779868e-03 + 1.551996558434039e-03 + 1.548035566441649e-03 + 1.544083632647983e-03 + 1.540140734902817e-03 + 1.536206849423688e-03 + 1.532281953055403e-03 + 1.528366023373284e-03 + 1.524459038476067e-03 + 1.520560975283225e-03 + 1.516671810636623e-03 + 1.512791522697568e-03 + 1.508920088807869e-03 + 1.505057486015793e-03 + 1.501203692209861e-03 + 1.497358685322736e-03 + 1.493522443062933e-03 + 1.489694942724099e-03 + 1.485876162194853e-03 + 1.482066079697174e-03 + 1.478264672890618e-03 + 1.474471919644568e-03 + 1.470687798121700e-03 + 1.466912286519041e-03 + 1.463145362594138e-03 + 1.459387003990816e-03 + 1.455637189563730e-03 + 1.451895897787254e-03 + 1.448163106500405e-03 + 1.444438793947980e-03 + 1.440722938760434e-03 + 1.437015519703072e-03 + 1.433316514691718e-03 + 1.429625901910583e-03 + 1.425943660193772e-03 + 1.422269768088744e-03 + 1.418604204318803e-03 + 1.414946947952337e-03 + 1.411297977567125e-03 + 1.407657271824714e-03 + 1.404024809794961e-03 + 1.400400570139807e-03 + 1.396784531434119e-03 + 1.393176672533590e-03 + 1.389576972970703e-03 + 1.385985412235932e-03 + 1.382401969107074e-03 + 1.378826622443783e-03 + 1.375259351219489e-03 + 1.371700134514839e-03 + 1.368148952079336e-03 + 1.364605783757036e-03 + 1.361070608632290e-03 + 1.357543405835987e-03 + 1.354024154621594e-03 + 1.350512834317403e-03 + 1.347009424934256e-03 + 1.343513906652181e-03 + 1.340026258589547e-03 + 1.336546459739890e-03 + 1.333074489680093e-03 + 1.329610329681042e-03 + 1.326153959375566e-03 + 1.322705357081586e-03 + 1.319264503327096e-03 + 1.315831378649060e-03 + 1.312405962942001e-03 + 1.308988235813027e-03 + 1.305578177302038e-03 + 1.302175767936687e-03 + 1.298780987783750e-03 + 1.295393816813521e-03 + 1.292014235092867e-03 + 1.288642222828844e-03 + 1.285277760581296e-03 + 1.281920829182064e-03 + 1.278571408463430e-03 + 1.275229478684235e-03 + 1.271895021211065e-03 + 1.268568016022571e-03 + 1.265248443161927e-03 + 1.261936283866222e-03 + 1.258631518851812e-03 + 1.255334128626978e-03 + 1.252044093890807e-03 + 1.248761395151665e-03 + 1.245486013113075e-03 + 1.242217929129610e-03 + 1.238957124307338e-03 + 1.235703579418827e-03 + 1.232457274959363e-03 + 1.229218191838193e-03 + 1.225986311430220e-03 + 1.222761615473843e-03 + 1.219544084856006e-03 + 1.216333699988417e-03 + 1.213130441964228e-03 + 1.209934292565758e-03 + 1.206745233676102e-03 + 1.203563245963205e-03 + 1.200388310525061e-03 + 1.197220409053557e-03 + 1.194059523052293e-03 + 1.190905633902454e-03 + 1.187758723052301e-03 + 1.184618772531461e-03 + 1.181485763720917e-03 + 1.178359677471923e-03 + 1.175240496495629e-03 + 1.172128202790389e-03 + 1.169022777016151e-03 + 1.165924201427151e-03 + 1.162832457974330e-03 + 1.159747527667428e-03 + 1.156669393342115e-03 + 1.153598037513975e-03 + 1.150533441195656e-03 + 1.147475586343000e-03 + 1.144424455192698e-03 + 1.141380029693999e-03 + 1.138342292070108e-03 + 1.135311224784675e-03 + 1.132286810371483e-03 + 1.129269030382949e-03 + 1.126257866687504e-03 + 1.123253302806332e-03 + 1.120255320585528e-03 + 1.117263901594027e-03 + 1.114279029333705e-03 + 1.111300685926414e-03 + 1.108328853214485e-03 + 1.105363515126287e-03 + 1.102404653695880e-03 + 1.099452250276090e-03 + 1.096506289065756e-03 + 1.093566752790314e-03 + 1.090633622975802e-03 + 1.087706882683815e-03 + 1.084786514992603e-03 + 1.081872502714538e-03 + 1.078964828755093e-03 + 1.076063476054719e-03 + 1.073168427526746e-03 + 1.070279665938792e-03 + 1.067397174442816e-03 + 1.064520936417689e-03 + 1.061650934087830e-03 + 1.058787150577005e-03 + 1.055929570192933e-03 + 1.053078175257412e-03 + 1.050232948596978e-03 + 1.047393874491941e-03 + 1.044560935952646e-03 + 1.041734115621369e-03 + 1.038913396581877e-03 + 1.036098763274602e-03 + 1.033290199394467e-03 + 1.030487686748966e-03 + 1.027691209748195e-03 + 1.024900752824401e-03 + 1.022116298137994e-03 + 1.019337829638554e-03 + 1.016565331581354e-03 + 1.013798786681050e-03 + 1.011038178744547e-03 + 1.008283492069452e-03 + 1.005534710312413e-03 + 1.002791817167788e-03 + 1.000054796401326e-03 + 9.973236317525795e-04 + 9.945983071579347e-04 + 9.918788066535795e-04 + 9.891651141399331e-04 + 9.864572135795289e-04 + 9.837550890187182e-04 + 9.810587245440681e-04 + 9.783681042165289e-04 + 9.756832121036981e-04 + 9.730040324093254e-04 + 9.703305493295432e-04 + 9.676627470403841e-04 + 9.650006098016114e-04 + 9.623441219373007e-04 + 9.596932677964791e-04 + 9.570480316324495e-04 + 9.544083978205768e-04 + 9.517743508934125e-04 + 9.491458752396962e-04 + 9.465229553012878e-04 + 9.439055756501852e-04 + 9.412937207895038e-04 + 9.386873752809525e-04 + 9.360865238076440e-04 + 9.334911509791107e-04 + 9.309012414140627e-04 + 9.283167798171848e-04 + 9.257377509839119e-04 + 9.231641396993918e-04 + 9.205959306774516e-04 + 9.180331088080401e-04 + 9.154756590138127e-04 + 9.129235660962607e-04 + 9.103768149701878e-04 + 9.078353906321772e-04 + 9.052992780955343e-04 + 9.027684623946166e-04 + 9.002429285800444e-04 + 8.977226617159664e-04 + 8.952076469091944e-04 + 8.926978693026045e-04 + 8.901933140640126e-04 + 8.876939664445818e-04 + 8.851998117353022e-04 + 8.827108351548252e-04 + 8.802270219825557e-04 + 8.777483575705740e-04 + 8.752748272927118e-04 + 8.728064165680979e-04 + 8.703431108522175e-04 + 8.678848955854838e-04 + 8.654317562117358e-04 + 8.629836782258149e-04 + 8.605406473168484e-04 + 8.581026490766350e-04 + 8.556696689660546e-04 + 8.532416927295966e-04 + 8.508187061075220e-04 + 8.484006947265324e-04 + 8.459876443379812e-04 + 8.435795407180884e-04 + 8.411763696276702e-04 + 8.387781169670006e-04 + 8.363847686436173e-04 + 8.339963104952486e-04 + 8.316127284703911e-04 + 8.292340085393665e-04 + 8.268601366269382e-04 + 8.244910987818749e-04 + 8.221268810991789e-04 + 8.197674696351961e-04 + 8.174128504795555e-04 + 8.150630097863373e-04 + 8.127179337987174e-04 + 8.103776086785577e-04 + 8.080420206116735e-04 + 8.057111559859151e-04 + 8.033850010442538e-04 + 8.010635420033148e-04 + 7.987467653572807e-04 + 7.964346575211490e-04 + 7.941272048473775e-04 + 7.918243938145987e-04 + 7.895262109139402e-04 + 7.872326426395918e-04 + 7.849436755404454e-04 + 7.826592961986925e-04 + 7.803794912312032e-04 + 7.781042473133076e-04 + 7.758335511109105e-04 + 7.735673892815593e-04 + 7.713057485643111e-04 + 7.690486157536814e-04 + 7.667959776727836e-04 + 7.645478211004869e-04 + 7.623041328912646e-04 + 7.600649000053854e-04 + 7.578301093264215e-04 + 7.555997477583347e-04 + 7.533738022910566e-04 + 7.511522599897612e-04 + 7.489351079282785e-04 + 7.467223331578882e-04 + 7.445139227962291e-04 + 7.423098639775247e-04 + 7.401101438263767e-04 + 7.379147496119391e-04 + 7.357236686066337e-04 + 7.335368879604144e-04 + 7.313543950177981e-04 + 7.291761771981462e-04 + 7.270022218267318e-04 + 7.248325162821272e-04 + 7.226670479949025e-04 + 7.205058044241288e-04 + 7.183487730730944e-04 + 7.161959414766152e-04 + 7.140472971809699e-04 + 7.119028277561113e-04 + 7.097625208231147e-04 + 7.076263641063239e-04 + 7.054943452576004e-04 + 7.033664519218169e-04 + 7.012426719956601e-04 + 6.991229932510109e-04 + 6.970074033540157e-04 + 6.948958902400331e-04 + 6.927884418689321e-04 + 6.906850461485944e-04 + 6.885856909689247e-04 + 6.864903643067344e-04 + 6.843990542306164e-04 + 6.823117487354689e-04 + 6.802284359113009e-04 + 6.781491039842488e-04 + 6.760737410664455e-04 + 6.740023352773578e-04 + 6.719348748282754e-04 + 6.698713480434448e-04 + 6.678117432465053e-04 + 6.657560487034911e-04 + 6.637042527655789e-04 + 6.616563438432147e-04 + 6.596123103782944e-04 + 6.575721408025738e-04 + 6.555358236048545e-04 + 6.535033473936704e-04 + 6.514747007198682e-04 + 6.494498721244171e-04 + 6.474288502266283e-04 + 6.454116237722280e-04 + 6.433981815196293e-04 + 6.413885120963034e-04 + 6.393826043225120e-04 + 6.373804471016686e-04 + 6.353820291728463e-04 + 6.333873394523912e-04 + 6.313963669651093e-04 + 6.294091005879305e-04 + 6.274255292885601e-04 + 6.254456421348147e-04 + 6.234694281911996e-04 + 6.214968766042923e-04 + 6.195279765738893e-04 + 6.175627172048796e-04 + 6.156010877068991e-04 + 6.136430774102346e-04 + 6.116886755862946e-04 + 6.097378715435904e-04 + 6.077906546697107e-04 + 6.058470144286753e-04 + 6.039069402835228e-04 + 6.019704216802507e-04 + 6.000374481409778e-04 + 5.981080092530985e-04 + 5.961820946588096e-04 + 5.942596940083503e-04 + 5.923407969721301e-04 + 5.904253932616448e-04 + 5.885134726736782e-04 + 5.866050250202793e-04 + 5.847000400980857e-04 + 5.827985078791194e-04 + 5.809004183470366e-04 + 5.790057613579966e-04 + 5.771145269606196e-04 + 5.752267052829598e-04 + 5.733422863841403e-04 + 5.714612604000550e-04 + 5.695836175305099e-04 + 5.677093480037018e-04 + 5.658384420678564e-04 + 5.639708900266142e-04 + 5.621066823022896e-04 + 5.602458092869138e-04 + 5.583882613744714e-04 + 5.565340290827777e-04 + 5.546831029664671e-04 + 5.528354736013446e-04 + 5.509911316015094e-04 + 5.491500676402182e-04 + 5.473122724461832e-04 + 5.454777367810608e-04 + 5.436464514412940e-04 + 5.418184072613321e-04 + 5.399935951226492e-04 + 5.381720060069473e-04 + 5.363536309736959e-04 + 5.345384609776805e-04 + 5.327264870731968e-04 + 5.309177004752346e-04 + 5.291120923593077e-04 + 5.273096539494221e-04 + 5.255103765544823e-04 + 5.237142514407170e-04 + 5.219212699733492e-04 + 5.201314236865307e-04 + 5.183447040146093e-04 + 5.165611024246747e-04 + 5.147806105331874e-04 + 5.130032200114061e-04 + 5.112289225530487e-04 + 5.094577098620987e-04 + 5.076895736854020e-04 + 5.059245058583464e-04 + 5.041624983517820e-04 + 5.024035430839573e-04 + 5.006476319990773e-04 + 4.988947572035529e-04 + 4.971449107942239e-04 + 4.953980848818115e-04 + 4.936542716805855e-04 + 4.919134634956966e-04 + 4.901756526846954e-04 + 4.884408316006080e-04 + 4.867089926403434e-04 + 4.849801282731475e-04 + 4.832542310892493e-04 + 4.815312937309208e-04 + 4.798113088560132e-04 + 4.780942690954599e-04 + 4.763801672259719e-04 + 4.746689961731605e-04 + 4.729607488395965e-04 + 4.712554181333483e-04 + 4.695529970142063e-04 + 4.678534786182833e-04 + 4.661568561056742e-04 + 4.644631226216267e-04 + 4.627722714285577e-04 + 4.610842958399921e-04 + 4.593991892076899e-04 + 4.577169450300335e-04 + 4.560375568336446e-04 + 4.543610181249096e-04 + 4.526873225594637e-04 + 4.510164638467393e-04 + 4.493484356950898e-04 + 4.476832319569833e-04 + 4.460208465382815e-04 + 4.443612733350173e-04 + 4.427045064285867e-04 + 4.410505399510805e-04 + 4.393993679504339e-04 + 4.377509846774214e-04 + 4.361053844834223e-04 + 4.344625616662297e-04 + 4.328225106365193e-04 + 4.311852259097922e-04 + 4.295507020701359e-04 + 4.279189337521271e-04 + 4.262899156467061e-04 + 4.246636425301464e-04 + 4.230401092565931e-04 + 4.214193107478168e-04 + 4.198012419839599e-04 + 4.181858979868060e-04 + 4.165732738692198e-04 + 4.149633649793705e-04 + 4.133561665739344e-04 + 4.117516738453971e-04 + 4.101498823326724e-04 + 4.085507876181731e-04 + 4.069543852399522e-04 + 4.053606707914893e-04 + 4.037696400086752e-04 + 4.021812887746215e-04 + 4.005956129436248e-04 + 3.990126084760660e-04 + 3.974322714846641e-04 + 3.958545980293214e-04 + 3.942795842513983e-04 + 3.927072264688036e-04 + 3.911375211195356e-04 + 3.895704646516968e-04 + 3.880060534869329e-04 + 3.864442842922655e-04 + 3.848851538066537e-04 + 3.833286587063809e-04 + 3.817747958651508e-04 + 3.802235622593628e-04 + 3.786749548688228e-04 + 3.771289708205180e-04 + 3.755856073392733e-04 + 3.740448616816441e-04 + 3.725067311649692e-04 + 3.709712132043737e-04 + 3.694383053790672e-04 + 3.679080053579325e-04 + 3.663803108503057e-04 + 3.648552195606523e-04 + 3.633327293646475e-04 + 3.618128382932607e-04 + 3.602955444344858e-04 + 3.587808459078391e-04 + 3.572687408998931e-04 + 3.557592277792442e-04 + 3.542523049927096e-04 + 3.527479710408145e-04 + 3.512462245019904e-04 + 3.497470640500036e-04 + 3.482504884770882e-04 + 3.467564967437580e-04 + 3.452650877985240e-04 + 3.437762605764859e-04 + 3.422900143250168e-04 + 3.408063483640538e-04 + 3.393252619896345e-04 + 3.378467546103840e-04 + 3.363708257653936e-04 + 3.348974751341996e-04 + 3.334267024660963e-04 + 3.319585075646510e-04 + 3.304928903038992e-04 + 3.290298507212495e-04 + 3.275693889604049e-04 + 3.261115052402690e-04 + 3.246561999078441e-04 + 3.232034733603981e-04 + 3.217533259984899e-04 + 3.203057585048498e-04 + 3.188607716794152e-04 + 3.174183662346357e-04 + 3.159785430822741e-04 + 3.145413032833238e-04 + 3.131066479369465e-04 + 3.116745782136557e-04 + 3.102450954058189e-04 + 3.088182010197684e-04 + 3.073938965650610e-04 + 3.059721835802734e-04 + 3.045530637916020e-04 + 3.031365390386899e-04 + 3.017226112552691e-04 + 3.003112824793533e-04 + 2.989025548234045e-04 + 2.974964304955006e-04 + 2.960929118913988e-04 + 2.946920014422941e-04 + 2.932937016150965e-04 + 2.918980151023185e-04 + 2.905049446767149e-04 + 2.891144931550728e-04 + 2.877266634923031e-04 + 2.863414587568181e-04 + 2.849588821248430e-04 + 2.835789368717610e-04 + 2.822016263526234e-04 + 2.808269540128114e-04 + 2.794549234525530e-04 + 2.780855383858511e-04 + 2.767188026160350e-04 + 2.753547199733251e-04 + 2.739932944362576e-04 + 2.726345302253411e-04 + 2.712784314751994e-04 + 2.699250024118205e-04 + 2.685742475595017e-04 + 2.672261714415124e-04 + 2.658807786371782e-04 + 2.645380739000219e-04 + 2.631980619957597e-04 + 2.618607478073471e-04 + 2.605261365239288e-04 + 2.591942332540738e-04 + 2.578650431168888e-04 + 2.565385715181067e-04 + 2.552148239188000e-04 + 2.538938058269625e-04 + 2.525755228940477e-04 + 2.512599808919393e-04 + 2.499471856899045e-04 + 2.486371432244064e-04 + 2.473298595107682e-04 + 2.460253406646765e-04 + 2.447235929605613e-04 + 2.434246227773826e-04 + 2.421284365723855e-04 + 2.408350408491505e-04 + 2.395444422583646e-04 + 2.382566475978551e-04 + 2.369716636126905e-04 + 2.356894972066169e-04 + 2.344101555067014e-04 + 2.331336455922197e-04 + 2.318599746393059e-04 + 2.305891500038487e-04 + 2.293211790903458e-04 + 2.280560693749351e-04 + 2.267938284406659e-04 + 2.255344639796373e-04 + 2.242779837481179e-04 + 2.230243955584571e-04 + 2.217737074088738e-04 + 2.205259273750273e-04 + 2.192810635194828e-04 + 2.180391240377155e-04 + 2.168001172473318e-04 + 2.155640515683406e-04 + 2.143309354202995e-04 + 2.131007772856537e-04 + 2.118735858306198e-04 + 2.106493698084787e-04 + 2.094281380089542e-04 + 2.082098992208740e-04 + 2.069946624015073e-04 + 2.057824366286796e-04 + 2.045732309577213e-04 + 2.033670545521807e-04 + 2.021639166762670e-04 + 2.009638266139778e-04 + 1.997667937615743e-04 + 1.985728276099416e-04 + 1.973819376249420e-04 + 1.961941334186818e-04 + 1.950094247288422e-04 + 1.938278211445808e-04 + 1.926493324216112e-04 + 1.914739685443153e-04 + 1.903017394244089e-04 + 1.891326549660665e-04 + 1.879667251315557e-04 + 1.868039600691931e-04 + 1.856443699312781e-04 + 1.844879648170397e-04 + 1.833347550402995e-04 + 1.821847509305592e-04 + 1.810379627269367e-04 + 1.798944008330572e-04 + 1.787540757117569e-04 + 1.776169978023503e-04 + 1.764831776083264e-04 + 1.753526257075039e-04 + 1.742253527510645e-04 + 1.731013693254543e-04 + 1.719806860311682e-04 + 1.708633135911149e-04 + 1.697492627671219e-04 + 1.686385443331759e-04 + 1.675311690584120e-04 + 1.664271477052953e-04 + 1.653264910845736e-04 + 1.642292101438652e-04 + 1.631353157524277e-04 + 1.620448187436031e-04 + 1.609577300754615e-04 + 1.598740606888992e-04 + 1.587938214812250e-04 + 1.577170233258566e-04 + 1.566436772168694e-04 + 1.555737942159133e-04 + 1.545073851968179e-04 + 1.534444610998845e-04 + 1.523850329588589e-04 + 1.513291117056277e-04 + 1.502767082718022e-04 + 1.492278336091406e-04 + 1.481824986061289e-04 + 1.471407142013266e-04 + 1.461024913960903e-04 + 1.450678410475480e-04 + 1.440367739871709e-04 + 1.430093010797408e-04 + 1.419854331666308e-04 + 1.409651810501559e-04 + 1.399485554884026e-04 + 1.389355672434459e-04 + 1.379262270311977e-04 + 1.369205454852166e-04 + 1.359185332657421e-04 + 1.349202010239166e-04 + 1.339255593445051e-04 + 1.329346186642912e-04 + 1.319473893926901e-04 + 1.309638820305585e-04 + 1.299841069283569e-04 + 1.290080743627276e-04 + 1.280357946577360e-04 + 1.270672779908064e-04 + 1.261025344295187e-04 + 1.251415740258344e-04 + 1.241844068414831e-04 + 1.232310428585276e-04 + 1.222814917974582e-04 + 1.213357634573326e-04 + 1.203938676644921e-04 + 1.194558139769228e-04 + 1.185216119071049e-04 + 1.175912709437735e-04 + 1.166648004395201e-04 + 1.157422096820540e-04 + 1.148235078941047e-04 + 1.139087041565015e-04 + 1.129978074560730e-04 + 1.120908266963163e-04 + 1.111877706801771e-04 + 1.102886481165339e-04 + 1.093934676008822e-04 + 1.085022375478793e-04 + 1.076149663238430e-04 + 1.067316622735248e-04 + 1.058523335072715e-04 + 1.049769880021785e-04 + 1.041056336506420e-04 + 1.032382782134568e-04 + 1.023749293560659e-04 + 1.015155946454073e-04 + 1.006602814254268e-04 + 9.980899691604087e-05 + 9.896174827822380e-05 + 9.811854249648769e-05 + 9.727938640362722e-05 + 9.644428669167931e-05 + 9.561324990949941e-05 + 9.478628247235907e-05 + 9.396339064407664e-05 + 9.314458052650697e-05 + 9.232985807344924e-05 + 9.151922908266137e-05 + 9.071269919463392e-05 + 8.991027389908417e-05 + 8.911195851702552e-05 + 8.831775819982511e-05 + 8.752767793866873e-05 + 8.674172256023528e-05 + 8.595989672073575e-05 + 8.518220490590348e-05 + 8.440865141920385e-05 + 8.363924039733809e-05 + 8.287397580722622e-05 + 8.211286142104977e-05 + 8.135590084051729e-05 + 8.060309749193613e-05 + 7.985445459658365e-05 + 7.910997520302950e-05 + 7.836966218298747e-05 + 7.763351820320998e-05 + 7.690154574559998e-05 + 7.617374709914362e-05 + 7.545012436145964e-05 + 7.473067944430294e-05 + 7.401541405207780e-05 + 7.330432968888297e-05 + 7.259742767376570e-05 + 7.189470911942744e-05 + 7.119617492698978e-05 + 7.050182580949816e-05 + 6.981166227552030e-05 + 6.912568461899398e-05 + 6.844389294104750e-05 + 6.776628713300132e-05 + 6.709286687130013e-05 + 6.642363163388969e-05 + 6.575858067871575e-05 + 6.509771305493562e-05 + 6.444102761503343e-05 + 6.378852298738557e-05 + 6.314019758583242e-05 + 6.249604962295056e-05 + 6.185607708979005e-05 + 6.122027775903875e-05 + 6.058864919749181e-05 + 5.996118875684596e-05 + 5.933789356597989e-05 + 5.871876053888907e-05 + 5.810378637807827e-05 + 5.749296757228591e-05 + 5.688630039241354e-05 + 5.628378087841946e-05 + 5.568540486517338e-05 + 5.509116797959273e-05 + 5.450106561933422e-05 + 5.391509296529475e-05 + 5.333324497665832e-05 + 5.275551640753726e-05 + 5.218190179953343e-05 + 5.161239545977182e-05 + 5.104699148146081e-05 + 5.048568375913861e-05 + 4.992846596763329e-05 + 4.937533154817934e-05 + 4.882627374147808e-05 + 4.828128557792042e-05 + 4.774035986717692e-05 + 4.720348921279551e-05 + 4.667066599018748e-05 + 4.614188237688400e-05 + 4.561713035194944e-05 + 4.509640165438987e-05 + 4.457968783032909e-05 + 4.406698023190481e-05 + 4.355826996891768e-05 + 4.305354796420506e-05 + 4.255280495560636e-05 + 4.205603144616347e-05 + 4.156321774032957e-05 + 4.107435395613752e-05 + 4.058942999665175e-05 + 4.010843556869507e-05 + 3.963136019085871e-05 + 3.915819316952545e-05 + 3.868892361719641e-05 + 3.822354046226270e-05 + 3.776203244031561e-05 + 3.730438809005640e-05 + 3.685059575689182e-05 + 3.640064360230198e-05 + 3.595451960373741e-05 + 3.551221155134442e-05 + 3.507370705450421e-05 + 3.463899354241650e-05 + 3.420805825588243e-05 + 3.378088825986720e-05 + 3.335747045272196e-05 + 3.293779155463552e-05 + 3.252183811026268e-05 + 3.210959649877579e-05 + 3.170105292073684e-05 + 3.129619341367949e-05 + 3.089500386055728e-05 + 3.049746997239612e-05 + 3.010357730585059e-05 + 2.971331126487755e-05 + 2.932665707619367e-05 + 2.894359982344077e-05 + 2.856412445132613e-05 + 2.818821573877814e-05 + 2.781585831987375e-05 + 2.744703669454755e-05 + 2.708173520948728e-05 + 2.671993807124836e-05 + 2.636162935767626e-05 + 2.600679300301263e-05 + 2.565541280257304e-05 + 2.530747242805460e-05 + 2.496295542635910e-05 + 2.462184521206604e-05 + 2.428412507785163e-05 + 2.394977819771233e-05 + 2.361878762181457e-05 + 2.329113628448998e-05 + 2.296680701293541e-05 + 2.264578251757474e-05 + 2.232804539557172e-05 + 2.201357814530585e-05 + 2.170236315904943e-05 + 2.139438272306276e-05 + 2.108961903561866e-05 + 2.078805419745760e-05 + 2.048967020582218e-05 + 2.019444897050880e-05 + 1.990237231614296e-05 + 1.961342197777572e-05 + 1.932757961462368e-05 + 1.904482680353188e-05 + 1.876514502948172e-05 + 1.848851571515060e-05 + 1.821492021640795e-05 + 1.794433980831370e-05 + 1.767675569461099e-05 + 1.741214902258527e-05 + 1.715050088166273e-05 + 1.689179228451716e-05 + 1.663600419203502e-05 + 1.638311752659296e-05 + 1.613311314360082e-05 + 1.588597184706167e-05 + 1.564167440067926e-05 + 1.540020151829502e-05 + 1.516153387453479e-05 + 1.492565211244357e-05 + 1.469253682958783e-05 + 1.446216858599219e-05 + 1.423452791421707e-05 + 1.400959531801727e-05 + 1.378735127470914e-05 + 1.356777623611474e-05 + 1.335085063337062e-05 + 1.313655487876277e-05 + 1.292486936494610e-05 + 1.271577446639333e-05 + 1.250925054517824e-05 + 1.230527796605363e-05 + 1.210383708165599e-05 + 1.190490823144681e-05 + 1.170847175649016e-05 + 1.151450799717159e-05 + 1.132299729345123e-05 + 1.113391999104486e-05 + 1.094725644586371e-05 + 1.076298702423590e-05 + 1.058109209097755e-05 + 1.040155202830912e-05 + 1.022434724511555e-05 + 1.004945815519835e-05 + 9.876865191434875e-06 + 9.706548817576976e-06 + 9.538489515829050e-06 + 9.372667791395497e-06 + 9.209064181113714e-06 + 9.047659251528417e-06 + 8.888433598428113e-06 + 8.731367852817854e-06 + 8.576442682615395e-06 + 8.423638791088146e-06 + 8.272936922653283e-06 + 8.124317863654203e-06 + 7.977762440936675e-06 + 7.833251528895281e-06 + 7.690766049713759e-06 + 7.550286971453687e-06 + 7.411795314787993e-06 + 7.275272152381047e-06 + 7.140698608042407e-06 + 7.008055865069554e-06 + 6.877325162999093e-06 + 6.748487797069182e-06 + 6.621525126924672e-06 + 6.496418573295794e-06 + 6.373149617974847e-06 + 6.251699810845691e-06 + 6.132050767139283e-06 + 6.014184168887862e-06 + 5.898081770597224e-06 + 5.783725394973654e-06 + 5.671096936050662e-06 + 5.560178365641361e-06 + 5.450951726966341e-06 + 5.343399138917566e-06 + 5.237502802602254e-06 + 5.133244993336976e-06 + 5.030608065950253e-06 + 4.929574461382145e-06 + 4.830126698086031e-06 + 4.732247378331277e-06 + 4.635919192753656e-06 + 4.541124912789582e-06 + 4.447847398958468e-06 + 4.356069602328335e-06 + 4.265774557056776e-06 + 4.176945389932598e-06 + 4.089565320281935e-06 + 4.003617653697645e-06 + 3.919085793399028e-06 + 3.835953236362346e-06 + 3.754203567594348e-06 + 3.673820472678765e-06 + 3.594787733829004e-06 + 3.517089224074456e-06 + 3.440708918621393e-06 + 3.365630891050476e-06 + 3.291839308866544e-06 + 3.219318444550688e-06 + 3.148052669614368e-06 + 3.078026451876596e-06 + 3.009224366838337e-06 + 2.941631088840265e-06 + 2.875231390541817e-06 + 2.810010156134118e-06 + 2.745952369256776e-06 + 2.683043113446972e-06 + 2.621267584374269e-06 + 2.560611078236376e-06 + 2.501058994098514e-06 + 2.442596843868032e-06 + 2.385210240033010e-06 + 2.328884899906223e-06 + 2.273606655048426e-06 + 2.219361438179688e-06 + 2.166135288678882e-06 + 2.113914360085187e-06 + 2.062684907096663e-06 + 2.012433292648363e-06 + 1.963145994708785e-06 + 1.914809593193956e-06 + 1.867410777738679e-06 + 1.820936351687259e-06 + 1.775373220609589e-06 + 1.730708401732302e-06 + 1.686929024947410e-06 + 1.644022323067757e-06 + 1.601975642837270e-06 + 1.560776441656341e-06 + 1.520412279298016e-06 + 1.480870830315665e-06 + 1.442139880698395e-06 + 1.404207319625165e-06 + 1.367061149777226e-06 + 1.330689483155573e-06 + 1.295080535963615e-06 + 1.260222640873472e-06 + 1.226104237141460e-06 + 1.192713867093549e-06 + 1.160040189500492e-06 + 1.128071969424555e-06 + 1.096798076008267e-06 + 1.066207493417804e-06 + 1.036289310659725e-06 + 1.007032721493895e-06 + 9.784270338592895e-07 + 9.504616588874799e-07 + 9.231261128777845e-07 + 8.964100256766087e-07 + 8.703031286825232e-07 + 8.447952585150839e-07 + 8.198763641874936e-07 + 7.955364948286083e-07 + 7.717658049346632e-07 + 7.485545598914059e-07 + 7.258931238786546e-07 + 7.037719665410901e-07 + 6.821816664988581e-07 + 6.611128998791421e-07 + 6.405564483055948e-07 + 6.205032003278225e-07 + 6.009441408121614e-07 + 5.818703600152187e-07 + 5.632730528626383e-07 + 5.451435094097432e-07 + 5.274731247677268e-07 + 5.102533965000488e-07 + 4.934759162480692e-07 + 4.771323800991179e-07 + 4.612145841662162e-07 + 4.457144176881476e-07 + 4.306238737382497e-07 + 4.159350428538716e-07 + 4.016401077051372e-07 + 3.877313539402903e-07 + 3.742011622647174e-07 + 3.610420046499709e-07 + 3.482464547968944e-07 + 3.358071790150475e-07 + 3.237169340794661e-07 + 3.119685770955318e-07 + 3.005550554375413e-07 + 2.894694062090586e-07 + 2.787047650882795e-07 + 2.682543557659438e-07 + 2.581114909968296e-07 + 2.482695801165890e-07 + 2.387221182727572e-07 + 2.294626890008751e-07 + 2.204849703818711e-07 + 2.117827241548630e-07 + 2.033497996067267e-07 + 1.951801384624956e-07 + 1.872677641420447e-07 + 1.796067867093452e-07 + 1.721914062527642e-07 + 1.650159027896018e-07 + 1.580746421942365e-07 + 1.513620776690125e-07 + 1.448727406655565e-07 + 1.386012477684331e-07 + 1.325423000867771e-07 + 1.266906752868051e-07 + 1.210412352836648e-07 + 1.155889239131470e-07 + 1.103287600176973e-07 + 1.052558455547364e-07 + 1.003653617115032e-07 + 9.565256321109978e-08 + 9.111278671292873e-08 + 8.674144556415159e-08 + 8.253402527034383e-08 + 7.848609177536523e-08 + 7.459328520671134e-08 + 7.085131661573615e-08 + 6.725597593242166e-08 + 6.380312478868793e-08 + 6.048869454868003e-08 + 5.730869376312298e-08 + 5.425920030057914e-08 + 5.133636064443935e-08 + 4.853639660958214e-08 + 4.585559704969457e-08 + 4.329031836991616e-08 + 4.083699031045398e-08 + 3.849210751108346e-08 + 3.625223113812888e-08 + 3.411399355038575e-08 + 3.207408998824199e-08 + 3.012928121511996e-08 + 2.827639696078167e-08 + 2.651232793166280e-08 + 2.483402934338396e-08 + 2.323852311474514e-08 + 2.172289034680298e-08 + 2.028427559044146e-08 + 1.891988778877689e-08 + 1.762699339728036e-08 + 1.640292125402531e-08 + 1.524506224991720e-08 + 1.415086320949184e-08 + 1.311783222446413e-08 + 1.214353712508316e-08 + 1.122560019257377e-08 + 1.036170378687137e-08 + 9.549587722603005e-09 + 8.787044877843281e-09 + 8.071926961605364e-09 + 7.402140903161946e-09 + 6.775645388472587e-09 + 6.190456604129221e-09 + 5.644643792323680e-09 + 5.136326726146161e-09 + 4.663681262833891e-09 + 4.224934232596794e-09 + 3.818361845837701e-09 + 3.442294891302550e-09 + 3.095113141246544e-09 + 2.775244665814773e-09 + 2.481170514027403e-09 + 2.211418834557044e-09 + 1.964565051498559e-09 + 1.739235878927056e-09 + 1.534103359980556e-09 + 1.347885831336700e-09 + 1.179351163642234e-09 + 1.027310894648576e-09 + 8.906218977827446e-10 + 7.681887799049897e-10 + 6.589582548472836e-10 + 5.619214238374888e-10 + 4.761152985830568e-10 + 4.006175343477256e-10 + 3.345492227248809e-10 + 2.770755362128679e-10 + 2.274009179016229e-10 + 1.847722840116674e-10 + 1.484788129161787e-10 + 1.178476648704315e-10 + 9.224748788184573e-11 + 7.108739902161543e-11 + 5.381328706422649e-11 + 3.991151299277479e-11 + 2.890715266694438e-11 + 2.036091648096713e-11 + 1.387293445657948e-11 + 9.080348320515963e-12 + 5.654863833225597e-12 + 3.306507674167889e-12 + 1.780689492983021e-12 + 8.563646514161430e-13 + 3.496037276049943e-13 + 1.104943293034196e-13 + 2.161027650041889e-14 + 5.028049336448720e-16 + 0.000000000000000e+00 + 0.000000000000000e+00 + 7.485272593961791e+04 + 1.493519318697679e+05 + 2.234970831294996e+05 + 2.972876533345640e+05 + 3.707231243774131e+05 + 4.438029864272003e+05 + 5.165267379297798e+05 + 5.888938856077072e+05 + 6.609039444602393e+05 + 7.325564377633340e+05 + 8.038508970696502e+05 + 8.747868622085482e+05 + 9.453638812860892e+05 + 1.015581510685036e+06 + 1.085439315064852e+06 + 1.154936867361703e+06 + 1.224073748788454e+06 + 1.292849548834672e+06 + 1.361263865266626e+06 + 1.429316304127287e+06 + 1.497006479736322e+06 + 1.564334014690106e+06 + 1.631298539861710e+06 + 1.697899694400910e+06 + 1.764137125734180e+06 + 1.830010489564698e+06 + 1.895519449872339e+06 + 1.960663678913685e+06 + 2.025442857222013e+06 + 2.089856673607306e+06 + 2.153904825156247e+06 + 2.217587017232217e+06 + 2.280902963475303e+06 + 2.343852385802290e+06 + 2.406435014406665e+06 + 2.468650587758616e+06 + 2.530498852605031e+06 + 2.591979563969503e+06 + 2.653092485152322e+06 + 2.713837387730482e+06 + 2.774214051557675e+06 + 2.834222264764299e+06 + 2.893861823757447e+06 + 2.953132533220919e+06 + 3.012034206115212e+06 + 3.070566663677527e+06 + 3.128729735421764e+06 + 3.186523259138526e+06 + 3.243947080895115e+06 + 3.301001055035538e+06 + 3.357685044180497e+06 + 3.413998919227402e+06 + 3.469942559350358e+06 + 3.525515852000176e+06 + 3.580718692904367e+06 + 3.635550986067140e+06 + 3.690012643769410e+06 + 3.744103586568788e+06 + 3.797823743299592e+06 + 3.851173051072835e+06 + 3.904151455276238e+06 + 3.956758909574216e+06 + 4.008995375907890e+06 + 4.060860824495079e+06 + 4.112355233830309e+06 + 4.163478590684799e+06 + 4.214230890106475e+06 + 4.264612135419963e+06 + 4.314622338226588e+06 + 4.364261518404378e+06 + 4.413529704108060e+06 + 4.462426931769069e+06 + 4.510953246095533e+06 + 4.559108700072286e+06 + 4.606893354960858e+06 + 4.654307280299488e+06 + 4.701350553903108e+06 + 4.748023261863358e+06 + 4.794325498548575e+06 + 4.840257366603798e+06 + 4.885818976950768e+06 + 4.931010448787929e+06 + 4.975831909590418e+06 + 5.020283495110085e+06 + 5.064365349375471e+06 + 5.108077624691823e+06 + 5.151420481641092e+06 + 5.194394089081923e+06 + 5.236998624149668e+06 + 5.279234272256376e+06 + 5.321101227090800e+06 + 5.362599690618395e+06 + 5.403729873081312e+06 + 5.444491992998408e+06 + 5.484886277165242e+06 + 5.524912960654069e+06 + 5.564572286813851e+06 + 5.603864507270245e+06 + 5.642789881925615e+06 + 5.681348678959022e+06 + 5.719541174826232e+06 + 5.757367654259708e+06 + 5.794828410268617e+06 + 5.831923744138825e+06 + 5.868653965432902e+06 + 5.905019391990117e+06 + 5.941020349926441e+06 + 5.976657173634544e+06 + 6.011930205783804e+06 + 6.046839797320290e+06 + 6.081386307466779e+06 + 6.115570103722748e+06 + 6.149391561864376e+06 + 6.182851065944540e+06 + 6.215949008292822e+06 + 6.248685789515501e+06 + 6.281061818495561e+06 + 6.313077512392686e+06 + 6.344733296643257e+06 + 6.376029604960365e+06 + 6.406966879333793e+06 + 6.437545570030033e+06 + 6.467766135592271e+06 + 6.497629042840399e+06 + 6.527134766871008e+06 + 6.556283791057392e+06 + 6.585076607049545e+06 + 6.613513714774162e+06 + 6.641595622434638e+06 + 6.669322846511072e+06 + 6.696695911760264e+06 + 6.723715351215711e+06 + 6.750381706187615e+06 + 6.776695526262878e+06 + 6.802657369305105e+06 + 6.828267801454599e+06 + 6.853527397128366e+06 + 6.878436739020114e+06 + 6.902996418100249e+06 + 6.927207033615881e+06 + 6.951069193090819e+06 + 6.974583512325577e+06 + 6.997750615397365e+06 + 7.020571134660101e+06 + 7.043045710744397e+06 + 7.065174992557568e+06 + 7.086959637283633e+06 + 7.108400310383311e+06 + 7.129497685594021e+06 + 7.150252444929884e+06 + 7.170665278681723e+06 + 7.190736885417059e+06 + 7.210467971980117e+06 + 7.229859253491821e+06 + 7.248911453349800e+06 + 7.267625303228384e+06 + 7.286001543078595e+06 + 7.304040921128170e+06 + 7.321744193881537e+06 + 7.339112126119829e+06 + 7.356145490900878e+06 + 7.372845069559221e+06 + 7.389211651706094e+06 + 7.405246035229432e+06 + 7.420949026293878e+06 + 7.436321439340766e+06 + 7.451364097088138e+06 + 7.466077830530737e+06 + 7.480463478940005e+06 + 7.494521889864086e+06 + 7.508253919127826e+06 + 7.521660430832772e+06 + 7.534742297357169e+06 + 7.547500399355968e+06 + 7.559935625760819e+06 + 7.572048873780073e+06 + 7.583841048898782e+06 + 7.595313064878696e+06 + 7.606465843758276e+06 + 7.617300315852673e+06 + 7.627817419753745e+06 + 7.638018102330050e+06 + 7.647903318726848e+06 + 7.657474032366097e+06 + 7.666731214946462e+06 + 7.675675846443305e+06 + 7.684308915108687e+06 + 7.692631417471377e+06 + 7.700644358336839e+06 + 7.708348750787240e+06 + 7.715745616181449e+06 + 7.722835984155037e+06 + 7.729620892620270e+06 + 7.736101387766127e+06 + 7.742278524058277e+06 + 7.748153364239094e+06 + 7.753726979327655e+06 + 7.759000448619737e+06 + 7.763974859687817e+06 + 7.768651308381077e+06 + 7.773030898825390e+06 + 7.777114743423343e+06 + 7.780903962854218e+06 + 7.784399686073998e+06 + 7.787603050315368e+06 + 7.790515201087713e+06 + 7.793137292177119e+06 + 7.795470485646380e+06 + 7.797515951834979e+06 + 7.799274869359110e+06 + 7.800748425111664e+06 + 7.801937814262233e+06 + 7.802844240257111e+06 + 7.803468914819297e+06 + 7.803813057948484e+06 + 7.803877897921070e+06 + 7.803664671290156e+06 + 7.803174622885538e+06 + 7.802409005813722e+06 + 7.801369081457905e+06 + 7.800056119477995e+06 + 7.798471397810592e+06 + 7.796616202669007e+06 + 7.794491828543244e+06 + 7.792099578200010e+06 + 7.789440762682715e+06 + 7.786516701311473e+06 + 7.783328721683091e+06 + 7.779878159671083e+06 + 7.776166359425665e+06 + 7.772194673373749e+06 + 7.767964462218953e+06 + 7.763477094941595e+06 + 7.758733948798692e+06 + 7.753736409323964e+06 + 7.748485870327833e+06 + 7.742983733897421e+06 + 7.737231410396548e+06 + 7.731230318465743e+06 + 7.724981885022229e+06 + 7.718487545259933e+06 + 7.711748742649483e+06 + 7.704766928938209e+06 + 7.697543564150140e+06 + 7.690080116586007e+06 + 7.682378062823243e+06 + 7.674438887715982e+06 + 7.666264084395060e+06 + 7.657855154268012e+06 + 7.649213607019073e+06 + 7.640340960609185e+06 + 7.631238741275986e+06 + 7.621908483533815e+06 + 7.612351730173716e+06 + 7.602570032263434e+06 + 7.592564949147409e+06 + 7.582338048446788e+06 + 7.571890906059416e+06 + 7.561225106159844e+06 + 7.550342241199316e+06 + 7.539243911905785e+06 + 7.527931727283904e+06 + 7.516407304615024e+06 + 7.504672269457198e+06 + 7.492728241314434e+06 + 7.480576638153253e+06 + 7.468218723741564e+06 + 7.455655760425863e+06 + 7.442889013018662e+06 + 7.429919748798485e+06 + 7.416749237509867e+06 + 7.403378751363355e+06 + 7.389809565035504e+06 + 7.376042955668893e+06 + 7.362080202872100e+06 + 7.347922588719724e+06 + 7.333571397752370e+06 + 7.319027916976659e+06 + 7.304293435865226e+06 + 7.289369246356713e+06 + 7.274256642855777e+06 + 7.258956922233087e+06 + 7.243471383825325e+06 + 7.227801329435183e+06 + 7.211948063331366e+06 + 7.195912892248592e+06 + 7.179697125387593e+06 + 7.163302074415106e+06 + 7.146729053463890e+06 + 7.129979379132709e+06 + 7.113054370486340e+06 + 7.095955349055575e+06 + 7.078683638837219e+06 + 7.061240566294081e+06 + 7.043627460354994e+06 + 7.025845652414794e+06 + 7.007896476334333e+06 + 6.989781268440476e+06 + 6.971501367526096e+06 + 6.953058114850082e+06 + 6.934452854137335e+06 + 6.915686931578767e+06 + 6.896761695831302e+06 + 6.877678498017876e+06 + 6.858438691727439e+06 + 6.839043633014950e+06 + 6.819494680401385e+06 + 6.799793194873727e+06 + 6.779940539884974e+06 + 6.759938081354136e+06 + 6.739787187666233e+06 + 6.719489229672301e+06 + 6.699045580689385e+06 + 6.678457616500544e+06 + 6.657726715354848e+06 + 6.636854257967380e+06 + 6.615841627519235e+06 + 6.594690209657516e+06 + 6.573401392495350e+06 + 6.551976566611862e+06 + 6.530417125052197e+06 + 6.508724463327511e+06 + 6.486899979414972e+06 + 6.464945073757762e+06 + 6.442861149265066e+06 + 6.420649611312096e+06 + 6.398311867740063e+06 + 6.375849328856199e+06 + 6.353263407433745e+06 + 6.330555518711952e+06 + 6.307727080396090e+06 + 6.284779512657427e+06 + 6.261714238133261e+06 + 6.238532681926889e+06 + 6.215236271607627e+06 + 6.191826437210800e+06 + 6.168304611237747e+06 + 6.144672228655818e+06 + 6.120930726898375e+06 + 6.097081545864792e+06 + 6.073126127920459e+06 + 6.049065917896771e+06 + 6.024902363091142e+06 + 6.000636913266994e+06 + 5.976271020653763e+06 + 5.951806139946896e+06 + 5.927243728307854e+06 + 5.902585245364108e+06 + 5.877832153209144e+06 + 5.852985916402456e+06 + 5.828048001969552e+06 + 5.803019879401957e+06 + 5.777903020657199e+06 + 5.752698900158828e+06 + 5.727408994796395e+06 + 5.702034783925475e+06 + 5.676577749367647e+06 + 5.651039375410506e+06 + 5.625421148807654e+06 + 5.599724558778713e+06 + 5.573951097009313e+06 + 5.548102257651095e+06 + 5.522179537321717e+06 + 5.496184435104840e+06 + 5.470118452550147e+06 + 5.443983093673326e+06 + 5.417779864956085e+06 + 5.391510275346133e+06 + 5.365175836257203e+06 + 5.338778061569033e+06 + 5.312318467627374e+06 + 5.285798573243992e+06 + 5.259219899696662e+06 + 5.232583970729172e+06 + 5.205892312551324e+06 + 5.179146453838928e+06 + 5.152347925733812e+06 + 5.125498261843814e+06 + 5.098598998242779e+06 + 5.071651673470572e+06 + 5.044657828533064e+06 + 5.017619006902143e+06 + 4.990536754515706e+06 + 4.963412619777663e+06 + 4.936248153557934e+06 + 4.909044909192459e+06 + 4.881804442483181e+06 + 4.854528311698059e+06 + 4.827218077571064e+06 + 4.799875303302180e+06 + 4.772501554557402e+06 + 4.745098399468737e+06 + 4.717667408634203e+06 + 4.690210155117837e+06 + 4.662728214449679e+06 + 4.635223164625784e+06 + 4.607696586108224e+06 + 4.580150061825077e+06 + 4.552585177170437e+06 + 4.525003520004408e+06 + 4.497406680653105e+06 + 4.469796251908661e+06 + 4.442173829029216e+06 + 4.414541009738924e+06 + 4.386899394227949e+06 + 4.359250585152469e+06 + 4.331596187634676e+06 + 4.303937809262771e+06 + 4.276277060090966e+06 + 4.248615552639492e+06 + 4.220954901894585e+06 + 4.193296725308497e+06 + 4.165642642799490e+06 + 4.137994276751838e+06 + 4.110353252015833e+06 + 4.082721195907769e+06 + 4.055099738209962e+06 + 4.027490511170732e+06 + 3.999895149504419e+06 + 3.972315290391369e+06 + 3.944752573477943e+06 + 3.917208640876513e+06 + 3.889685137165464e+06 + 3.862183709389194e+06 + 3.834706007058111e+06 + 3.807253682148634e+06 + 3.779828389103201e+06 + 3.752431784830255e+06 + 3.725065528704253e+06 + 3.697731282565667e+06 + 3.670430710720977e+06 + 3.643165479942679e+06 + 3.615937259469279e+06 + 3.588747721005293e+06 + 3.561598538721256e+06 + 3.534491389253709e+06 + 3.507427951705208e+06 + 3.480409907644318e+06 + 3.453438941105620e+06 + 3.426516738589706e+06 + 3.399644989063177e+06 + 3.372825383958653e+06 + 3.346070405300663e+06 + 3.319465764034668e+06 + 3.293075510459727e+06 + 3.266878224028187e+06 + 3.240869303162930e+06 + 3.215052515525467e+06 + 3.189425288821125e+06 + 3.163986116962672e+06 + 3.138734196986282e+06 + 3.113668261011591e+06 + 3.088787111422079e+06 + 3.064089610843659e+06 + 3.039574592322599e+06 + 3.015240898358055e+06 + 2.991087379108502e+06 + 2.967112887579310e+06 + 2.943316282301805e+06 + 2.919696425519270e+06 + 2.896252185185970e+06 + 2.872982434032476e+06 + 2.849886048305633e+06 + 2.826961910405915e+06 + 2.804208907130155e+06 + 2.781625929123051e+06 + 2.759211873644148e+06 + 2.736965641930875e+06 + 2.714886139213983e+06 + 2.692972277509980e+06 + 2.671222972611625e+06 + 2.649637144535781e+06 + 2.628213719738566e+06 + 2.606951628696007e+06 + 2.585849806893141e+06 + 2.564907195391811e+06 + 2.544122739173453e+06 + 2.523495389008342e+06 + 2.503024101022326e+06 + 2.482707834844927e+06 + 2.462545556054412e+06 + 2.442536236120740e+06 + 2.422678849863131e+06 + 2.402972377820649e+06 + 2.383415806334849e+06 + 2.364008125120872e+06 + 2.344748329835404e+06 + 2.325635421794777e+06 + 2.306668405813749e+06 + 2.287846292982958e+06 + 2.269168099757709e+06 + 2.250632846050586e+06 + 2.232239558087812e+06 + 2.213987266957964e+06 + 2.195875007435864e+06 + 2.177901821473463e+06 + 2.160066755143500e+06 + 2.142368857948063e+06 + 2.124807187017495e+06 + 2.107380803567688e+06 + 2.090088772295509e+06 + 2.072930165358991e+06 + 2.055904058912681e+06 + 2.039009532618940e+06 + 2.022245673041180e+06 + 2.005611571515091e+06 + 1.989106323649552e+06 + 1.972729030298793e+06 + 1.956478797095825e+06 + 1.940354734917566e+06 + 1.924355960016194e+06 + 1.908481592593613e+06 + 1.892730757829583e+06 + 1.877102587255698e+06 + 1.861596215902473e+06 + 1.846210783186639e+06 + 1.830945435012332e+06 + 1.815799321323061e+06 + 1.800771597138300e+06 + 1.785861422681660e+06 + 1.771067961851037e+06 + 1.756390384114008e+06 + 1.741827864373811e+06 + 1.727379581118251e+06 + 1.713044718232857e+06 + 1.698822464839031e+06 + 1.684712013805151e+06 + 1.670712563808684e+06 + 1.656823318006428e+06 + 1.643043483055245e+06 + 1.629372271790869e+06 + 1.615808901794204e+06 + 1.602352594044968e+06 + 1.589002574975609e+06 + 1.575758076322615e+06 + 1.562618333634041e+06 + 1.549582587186907e+06 + 1.536650081999105e+06 + 1.523820067124634e+06 + 1.511091797064626e+06 + 1.498464530780005e+06 + 1.485937531189585e+06 + 1.473510066471004e+06 + 1.461181408848471e+06 + 1.448950834625962e+06 + 1.436817625926470e+06 + 1.424781068397768e+06 + 1.412840451407005e+06 + 1.400995070309470e+06 + 1.389244224245752e+06 + 1.377587216393601e+06 + 1.366023355231714e+06 + 1.354551952598923e+06 + 1.343172324427429e+06 + 1.331883792566280e+06 + 1.320685682335073e+06 + 1.309577322956444e+06 + 1.298558048406515e+06 + 1.287627196362487e+06 + 1.276784109496439e+06 + 1.266028134784103e+06 + 1.255358622320226e+06 + 1.244774926866806e+06 + 1.234276408467881e+06 + 1.223862430240984e+06 + 1.213532358913532e+06 + 1.203285566621101e+06 + 1.193121428991948e+06 + 1.183039325468658e+06 + 1.173038640304339e+06 + 1.163118761212139e+06 + 1.153279079987504e+06 + 1.143518992564451e+06 + 1.133837898317260e+06 + 1.124235201394960e+06 + 1.114710310121780e+06 + 1.105262636013577e+06 + 1.095891594215875e+06 + 1.086596604396163e+06 + 1.077377090233802e+06 + 1.068232479242110e+06 + 1.059162202266971e+06 + 1.050165693700918e+06 + 1.041242393088349e+06 + 1.032391743039430e+06 + 1.023613189178869e+06 + 1.014906181731556e+06 + 1.006270174355871e+06 + 9.977046244036794e+05 + 9.892089935677024e+05 + 9.807827465832273e+05 + 9.724253516436865e+05 + 9.641362810046984e+05 + 9.559150102252770e+05 + 9.477610188719215e+05 + 9.396737899139688e+05 + 9.316528091743080e+05 + 9.236975665277143e+05 + 9.158075561735997e+05 + 9.079822751134991e+05 + 9.002212236533747e+05 + 8.925239057014534e+05 + 8.848898281604102e+05 + 8.773185021612709e+05 + 8.698094424648809e+05 + 8.623621663528095e+05 + 8.549761944053203e+05 + 8.476510510446843e+05 + 8.403862637513808e+05 + 8.331813638606276e+05 + 8.260358860837971e+05 + 8.189493675787508e+05 + 8.119213484350282e+05 + 8.049513730504208e+05 + 7.980389891667470e+05 + 7.911837471192866e+05 + 7.843852003599521e+05 + 7.776429053419405e+05 + 7.709564221446526e+05 + 7.643253140173181e+05 + 7.577491471803443e+05 + 7.512274911598503e+05 + 7.447599180231568e+05 + 7.383460026539576e+05 + 7.319853241781880e+05 + 7.256774641850799e+05 + 7.194220067146936e+05 + 7.132185395309449e+05 + 7.070666529520636e+05 + 7.009659400728574e+05 + 6.949159975085063e+05 + 6.889164244086053e+05 + 6.829668228095188e+05 + 6.770667979456050e+05 + 6.712159574726904e+05 + 6.654139120281750e+05 + 6.596602754201142e+05 + 6.539546638052445e+05 + 6.482966962660485e+05 + 6.426859949531512e+05 + 6.371221843431445e+05 + 6.316048918617199e+05 + 6.261337478197705e+05 + 6.207083848228143e+05 + 6.153284385055641e+05 + 6.099935472682050e+05 + 6.047033517354903e+05 + 5.994574954765684e+05 + 5.942556247644721e+05 + 5.890973881315375e+05 + 5.839824370501742e+05 + 5.789104255366600e+05 + 5.738810098259439e+05 + 5.688938490610282e+05 + 5.639486048510919e+05 + 5.590449410545636e+05 + 5.541825244030216e+05 + 5.493610239467514e+05 + 5.445801109611018e+05 + 5.398394595653637e+05 + 5.351387461239359e+05 + 5.304776492529869e+05 + 5.258558503354813e+05 + 5.212730328842620e+05 + 5.167288826663374e+05 + 5.122230881980868e+05 + 5.077553400369428e+05 + 5.033253309731948e+05 + 4.989327564601310e+05 + 4.945773139811803e+05 + 4.902587033143605e+05 + 4.859766266490913e+05 + 4.817307881770549e+05 + 4.775208945372272e+05 + 4.733466546121029e+05 + 4.692077791818720e+05 + 4.651039814988278e+05 + 4.610349770333872e+05 + 4.570004830895544e+05 + 4.530002193970305e+05 + 4.490339078641191e+05 + 4.451012721716975e+05 + 4.412020383482487e+05 + 4.373359346346440e+05 + 4.335026910461138e+05 + 4.297020398291695e+05 + 4.259337153289251e+05 + 4.221974536699117e+05 + 4.184929932504728e+05 + 4.148200744355357e+05 + 4.111784393468680e+05 + 4.075678324287459e+05 + 4.039879999559653e+05 + 4.004386899065928e+05 + 3.969196525836200e+05 + 3.934306400492930e+05 + 3.899714060581240e+05 + 3.865417066557175e+05 + 3.831412995849459e+05 + 3.797699442729113e+05 + 3.764274023566474e+05 + 3.731134371233769e+05 + 3.698278135622827e+05 + 3.665702987827645e+05 + 3.633406615280775e+05 + 3.601386722825769e+05 + 3.569641034535824e+05 + 3.538167290782596e+05 + 3.506963250581825e+05 + 3.476026690576235e+05 + 3.445355402744773e+05 + 3.414947198014101e+05 + 3.384799905288533e+05 + 3.354911367821696e+05 + 3.325279446663284e+05 + 3.295902021531574e+05 + 3.266776986085196e+05 + 3.237902250531212e+05 + 3.209275743946921e+05 + 3.180895409646722e+05 + 3.152759207164211e+05 + 3.124865112943467e+05 + 3.097211117598721e+05 + 3.069795229448014e+05 + 3.042615472339510e+05 + 3.015669883675390e+05 + 2.988956518738279e+05 + 2.962473447339852e+05 + 2.936218752484120e+05 + 2.910190535228683e+05 + 2.884386911235514e+05 + 2.858806009067059e+05 + 2.833445973150213e+05 + 2.808304963224871e+05 + 2.783381153152796e+05 + 2.758672731341289e+05 + 2.734177900017136e+05 + 2.709894875428715e+05 + 2.685821889451269e+05 + 2.661957187314447e+05 + 2.638299027837526e+05 + 2.614845683836235e+05 + 2.591595441417535e+05 + 2.568546601323142e+05 + 2.545697477628685e+05 + 2.523046396706559e+05 + 2.500591699434964e+05 + 2.478331740644226e+05 + 2.456264886409644e+05 + 2.434389516128850e+05 + 2.412704023657298e+05 + 2.391206814330098e+05 + 2.369896306904384e+05 + 2.348770933197599e+05 + 2.327829136173563e+05 + 2.307069372775990e+05 + 2.286490111745211e+05 + 2.266089832623643e+05 + 2.245867029748616e+05 + 2.225820209237310e+05 + 2.205947887183862e+05 + 2.186248592921233e+05 + 2.166720868039439e+05 + 2.147363264605261e+05 + 2.128174347706827e+05 + 2.109152693889452e+05 + 2.090296889843596e+05 + 2.071605535077064e+05 + 2.053077240108720e+05 + 2.034710625599661e+05 + 2.016504325007521e+05 + 1.998456982030229e+05 + 1.980567250370223e+05 + 1.962833797138016e+05 + 1.945255298870997e+05 + 1.927830441323482e+05 + 1.910557922964590e+05 + 1.893436452442803e+05 + 1.876464748512476e+05 + 1.859641540986015e+05 + 1.842965568967865e+05 + 1.826435581738182e+05 + 1.810050340354470e+05 + 1.793808614993985e+05 + 1.777709185575675e+05 + 1.761750842223128e+05 + 1.745932384546507e+05 + 1.730252623268235e+05 + 1.714710377603550e+05 + 1.699304475698536e+05 + 1.684033757560533e+05 + 1.668897071565261e+05 + 1.653893274220018e+05 + 1.639021233234161e+05 + 1.624279825159149e+05 + 1.609667934564489e+05 + 1.595184456811041e+05 + 1.580828296015031e+05 + 1.566598363968120e+05 + 1.552493582649543e+05 + 1.538512882702573e+05 + 1.524655202573447e+05 + 1.510919491064028e+05 + 1.497304705096718e+05 + 1.483809809029638e+05 + 1.470433777326744e+05 + 1.457175592117312e+05 + 1.444034242942686e+05 + 1.431008729933990e+05 + 1.418098060421684e+05 + 1.405301248671864e+05 + 1.392617319094920e+05 + 1.380045303259556e+05 + 1.367584239714278e+05 + 1.355233176631985e+05 + 1.342991169575939e+05 + 1.330857281367400e+05 + 1.318830583220329e+05 + 1.306910153813551e+05 + 1.295095079605118e+05 + 1.283384454277201e+05 + 1.271777378619642e+05 + 1.260272961737778e+05 + 1.248870320778846e+05 + 1.237568578844075e+05 + 1.226366865814357e+05 + 1.215264320654815e+05 + 1.204260088572700e+05 + 1.193353321256488e+05 + 1.182543179024696e+05 + 1.171828828329888e+05 + 1.161209441971572e+05 + 1.150684200368906e+05 + 1.140252290172446e+05 + 1.129912905290012e+05 + 1.119665246989244e+05 + 1.109508522377596e+05 + 1.099441945145749e+05 + 1.089464735474612e+05 + 1.079576119759672e+05 + 1.069775332658437e+05 + 1.060061613940063e+05 + 1.050434208615313e+05 + 1.040892370245828e+05 + 1.031435357647047e+05 + 1.022062434696232e+05 + 1.012772873208916e+05 + 1.003565950684523e+05 + 9.944409498683986e+04 + 9.853971604124359e+04 + 9.764338777276211e+04 + 9.675504027159151e+04 + 9.587460425195689e+04 + 9.500201099602232e+04 + 9.413719236230559e+04 + 9.328008081668093e+04 + 9.243060935253548e+04 + 9.158871152497102e+04 + 9.075432150057999e+04 + 8.992737394814150e+04 + 8.910780408381460e+04 + 8.829554772812854e+04 + 8.749054118346877e+04 + 8.669272128864085e+04 + 8.590202548133289e+04 + 8.511839166524833e+04 + 8.434175826486869e+04 + 8.357206428147563e+04 + 8.280924917713979e+04 + 8.205325293940101e+04 + 8.130401609766987e+04 + 8.056147962909786e+04 + 7.982558503959214e+04 + 7.909627435336930e+04 + 7.837349003289423e+04 + 7.765717506702039e+04 + 7.694727293156023e+04 + 7.624372753229675e+04 + 7.554648331079309e+04 + 7.485548516457589e+04 + 7.417067840840557e+04 + 7.349200889763620e+04 + 7.281942291879337e+04 + 7.215286716185752e+04 + 7.149228885123666e+04 + 7.083763563584826e+04 + 7.018885556144921e+04 + 6.954589717270633e+04 + 6.890870943981725e+04 + 6.827724174191867e+04 + 6.765144392787226e+04 + 6.703126624692857e+04 + 6.641665935636370e+04 + 6.580757439267423e+04 + 6.520396286738058e+04 + 6.460577668030654e+04 + 6.401296820028803e+04 + 6.342549017134596e+04 + 6.284329573351656e+04 + 6.226633845994343e+04 + 6.169457228450359e+04 + 6.112795154311772e+04 + 6.056643099463883e+04 + 6.000996574136701e+04 + 5.945851127624574e+04 + 5.891202351267684e+04 + 5.837045869755570e+04 + 5.783377345558033e+04 + 5.730192482224794e+04 + 5.677487016169035e+04 + 5.625256720967715e+04 + 5.573497408983271e+04 + 5.522204924870504e+04 + 5.471375150828325e+04 + 5.421004006036229e+04 + 5.371087441354901e+04 + 5.321621444975662e+04 + 5.272602039469258e+04 + 5.224025278120609e+04 + 5.175887251825204e+04 + 5.128184085536604e+04 + 5.080911934597862e+04 + 5.034066989608183e+04 + 4.987645473684455e+04 + 4.941643640415772e+04 + 4.896057778639881e+04 + 4.850884207769758e+04 + 4.806119277190277e+04 + 4.761759372195903e+04 + 4.717800906318111e+04 + 4.674240321587012e+04 + 4.631074096205200e+04 + 4.588298735942246e+04 + 4.545910774537743e+04 + 4.503906779825089e+04 + 4.462283347373459e+04 + 4.421037101686000e+04 + 4.380164697651120e+04 + 4.339662816996042e+04 + 4.299528171729217e+04 + 4.259757504220949e+04 + 4.220347581706527e+04 + 4.181295199605238e+04 + 4.142597183433527e+04 + 4.104250383855765e+04 + 4.066251680332360e+04 + 4.028597979815155e+04 + 3.991286213370509e+04 + 3.954313341370015e+04 + 3.917676350485435e+04 + 3.881372250661203e+04 + 3.845398080843414e+04 + 3.809750905736740e+04 + 3.774427812448402e+04 + 3.739425915595785e+04 + 3.704742356207799e+04 + 3.670374297805164e+04 + 3.636318929176292e+04 + 3.602573463927982e+04 + 3.569135138416072e+04 + 3.536001215672983e+04 + 3.503168981923036e+04 + 3.470635744840465e+04 + 3.438398837321134e+04 + 3.406455615393208e+04 + 3.374803457309094e+04 + 3.343439765983423e+04 + 3.312361965186892e+04 + 3.281567499925836e+04 + 3.251053841177231e+04 + 3.220818480242078e+04 + 3.190858928930939e+04 + 3.161172723179306e+04 + 3.131757418548949e+04 + 3.102610591483113e+04 + 3.073729842710719e+04 + 3.045112791454117e+04 + 3.016757076691534e+04 + 2.988660361584138e+04 + 2.960820327321778e+04 + 2.933234674204399e+04 + 2.905901125674980e+04 + 2.878817423326317e+04 + 2.851981328372868e+04 + 2.825390622682930e+04 + 2.799043106146120e+04 + 2.772936599846356e+04 + 2.747068942978120e+04 + 2.721437991599866e+04 + 2.696041623625263e+04 + 2.670877735469368e+04 + 2.645944239579323e+04 + 2.621239068106394e+04 + 2.596760172331024e+04 + 2.572505519859007e+04 + 2.548473096648493e+04 + 2.524660907253227e+04 + 2.501066972455740e+04 + 2.477689330466365e+04 + 2.454526037995217e+04 + 2.431575168300119e+04 + 2.408834810912627e+04 + 2.386303072521571e+04 + 2.363978076395976e+04 + 2.341857962988761e+04 + 2.319940888531031e+04 + 2.298225025100848e+04 + 2.276708562349589e+04 + 2.255389704384009e+04 + 2.234266670372097e+04 + 2.213337697918792e+04 + 2.192601038403303e+04 + 2.172054957464747e+04 + 2.151697738916041e+04 + 2.131527680276242e+04 + 2.111543093252480e+04 + 2.091742306098243e+04 + 2.072123660422193e+04 + 2.052685512482519e+04 + 2.033426234716574e+04 + 2.014344212098682e+04 + 1.995437843426629e+04 + 1.976705544479930e+04 + 1.958145743480243e+04 + 1.939756881213320e+04 + 1.921537413684756e+04 + 1.903485810052154e+04 + 1.885600554387774e+04 + 1.867880143037429e+04 + 1.850323084111479e+04 + 1.832927901452323e+04 + 1.815693131178678e+04 + 1.798617320994377e+04 + 1.781699034075772e+04 + 1.764936845332217e+04 + 1.748329340510924e+04 + 1.731875119617678e+04 + 1.715572795110660e+04 + 1.699420990919751e+04 + 1.683418344358223e+04 + 1.667563503873475e+04 + 1.651855128954979e+04 + 1.636291893365341e+04 + 1.620872481606836e+04 + 1.605595588699932e+04 + 1.590459923143625e+04 + 1.575464203906202e+04 + 1.560607160533683e+04 + 1.545887535681969e+04 + 1.531304082443131e+04 + 1.516855564487381e+04 + 1.502540756956110e+04 + 1.488358445432479e+04 + 1.474307426938193e+04 + 1.460386509288249e+04 + 1.446594509814283e+04 + 1.432930256776952e+04 + 1.419392589719183e+04 + 1.405980357729324e+04 + 1.392692420658459e+04 + 1.379527648729671e+04 + 1.366484921045415e+04 + 1.353563127160237e+04 + 1.340761167272577e+04 + 1.328077950662285e+04 + 1.315512397004589e+04 + 1.303063434970357e+04 + 1.290730001970431e+04 + 1.278511047006237e+04 + 1.266405528001385e+04 + 1.254412410683634e+04 + 1.242530670538782e+04 + 1.230759293022181e+04 + 1.219097272173875e+04 + 1.207543611008671e+04 + 1.196097321598039e+04 + 1.184757424417080e+04 + 1.173522949287449e+04 + 1.162392934478714e+04 + 1.151366426384512e+04 + 1.140442480834694e+04 + 1.129620161634352e+04 + 1.118898540470730e+04 + 1.108276698378667e+04 + 1.097753724013271e+04 + 1.087328713748510e+04 + 1.077000773143687e+04 + 1.066769015148828e+04 + 1.056632560317495e+04 + 1.046590537899618e+04 + 1.036642084361778e+04 + 1.026786343864257e+04 + 1.017022468912003e+04 + 1.007349618928313e+04 + 9.977669609110566e+03 + 9.882736699245763e+03 + 9.788689277747368e+03 + 9.695519238085319e+03 + 9.603218551128393e+03 + 9.511779252802526e+03 + 9.421193453258842e+03 + 9.331453338088948e+03 + 9.242551155902798e+03 + 9.154479227014926e+03 + 9.067229945268125e+03 + 8.980795767109534e+03 + 8.895169220035050e+03 + 8.810342900070031e+03 + 8.726309463870590e+03 + 8.643061639313548e+03 + 8.560592220958239e+03 + 8.478894062727115e+03 + 8.397960086705119e+03 + 8.317783279679375e+03 + 8.238356687487571e+03 + 8.159673421912185e+03 + 8.081726656780256e+03 + 8.004509624589081e+03 + 7.928015622553179e+03 + 7.852238006535134e+03 + 7.777170190090504e+03 + 7.702805651284038e+03 + 7.629137923269694e+03 + 7.556160595291118e+03 + 7.483867321684783e+03 + 7.412251809739373e+03 + 7.341307820993124e+03 + 7.271029178292266e+03 + 7.201409756944273e+03 + 7.132443488123264e+03 + 7.064124361053455e+03 + 6.996446414793790e+03 + 6.929403743407001e+03 + 6.862990497342477e+03 + 6.797200875139910e+03 + 6.732029129721631e+03 + 6.667469570161823e+03 + 6.603516551523545e+03 + 6.540164480186692e+03 + 6.477407817185619e+03 + 6.415241069687017e+03 + 6.353658796883785e+03 + 6.292655608307650e+03 + 6.232226157518487e+03 + 6.172365149982773e+03 + 6.113067340658933e+03 + 6.054327527853383e+03 + 5.996140560115221e+03 + 5.938501333076975e+03 + 5.881404784939355e+03 + 5.824845903828315e+03 + 5.768819722461626e+03 + 5.713321315085574e+03 + 5.658345805472132e+03 + 5.603888359764917e+03 + 5.549944184846402e+03 + 5.496508537213697e+03 + 5.443576713947663e+03 + 5.391144051368102e+03 + 5.339205932358427e+03 + 5.287757780134069e+03 + 5.236795058291703e+03 + 5.186313275265001e+03 + 5.136307977685731e+03 + 5.086774751617681e+03 + 5.037709226449485e+03 + 4.989107068721900e+03 + 4.940963984504954e+03 + 4.893275721702213e+03 + 4.846038063285039e+03 + 4.799246830729600e+03 + 4.752897888312231e+03 + 4.706987133608333e+03 + 4.661510499922751e+03 + 4.616463963202395e+03 + 4.571843532909213e+03 + 4.527645253893021e+03 + 4.483865209302220e+03 + 4.440499515324517e+03 + 4.397544325863069e+03 + 4.354995830474305e+03 + 4.312850249817291e+03 + 4.271103841242844e+03 + 4.229752898292512e+03 + 4.188793745275323e+03 + 4.148222740634546e+03 + 4.108036277499050e+03 + 4.068230779797937e+03 + 4.028802705831530e+03 + 3.989748546349355e+03 + 3.951064821861195e+03 + 3.912748086813885e+03 + 3.874794926585441e+03 + 3.837201956255947e+03 + 3.799965825835211e+03 + 3.763083213042953e+03 + 3.726550823283946e+03 + 3.690365398229224e+03 + 3.654523706502605e+03 + 3.619022543185401e+03 + 3.583858737044133e+03 + 3.549029144619817e+03 + 3.514530650270483e+03 + 3.480360168271582e+03 + 3.446514639490202e+03 + 3.412991033253400e+03 + 3.379786348393921e+03 + 3.346897609451590e+03 + 3.314321868815865e+03 + 3.282056205761040e+03 + 3.250097724763853e+03 + 3.218443559530467e+03 + 3.187090870156345e+03 + 3.156036839918450e+03 + 3.125278679259401e+03 + 3.094813626126841e+03 + 3.064638941053712e+03 + 3.034751909739014e+03 + 3.005149845581890e+03 + 2.975830084543172e+03 + 2.946789986568892e+03 + 2.918026936797055e+03 + 2.889538343339952e+03 + 2.861321641252218e+03 + 2.833374286700636e+03 + 2.805693756659566e+03 + 2.778277556469224e+03 + 2.751123212016022e+03 + 2.724228269242043e+03 + 2.697590301914011e+03 + 2.671206904109025e+03 + 2.645075688971241e+03 + 2.619194294405700e+03 + 2.593560380141823e+03 + 2.568171626715687e+03 + 2.543025737542386e+03 + 2.518120435211838e+03 + 2.493453462030127e+03 + 2.469022585172818e+03 + 2.444825590018873e+03 + 2.420860280374604e+03 + 2.397124484732366e+03 + 2.373616049394018e+03 + 2.350332838436762e+03 + 2.327272738609171e+03 + 2.304433655218562e+03 + 2.281813512846715e+03 + 2.259410255601743e+03 + 2.237221844685107e+03 + 2.215246260811306e+03 + 2.193481506123082e+03 + 2.171925598942706e+03 + 2.150576574458654e+03 + 2.129432488764117e+03 + 2.108491414442484e+03 + 2.087751441300839e+03 + 2.067210678851041e+03 + 2.046867252353801e+03 + 2.026719303565292e+03 + 2.006764993817073e+03 + 1.987002500493615e+03 + 1.967430017215378e+03 + 1.948045754608514e+03 + 1.928847939062915e+03 + 1.909834815497017e+03 + 1.891004644375446e+03 + 1.872355700452609e+03 + 1.853886275802303e+03 + 1.835594678424827e+03 + 1.817479231062563e+03 + 1.799538272810955e+03 + 1.781770158220284e+03 + 1.764173256646331e+03 + 1.746745953278825e+03 + 1.729486647489427e+03 + 1.712393752933919e+03 + 1.695465699568615e+03 + 1.678700930817119e+03 + 1.662097903850073e+03 + 1.645655091966725e+03 + 1.629370981458450e+03 + 1.613244072202941e+03 + 1.597272880432907e+03 + 1.581455933682248e+03 + 1.565791771294578e+03 + 1.550278951289465e+03 + 1.534916043199639e+03 + 1.519701626827566e+03 + 1.504634298568118e+03 + 1.489712666891078e+03 + 1.474935351996483e+03 + 1.460300988758884e+03 + 1.445808223853118e+03 + 1.431455716350942e+03 + 1.417242138357507e+03 + 1.403166173386480e+03 + 1.389226518010158e+03 + 1.375421881007569e+03 + 1.361750982089843e+03 + 1.348212553926219e+03 + 1.334805341072190e+03 + 1.321528098720046e+03 + 1.308379594477261e+03 + 1.295358607457036e+03 + 1.282463927300085e+03 + 1.269694355823267e+03 + 1.257048705895313e+03 + 1.244525800699936e+03 + 1.232124475203576e+03 + 1.219843575042076e+03 + 1.207681956049559e+03 + 1.195638485404256e+03 + 1.183712040621380e+03 + 1.171901509388141e+03 + 1.160205790292893e+03 + 1.148623791762007e+03 + 1.137154432301071e+03 + 1.125796641257775e+03 + 1.114549357263016e+03 + 1.103411528660030e+03 + 1.092382114454342e+03 + 1.081460082700689e+03 + 1.070644411095300e+03 + 1.059934087579793e+03 + 1.049328108720195e+03 + 1.038825480494848e+03 + 1.028425218971371e+03 + 1.018126348582361e+03 + 1.007927902927668e+03 + 9.978289254104482e+02 + 9.878284675679866e+02 + 9.779255898738762e+02 + 9.681193621623704e+02 + 9.584088623012988e+02 + 9.487931771658360e+02 + 9.392714022763922e+02 + 9.298426409505287e+02 + 9.205060057185552e+02 + 9.112606172437117e+02 + 9.021056036681564e+02 + 8.930401022331439e+02 + 8.840632580637879e+02 + 8.751742235821227e+02 + 8.663721600224155e+02 + 8.576562363107178e+02 + 8.490256285516970e+02 + 8.404795212594149e+02 + 8.320171064683727e+02 + 8.236375833541338e+02 + 8.153401590664150e+02 + 8.071240480244585e+02 + 7.989884718119321e+02 + 7.909326598382663e+02 + 7.829558483527250e+02 + 7.750572805483002e+02 + 7.672362073200991e+02 + 7.594918862313154e+02 + 7.518235817392584e+02 + 7.442305655888715e+02 + 7.367121158939042e+02 + 7.292675176279554e+02 + 7.218960630476328e+02 + 7.145970504767349e+02 + 7.073697847820883e+02 + 7.002135778527235e+02 + 6.931277475695276e+02 + 6.861116184218383e+02 + 6.791645215373005e+02 + 6.722857937677298e+02 + 6.654747784472139e+02 + 6.587308253877042e+02 + 6.520532900189463e+02 + 6.454415341582659e+02 + 6.388949257382737e+02 + 6.324128381494658e+02 + 6.259946511571761e+02 + 6.196397502963263e+02 + 6.133475264197438e+02 + 6.071173768094372e+02 + 6.009487042352257e+02 + 5.948409165626937e+02 + 5.887934278801442e+02 + 5.828056577149104e+02 + 5.768770306335107e+02 + 5.710069770500405e+02 + 5.651949326339243e+02 + 5.594403381224611e+02 + 5.537426401234757e+02 + 5.481012901152631e+02 + 5.425157443662293e+02 + 5.369854648776029e+02 + 5.315099185870243e+02 + 5.260885773011631e+02 + 5.207209179649268e+02 + 5.154064223119497e+02 + 5.101445770921985e+02 + 5.049348740937783e+02 + 4.997768095346806e+02 + 4.946698844046663e+02 + 4.896136047862775e+02 + 4.846074811232588e+02 + 4.796510285618583e+02 + 4.747437670096575e+02 + 4.698852205388910e+02 + 4.650749179071526e+02 + 4.603123926691712e+02 + 4.555971823563725e+02 + 4.509288288727789e+02 + 4.463068788207030e+02 + 4.417308827523721e+02 + 4.372003955530256e+02 + 4.327149765501697e+02 + 4.282741889383891e+02 + 4.238776002586995e+02 + 4.195247821802792e+02 + 4.152153101301976e+02 + 4.109487639564401e+02 + 4.067247273397822e+02 + 4.025427875685178e+02 + 3.984025363858318e+02 + 3.943035692477232e+02 + 3.902454851077117e+02 + 3.862278871965347e+02 + 3.822503823673904e+02 + 3.783125809462488e+02 + 3.744140974100913e+02 + 3.705545496319825e+02 + 3.667335588488600e+02 + 3.629507504654170e+02 + 3.592057531920941e+02 + 3.554981990087823e+02 + 3.518277237997781e+02 + 3.481939667588409e+02 + 3.445965704231110e+02 + 3.410351808614133e+02 + 3.375094474036331e+02 + 3.340190228447264e+02 + 3.305635632260179e+02 + 3.271427276872922e+02 + 3.237561788604219e+02 + 3.204035826343936e+02 + 3.170846077594078e+02 + 3.137989262426811e+02 + 3.105462135925898e+02 + 3.073261480789523e+02 + 3.041384108878384e+02 + 3.009826866110996e+02 + 2.978586626197819e+02 + 2.947660292278245e+02 + 2.917044799774912e+02 + 2.886737110898206e+02 + 2.856734216347172e+02 + 2.827033138205502e+02 + 2.797630925185924e+02 + 2.768524653868921e+02 + 2.739711430162750e+02 + 2.711188386172004e+02 + 2.682952682417776e+02 + 2.655001507075566e+02 + 2.627332073441469e+02 + 2.599941621974095e+02 + 2.572827420191948e+02 + 2.545986760992428e+02 + 2.519416963867954e+02 + 2.493115374004747e+02 + 2.467079361520411e+02 + 2.441306322519956e+02 + 2.415793676749632e+02 + 2.390538868162835e+02 + 2.365539368283623e+02 + 2.340792670618049e+02 + 2.316296291092408e+02 + 2.292047772816256e+02 + 2.268044680583002e+02 + 2.244284601550858e+02 + 2.220765149177526e+02 + 2.197483957886078e+02 + 2.174438683808943e+02 + 2.151627007150871e+02 + 2.129046628991759e+02 + 2.106695273325222e+02 + 2.084570687245048e+02 + 2.062670637405841e+02 + 2.040992912166423e+02 + 2.019535322675416e+02 + 1.998295699356443e+02 + 1.977271893831886e+02 + 1.956461779038128e+02 + 1.935863247355415e+02 + 1.915474213798307e+02 + 1.895292611678483e+02 + 1.875316391958052e+02 + 1.855543528482985e+02 + 1.835972014670904e+02 + 1.816599861324650e+02 + 1.797425099308505e+02 + 1.778445779263947e+02 + 1.759659969484732e+02 + 1.741065756739388e+02 + 1.722661246609050e+02 + 1.704444562587039e+02 + 1.686413847511611e+02 + 1.668567261386198e+02 + 1.650902980928235e+02 + 1.633419201885993e+02 + 1.616114136777071e+02 + 1.598986014805750e+02 + 1.582033083619683e+02 + 1.565253606828442e+02 + 1.548645864376032e+02 + 1.532208154238845e+02 + 1.515938789750561e+02 + 1.499836100268175e+02 + 1.483898432531407e+02 + 1.468124148175615e+02 + 1.452511624739094e+02 + 1.437059256375598e+02 + 1.421765451600804e+02 + 1.406628634671130e+02 + 1.391647245894945e+02 + 1.376819739463268e+02 + 1.362144585029153e+02 + 1.347620267668397e+02 + 1.333245285902542e+02 + 1.319018153476916e+02 + 1.304937399101563e+02 + 1.291001564496927e+02 + 1.277209206089626e+02 + 1.263558894821456e+02 + 1.250049214462411e+02 + 1.236678763269726e+02 + 1.223446153162142e+02 + 1.210350008534558e+02 + 1.197388968258891e+02 + 1.184561684202564e+02 + 1.171866820332312e+02 + 1.159303054814129e+02 + 1.146869078350233e+02 + 1.134563593521917e+02 + 1.122385316718855e+02 + 1.110332976232454e+02 + 1.098405311979204e+02 + 1.086601077608261e+02 + 1.074919038117468e+02 + 1.063357969778381e+02 + 1.051916662270612e+02 + 1.040593916259906e+02 + 1.029388543466298e+02 + 1.018299368341955e+02 + 1.007325226151947e+02 + 9.964649633160360e+01 + 9.857174381861689e+01 + 9.750815195741964e+01 + 9.645560874783912e+01 + 9.541400332430685e+01 + 9.438322582683587e+01 + 9.336316750654088e+01 + 9.235372071959520e+01 + 9.135477878367931e+01 + 9.036623609174318e+01 + 8.938798812110527e+01 + 8.841993128541375e+01 + 8.746196304638978e+01 + 8.651398190997742e+01 + 8.557588728936869e+01 + 8.464757961904559e+01 + 8.372896034435935e+01 + 8.281993180539014e+01 + 8.192039735296085e+01 + 8.103026128111058e+01 + 8.014942874495698e+01 + 7.927780590401203e+01 + 7.841529983858037e+01 + 7.756181847617736e+01 + 7.671727071446733e+01 + 7.588156631674119e+01 + 7.505461587372024e+01 + 7.423633095310755e+01 + 7.342662394299153e+01 + 7.262540803009301e+01 + 7.183259736215271e+01 + 7.104810687905130e+01 + 7.027185230277652e+01 + 6.950375028269488e+01 + 6.874371822566854e+01 + 6.799167430460268e+01 + 6.724753760248480e+01 + 6.651122793902957e+01 + 6.578266588744034e+01 + 6.506177289160765e+01 + 6.434847109859102e+01 + 6.364268339115934e+01 + 6.294433351272004e+01 + 6.225334589309644e+01 + 6.156964567793161e+01 + 6.089315882540817e+01 + 6.022381196253272e+01 + 5.956153243192431e+01 + 5.890624835784802e+01 + 5.825788851805937e+01 + 5.761638239540161e+01 + 5.698166019812880e+01 + 5.635365277455941e+01 + 5.573229169643452e+01 + 5.511750921575248e+01 + 5.450923819422894e+01 + 5.390741220139490e+01 + 5.331196548214332e+01 + 5.272283288224639e+01 + 5.213994992103501e+01 + 5.156325275682114e+01 + 5.099267813956413e+01 + 5.042816349744366e+01 + 4.986964685712531e+01 + 4.931706681520628e+01 + 4.877036264381848e+01 + 4.822947419115650e+01 + 4.769434186145065e+01 + 4.716490671386568e+01 + 4.664111036072763e+01 + 4.612289496053356e+01 + 4.561020331071316e+01 + 4.510297873475514e+01 + 4.460116508782800e+01 + 4.410470685618211e+01 + 4.361354903662819e+01 + 4.312763714409483e+01 + 4.264691728541290e+01 + 4.217133607138089e+01 + 4.170084064118655e+01 + 4.123537869187841e+01 + 4.077489840121474e+01 + 4.031934846724150e+01 + 3.986867813088396e+01 + 3.942283710103097e+01 + 3.898177559914080e+01 + 3.854544435810492e+01 + 3.811379455962712e+01 + 3.768677789368684e+01 + 3.726434656726136e+01 + 3.684645322013298e+01 + 3.643305096011807e+01 + 3.602409338288954e+01 + 3.561953452360934e+01 + 3.521932891649128e+01 + 3.482343153306697e+01 + 3.443179775085747e+01 + 3.404438343901749e+01 + 3.366114490993698e+01 + 3.328203887889210e+01 + 3.290702252020257e+01 + 3.253605343510379e+01 + 3.216908962260722e+01 + 3.180608952699355e+01 + 3.144701200592500e+01 + 3.109181631097627e+01 + 3.074046212448961e+01 + 3.039290952642646e+01 + 3.004911898312090e+01 + 2.970905136572861e+01 + 2.937266792505025e+01 + 2.903993030352619e+01 + 2.871080057194543e+01 + 2.838524113862799e+01 + 2.806321475945346e+01 + 2.774468462701056e+01 + 2.742961427426368e+01 + 2.711796757973106e+01 + 2.680970882898042e+01 + 2.650480264209962e+01 + 2.620321398820359e+01 + 2.590490820737408e+01 + 2.560985096325826e+01 + 2.531800827674159e+01 + 2.502934653543958e+01 + 2.474383242809609e+01 + 2.446143296972707e+01 + 2.418211555345684e+01 + 2.390584787621480e+01 + 2.363259794654911e+01 + 2.336233413255323e+01 + 2.309502509558490e+01 + 2.283063979379989e+01 + 2.256914753657127e+01 + 2.231051792982671e+01 + 2.205472087402378e+01 + 2.180172658443576e+01 + 2.155150556919213e+01 + 2.130402866286656e+01 + 2.105926696778129e+01 + 2.081719185319289e+01 + 2.057777503962135e+01 + 2.034098850331043e+01 + 2.010680447006149e+01 + 1.987519550063876e+01 + 1.964613442528577e+01 + 1.941959432580914e+01 + 1.919554855827313e+01 + 1.897397075515799e+01 + 1.875483482712853e+01 + 1.853811494931854e+01 + 1.832378554313712e+01 + 1.811182128985819e+01 + 1.790219714756028e+01 + 1.769488831219516e+01 + 1.748987022919803e+01 + 1.728711861052799e+01 + 1.708660939866258e+01 + 1.688831878332332e+01 + 1.669222321036695e+01 + 1.649829934690638e+01 + 1.630652410217020e+01 + 1.611687463464447e+01 + 1.592932831698975e+01 + 1.574386275792588e+01 + 1.556045580679505e+01 + 1.537908552081595e+01 + 1.519973018767385e+01 + 1.502236832516821e+01 + 1.484697865494502e+01 + 1.467354012841447e+01 + 1.450203191274907e+01 + 1.433243337158686e+01 + 1.416472409674524e+01 + 1.399888388846149e+01 + 1.383489273805109e+01 + 1.367273085728561e+01 + 1.351237865788487e+01 + 1.335381673920349e+01 + 1.319702591751814e+01 + 1.304198719993403e+01 + 1.288868177614133e+01 + 1.273709104714046e+01 + 1.258719659672914e+01 + 1.243898018736778e+01 + 1.229242378719869e+01 + 1.214750954184370e+01 + 1.200421977308728e+01 + 1.186253699764556e+01 + 1.172244390266849e+01 + 1.158392335040491e+01 + 1.144695839482221e+01 + 1.131153225250660e+01 + 1.117762830926809e+01 + 1.104523013501555e+01 + 1.091432145806843e+01 + 1.078488617566414e+01 + 1.065690836231677e+01 + 1.053037224372639e+01 + 1.040526220941685e+01 + 1.028156282144551e+01 + 1.015925878941852e+01 + 1.003833498402321e+01 + 9.918776439618298e+00 + 9.800568334039683e+00 + 9.683696005431957e+00 + 9.568144946174611e+00 + 9.453900787919052e+00 + 9.340949322860192e+00 + 9.229276489267212e+00 + 9.118868359446189e+00 + 9.009711163642070e+00 + 8.901791273796370e+00 + 8.795095191785947e+00 + 8.689609570648638e+00 + 8.585321201853549e+00 + 8.482217005296002e+00 + 8.380284046581689e+00 + 8.279509523576925e+00 + 8.179880760330461e+00 + 8.081385224417300e+00 + 7.984010508389771e+00 + 7.887744326863491e+00 + 7.792574535206823e+00 + 7.698489109519010e+00 + 7.605476146133772e+00 + 7.513523878187234e+00 + 7.422620653280592e+00 + 7.332754935473541e+00 + 7.243915322674125e+00 + 7.156090524556396e+00 + 7.069269365741123e+00 + 6.983440797017198e+00 + 6.898593877074525e+00 + 6.814717779007339e+00 + 6.731801797516630e+00 + 6.649835331100769e+00 + 6.568807890289103e+00 + 6.488709103685009e+00 + 6.409528699865692e+00 + 6.331256515961359e+00 + 6.253882503643640e+00 + 6.177396712290002e+00 + 6.101789297547966e+00 + 6.027050522250886e+00 + 5.953170745278158e+00 + 5.880140434362498e+00 + 5.807950156612827e+00 + 5.736590570385212e+00 + 5.666052441485230e+00 + 5.596326632559173e+00 + 5.527404095182261e+00 + 5.459275884510260e+00 + 5.391933149962507e+00 + 5.325367127621260e+00 + 5.259569151260657e+00 + 5.194530647433734e+00 + 5.130243129823101e+00 + 5.066698206416531e+00 + 5.003887570881058e+00 + 4.941803001453549e+00 + 4.880436373900456e+00 + 4.819779643419130e+00 + 4.759824844738533e+00 + 4.700564110200850e+00 + 4.641989649988083e+00 + 4.584093751736625e+00 + 4.526868793565781e+00 + 4.470307230074105e+00 + 4.414401594729965e+00 + 4.359144507919768e+00 + 4.304528662004969e+00 + 4.250546825086277e+00 + 4.197191851627622e+00 + 4.144456666159979e+00 + 4.092334266478478e+00 + 4.040817732600400e+00 + 3.989900213340690e+00 + 3.939574930757155e+00 + 3.889835183170760e+00 + 3.840674335613269e+00 + 3.792085827136757e+00 + 3.744063169627271e+00 + 3.696599938809659e+00 + 3.649689781941428e+00 + 3.603326418080199e+00 + 3.557503628382808e+00 + 3.512215261374414e+00 + 3.467455236465362e+00 + 3.423217534816642e+00 + 3.379496201686086e+00 + 3.336285348654454e+00 + 3.293579148649655e+00 + 3.251371841226642e+00 + 3.209657725464606e+00 + 3.168431157939940e+00 + 3.127686563504146e+00 + 3.087418425005168e+00 + 3.047621281181530e+00 + 3.008289735457784e+00 + 2.969418446796439e+00 + 2.931002129285814e+00 + 2.893035560502260e+00 + 2.855513571053400e+00 + 2.818431044951714e+00 + 2.781782927380857e+00 + 2.745564215550934e+00 + 2.709769959926351e+00 + 2.674395268211684e+00 + 2.639435297946605e+00 + 2.604885259637663e+00 + 2.570740420206636e+00 + 2.536996093812299e+00 + 2.503647644969884e+00 + 2.470690493614489e+00 + 2.438120105903952e+00 + 2.405931997235836e+00 + 2.374121735683807e+00 + 2.342684934097179e+00 + 2.311617253784086e+00 + 2.280914406216957e+00 + 2.250572146781167e+00 + 2.220586279273893e+00 + 2.190952653478714e+00 + 2.161667162009881e+00 + 2.132725747880213e+00 + 2.104124396422602e+00 + 2.075859132902099e+00 + 2.047926031580743e+00 + 2.020321209266692e+00 + 1.993040822266800e+00 + 1.966081073072867e+00 + 1.939438205166541e+00 + 1.913108500802827e+00 + 1.887088286918805e+00 + 1.861373929947225e+00 + 1.835961834345823e+00 + 1.810848447621857e+00 + 1.786030255213551e+00 + 1.761503779943143e+00 + 1.737265586321442e+00 + 1.713312275115213e+00 + 1.689640483715834e+00 + 1.666246890168493e+00 + 1.643128207113473e+00 + 1.620281182788458e+00 + 1.597702604935450e+00 + 1.575389294699183e+00 + 1.553338108095691e+00 + 1.531545938928566e+00 + 1.510009713407906e+00 + 1.488726392261371e+00 + 1.467692971937850e+00 + 1.446906480207705e+00 + 1.426363979153670e+00 + 1.406062564959602e+00 + 1.385999363940103e+00 + 1.366171536058216e+00 + 1.346576274130787e+00 + 1.327210800124654e+00 + 1.308072368828510e+00 + 1.289158266486426e+00 + 1.270465807665891e+00 + 1.251992339187792e+00 + 1.233735237889272e+00 + 1.215691907984316e+00 + 1.197859785096899e+00 + 1.180236333919823e+00 + 1.162819045897185e+00 + 1.145605442741095e+00 + 1.128593073973588e+00 + 1.111779515284567e+00 + 1.095162371880828e+00 + 1.078739275475473e+00 + 1.062507883334588e+00 + 1.046465881646835e+00 + 1.030610981874106e+00 + 1.014940920295882e+00 + 9.994534611152829e-01 + 9.841463930086627e-01 + 9.690175291593270e-01 + 9.540647093618980e-01 + 9.392857969051628e-01 + 9.246786792729085e-01 + 9.102412696338000e-01 + 8.959715035501604e-01 + 8.818673402027871e-01 + 8.679267639726700e-01 + 8.541477806828601e-01 + 8.405284189410931e-01 + 8.270667316623297e-01 + 8.137607925445277e-01 + 8.006086976874616e-01 + 7.876085666023992e-01 + 7.747585387876328e-01 + 7.620567754307064e-01 + 7.495014602973783e-01 + 7.370907966216457e-01 + 7.248230088485250e-01 + 7.126963429559050e-01 + 7.007090638413013e-01 + 6.888594572109231e-01 + 6.771458292779966e-01 + 6.655665045807759e-01 + 6.541198279036498e-01 + 6.428041637825399e-01 + 6.316178947210964e-01 + 6.205594229105623e-01 + 6.096271692194244e-01 + 5.988195719936049e-01 + 5.881350889221284e-01 + 5.775721954595900e-01 + 5.671293841176136e-01 + 5.568051664208875e-01 + 5.465980707194322e-01 + 5.365066418737608e-01 + 5.265294432641988e-01 + 5.166650544231339e-01 + 5.069120710261563e-01 + 4.972691065208522e-01 + 4.877347899800689e-01 + 4.783077664492044e-01 + 4.689866979017357e-01 + 4.597702612073233e-01 + 4.506571489021905e-01 + 4.416460700276524e-01 + 4.327357479310139e-01 + 4.239249212044141e-01 + 4.152123442913231e-01 + 4.065967853823845e-01 + 3.980770275573000e-01 + 3.896518691214699e-01 + 3.813201217302061e-01 + 3.730806117264635e-01 + 3.649321798861945e-01 + 3.568736798624809e-01 + 3.489039797704173e-01 + 3.410219613244947e-01 + 3.332265187013593e-01 + 3.255165605086018e-01 + 3.178910083898543e-01 + 3.103487958586359e-01 + 3.028888701360887e-01 + 2.955101913786422e-01 + 2.882117315106021e-01 + 2.809924755137371e-01 + 2.738514204626846e-01 + 2.667875748867065e-01 + 2.597999604522775e-01 + 2.528876103054370e-01 + 2.460495685714950e-01 + 2.392848919788540e-01 + 2.325926484518769e-01 + 2.259719167857841e-01 + 2.194217877354759e-01 + 2.129413627175208e-01 + 2.065297538274627e-01 + 2.001860848470379e-01 + 1.939094897086202e-01 + 1.876991127051828e-01 + 1.815541094417414e-01 + 1.754736452756007e-01 + 1.694568956974621e-01 + 1.635030470498157e-01 + 1.576112950508609e-01 + 1.517808453564031e-01 + 1.460109140364644e-01 + 1.403007261766342e-01 + 1.346495165784953e-01 + 1.290565300180611e-01 + 1.235210199704221e-01 + 1.180422494287421e-01 + 1.126194909047226e-01 + 1.072520253105725e-01 + 1.019391428882170e-01 + 9.668014295417104e-02 + 9.147433293860986e-02 + 8.632102939670111e-02 + 8.121955756354367e-02 + 7.616925052308399e-02 + 7.116945022739722e-02 + 6.621950693894064e-02 + 6.131877854698166e-02 + 5.646663155698649e-02 + 5.166244039926220e-02 + 4.690558691983024e-02 + 4.219546135291571e-02 + 3.753146148005052e-02 + 3.291299228995687e-02 + 2.833946692296159e-02 + 2.381030573044091e-02 + 1.932493608562982e-02 + 1.488279323951757e-02 + 1.048331933378767e-02 + 6.125963364112487e-03 + 1.810181928441051e-03 + -2.464561780353438e-03 + -6.698797872311066e-03 + -1.089304914227914e-02 + -1.504783206514415e-02 + -1.916365656771068e-02 + -2.324102555134537e-02 + -2.728043585421590e-02 + -3.128237791440187e-02 + -3.524733543518016e-02 + -3.917578628623598e-02 + -4.306820207473552e-02 + -4.692504798332473e-02 + -5.074678357205704e-02 + -5.453386225593208e-02 + -5.828673132987599e-02 + -6.200583267980977e-02 + -6.569160218738558e-02 + -6.934446987831328e-02 + -7.296486055963237e-02 + -7.655319319650564e-02 + -8.010988114185758e-02 + -8.363533270338043e-02 + -8.712995053780122e-02 + -9.059413193193132e-02 + -9.402826926020177e-02 + -9.743274938790861e-02 + -1.008079541064505e-01 + -1.041542604608216e-01 + -1.074720401131623e-01 + -1.107616598682374e-01 + -1.140234819193764e-01 + -1.172578632830942e-01 + -1.204651563472630e-01 + -1.236457089966172e-01 + -1.267998640735528e-01 + -1.299279600346222e-01 + -1.330303309819349e-01 + -1.361073061299021e-01 + -1.391592104828469e-01 + -1.421863647988072e-01 + -1.451890851855495e-01 + -1.481676836992942e-01 + -1.511224682100277e-01 + -1.540537421399553e-01 + -1.569618050599837e-01 + -1.598469524764272e-01 + -1.627094755828420e-01 + -1.655496618778017e-01 + -1.683677949236447e-01 + -1.711641541517163e-01 + -1.739390154343296e-01 + -1.766926508045859e-01 + -1.794253283544359e-01 + -1.821373127460387e-01 + -1.848288648981078e-01 + -1.875002419786971e-01 + -1.901516978443653e-01 + -1.927834826976386e-01 + -1.953958431846420e-01 + -1.979890227559544e-01 + -2.005632612952037e-01 + -2.031187952951354e-01 + -2.056558581586019e-01 + -2.081746798356756e-01 + -2.106754870586183e-01 + -2.131585035595214e-01 + -2.156239496932611e-01 + -2.180720427808593e-01 + -2.205029972492180e-01 + -2.229170242226580e-01 + -2.253143319488933e-01 + -2.276951258807381e-01 + -2.300596082676421e-01 + -2.324079786235529e-01 + -2.347404337552020e-01 + -2.370571673694448e-01 + -2.393583705568364e-01 + -2.416442317867498e-01 + -2.439149365965413e-01 + -2.461706679522762e-01 + -2.484116061949506e-01 + -2.506379289887288e-01 + -2.528498115997045e-01 + -2.550474267213886e-01 + -2.572309443123204e-01 + -2.594005320626763e-01 + -2.615563552809436e-01 + -2.636985766193694e-01 + -2.658273564814242e-01 + -2.679428529152917e-01 + -2.700452216727706e-01 + -2.721346163277996e-01 + -2.742111879420810e-01 + -2.762750854486131e-01 + -2.783264557785196e-01 + -2.803654434689624e-01 + -2.823921908087395e-01 + -2.844068381756654e-01 + -2.864095239109061e-01 + -2.884003839950212e-01 + -2.903795524955394e-01 + -2.923471617904532e-01 + -2.943033420191942e-01 + -2.962482212763220e-01 + -2.981819256807660e-01 + -3.001045795717013e-01 + -3.020163055275332e-01 + -3.039172239885258e-01 + -3.058074538261057e-01 + -3.076871122705734e-01 + -3.095563141516905e-01 + -3.114151727559051e-01 + -3.132637999546681e-01 + -3.151023057635463e-01 + -3.169307984585886e-01 + -3.187493845723606e-01 + -3.205581689117248e-01 + -3.223572548745565e-01 + -3.241467443749414e-01 + -3.259267374142799e-01 + -3.276973325691862e-01 + -3.294586270053045e-01 + -3.312107160890871e-01 + -3.329536937962613e-01 + -3.346876527428858e-01 + -3.364126840777460e-01 + -3.381288775295205e-01 + -3.398363212268976e-01 + -3.415351019703767e-01 + -3.432253052941175e-01 + -3.449070152459444e-01 + -3.465803145779997e-01 + -3.482452848007116e-01 + -3.499020059501182e-01 + -3.515505568826250e-01 + -3.531910152859590e-01 + -3.548234573752725e-01 + -3.564479582224311e-01 + -3.580645917875246e-01 + -3.596734306319520e-01 + -3.612745463110025e-01 + -3.628680093075062e-01 + -3.644538885605036e-01 + -3.660322520458910e-01 + -3.676031668332329e-01 + -3.691666987516095e-01 + -3.707229124779602e-01 + -3.722718716670178e-01 + -3.738136390608672e-01 + -3.753482761467254e-01 + -3.768758432749062e-01 + -3.783964002465877e-01 + -3.799100056353694e-01 + -3.814167166997948e-01 + -3.829165900177774e-01 + -3.844096813827866e-01 + -3.858960456354959e-01 + -3.873757364088854e-01 + -3.888488064600710e-01 + -3.903153077375676e-01 + -3.917752913452379e-01 + -3.932288075353338e-01 + -3.946759055987133e-01 + -3.961166339473677e-01 + -3.975510402779339e-01 + -3.989791715122148e-01 + -4.004010735521537e-01 + -4.018167915706618e-01 + -4.032263700983349e-01 + -4.046298528561717e-01 + -4.060272827301947e-01 + -4.074187016384220e-01 + -4.088041511045764e-01 + -4.101836719923956e-01 + -4.115573039941210e-01 + -4.129250863351419e-01 + -4.142870577221169e-01 + -4.156432559911067e-01 + -4.169937183587125e-01 + -4.183384813924751e-01 + -4.196775807600287e-01 + -4.210110517890521e-01 + -4.223389293056927e-01 + -4.236612469859990e-01 + -4.249780381358575e-01 + -4.262893357128523e-01 + -4.275951718561576e-01 + -4.288955781548201e-01 + -4.301905856512787e-01 + -4.314802245948859e-01 + -4.327645248125306e-01 + -4.340435157401011e-01 + -4.353172261319986e-01 + -4.365856843065750e-01 + -4.378489181140523e-01 + -4.391069545111200e-01 + -4.403598201489721e-01 + -4.416075414900063e-01 + -4.428501441617211e-01 + -4.440876533447125e-01 + -4.453200938994337e-01 + -4.465474900663732e-01 + -4.477698656375739e-01 + -4.489872440132049e-01 + -4.501996482091757e-01 + -4.514071007293397e-01 + -4.526096234423685e-01 + -4.538072381973440e-01 + -4.549999664346564e-01 + -4.561878287239103e-01 + -4.573708454564815e-01 + -4.585490367840940e-01 + -4.597224223838171e-01 + -4.608910215483196e-01 + -4.620548532229073e-01 + -4.632139359470852e-01 + -4.643682878385313e-01 + -4.655179266829866e-01 + -4.666628700026897e-01 + -4.678031349656974e-01 + -4.689387384105899e-01 + -4.700696968538801e-01 + -4.711960263436956e-01 + -4.723177425902391e-01 + -4.734348612979066e-01 + -4.745473978039702e-01 + -4.756553669920032e-01 + -4.767587833133353e-01 + -4.778576611599107e-01 + -4.789520147944609e-01 + -4.800418577229591e-01 + -4.811272034289876e-01 + -4.822080654661853e-01 + -4.832844566828151e-01 + -4.843563896207272e-01 + -4.854238767122197e-01 + -4.864869303811440e-01 + -4.875455627166793e-01 + -4.885997853037442e-01 + -4.896496095260600e-01 + -4.906950466868944e-01 + -4.917361080077966e-01 + -4.927728043326091e-01 + -4.938051461993963e-01 + -4.948331438840640e-01 + -4.958568075736277e-01 + -4.968761473512240e-01 + -4.978911731225704e-01 + -4.989018945002663e-01 + -4.999083208482176e-01 + -5.009104613021941e-01 + -5.019083248972503e-01 + -5.029019205602130e-01 + -5.038912570358333e-01 + -5.048763428126108e-01 + -5.058571862004539e-01 + -5.068337954285524e-01 + -5.078061785541023e-01 + -5.087743434557772e-01 + -5.097382978215317e-01 + -5.106980492175714e-01 + -5.116536051046018e-01 + -5.126049728172039e-01 + -5.135521595357905e-01 + -5.144951722594635e-01 + -5.154340177423219e-01 + -5.163687027408718e-01 + -5.172992340140365e-01 + -5.182256180631845e-01 + -5.191478612397169e-01 + -5.200659697981208e-01 + -5.209799499565910e-01 + -5.218898077706294e-01 + -5.227955490891694e-01 + -5.236971796844924e-01 + -5.245947053253370e-01 + -5.254881317688337e-01 + -5.263774645512288e-01 + -5.272627090126604e-01 + -5.281438703531137e-01 + -5.290209539977515e-01 + -5.298939652703512e-01 + -5.307629091340913e-01 + -5.316277904778723e-01 + -5.324886142110474e-01 + -5.333453852986519e-01 + -5.341981085648844e-01 + -5.350467886587517e-01 + -5.358914300418783e-01 + -5.367320373706596e-01 + -5.375686152841432e-01 + -5.384011680734792e-01 + -5.392297001047128e-01 + -5.400542157871245e-01 + -5.408747194069761e-01 + -5.416912150785628e-01 + -5.425037068232484e-01 + -5.433121987186342e-01 + -5.441166948984431e-01 + -5.449171994793097e-01 + -5.457137163885653e-01 + -5.465062494211190e-01 + -5.472948023341125e-01 + -5.480793790518950e-01 + -5.488599834110802e-01 + -5.496366191273470e-01 + -5.504092899443518e-01 + -5.511779994928784e-01 + -5.519427513029639e-01 + -5.527035490710489e-01 + -5.534603964642170e-01 + -5.542132970155166e-01 + -5.549622540841348e-01 + -5.557072711574547e-01 + -5.564483519201564e-01 + -5.571854997347668e-01 + -5.579187179919134e-01 + -5.586480102698358e-01 + -5.593733798207278e-01 + -5.600948299343745e-01 + -5.608123641702291e-01 + -5.615259858006734e-01 + -5.622356980349319e-01 + -5.629415042452564e-01 + -5.636434078437447e-01 + -5.643414121719204e-01 + -5.650355204128609e-01 + -5.657257359067179e-01 + -5.664120620074502e-01 + -5.670945018655422e-01 + -5.677730587569899e-01 + -5.684477360210265e-01 + -5.691185368946378e-01 + -5.697854646230838e-01 + -5.704485224954847e-01 + -5.711077138615709e-01 + -5.717630418949810e-01 + -5.724145097236072e-01 + -5.730621208149326e-01 + -5.737058785857441e-01 + -5.743457862811681e-01 + -5.749818469287452e-01 + -5.756140639044424e-01 + -5.762424408221788e-01 + -5.768669806578469e-01 + -5.774876866716016e-01 + -5.781045625480883e-01 + -5.787176116189466e-01 + -5.793268371095267e-01 + -5.799322422747063e-01 + -5.805338304985933e-01 + -5.811316053198213e-01 + -5.817255703521417e-01 + -5.823157287697720e-01 + -5.829020838792335e-01 + -5.834846393919914e-01 + -5.840633987477251e-01 + -5.846383653791880e-01 + -5.852095428966003e-01 + -5.857769347455314e-01 + -5.863405444497650e-01 + -5.869003757905312e-01 + -5.874564321893059e-01 + -5.880087171065591e-01 + -5.885572344676900e-01 + -5.891019879107314e-01 + -5.896429809482692e-01 + -5.901802172691951e-01 + -5.907137006344829e-01 + -5.912434348345698e-01 + -5.917694236578408e-01 + -5.922916709366750e-01 + -5.928101804947136e-01 + -5.933249560457028e-01 + -5.938360014505492e-01 + -5.943433207019595e-01 + -5.948469177828256e-01 + -5.953467966083078e-01 + -5.958429610716830e-01 + -5.963354151930935e-01 + -5.968241629967538e-01 + -5.973092085065336e-01 + -5.977905558475627e-01 + -5.982682091919279e-01 + -5.987421727060626e-01 + -5.992124504335189e-01 + -5.996790465513929e-01 + -6.001419654039183e-01 + -6.006012111567195e-01 + -6.010567880969444e-01 + -6.015087007096906e-01 + -6.019569532209035e-01 + -6.024015499278780e-01 + -6.028424953542454e-01 + -6.032797938560218e-01 + -6.037134498528102e-01 + -6.041434679778884e-01 + -6.045698527611498e-01 + -6.049926086966888e-01 + -6.054117403213235e-01 + -6.058272522301629e-01 + -6.062391491063152e-01 + -6.066474357377917e-01 + -6.070521167750024e-01 + -6.074531969194140e-01 + -6.078506811508277e-01 + -6.082445741313003e-01 + -6.086348804777613e-01 + -6.090216052590219e-01 + -6.094047534940796e-01 + -6.097843300758768e-01 + -6.101603397998798e-01 + -6.105327877567767e-01 + -6.109016791586246e-01 + -6.112670188349342e-01 + -6.116288118244032e-01 + -6.119870634033990e-01 + -6.123417788015699e-01 + -6.126929631816058e-01 + -6.130406216857481e-01 + -6.133847595846266e-01 + -6.137253821544012e-01 + -6.140624946688724e-01 + -6.143961025253998e-01 + -6.147262111225434e-01 + -6.150528258526081e-01 + -6.153759522847098e-01 + -6.156955958775930e-01 + -6.160117619293205e-01 + -6.163244560848270e-01 + -6.166336840291214e-01 + -6.169394513190288e-01 + -6.172417635406579e-01 + -6.175406263458638e-01 + -6.178360454670117e-01 + -6.181280266570051e-01 + -6.184165756494230e-01 + -6.187016981615432e-01 + -6.189834001775048e-01 + -6.192616876391890e-01 + -6.195365661632112e-01 + -6.198080416901866e-01 + -6.200761202902517e-01 + -6.203408078682074e-01 + -6.206021103982113e-01 + -6.208600339819080e-01 + -6.211145848662764e-01 + -6.213657689929696e-01 + -6.216135922609831e-01 + -6.218580610691606e-01 + -6.220991816188346e-01 + -6.223369599996067e-01 + -6.225714026287344e-01 + -6.228025157602012e-01 + -6.230303055354752e-01 + -6.232547783843585e-01 + -6.234759406837302e-01 + -6.236937987287140e-01 + -6.239083589372102e-01 + -6.241196278170006e-01 + -6.243276119301496e-01 + -6.245323178052680e-01 + -6.247337518435782e-01 + -6.249319204108740e-01 + -6.251268303788342e-01 + -6.253184884524475e-01 + -6.255069009766967e-01 + -6.256920746682559e-01 + -6.258740163701917e-01 + -6.260527328726909e-01 + -6.262282307801417e-01 + -6.264005167589047e-01 + -6.265695976839164e-01 + -6.267354804070123e-01 + -6.268981717782514e-01 + -6.270576786775590e-01 + -6.272140080071444e-01 + -6.273671666729116e-01 + -6.275171615794166e-01 + -6.276639997579259e-01 + -6.278076882572314e-01 + -6.279482340166599e-01 + -6.280856440870369e-01 + -6.282199255881125e-01 + -6.283510856176625e-01 + -6.284791313265480e-01 + -6.286040698559974e-01 + -6.287259082244099e-01 + -6.288446536460758e-01 + -6.289603134448759e-01 + -6.290728947784819e-01 + -6.291824049507972e-01 + -6.292888513285516e-01 + -6.293922409846477e-01 + -6.294925812787570e-01 + -6.295898797737625e-01 + -6.296841435561055e-01 + -6.297753800606519e-01 + -6.298635970427606e-01 + -6.299488015475858e-01 + -6.300310009429952e-01 + -6.301102030719377e-01 + -6.301864151575183e-01 + -6.302596446383568e-01 + -6.303298993873763e-01 + -6.303971867419816e-01 + -6.304615141097702e-01 + -6.305228892569528e-01 + -6.305813198299395e-01 + -6.306368133767261e-01 + -6.306893774095105e-01 + -6.307390196514921e-01 + -6.307857478830511e-01 + -6.308295697989852e-01 + -6.308704929504492e-01 + -6.309085250312678e-01 + -6.309436740902202e-01 + -6.309759477467396e-01 + -6.310053535533821e-01 + -6.310318994644450e-01 + -6.310555933584764e-01 + -6.310764430051494e-01 + -6.310944561130111e-01 + -6.311096405770181e-01 + -6.311220043955681e-01 + -6.311315554778594e-01 + -6.311383016234806e-01 + -6.311422506666780e-01 + -6.311434107412031e-01 + -6.311417897164122e-01 + -6.311373953205278e-01 + -6.311302357049288e-01 + -6.311203189243589e-01 + -6.311076528624781e-01 + -6.310922454230109e-01 + -6.310741047155799e-01 + -6.310532389686786e-01 + -6.310296560496979e-01 + -6.310033639455465e-01 + -6.309743708604478e-01 + -6.309426848479184e-01 + -6.309083139781310e-01 + -6.308712663782245e-01 + -6.308315500367087e-01 + -6.307891730465176e-01 + -6.307441436976022e-01 + -6.306964701860184e-01 + -6.306461606431758e-01 + -6.305932231701467e-01 + -6.305376659121696e-01 + -6.304794970062023e-01 + -6.304187245700347e-01 + -6.303553569805046e-01 + -6.302894025962669e-01 + -6.302208694979176e-01 + -6.301497657748981e-01 + -6.300760996409697e-01 + -6.299998795100692e-01 + -6.299211136514613e-01 + -6.298398102240708e-01 + -6.297559773915322e-01 + -6.296696236381925e-01 + -6.295807574013027e-01 + -6.294893864698483e-01 + -6.293955192818200e-01 + -6.292991645521353e-01 + -6.292003301703828e-01 + -6.290990243894826e-01 + -6.289952557946986e-01 + -6.288890326523825e-01 + -6.287803632353285e-01 + -6.286692558944412e-01 + -6.285557190083507e-01 + -6.284397608763040e-01 + -6.283213897612988e-01 + -6.282006141317734e-01 + -6.280774423035318e-01 + -6.279518824496017e-01 + -6.278239431715447e-01 + -6.276936329659792e-01 + -6.275609600561086e-01 + -6.274259327786519e-01 + -6.272885594754783e-01 + -6.271488484695774e-01 + -6.270068083043618e-01 + -6.268624473656752e-01 + -6.267157737459064e-01 + -6.265667960682418e-01 + -6.264155229504741e-01 + -6.262619625962428e-01 + -6.261061232036680e-01 + -6.259480131935671e-01 + -6.257876413121770e-01 + -6.256250157840939e-01 + -6.254601447340036e-01 + -6.252930366972961e-01 + -6.251237002207461e-01 + -6.249521437614608e-01 + -6.247783756272571e-01 + -6.246024042025771e-01 + -6.244242378628240e-01 + -6.242438848129136e-01 + -6.240613535991787e-01 + -6.238766528797192e-01 + -6.236897908519111e-01 + -6.235007757894835e-01 + -6.233096161276966e-01 + -6.231163203935827e-01 + -6.229208970207127e-01 + -6.227233543185018e-01 + -6.225237005131427e-01 + -6.223219439896936e-01 + -6.221180932821515e-01 + -6.219121568092019e-01 + -6.217041429518334e-01 + -6.214940600654550e-01 + -6.212819164164759e-01 + -6.210677203231969e-01 + -6.208514802076882e-01 + -6.206332045396580e-01 + -6.204129016762088e-01 + -6.201905798335827e-01 + -6.199662474146647e-01 + -6.197399127976954e-01 + -6.195115842446862e-01 + -6.192812702436963e-01 + -6.190489791767655e-01 + -6.188147191241502e-01 + -6.185784984898128e-01 + -6.183403256742428e-01 + -6.181002088023494e-01 + -6.178581563548247e-01 + -6.176141767575239e-01 + -6.173682779492388e-01 + -6.171204683326561e-01 + -6.168707564823446e-01 + -6.166191506410910e-01 + -6.163656588303806e-01 + -6.161102891648960e-01 + -6.158530502595377e-01 + -6.155939503803246e-01 + -6.153329975648972e-01 + -6.150702000825419e-01 + -6.148055662334609e-01 + -6.145391042808102e-01 + -6.142708224010276e-01 + -6.140007288452335e-01 + -6.137288318637003e-01 + -6.134551394181680e-01 + -6.131796597624336e-01 + -6.129024013716257e-01 + -6.126233721919256e-01 + -6.123425803085120e-01 + -6.120600340492245e-01 + -6.117757414641359e-01 + -6.114897106263320e-01 + -6.112019497520672e-01 + -6.109124671249474e-01 + -6.106212708396386e-01 + -6.103283687668304e-01 + -6.100337690977098e-01 + -6.097374799911853e-01 + -6.094395093910078e-01 + -6.091398653642833e-01 + -6.088385561024087e-01 + -6.085355898356886e-01 + -6.082309742898534e-01 + -6.079247173286892e-01 + -6.076168274335947e-01 + -6.073073125569597e-01 + -6.069961804304546e-01 + -6.066834389911383e-01 + -6.063690964791788e-01 + -6.060531610171422e-01 + -6.057356401425160e-01 + -6.054165419100932e-01 + -6.050958745176729e-01 + -6.047736455801236e-01 + -6.044498630713394e-01 + -6.041245351487873e-01 + -6.037976695799242e-01 + -6.034692741523835e-01 + -6.031393567367498e-01 + -6.028079252312161e-01 + -6.024749874110954e-01 + -6.021405510415967e-01 + -6.018046242357692e-01 + -6.014672148046522e-01 + -6.011283302871711e-01 + -6.007879786053585e-01 + -6.004461675660895e-01 + -6.001029047914931e-01 + -5.997581981158361e-01 + -5.994120553308485e-01 + -5.990644841299763e-01 + -5.987154923482985e-01 + -5.983650876334137e-01 + -5.980132773866208e-01 + -5.976600693793478e-01 + -5.973054714798371e-01 + -5.969494914365839e-01 + -5.965921366499265e-01 + -5.962334146660923e-01 + -5.958733334161985e-01 + -5.955119002909084e-01 + -5.951491227180785e-01 + -5.947850085981863e-01 + -5.944195652847630e-01 + -5.940528001366523e-01 + -5.936847210858313e-01 + -5.933153356463837e-01 + -5.929446511281147e-01 + -5.925726749957585e-01 + -5.921994146776245e-01 + -5.918248776317639e-01 + -5.914490714685531e-01 + -5.910720036664838e-01 + -5.906936815737919e-01 + -5.903141124838686e-01 + -5.899333037986367e-01 + -5.895512629817115e-01 + -5.891679973989596e-01 + -5.887835143677140e-01 + -5.883978211708401e-01 + -5.880109250637769e-01 + -5.876228334774148e-01 + -5.872335538851382e-01 + -5.868430932520374e-01 + -5.864514587624869e-01 + -5.860586578978172e-01 + -5.856646978273519e-01 + -5.852695857497323e-01 + -5.848733289413443e-01 + -5.844759343592291e-01 + -5.840774091773326e-01 + -5.836777608879199e-01 + -5.832769964405170e-01 + -5.828751228494087e-01 + -5.824721474461222e-01 + -5.820680771414760e-01 + -5.816629188869962e-01 + -5.812566799399100e-01 + -5.808493672421570e-01 + -5.804409877894702e-01 + -5.800315488931496e-01 + -5.796210574409676e-01 + -5.792095201878247e-01 + -5.787969440874288e-01 + -5.783833362006023e-01 + -5.779687035684036e-01 + -5.775530530727403e-01 + -5.771363914738108e-01 + -5.767187255974381e-01 + -5.763000625573806e-01 + -5.758804091701334e-01 + -5.754597721176316e-01 + -5.750381583420940e-01 + -5.746155745735496e-01 + -5.741920274506414e-01 + -5.737675239291555e-01 + -5.733420708457294e-01 + -5.729156748671344e-01 + -5.724883426083383e-01 + -5.720600807791615e-01 + -5.716308961653045e-01 + -5.712007954599810e-01 + -5.707697852850102e-01 + -5.703378722272431e-01 + -5.699050629355835e-01 + -5.694713639828742e-01 + -5.690367818720566e-01 + -5.686013232951076e-01 + -5.681649948578290e-01 + -5.677278029894381e-01 + -5.672897541841998e-01 + -5.668508549514105e-01 + -5.664111117923113e-01 + -5.659705312703284e-01 + -5.655291198708162e-01 + -5.650868839171556e-01 + -5.646438297396282e-01 + -5.641999637601537e-01 + -5.637552925169101e-01 + -5.633098223391846e-01 + -5.628635595080524e-01 + -5.624165104013904e-01 + -5.619686812129524e-01 + -5.615200782186582e-01 + -5.610707080464411e-01 + -5.606205767194389e-01 + -5.601696901727680e-01 + -5.597180550627928e-01 + -5.592656777039943e-01 + -5.588125640834879e-01 + -5.583587201544192e-01 + -5.579041522213387e-01 + -5.574488666805684e-01 + -5.569928694014434e-01 + -5.565361664370690e-01 + -5.560787640439252e-01 + -5.556206683493946e-01 + -5.551618853326125e-01 + -5.547024208857518e-01 + -5.542422809960397e-01 + -5.537814718214656e-01 + -5.533199995563840e-01 + -5.528578699065892e-01 + -5.523950887012330e-01 + -5.519316620139326e-01 + -5.514675956847120e-01 + -5.510028956792654e-01 + -5.505375681122012e-01 + -5.500716185256428e-01 + -5.496050526609592e-01 + -5.491378767346244e-01 + -5.486700964364043e-01 + -5.482017173715276e-01 + -5.477327453596050e-01 + -5.472631862648399e-01 + -5.467930458019109e-01 + -5.463223294669347e-01 + -5.458510432287255e-01 + -5.453791929736209e-01 + -5.449067840000759e-01 + -5.444338218966174e-01 + -5.439603123952597e-01 + -5.434862611282417e-01 + -5.430116738240560e-01 + -5.425365561436022e-01 + -5.420609134355956e-01 + -5.415847511352451e-01 + -5.411080748136494e-01 + -5.406308901525899e-01 + -5.401532026526268e-01 + -5.396750177177082e-01 + -5.391963408895222e-01 + -5.387171774649071e-01 + -5.382375326730170e-01 + -5.377574122460893e-01 + -5.372768215524759e-01 + -5.367957656717409e-01 + -5.363142502106338e-01 + -5.358322806031541e-01 + -5.353498619928253e-01 + -5.348669995911720e-01 + -5.343836987381033e-01 + -5.338999648334884e-01 + -5.334158029976483e-01 + -5.329312184607295e-01 + -5.324462166033185e-01 + -5.319608023124877e-01 + -5.314749807283198e-01 + -5.309887574568507e-01 + -5.305021373834015e-01 + -5.300151254489873e-01 + -5.295277270550899e-01 + -5.290399471460621e-01 + -5.285517906644440e-01 + -5.280632628772480e-01 + -5.275743687930865e-01 + -5.270851133485194e-01 + -5.265955015863814e-01 + -5.261055383771222e-01 + -5.256152286457003e-01 + -5.251245776074701e-01 + -5.246335901741112e-01 + -5.241422711040373e-01 + -5.236506252667474e-01 + -5.231586574906982e-01 + -5.226663726352896e-01 + -5.221737757253558e-01 + -5.216808715970676e-01 + -5.211876649797802e-01 + -5.206941607382560e-01 + -5.202003635069621e-01 + -5.197062778404161e-01 + -5.192119087096243e-01 + -5.187172609937223e-01 + -5.182223393579939e-01 + -5.177271482807863e-01 + -5.172316923981860e-01 + -5.167359765148800e-01 + -5.162400053033168e-01 + -5.157437833544083e-01 + -5.152473152222008e-01 + -5.147506055161414e-01 + -5.142536587718484e-01 + -5.137564794429633e-01 + -5.132590721404230e-01 + -5.127614414610688e-01 + -5.122635918987255e-01 + -5.117655278912282e-01 + -5.112672538418732e-01 + -5.107687741570007e-01 + -5.102700934318621e-01 + -5.097712161511054e-01 + -5.092721464952894e-01 + -5.087728887586368e-01 + -5.082734473837237e-01 + -5.077738269224511e-01 + -5.072740315773641e-01 + -5.067740655070005e-01 + -5.062739331645890e-01 + -5.057736389339202e-01 + -5.052731870571522e-01 + -5.047725816027976e-01 + -5.042718267556677e-01 + -5.037709267723895e-01 + -5.032698858620083e-01 + -5.027687082997551e-01 + -5.022673983228978e-01 + -5.017659599138892e-01 + -5.012643972224838e-01 + -5.007627144504877e-01 + -5.002609154317549e-01 + -4.997590043686060e-01 + -4.992569856498065e-01 + -4.987548629163329e-01 + -4.982526401066572e-01 + -4.977503215591422e-01 + -4.972479113357710e-01 + -4.967454132608579e-01 + -4.962428310876830e-01 + -4.957401690448965e-01 + -4.952374311333114e-01 + -4.947346209581790e-01 + -4.942317423902789e-01 + -4.937287995168010e-01 + -4.932257964768885e-01 + -4.927227367709692e-01 + -4.922196239985463e-01 + -4.917164622446805e-01 + -4.912132554897460e-01 + -4.907100074652099e-01 + -4.902067216434476e-01 + -4.897034018910860e-01 + -4.892000521396699e-01 + -4.886966760659724e-01 + -4.881932772071136e-01 + -4.876898592264887e-01 + -4.871864261030248e-01 + -4.866829812293292e-01 + -4.861795280147214e-01 + -4.856760706607693e-01 + -4.851726126266216e-01 + -4.846691571189501e-01 + -4.841657080652781e-01 + -4.836622690168214e-01 + -4.831588433295234e-01 + -4.826554347812969e-01 + -4.821520468729375e-01 + -4.816486828820545e-01 + -4.811453462713459e-01 + -4.806420406166251e-01 + -4.801387695127853e-01 + -4.796355363816449e-01 + -4.791323444815042e-01 + -4.786291970695780e-01 + -4.781260978727254e-01 + -4.776230503252043e-01 + -4.771200574973888e-01 + -4.766171228253449e-01 + -4.761142497486388e-01 + -4.756114415594656e-01 + -4.751087014547341e-01 + -4.746060327035595e-01 + -4.741034386828772e-01 + -4.736009226286348e-01 + -4.730984877717556e-01 + -4.725961373913972e-01 + -4.720938746127822e-01 + -4.715917026117559e-01 + -4.710896247171748e-01 + -4.705876440070008e-01 + -4.700857635192827e-01 + -4.695839864443119e-01 + -4.690823160197067e-01 + -4.685807553687465e-01 + -4.680793073815264e-01 + -4.675779752270572e-01 + -4.670767621237579e-01 + -4.665756710130068e-01 + -4.660747048828000e-01 + -4.655738667469987e-01 + -4.650731595624170e-01 + -4.645725864569897e-01 + -4.640721505529091e-01 + -4.635718546060059e-01 + -4.630717014390969e-01 + -4.625716940204364e-01 + -4.620718354412200e-01 + -4.615721285948061e-01 + -4.610725762550177e-01 + -4.605731814392849e-01 + -4.600739469669758e-01 + -4.595748755034438e-01 + -4.590759700613133e-01 + -4.585772335293120e-01 + -4.580786685902926e-01 + -4.575802780165928e-01 + -4.570820645542124e-01 + -4.565840309327809e-01 + -4.560861801183225e-01 + -4.555885148408127e-01 + -4.550910375242214e-01 + -4.545937511574892e-01 + -4.540966585092119e-01 + -4.535997618400510e-01 + -4.531030641427475e-01 + -4.526065682230286e-01 + -4.521102761991050e-01 + -4.516141909960451e-01 + -4.511183155232459e-01 + -4.506226519976986e-01 + -4.501272029129367e-01 + -4.496319709853875e-01 + -4.491369589904647e-01 + -4.486421693813144e-01 + -4.481476045149588e-01 + -4.476532669406306e-01 + -4.471591591812127e-01 + -4.466652837454304e-01 + -4.461716431800687e-01 + -4.456782399407630e-01 + -4.451850764283579e-01 + -4.446921550770006e-01 + -4.441994783152980e-01 + -4.437070485743053e-01 + -4.432148683148817e-01 + -4.427229399164072e-01 + -4.422312656936392e-01 + -4.417398479943503e-01 + -4.412486891611525e-01 + -4.407577915365379e-01 + -4.402671575060104e-01 + -4.397767893532367e-01 + -4.392866892910770e-01 + -4.387968597340107e-01 + -4.383073029681190e-01 + -4.378180210879689e-01 + -4.373290163087382e-01 + -4.368402909924953e-01 + -4.363518475687816e-01 + -4.358636880897754e-01 + -4.353758146064535e-01 + -4.348882293452391e-01 + -4.344009344375495e-01 + -4.339139321041776e-01 + -4.334272247184532e-01 + -4.329408142509990e-01 + -4.324547026649819e-01 + -4.319688922210647e-01 + -4.314833850702666e-01 + -4.309981832317592e-01 + -4.305132886299618e-01 + -4.300287034407881e-01 + -4.295444298858639e-01 + -4.290604699557538e-01 + -4.285768254794737e-01 + -4.280934983815344e-01 + -4.276104909880938e-01 + -4.271278053251724e-01 + -4.266454431999359e-01 + -4.261634065006114e-01 + -4.256816972235624e-01 + -4.252003173934318e-01 + -4.247192689049444e-01 + -4.242385536499166e-01 + -4.237581735472888e-01 + -4.232781305399061e-01 + -4.227984264773803e-01 + -4.223190631457318e-01 + -4.218400424415704e-01 + -4.213613663598799e-01 + -4.208830368540804e-01 + -4.204050553934426e-01 + -4.199274237890383e-01 + -4.194501442515862e-01 + -4.189732183034799e-01 + -4.184966476302857e-01 + -4.180204343198091e-01 + -4.175445800025869e-01 + -4.170690862458790e-01 + -4.165939547960728e-01 + -4.161191875920802e-01 + -4.156447863485650e-01 + -4.151707524172177e-01 + -4.146970878143395e-01 + -4.142237944432959e-01 + -4.137508735370036e-01 + -4.132783267358912e-01 + -4.128061559031381e-01 + -4.123343628419361e-01 + -4.118629489726368e-01 + -4.113919157251955e-01 + -4.109212649651476e-01 + -4.104509983224866e-01 + -4.099811172669397e-01 + -4.095116233202941e-01 + -4.090425181490535e-01 + -4.085738034100841e-01 + -4.081054804950061e-01 + -4.076375508831032e-01 + -4.071700161671795e-01 + -4.067028779692610e-01 + -4.062361376606066e-01 + -4.057697965353959e-01 + -4.053038563335837e-01 + -4.048383186645677e-01 + -4.043731849141807e-01 + -4.039084564103662e-01 + -4.034441345521896e-01 + -4.029802208230617e-01 + -4.025167167043049e-01 + -4.020536236099443e-01 + -4.015909428779320e-01 + -4.011286758375757e-01 + -4.006668238996902e-01 + -4.002053885607212e-01 + -3.997443712200008e-01 + -3.992837731698375e-01 + -3.988235956310492e-01 + -3.983638399923307e-01 + -3.979045076012857e-01 + -3.974455996644362e-01 + -3.969871175556028e-01 + -3.965290626455606e-01 + -3.960714361699136e-01 + -3.956142393772600e-01 + -3.951574735515524e-01 + -3.947011399985758e-01 + -3.942452398354794e-01 + -3.937897742524872e-01 + -3.933347447660869e-01 + -3.928801524442024e-01 + -3.924259983101159e-01 + -3.919722839283850e-01 + -3.915190103656777e-01 + -3.910661784756895e-01 + -3.906137895655892e-01 + -3.901618450499643e-01 + -3.897103461604648e-01 + -3.892592935529919e-01 + -3.888086884121152e-01 + -3.883585322771145e-01 + -3.879088261485191e-01 + -3.874595710701922e-01 + -3.870107681556456e-01 + -3.865624182556531e-01 + -3.861145225228043e-01 + -3.856670823544472e-01 + -3.852200986473037e-01 + -3.847735723987576e-01 + -3.843275047747315e-01 + -3.838818965026468e-01 + -3.834367486164244e-01 + -3.829920625791138e-01 + -3.825478392535004e-01 + -3.821040794322394e-01 + -3.816607841213338e-01 + -3.812179544462010e-01 + -3.807755914230820e-01 + -3.803336958584798e-01 + -3.798922686597118e-01 + -3.794513108818827e-01 + -3.790108236907996e-01 + -3.785708078449803e-01 + -3.781312640889848e-01 + -3.776921934895628e-01 + -3.772535969260590e-01 + -3.768154752452403e-01 + -3.763778294637203e-01 + -3.759406605249527e-01 + -3.755039692439986e-01 + -3.750677562951532e-01 + -3.746320226741715e-01 + -3.741967693787305e-01 + -3.737619968727901e-01 + -3.733277061470673e-01 + -3.728938983949728e-01 + -3.724605741247380e-01 + -3.720277341192338e-01 + -3.715953793429491e-01 + -3.711635103186269e-01 + -3.707321278978636e-01 + -3.703012331728173e-01 + -3.698708267439747e-01 + -3.694409092657609e-01 + -3.690114815572269e-01 + -3.685825444178367e-01 + -3.681540985405766e-01 + -3.677261445488677e-01 + -3.672986832474148e-01 + -3.668717154245260e-01 + -3.664452417818624e-01 + -3.660192630178876e-01 + -3.655937798167319e-01 + -3.651687928442244e-01 + -3.647443027770453e-01 + -3.643203103057334e-01 + -3.638968161236534e-01 + -3.634738208501973e-01 + -3.630513251204181e-01 + -3.626293296340570e-01 + -3.622078349959966e-01 + -3.617868418102546e-01 + -3.613663507559756e-01 + -3.609463624258993e-01 + -3.605268773947004e-01 + -3.601078962972172e-01 + -3.596894197319259e-01 + -3.592714482724653e-01 + -3.588539824938156e-01 + -3.584370229705016e-01 + -3.580205702765974e-01 + -3.576046249835235e-01 + -3.571891876270012e-01 + -3.567742587321382e-01 + -3.563598388637925e-01 + -3.559459285557617e-01 + -3.555325283179373e-01 + -3.551196386794110e-01 + -3.547072601423791e-01 + -3.542953931967586e-01 + -3.538840383835105e-01 + -3.534731961849680e-01 + -3.530628670336623e-01 + -3.526530514374770e-01 + -3.522437498876279e-01 + -3.518349628366106e-01 + -3.514266907403692e-01 + -3.510189340474827e-01 + -3.506116931966672e-01 + -3.502049686305037e-01 + -3.497987607886671e-01 + -3.493930701015490e-01 + -3.489878969787067e-01 + -3.485832418243141e-01 + -3.481791050461803e-01 + -3.477754870557839e-01 + -3.473723882547367e-01 + -3.469698090253131e-01 + -3.465677497415546e-01 + -3.461662107762984e-01 + -3.457651925045610e-01 + -3.453646952920019e-01 + -3.449647194961470e-01 + -3.445652654674211e-01 + -3.441663335489293e-01 + -3.437679240760669e-01 + -3.433700373751777e-01 + -3.429726737709668e-01 + -3.425758335909973e-01 + -3.421795171685511e-01 + -3.417837248082679e-01 + -3.413884567949557e-01 + -3.409937134173290e-01 + -3.405994949798623e-01 + -3.402058017865278e-01 + -3.398126341027504e-01 + -3.394199921921239e-01 + -3.390278763247643e-01 + -3.386362867748747e-01 + -3.382452237948665e-01 + -3.378546876227794e-01 + -3.374646785249709e-01 + -3.370751967392704e-01 + -3.366862424749215e-01 + -3.362978159833941e-01 + -3.359099174981644e-01 + -3.355225472182573e-01 + -3.351357053498810e-01 + -3.347493921057998e-01 + -3.343636076973308e-01 + -3.339783523006465e-01 + -3.335936261089775e-01 + -3.332094293460974e-01 + -3.328257621547543e-01 + -3.324426246881435e-01 + -3.320600171619409e-01 + -3.316779397280902e-01 + -3.312963925265998e-01 + -3.309153757279716e-01 + -3.305348894653861e-01 + -3.301549338737799e-01 + -3.297755091265357e-01 + -3.293966153413448e-01 + -3.290182526215280e-01 + -3.286404211114115e-01 + -3.282631209285871e-01 + -3.278863521751846e-01 + -3.275101149642331e-01 + -3.271344093953196e-01 + -3.267592355617253e-01 + -3.263845935667566e-01 + -3.260104834866909e-01 + -3.256369053882101e-01 + -3.252638593756906e-01 + -3.248913455268053e-01 + -3.245193638907094e-01 + -3.241479145199382e-01 + -3.237769974872735e-01 + -3.234066128661293e-01 + -3.230367606622389e-01 + -3.226674409186036e-01 + -3.222986537192250e-01 + -3.219303990783447e-01 + -3.215626770146125e-01 + -3.211954875680534e-01 + -3.208288307426270e-01 + -3.204627065455645e-01 + -3.200971150001409e-01 + -3.197320561103191e-01 + -3.193675298795836e-01 + -3.190035363166080e-01 + -3.186400754009213e-01 + -3.182771471114187e-01 + -3.179147514432106e-01 + -3.175528883799994e-01 + -3.171915578921511e-01 + -3.168307599394173e-01 + -3.164704945026028e-01 + -3.161107615528752e-01 + -3.157515610223091e-01 + -3.153928928534279e-01 + -3.150347570035595e-01 + -3.146771534412893e-01 + -3.143200821026652e-01 + -3.139635429048980e-01 + -3.136075357713601e-01 + -3.132520606345795e-01 + -3.128971174301287e-01 + -3.125427060850263e-01 + -3.121888265003789e-01 + -3.118354785699559e-01 + -3.114826622209773e-01 + -3.111303773636806e-01 + -3.107786238863177e-01 + -3.104274016699458e-01 + -3.100767106006651e-01 + -3.097265505731036e-01 + -3.093769214901858e-01 + -3.090278232197667e-01 + -3.086792556057311e-01 + -3.083312185528201e-01 + -3.079837119302323e-01 + -3.076367355606988e-01 + -3.072902893338402e-01 + -3.069443731087555e-01 + -3.065989866918071e-01 + -3.062541299629242e-01 + -3.059098027895394e-01 + -3.055660049841727e-01 + -3.052227363624680e-01 + -3.048799967605036e-01 + -3.045377860349815e-01 + -3.041961039937703e-01 + -3.038549504461246e-01 + -3.035143252370935e-01 + -3.031742281687436e-01 + -3.028346590287212e-01 + -3.024956176228422e-01 + -3.021571037727226e-01 + -3.018191172891879e-01 + -3.014816579447884e-01 + -3.011447255196590e-01 + -3.008083198102758e-01 + -3.004724406299011e-01 + -3.001370877400161e-01 + -2.998022608844934e-01 + -2.994679598576119e-01 + -2.991341844426006e-01 + -2.988009344054493e-01 + -2.984682095047237e-01 + -2.981360094999961e-01 + -2.978043341494513e-01 + -2.974731831997393e-01 + -2.971425563888731e-01 + -2.968124534589884e-01 + -2.964828741880918e-01 + -2.961538183196636e-01 + -2.958252855581221e-01 + -2.954972756291568e-01 + -2.951697882690829e-01 + -2.948428232168150e-01 + -2.945163801997789e-01 + -2.941904589349781e-01 + -2.938650591314966e-01 + -2.935401805013078e-01 + -2.932158227514122e-01 + -2.928919855851135e-01 + -2.925686687341852e-01 + -2.922458719001491e-01 + -2.919235947316832e-01 + -2.916018369508684e-01 + -2.912805982685433e-01 + -2.909598783275820e-01 + -2.906396768390501e-01 + -2.903199935181080e-01 + -2.900008280188033e-01 + -2.896821799916231e-01 + -2.893640491090957e-01 + -2.890464350819901e-01 + -2.887293375718574e-01 + -2.884127562142981e-01 + -2.880966906629407e-01 + -2.877811406014185e-01 + -2.874661057081589e-01 + -2.871515856017081e-01 + -2.868375799224188e-01 + -2.865240883310016e-01 + -2.862111104788733e-01 + -2.858986460098822e-01 + -2.855866945593247e-01 + -2.852752557499685e-01 + -2.849643292069009e-01 + -2.846539145659956e-01 + -2.843440114851778e-01 + -2.840346195818731e-01 + -2.837257384382189e-01 + -2.834173676812886e-01 + -2.831095069534547e-01 + -2.828021558855677e-01 + -2.824953140398479e-01 + -2.821889810170294e-01 + -2.818831564761255e-01 + -2.815778399984394e-01 + -2.812730311718642e-01 + -2.809687296216254e-01 + -2.806649349155874e-01 + -2.803616466281044e-01 + -2.800588643758425e-01 + -2.797565877594176e-01 + -2.794548163592918e-01 + -2.791535497376408e-01 + -2.788527874670974e-01 + -2.785525291296920e-01 + -2.782527743138438e-01 + -2.779535226034689e-01 + -2.776547735631448e-01 + -2.773565267276963e-01 + -2.770587816777879e-01 + -2.767615379983304e-01 + -2.764647952191276e-01 + -2.761685529026718e-01 + -2.758728106207560e-01 + -2.755775679024411e-01 + -2.752828243050798e-01 + -2.749885793975552e-01 + -2.746948327088052e-01 + -2.744015837838452e-01 + -2.741088321749212e-01 + -2.738165773969221e-01 + -2.735248189792139e-01 + -2.732335564721672e-01 + -2.729427894286903e-01 + -2.726525173657923e-01 + -2.723627397775934e-01 + -2.720734562117226e-01 + -2.717846661993187e-01 + -2.714963692431568e-01 + -2.712085648712142e-01 + -2.709212526021956e-01 + -2.706344319386959e-01 + -2.703481024077038e-01 + -2.700622635195931e-01 + -2.697769147573882e-01 + -2.694920556414950e-01 + -2.692076856844960e-01 + -2.689238043678598e-01 + -2.686404111894522e-01 + -2.683575056539274e-01 + -2.680750872618156e-01 + -2.677931554956217e-01 + -2.675117098420171e-01 + -2.672307498062658e-01 + -2.669502748541435e-01 + -2.666702844564393e-01 + -2.663907781339158e-01 + -2.661117553567487e-01 + -2.658332155842312e-01 + -2.655551583220328e-01 + -2.652775830228958e-01 + -2.650004891310402e-01 + -2.647238761635896e-01 + -2.644477435849875e-01 + -2.641720908275026e-01 + -2.638969173638899e-01 + -2.636222226679477e-01 + -2.633480062028563e-01 + -2.630742674151484e-01 + -2.628010057675256e-01 + -2.625282207270022e-01 + -2.622559117157733e-01 + -2.619840781930577e-01 + -2.617127196438671e-01 + -2.614418354712815e-01 + -2.611714251171109e-01 + -2.609014880694051e-01 + -2.606320237300626e-01 + -2.603630315312080e-01 + -2.600945109576975e-01 + -2.598264614192900e-01 + -2.595588823272051e-01 + -2.592917731268140e-01 + -2.590251332515323e-01 + -2.587589621335352e-01 + -2.584932592080277e-01 + -2.582280238899204e-01 + -2.579632555996659e-01 + -2.576989537753064e-01 + -2.574351178135512e-01 + -2.571717471205571e-01 + -2.569088411498421e-01 + -2.566463993032694e-01 + -2.563844209736399e-01 + -2.561229055922761e-01 + -2.558618525664796e-01 + -2.556012613001373e-01 + -2.553411312228936e-01 + -2.550814617199114e-01 + -2.548222521633088e-01 + -2.545635019702024e-01 + -2.543052105636615e-01 + -2.540473773489130e-01 + -2.537900016856341e-01 + -2.535330829668063e-01 + -2.532766206092137e-01 + -2.530206140025920e-01 + -2.527650625373169e-01 + -2.525099656058339e-01 + -2.522553225882911e-01 + -2.520011328519368e-01 + -2.517473957689335e-01 + -2.514941107682424e-01 + -2.512412772287477e-01 + -2.509888944763962e-01 + -2.507369619085763e-01 + -2.504854789235316e-01 + -2.502344448942996e-01 + -2.499838591881081e-01 + -2.497337211675947e-01 + -2.494840301941274e-01 + -2.492347856449565e-01 + -2.489859868896926e-01 + -2.487376332816026e-01 + -2.484897241934407e-01 + -2.482422589923619e-01 + -2.479952370263670e-01 + -2.477486576676466e-01 + -2.475025202765806e-01 + -2.472568241776227e-01 + -2.470115687463755e-01 + -2.467667533575219e-01 + -2.465223773319763e-01 + -2.462784400223504e-01 + -2.460349407926405e-01 + -2.457918789841980e-01 + -2.455492539346369e-01 + -2.453070649885519e-01 + -2.450653115068263e-01 + -2.448239928212929e-01 + -2.445831082525867e-01 + -2.443426571517872e-01 + -2.441026388729581e-01 + -2.438630527595843e-01 + -2.436238981283992e-01 + -2.433851743000419e-01 + -2.431468806082007e-01 + -2.429090164035606e-01 + -2.426715810065056e-01 + -2.424345737214870e-01 + -2.421979939156839e-01 + -2.419618409122474e-01 + -2.417261139893861e-01 + -2.414908125047008e-01 + -2.412559357926221e-01 + -2.410214831428485e-01 + -2.407874538901436e-01 + -2.405538473594189e-01 + -2.403206628448788e-01 + -2.400878996494245e-01 + -2.398555571012901e-01 + -2.396236345489386e-01 + -2.393921312730178e-01 + -2.391610465589564e-01 + -2.389303797400675e-01 + -2.387001301206918e-01 + -2.384702970040557e-01 + -2.382408797142012e-01 + -2.380118775445049e-01 + -2.377832897784107e-01 + -2.375551157141706e-01 + -2.373273546676602e-01 + -2.371000059435911e-01 + -2.368730688080822e-01 + -2.366465425799626e-01 + -2.364204265795865e-01 + -2.361947200488833e-01 + -2.359694222928865e-01 + -2.357445326362645e-01 + -2.355200503199650e-01 + -2.352959746331166e-01 + -2.350723049000333e-01 + -2.348490404054174e-01 + -2.346261804119323e-01 + -2.344037241869703e-01 + -2.341816710532240e-01 + -2.339600202844186e-01 + -2.337387711161095e-01 + -2.335179228570654e-01 + -2.332974748051559e-01 + -2.330774262250223e-01 + -2.328577763695832e-01 + -2.326385245095027e-01 + -2.324196699339893e-01 + -2.322012119071908e-01 + -2.319831496985562e-01 + -2.317654825913850e-01 + -2.315482098501277e-01 + -2.313313307350805e-01 + -2.311148445095759e-01 + -2.308987504304352e-01 + -2.306830477605995e-01 + -2.304677357746768e-01 + -2.302528137313455e-01 + -2.300382808821649e-01 + -2.298241364802842e-01 + -2.296103797849810e-01 + -2.293970100645507e-01 + -2.291840265929282e-01 + -2.289714285853380e-01 + -2.287592152687787e-01 + -2.285473859575702e-01 + -2.283359398767679e-01 + -2.281248762354934e-01 + -2.279141943457151e-01 + -2.277038934347241e-01 + -2.274939727028900e-01 + -2.272844314557521e-01 + -2.270752689260884e-01 + -2.268664843063303e-01 + -2.266580768713468e-01 + -2.264500458690802e-01 + -2.262423905203003e-01 + -2.260351100742427e-01 + -2.258282037663114e-01 + -2.256216708189812e-01 + -2.254155104759721e-01 + -2.252097219699820e-01 + -2.250043045201664e-01 + -2.247992573593203e-01 + -2.245945797283117e-01 + -2.243902708632074e-01 + -2.241863299547213e-01 + -2.239827562297785e-01 + -2.237795489631809e-01 + -2.235767073479459e-01 + -2.233742305913306e-01 + -2.231721179508258e-01 + -2.229703686190215e-01 + -2.227689817967141e-01 + -2.225679567331226e-01 + -2.223672926389324e-01 + -2.221669887137792e-01 + -2.219670441735496e-01 + -2.217674582593449e-01 + -2.215682301863681e-01 + -2.213693591068690e-01 + -2.211708442449674e-01 + -2.209726848493868e-01 + -2.207748801280919e-01 + -2.205774292618204e-01 + -2.203803314334422e-01 + -2.201835858632719e-01 + -2.199871917828554e-01 + -2.197911484006530e-01 + -2.195954548584606e-01 + -2.194001103587555e-01 + -2.192051141421317e-01 + -2.190104654040938e-01 + -2.188161633272981e-01 + -2.186222070944807e-01 + -2.184285959003400e-01 + -2.182353289399314e-01 + -2.180424054040691e-01 + -2.178498244760091e-01 + -2.176575853577229e-01 + -2.174656872563868e-01 + -2.172741293153170e-01 + -2.170829107184905e-01 + -2.168920306960583e-01 + -2.167014883907840e-01 + -2.165112829716549e-01 + -2.163214136638050e-01 + -2.161318796380734e-01 + -2.159426800456078e-01 + -2.157538140457635e-01 + -2.155652808465100e-01 + -2.153770796378261e-01 + -2.151892095617934e-01 + -2.150016698096599e-01 + -2.148144595574814e-01 + -2.146275779264766e-01 + -2.144410241083473e-01 + -2.142547972973645e-01 + -2.140688966286696e-01 + -2.138833212713278e-01 + -2.136980704068839e-01 + -2.135131431962469e-01 + -2.133285387811797e-01 + -2.131442563097479e-01 + -2.129602949644751e-01 + -2.127766538888946e-01 + -2.125933322205115e-01 + -2.124103291538361e-01 + -2.122276438425608e-01 + -2.120452754131807e-01 + -2.118632230196053e-01 + -2.116814858091140e-01 + -2.115000629262062e-01 + -2.113189535366684e-01 + -2.111381567835468e-01 + -2.109576717897184e-01 + -2.107774976942802e-01 + -2.105976336477213e-01 + -2.104180788038142e-01 + -2.102388322993181e-01 + -2.100598932684242e-01 + -2.098812608470688e-01 + -2.097029341689293e-01 + -2.095249123662445e-01 + -2.093471945702010e-01 + -2.091697799107427e-01 + -2.089926675162990e-01 + -2.088158565139439e-01 + -2.086393460309292e-01 + -2.084631351904399e-01 + -2.082872231124364e-01 + -2.081116089361562e-01 + -2.079362917906518e-01 + -2.077612707758083e-01 + -2.075865450013143e-01 + -2.074121135936494e-01 + -2.072379756933602e-01 + -2.070641303864229e-01 + -2.068905767613353e-01 + -2.067173139701657e-01 + -2.065443411403108e-01 + -2.063716573678470e-01 + -2.061992617242399e-01 + -2.060271533191409e-01 + -2.058553312792487e-01 + -2.056837947057731e-01 + -2.055125426973447e-01 + -2.053415743575506e-01 + -2.051708887985432e-01 + -2.050004850901530e-01 + -2.048303622987561e-01 + -2.046605195888223e-01 + -2.044909560501713e-01 + -2.043216707137636e-01 + -2.041526627003059e-01 + -2.039839311053935e-01 + -2.038154749924674e-01 + -2.036472934779214e-01 + -2.034793856435669e-01 + -2.033117505334730e-01 + -2.031443872603400e-01 + -2.029772949053144e-01 + -2.028104725040109e-01 + -2.026439191805672e-01 + -2.024776340229360e-01 + -2.023116160442759e-01 + -2.021458643362796e-01 + -2.019803779931268e-01 + -2.018151560674621e-01 + -2.016501976152565e-01 + -2.014855017030598e-01 + -2.013210674074579e-01 + -2.011568937830132e-01 + -2.009929798869589e-01 + -2.008293247967324e-01 + -2.006659275530022e-01 + -2.005027871933542e-01 + -2.003399027889975e-01 + -2.001772733993469e-01 + -2.000148980648089e-01 + -1.998527758076494e-01 + -1.996909056937942e-01 + -1.995292867991256e-01 + -1.993679181495860e-01 + -1.992067987609143e-01 + -1.990459276660739e-01 + -1.988853039482369e-01 + -1.987249266385540e-01 + -1.985647947339026e-01 + -1.984049072747179e-01 + -1.982452632992336e-01 + -1.980858618372365e-01 + -1.979267019229292e-01 + -1.977677825816225e-01 + -1.976091028269504e-01 + -1.974506616652059e-01 + -1.972924581269546e-01 + -1.971344912595772e-01 + -1.969767600601777e-01 + -1.968192635197257e-01 + -1.966620006473419e-01 + -1.965049704914111e-01 + -1.963481720619957e-01 + -1.961916043159508e-01 + -1.960352662866058e-01 + -1.958791570023236e-01 + -1.957232754408347e-01 + -1.955676205736371e-01 + -1.954121914050787e-01 + -1.952569869811404e-01 + -1.951020062511957e-01 + -1.949472481743376e-01 + -1.947927118000400e-01 + -1.946383960967118e-01 + -1.944843000224015e-01 + -1.943304226010136e-01 + -1.941767627996486e-01 + -1.940233195719773e-01 + -1.938700919198527e-01 + -1.937170788011597e-01 + -1.935642791691659e-01 + -1.934116920404960e-01 + -1.932593163702813e-01 + -1.931071510855982e-01 + -1.929551951739442e-01 + -1.928034476111422e-01 + -1.926519073523142e-01 + -1.925005733427448e-01 + -1.923494445333268e-01 + -1.921985198850023e-01 + -1.920477983694047e-01 + -1.918972789099489e-01 + -1.917469604078139e-01 + -1.915968418647559e-01 + -1.914469222323946e-01 + -1.912972003977130e-01 + -1.911476753153419e-01 + -1.909983459354311e-01 + -1.908492111828614e-01 + -1.907002699990133e-01 + -1.905515213021572e-01 + -1.904029639829450e-01 + -1.902545969863778e-01 + -1.901064192518998e-01 + -1.899584296832387e-01 + -1.898106271909556e-01 + -1.896630106872466e-01 + -1.895155790805884e-01 + -1.893683312769490e-01 + -1.892212661839438e-01 + -1.890743827110565e-01 + -1.889276797429612e-01 + -1.887811561730439e-01 + -1.886348109311961e-01 + -1.884886428944042e-01 + -1.883426509295119e-01 + -1.881968339481026e-01 + -1.880511908244114e-01 + -1.879057204210790e-01 + -1.877604216379617e-01 + -1.876152933660684e-01 + -1.874703344759240e-01 + -1.873255438107255e-01 + -1.871809202288037e-01 + -1.870364626111082e-01 + -1.868921698587295e-01 + -1.867480408184902e-01 + -1.866040743068453e-01 + -1.864602692045282e-01 + -1.863166243684211e-01 + -1.861731386269271e-01 + -1.860298108368848e-01 + -1.858866398430710e-01 + -1.857436244746902e-01 + -1.856007635808946e-01 + -1.854580560069532e-01 + -1.853155005825300e-01 + -1.851730961153894e-01 + -1.850308414342497e-01 + -1.848887353926573e-01 + -1.847467767859671e-01 + -1.846049644137440e-01 + -1.844632971091011e-01 + -1.843217736893654e-01 + -1.841803929497542e-01 + -1.840391536710132e-01 + -1.838980546953601e-01 + -1.837570948428414e-01 + -1.836162728527662e-01 + -1.834755875142904e-01 + -1.833350376404768e-01 + -1.831946220322505e-01 + -1.830543394615971e-01 + -1.829141886951903e-01 + -1.827741685199023e-01 + -1.826342777082210e-01 + -1.824945150204152e-01 + -1.823548792146146e-01 + -1.822153690716325e-01 + -1.820759833652730e-01 + -1.819367208114371e-01 + -1.817975801678411e-01 + -1.816585602158104e-01 + -1.815196596908165e-01 + -1.813808773333636e-01 + -1.812422118861797e-01 + -1.811036620617022e-01 + -1.809652266051679e-01 + -1.808269042761388e-01 + -1.806886937510042e-01 + -1.805505937426575e-01 + -1.804126030135119e-01 + -1.802747202867512e-01 + -1.801369442562599e-01 + -1.799992736029428e-01 + -1.798617070428147e-01 + -1.797242432859927e-01 + -1.795868810229852e-01 + -1.794496189531687e-01 + -1.793124557648680e-01 + -1.791753901302353e-01 + -1.790384207459855e-01 + -1.789015462957270e-01 + -1.787647654308534e-01 + -1.786280768266134e-01 + -1.784914791546937e-01 + -1.783549710639760e-01 + -1.782185512276328e-01 + -1.780822183108111e-01 + -1.779459709418989e-01 + -1.778098077766785e-01 + -1.776737274641330e-01 + -1.775377286080068e-01 + -1.774018098685905e-01 + -1.772659699092733e-01 + -1.771302073149079e-01 + -1.769945207098710e-01 + -1.768589087303928e-01 + -1.767233699571559e-01 + -1.765879030229077e-01 + -1.764525065751527e-01 + -1.763171791703831e-01 + -1.761819193770276e-01 + -1.760467257991546e-01 + -1.759115970764966e-01 + -1.757765317826701e-01 + -1.756415284467932e-01 + -1.755065856823099e-01 + -1.753717020824757e-01 + -1.752368761936218e-01 + -1.751021065398607e-01 + -1.749673916979465e-01 + -1.748327302843573e-01 + -1.746981207950505e-01 + -1.745635617515470e-01 + -1.744290517410085e-01 + -1.742945892830799e-01 + -1.741601728915786e-01 + -1.740258011048612e-01 + -1.738914724532109e-01 + -1.737571854631234e-01 + -1.736229386541751e-01 + -1.734887304969607e-01 + -1.733545594900176e-01 + -1.732204242005106e-01 + -1.730863230847530e-01 + -1.729522545880760e-01 + -1.728182172369972e-01 + -1.726842095169024e-01 + -1.725502298924380e-01 + -1.724162768405715e-01 + -1.722823488297978e-01 + -1.721484443102564e-01 + -1.720145617082366e-01 + -1.718806995062888e-01 + -1.717468561876117e-01 + -1.716130301380271e-01 + -1.714792197950507e-01 + -1.713454236195253e-01 + -1.712116399980747e-01 + -1.710778673588311e-01 + -1.709441041583024e-01 + -1.708103487974718e-01 + -1.706765996579921e-01 + -1.705428551238503e-01 + -1.704091136122197e-01 + -1.702753735243250e-01 + -1.701416332337174e-01 + -1.700078910979654e-01 + -1.698741454939726e-01 + -1.697403948188084e-01 + -1.696066374424440e-01 + -1.694728717024124e-01 + -1.693390959182572e-01 + -1.692053084687103e-01 + -1.690715077127793e-01 + -1.689376919605925e-01 + -1.688038595533757e-01 + -1.686700088249354e-01 + -1.685361380772680e-01 + -1.684022456043037e-01 + -1.682683297240474e-01 + -1.681343887869522e-01 + -1.680004210524648e-01 + -1.678664247764668e-01 + -1.677323982879569e-01 + -1.675983398888628e-01 + -1.674642478421112e-01 + -1.673301203727337e-01 + -1.671959557470875e-01 + -1.670617522514179e-01 + -1.669275081523977e-01 + -1.667932216748827e-01 + -1.666588910302535e-01 + -1.665245144618999e-01 + -1.663900902261115e-01 + -1.662556165573334e-01 + -1.661210916150787e-01 + -1.659865136192500e-01 + -1.658518808205523e-01 + -1.657171913793817e-01 + -1.655824434869752e-01 + -1.654476353589082e-01 + -1.653127651402884e-01 + -1.651778310039089e-01 + -1.650428311475997e-01 + -1.649077636947325e-01 + -1.647726268054878e-01 + -1.646374186795111e-01 + -1.645021374143022e-01 + -1.643667811219276e-01 + -1.642313479645375e-01 + -1.640958360797542e-01 + -1.639602435821208e-01 + -1.638245685678920e-01 + -1.636888091342957e-01 + -1.635529633807896e-01 + -1.634170294056715e-01 + -1.632810052843662e-01 + -1.631448890987297e-01 + -1.630086789505001e-01 + -1.628723728914803e-01 + -1.627359689604526e-01 + -1.625994652175857e-01 + -1.624628597296842e-01 + -1.623261505411777e-01 + -1.621893356498993e-01 + -1.620524130844338e-01 + -1.619153808874262e-01 + -1.617782370829140e-01 + -1.616409796594323e-01 + -1.615036066042981e-01 + -1.613661159511956e-01 + -1.612285056749289e-01 + -1.610907737177844e-01 + -1.609529180644884e-01 + -1.608149367058714e-01 + -1.606768276166446e-01 + -1.605385887249777e-01 + -1.604002179666082e-01 + -1.602617132920370e-01 + -1.601230726507729e-01 + -1.599842939686116e-01 + -1.598453751511857e-01 + -1.597063141136520e-01 + -1.595671087574746e-01 + -1.594277569704320e-01 + -1.592882566576958e-01 + -1.591486057239582e-01 + -1.590088020577491e-01 + -1.588688434990599e-01 + -1.587287278927537e-01 + -1.585884531125515e-01 + -1.584480170419727e-01 + -1.583074175205078e-01 + -1.581666523320080e-01 + -1.580257193426469e-01 + -1.578846164090064e-01 + -1.577433413163997e-01 + -1.576018918624315e-01 + -1.574602658488709e-01 + -1.573184610699215e-01 + -1.571764753211041e-01 + -1.570343063929105e-01 + -1.568919520623428e-01 + -1.567494100904384e-01 + -1.566066782348808e-01 + -1.564637542612438e-01 + -1.563206358983480e-01 + -1.561773208679784e-01 + -1.560338069324230e-01 + -1.558900918260982e-01 + -1.557461732592160e-01 + -1.556020489404925e-01 + -1.554577165574562e-01 + -1.553131737930803e-01 + -1.551684183667380e-01 + -1.550234479797016e-01 + -1.548782603038531e-01 + -1.547328529851514e-01 + -1.545872236759721e-01 + -1.544413700402710e-01 + -1.542952897416497e-01 + -1.541489804232354e-01 + -1.540024397056934e-01 + -1.538556652055174e-01 + -1.537086545589509e-01 + -1.535614054107616e-01 + -1.534139153265976e-01 + -1.532661818894184e-01 + -1.531182027303390e-01 + -1.529699754364569e-01 + -1.528214975805129e-01 + -1.526727667337492e-01 + -1.525237804315604e-01 + -1.523745362382714e-01 + -1.522250317710374e-01 + -1.520752645246755e-01 + -1.519252320010430e-01 + -1.517749318043420e-01 + -1.516243614355856e-01 + -1.514735183783821e-01 + -1.513224001894709e-01 + -1.511710043669709e-01 + -1.510193283881065e-01 + -1.508673697644896e-01 + -1.507151259726486e-01 + -1.505625944726656e-01 + -1.504097727456887e-01 + -1.502566582737337e-01 + -1.501032485283334e-01 + -1.499495409558064e-01 + -1.497955329817901e-01 + -1.496412220312461e-01 + -1.494866055649385e-01 + -1.493316810218445e-01 + -1.491764458131949e-01 + -1.490208973395277e-01 + -1.488650330073115e-01 + -1.487088502321930e-01 + -1.485523464347014e-01 + -1.483955190026080e-01 + -1.482383652905619e-01 + -1.480808826638546e-01 + -1.479230685198502e-01 + -1.477649202713839e-01 + -1.476064352431592e-01 + -1.474476107543291e-01 + -1.472884441602761e-01 + -1.471289328556787e-01 + -1.469690741904771e-01 + -1.468088654425319e-01 + -1.466483039513407e-01 + -1.464873870643751e-01 + -1.463261120992439e-01 + -1.461644763685366e-01 + -1.460024771711030e-01 + -1.458401117873900e-01 + -1.456773775256328e-01 + -1.455142717039091e-01 + -1.453507916253095e-01 + -1.451869345373153e-01 + -1.450226976893540e-01 + -1.448580783981553e-01 + -1.446930739597145e-01 + -1.445276816274984e-01 + -1.443618986028185e-01 + -1.441957221635531e-01 + -1.440291496154044e-01 + -1.438621781832398e-01 + -1.436948050802729e-01 + -1.435270275400491e-01 + -1.433588428498931e-01 + -1.431902482406432e-01 + -1.430212409022274e-01 + -1.428518180756519e-01 + -1.426819769869911e-01 + -1.425117148424586e-01 + -1.423410288662751e-01 + -1.421699162875700e-01 + -1.419983743276740e-01 + -1.418264001727286e-01 + -1.416539910114460e-01 + -1.414811440470098e-01 + -1.413078564852965e-01 + -1.411341255423312e-01 + -1.409599484327010e-01 + -1.407853222965617e-01 + -1.406102443173973e-01 + -1.404347117561954e-01 + -1.402587217519092e-01 + -1.400822714659246e-01 + -1.399053581557436e-01 + -1.397279789611117e-01 + -1.395501310267636e-01 + -1.393718115937786e-01 + -1.391930178402762e-01 + -1.390137469173205e-01 + -1.388339959972602e-01 + -1.386537622953096e-01 + -1.384730430031857e-01 + -1.382918352262208e-01 + -1.381101361784074e-01 + -1.379279430940128e-01 + -1.377452530885734e-01 + -1.375620633453186e-01 + -1.373783710804598e-01 + -1.371941734475252e-01 + -1.370094676273606e-01 + -1.368242508215203e-01 + -1.366385202106050e-01 + -1.364522729969404e-01 + -1.362655063841710e-01 + -1.360782175127518e-01 + -1.358904035964053e-01 + -1.357020618930480e-01 + -1.355131895302153e-01 + -1.353237837054462e-01 + -1.351338416922692e-01 + -1.349433606493001e-01 + -1.347523377766847e-01 + -1.345607703467432e-01 + -1.343686555800670e-01 + -1.341759906744941e-01 + -1.339827728348106e-01 + -1.337889993407819e-01 + -1.335946674413715e-01 + -1.333997743261954e-01 + -1.332043172962129e-01 + -1.330082936252972e-01 + -1.328117004983506e-01 + -1.326145352418741e-01 + -1.324167951779929e-01 + -1.322184775207451e-01 + -1.320195795498869e-01 + -1.318200985870884e-01 + -1.316200319613715e-01 + -1.314193769770063e-01 + -1.312181309395709e-01 + -1.310162911860090e-01 + -1.308138550466099e-01 + -1.306108198680959e-01 + -1.304071830473609e-01 + -1.302029419358534e-01 + -1.299980938748928e-01 + -1.297926362720222e-01 + -1.295865665431496e-01 + -1.293798820977739e-01 + -1.291725803345192e-01 + -1.289646586840201e-01 + -1.287561146028010e-01 + -1.285469455426532e-01 + -1.283371489741077e-01 + -1.281267223855238e-01 + -1.279156632656401e-01 + -1.277039691180485e-01 + -1.274916374652222e-01 + -1.272786658468367e-01 + -1.270650518164191e-01 + -1.268507929437779e-01 + -1.266358868257778e-01 + -1.264203310530910e-01 + -1.262041232080785e-01 + -1.259872609212462e-01 + -1.257697418614985e-01 + -1.255515637216261e-01 + -1.253327241582721e-01 + -1.251132208452764e-01 + -1.248930515084944e-01 + -1.246722139029198e-01 + -1.244507057917270e-01 + -1.242285249387353e-01 + -1.240056691417677e-01 + -1.237821362222557e-01 + -1.235579240163024e-01 + -1.233330303641722e-01 + -1.231074531412701e-01 + -1.228811902909497e-01 + -1.226542397328350e-01 + -1.224265993926709e-01 + -1.221982672554952e-01 + -1.219692413178169e-01 + -1.217395195880366e-01 + -1.215091001037845e-01 + -1.212779809466277e-01 + -1.210461602256936e-01 + -1.208136360512357e-01 + -1.205804065871132e-01 + -1.203464700244819e-01 + -1.201118245085727e-01 + -1.198764682774020e-01 + -1.196403996473917e-01 + -1.194036168896808e-01 + -1.191661183059585e-01 + -1.189279022478277e-01 + -1.186889671039581e-01 + -1.184493112863093e-01 + -1.182089332317922e-01 + -1.179678314226111e-01 + -1.177260043675167e-01 + -1.174834505981953e-01 + -1.172401686820595e-01 + -1.169961572351099e-01 + -1.167514149230550e-01 + -1.165059404117411e-01 + -1.162597324012717e-01 + -1.160127896494247e-01 + -1.157651109471359e-01 + -1.155166951180050e-01 + -1.152675410245315e-01 + -1.150176475647009e-01 + -1.147670136740031e-01 + -1.145156383362403e-01 + -1.142635205942373e-01 + -1.140106595167702e-01 + -1.137570541746248e-01 + -1.135027037005393e-01 + -1.132476072885310e-01 + -1.129917641930528e-01 + -1.127351736954119e-01 + -1.124778350964029e-01 + -1.122197477241451e-01 + -1.119609110122396e-01 + -1.117013244465126e-01 + -1.114409874638995e-01 + -1.111798996306716e-01 + -1.109180606010562e-01 + -1.106554699641756e-01 + -1.103921273860412e-01 + -1.101280326261970e-01 + -1.098631854961093e-01 + -1.095975858385727e-01 + -1.093312335328026e-01 + -1.090641285282797e-01 + -1.087962708201439e-01 + -1.085276604456853e-01 + -1.082582975002112e-01 + -1.079881821487157e-01 + -1.077173146235393e-01 + -1.074456951780328e-01 + -1.071733241222459e-01 + -1.069002018428373e-01 + -1.066263287812705e-01 + -1.063517054311524e-01 + -1.060763323447030e-01 + -1.058002101349244e-01 + -1.055233394662503e-01 + -1.052457210591484e-01 + -1.049673557111256e-01 + -1.046882442747131e-01 + -1.044083876525769e-01 + -1.041277868396362e-01 + -1.038464428925467e-01 + -1.035643569070283e-01 + -1.032815300276830e-01 + -1.029979634724506e-01 + -1.027136585692167e-01 + -1.024286166734134e-01 + -1.021428391952729e-01 + -1.018563276648054e-01 + -1.015690836461885e-01 + -1.012811087487812e-01 + -1.009924046817547e-01 + -1.007029732152899e-01 + -1.004128161832720e-01 + -1.001219355157012e-01 + -9.983033318947014e-02 + -9.953801123789381e-02 + -9.924497181065381e-02 + -9.895121710675164e-02 + -9.865674937610269e-02 + -9.836157098451072e-02 + -9.806568435550449e-02 + -9.776909196067303e-02 + -9.747179635418697e-02 + -9.717380018935569e-02 + -9.687510621844479e-02 + -9.657571724434684e-02 + -9.627563612429342e-02 + -9.597486578738405e-02 + -9.567340928055243e-02 + -9.537126972794066e-02 + -9.506845031433311e-02 + -9.476495428226560e-02 + -9.446078497156121e-02 + -9.415594584893169e-02 + -9.385044042616277e-02 + -9.354427227181475e-02 + -9.323744504129654e-02 + -9.292996250412121e-02 + -9.262182850819620e-02 + -9.231304696021701e-02 + -9.200362185853247e-02 + -9.169355729461479e-02 + -9.138285746240042e-02 + -9.107152658866502e-02 + -9.075956898041553e-02 + -9.044698911371001e-02 + -9.013379148226228e-02 + -8.981998063663986e-02 + -8.950556130228651e-02 + -8.919053824746566e-02 + -8.887491629233073e-02 + -8.855870039130662e-02 + -8.824189556852820e-02 + -8.792450692262105e-02 + -8.760653968435946e-02 + -8.728799913331863e-02 + -8.696889060279582e-02 + -8.664921956673162e-02 + -8.632899159487925e-02 + -8.600821233560418e-02 + -8.568688750540578e-02 + -8.536502290181033e-02 + -8.504262441718942e-02 + -8.471969805751253e-02 + -8.439624991228166e-02 + -8.407228614692197e-02 + -8.374781300392073e-02 + -8.342283682562317e-02 + -8.309736406563741e-02 + -8.277140122021633e-02 + -8.244495489588025e-02 + -8.211803185128563e-02 + -8.179063884910803e-02 + -8.146278271646745e-02 + -8.113447041766966e-02 + -8.080570906396743e-02 + -8.047650581443898e-02 + -8.014686781276095e-02 + -7.981680240792462e-02 + -7.948631704884632e-02 + -7.915541916537581e-02 + -7.882411634928695e-02 + -7.849241630024972e-02 + -7.816032674199919e-02 + -7.782785552351333e-02 + -7.749501058768483e-02 + -7.716179991262426e-02 + -7.682823159405887e-02 + -7.649431382724470e-02 + -7.616005485767063e-02 + -7.582546305035900e-02 + -7.549054686796573e-02 + -7.515531479419155e-02 + -7.481977542018518e-02 + -7.448393744841550e-02 + -7.414780964186224e-02 + -7.381140084542565e-02 + -7.347471999131863e-02 + -7.313777608894645e-02 + -7.280057821330421e-02 + -7.246313551410177e-02 + -7.212545725749871e-02 + -7.178755277686714e-02 + -7.144943146088469e-02 + -7.111110278446059e-02 + -7.077257629326426e-02 + -7.043386160590276e-02 + -7.009496843792977e-02 + -6.975590657859251e-02 + -6.941668588038064e-02 + -6.907731623736572e-02 + -6.873780762436528e-02 + -6.839817013263073e-02 + -6.805841390025939e-02 + -6.771854911509186e-02 + -6.737858603607710e-02 + -6.703853501790490e-02 + -6.669840646610939e-02 + -6.635821080020089e-02 + -6.601795854049251e-02 + -6.567766029345612e-02 + -6.533732672933422e-02 + -6.499696856244534e-02 + -6.465659655384894e-02 + -6.431622152906083e-02 + -6.397585437117004e-02 + -6.363550601749234e-02 + -6.329518746487584e-02 + -6.295490977261127e-02 + -6.261468405232740e-02 + -6.227452144919842e-02 + -6.193443314782195e-02 + -6.159443038613483e-02 + -6.125452449175782e-02 + -6.091472682299209e-02 + -6.057504875634485e-02 + -6.023550170757411e-02 + -5.989609715178513e-02 + -5.955684662483948e-02 + -5.921776169220818e-02 + -5.887885392543541e-02 + -5.854013491232313e-02 + -5.820161634720029e-02 + -5.786330995026137e-02 + -5.752522743033200e-02 + -5.718738052319666e-02 + -5.684978102238282e-02 + -5.651244078415603e-02 + -5.617537160914179e-02 + -5.583858533460867e-02 + -5.550209389764803e-02 + -5.516590918758542e-02 + -5.483004310132478e-02 + -5.449450760284144e-02 + -5.415931467224975e-02 + -5.382447627285256e-02 + -5.349000433169809e-02 + -5.315591089010736e-02 + -5.282220800586091e-02 + -5.248890761304951e-02 + -5.215602173570349e-02 + -5.182356244333215e-02 + -5.149154173522678e-02 + -5.115997163165661e-02 + -5.082886416999516e-02 + -5.049823136495267e-02 + -5.016808523392447e-02 + -4.983843779429676e-02 + -4.950930104255546e-02 + -4.918068697018742e-02 + -4.885260756307724e-02 + -4.852507478656667e-02 + -4.819810059193260e-02 + -4.787169691654435e-02 + -4.754587567726797e-02 + -4.722064876717863e-02 + -4.689602805511645e-02 + -4.657202539266345e-02 + -4.624865260469157e-02 + -4.592592148337583e-02 + -4.560384379218360e-02 + -4.528243126408893e-02 + -4.496169559628109e-02 + -4.464164845065374e-02 + -4.432230145577399e-02 + -4.400366620090135e-02 + -4.368575422918912e-02 + -4.336857704568598e-02 + -4.305214611378011e-02 + -4.273647284209545e-02 + -4.242156859535529e-02 + -4.210744469338823e-02 + -4.179411239819886e-02 + -4.148158291999365e-02 + -4.116986741259326e-02 + -4.085897697584740e-02 + -4.054892265423421e-02 + -4.023971542131075e-02 + -3.993136619382251e-02 + -3.962388583123071e-02 + -3.931728511726146e-02 + -3.901157477126550e-02 + -3.870676544906659e-02 + -3.840286772630143e-02 + -3.809989211312446e-02 + -3.779784905219891e-02 + -3.749674889469364e-02 + -3.719660192057603e-02 + -3.689741833904486e-02 + -3.659920826728452e-02 + -3.630198174507707e-02 + -3.600574873447752e-02 + -3.571051910326670e-02 + -3.541630263528623e-02 + -3.512310902944081e-02 + -3.483094789226868e-02 + -3.453982873906083e-02 + -3.424976098893085e-02 + -3.396075396966352e-02 + -3.367281691959212e-02 + -3.338595897696143e-02 + -3.310018917253339e-02 + -3.281551644593574e-02 + -3.253194963945627e-02 + -3.224949747985180e-02 + -3.196816859917648e-02 + -3.168797153104005e-02 + -3.140891468854379e-02 + -3.113100638362195e-02 + -3.085425482400445e-02 + -3.057866810270934e-02 + -3.030425420554928e-02 + -3.003102099769914e-02 + -2.975897623664901e-02 + -2.948812757423692e-02 + -2.921848253324668e-02 + -2.895004852283206e-02 + -2.868283284398848e-02 + -2.841684266935389e-02 + -2.815208505554401e-02 + -2.788856694668657e-02 + -2.762629515277662e-02 + -2.736527636581735e-02 + -2.710551716378724e-02 + -2.684702399109470e-02 + -2.658980317107453e-02 + -2.633386090723251e-02 + -2.607920326420626e-02 + -2.582583618939347e-02 + -2.557376551170278e-02 + -2.532299691452088e-02 + -2.507353595904179e-02 + -2.482538808499682e-02 + -2.457855859507147e-02 + -2.433305266394129e-02 + -2.408887533435539e-02 + -2.384603151841623e-02 + -2.360452600145211e-02 + -2.336436343201402e-02 + -2.312554832609387e-02 + -2.288808507226996e-02 + -2.265197791904223e-02 + -2.241723098404469e-02 + -2.218384825955722e-02 + -2.195183359578144e-02 + -2.172119070564114e-02 + -2.149192317903017e-02 + -2.126403446983029e-02 + -2.103752788800763e-02 + -2.081240661670658e-02 + -2.058867370373213e-02 + -2.036633206151460e-02 + -2.014538447470562e-02 + -1.992583358220780e-02 + -1.970768189350454e-02 + -1.949093179354288e-02 + -1.927558551890179e-02 + -1.906164517346932e-02 + -1.884911273803516e-02 + -1.863799005561765e-02 + -1.842827883084014e-02 + -1.821998063919436e-02 + -1.801309692347624e-02 + -1.780762899421212e-02 + -1.760357803216378e-02 + -1.740094507853177e-02 + -1.719973104881908e-02 + -1.699993673354589e-02 + -1.680156278321953e-02 + -1.660460972117107e-02 + -1.640907794332531e-02 + -1.621496771146485e-02 + -1.602227916433384e-02 + -1.583101231371427e-02 + -1.564116703862817e-02 + -1.545274309883748e-02 + -1.526574012772238e-02 + -1.508015761914186e-02 + -1.489599495303444e-02 + -1.471325139301425e-02 + -1.453192606709004e-02 + -1.435201798658663e-02 + -1.417352604127694e-02 + -1.399644899327932e-02 + -1.382078549302728e-02 + -1.364653407164367e-02 + -1.347369313289915e-02 + -1.330226097046918e-02 + -1.313223576283522e-02 + -1.296361556501821e-02 + -1.279639832327015e-02 + -1.263058187022890e-02 + -1.246616392163480e-02 + -1.230314208589229e-02 + -1.214151385550256e-02 + -1.198127661271531e-02 + -1.182242763705999e-02 + -1.166496409538715e-02 + -1.150888304589847e-02 + -1.135418144553720e-02 + -1.120085614521435e-02 + -1.104890388968280e-02 + -1.089832132231912e-02 + -1.074910498405016e-02 + -1.060125131793449e-02 + -1.045475666967276e-02 + -1.030961728045836e-02 + -1.016582929759894e-02 + -1.002338877483435e-02 + -9.882291666582974e-03 + -9.742533838318660e-03 + -9.604111064390042e-03 + -9.467019020603698e-03 + -9.331253297647066e-03 + -9.196809399717920e-03 + -9.063682741005771e-03 + -8.931868652392608e-03 + -8.801362376326071e-03 + -8.672159070075210e-03 + -8.544253813557785e-03 + -8.417641603575709e-03 + -8.292317355716863e-03 + -8.168275911736944e-03 + -8.045512032694060e-03 + -7.924020397696789e-03 + -7.803795618017998e-03 + -7.684832236645861e-03 + -7.567124714929550e-03 + -7.450667444285828e-03 + -7.335454748033539e-03 + -7.221480883382279e-03 + -7.108740043647531e-03 + -6.997226348639058e-03 + -6.886933855315346e-03 + -6.777856561420043e-03 + -6.669988397445708e-03 + -6.563323236817328e-03 + -6.457854897474280e-03 + -6.353577131920331e-03 + -6.250483639666226e-03 + -6.148568068731946e-03 + -6.047824005897748e-03 + -5.948244987599076e-03 + -5.849824501347084e-03 + -5.752555978513681e-03 + -5.656432807264865e-03 + -5.561448332218353e-03 + -5.467595840626229e-03 + -5.374868578311233e-03 + -5.283259752176146e-03 + -5.192762521793490e-03 + -5.103370006626977e-03 + -5.015075286629148e-03 + -4.927871401782054e-03 + -4.841751355904269e-03 + -4.756708115524279e-03 + -4.672734611342882e-03 + -4.589823741835811e-03 + -4.507968371897898e-03 + -4.427161334111035e-03 + -4.347395432360992e-03 + -4.268663440821394e-03 + -4.190958105123732e-03 + -4.114272145237943e-03 + -4.038598254543495e-03 + -3.963929102325757e-03 + -3.890257335680627e-03 + -3.817575578228647e-03 + -3.745876433060482e-03 + -3.675152484340320e-03 + -3.605396296371936e-03 + -3.536600416225055e-03 + -3.468757375181376e-03 + -3.401859688514519e-03 + -3.335899857279008e-03 + -3.270870369624132e-03 + -3.206763701552144e-03 + -3.143572317880366e-03 + -3.081288673370167e-03 + -3.019905214426235e-03 + -2.959414379161780e-03 + -2.899808598243805e-03 + -2.841080297295089e-03 + -2.783221897187762e-03 + -2.726225814481816e-03 + -2.670084462721576e-03 + -2.614790253659214e-03 + -2.560335598217736e-03 + -2.506712907773368e-03 + -2.453914594305456e-03 + -2.401933071402304e-03 + -2.350760756079694e-03 + -2.300390068609935e-03 + -2.250813433830373e-03 + -2.202023282926124e-03 + -2.154012052729510e-03 + -2.106772187286276e-03 + -2.060296139752280e-03 + -2.014576371403607e-03 + -1.969605353508076e-03 + -1.925375568654703e-03 + -1.881879509874747e-03 + -1.839109683164610e-03 + -1.797058608044933e-03 + -1.755718816706420e-03 + -1.715082857166331e-03 + -1.675143293280333e-03 + -1.635892703443056e-03 + -1.597323683697497e-03 + -1.559428848712492e-03 + -1.522200830321536e-03 + -1.485632280183934e-03 + -1.449715870092584e-03 + -1.414444291041649e-03 + -1.379810256474448e-03 + -1.345806501791486e-03 + -1.312425783716085e-03 + -1.279660883530597e-03 + -1.247504606026809e-03 + -1.215949779407020e-03 + -1.184989258561609e-03 + -1.154615923413642e-03 + -1.124822679454977e-03 + -1.095602461024569e-03 + -1.066948228352973e-03 + -1.038852968864840e-03 + -1.011309701783447e-03 + -9.843114734261671e-04 + -9.578513585924095e-04 + -9.319224654553773e-04 + -9.065179311555053e-04 + -8.816309237062864e-04 + -8.572546450286300e-04 + -8.333823272254078e-04 + -8.100072355517002e-04 + -7.871226705798197e-04 + -7.647219641139264e-04 + -7.427984826268421e-04 + -7.213456295816899e-04 + -7.003568409622573e-04 + -6.798255887472549e-04 + -6.597453829223955e-04 + -6.401097674232178e-04 + -6.209123240167792e-04 + -6.021466729184949e-04 + -5.838064694784330e-04 + -5.658854088227745e-04 + -5.483772251938055e-04 + -5.312756891491387e-04 + -5.145746125261390e-04 + -4.982678466736966e-04 + -4.823492804447342e-04 + -4.668128456938979e-04 + -4.516525141842837e-04 + -4.368622962674093e-04 + -4.224362466667431e-04 + -4.083684605074392e-04 + -3.946530726767535e-04 + -3.812842634726816e-04 + -3.682562540846601e-04 + -3.555633067280622e-04 + -3.431997298953713e-04 + -3.311598733734528e-04 + -3.194381292167991e-04 + -3.080289365424697e-04 + -2.969267761950205e-04 + -2.861261725181284e-04 + -2.756216974519896e-04 + -2.654079650780054e-04 + -2.554796342192304e-04 + -2.458314117831762e-04 + -2.364580472261255e-04 + -2.273543358783364e-04 + -2.185151214599497e-04 + -2.099352907310207e-04 + -2.016097775283348e-04 + -1.935335642058985e-04 + -1.857016766078902e-04 + -1.781091887621722e-04 + -1.707512232636694e-04 + -1.636229467286454e-04 + -1.567195750846747e-04 + -1.500363727286114e-04 + -1.435686485603325e-04 + -1.373117617901810e-04 + -1.312611200233150e-04 + -1.254121759173047e-04 + -1.197604333131590e-04 + -1.143014443478538e-04 + -1.090308067994204e-04 + -1.039441703359566e-04 + -9.903723276260782e-05 + -9.430573818110019e-05 + -8.974548326970851e-05 + -8.535231263786576e-05 + -8.112211782233505e-05 + -7.705084341917009e-05 + -7.313448187442813e-05 + -6.936907333027644e-05 + -6.575071119249467e-05 + -6.227553658275769e-05 + -5.893973914900695e-05 + -5.573956203853484e-05 + -5.267129595161032e-05 + -4.973128084575291e-05 + -4.691591029739419e-05 + -4.422162539456759e-05 + -4.164491727590835e-05 + -3.918233061143914e-05 + -3.683045757249665e-05 + -3.458594118927672e-05 + -3.244547785270521e-05 + -3.040581149216269e-05 + -2.846373767254703e-05 + -2.661610506551807e-05 + -2.485980997915884e-05 + -2.319180110803831e-05 + -2.160907991664170e-05 + -2.010869565536285e-05 + -1.868775067119526e-05 + -1.734339969669114e-05 + -1.607284546059277e-05 + -1.487334444060605e-05 + -1.374220506933501e-05 + -1.267678404087566e-05 + -1.167449238525668e-05 + -1.073279264625808e-05 + -9.849195952118955e-06 + -9.021268250139948e-06 + -8.246626567968640e-06 + -7.522936912951058e-06 + -6.847920492700095e-06 + -6.219349168072015e-06 + -5.635044236568559e-06 + -5.092882470932048e-06 + -4.590790895044201e-06 + -4.126746487291455e-06 + -3.698781859286729e-06 + -3.304979520120749e-06 + -2.943472506918129e-06 + -2.612449510984778e-06 + -2.310148834845521e-06 + -2.034859929271865e-06 + -1.784927798002038e-06 + -1.558746837246077e-06 + -1.354763241038800e-06 + -1.171478551126456e-06 + -1.007443551831214e-06 + -8.612614901318561e-07 + -7.315906671893518e-07 + -6.171385461507109e-07 + -5.166657190198488e-07 + -4.289874671965282e-07 + -3.529682224298676e-07 + -2.875261969469119e-07 + -2.316338735426513e-07 + -1.843129441850586e-07 + -1.446395043479685e-07 + -1.117434618507405e-07 + -8.480406305106530e-08 + -6.305553831873507e-08 + -4.578544870958251e-08 + -3.233089380928512e-08 + -2.208448022054805e-08 + -1.449165750478591e-08 + -9.047683233008124e-09 + -5.303766739728543e-09 + -2.863504097386866e-09 + -1.380623394721897e-09 + -5.650641971230870e-10 + -1.790372475752245e-10 + -3.511990521548007e-11 + -8.192061809269277e-13 + 0.000000000000000e+00 diff --git a/examples/SPIN/dipole_spin/exchange_fit_bcc_iron/exchange_bcc_iron.dat b/examples/SPIN/dipole_spin/exchange_fit_bcc_iron/exchange_bcc_iron.dat new file mode 100644 index 0000000000..58134f2444 --- /dev/null +++ b/examples/SPIN/dipole_spin/exchange_fit_bcc_iron/exchange_bcc_iron.dat @@ -0,0 +1,5 @@ +2.4824 0.01948336 +2.8665 0.01109 +4.0538 -0.0002176 +4.753 -0.001714 +4.965 -0.001986 diff --git a/examples/SPIN/dipole_spin/exchange_fit_bcc_iron/exchange_fit.py b/examples/SPIN/dipole_spin/exchange_fit_bcc_iron/exchange_fit.py new file mode 100644 index 0000000000..ccf84fc233 --- /dev/null +++ b/examples/SPIN/dipole_spin/exchange_fit_bcc_iron/exchange_fit.py @@ -0,0 +1,32 @@ +#Program fitting the exchange interaction +#Model curve: Bethe-Slater function +import numpy as np, pylab, tkinter +import matplotlib.pyplot as plt +from scipy.optimize import curve_fit +from decimal import * + +print("Loop begin") + +#Definition of the Bethe-Slater function +def func(x,a,b,c): + return 4*a*((x/c)**2)*(1-b*(x/c)**2)*np.exp(-(x/c)**2) + +#Exchange coeff table (data to fit) +rdata, Jdata = np.loadtxt('exchange_bcc_iron.dat', usecols=(0,1), unpack=True) +plt.plot(rdata, Jdata, 'b-', label='data') + +#Perform the fit +popt, pcov = curve_fit(func, rdata, Jdata, bounds=(0, [500.,5.,5.])) +plt.plot(rdata, func(rdata, *popt), 'r--', label='fit') + +#Print the fitted params +print("Parameters: a={:.10} (in meV), b={:.10} (adim), c={:.10} (in Ang)".format(*popt)) + +#Ploting the result +plt.xlabel('r_ij') +pylab.xlim([0,6.5]) +plt.ylabel('J_ij') +plt.legend() +plt.show() + +print("Loop end") diff --git a/examples/SPIN/dipole_spin/fe_dd.dat b/examples/SPIN/dipole_spin/fe_dd.dat new file mode 100644 index 0000000000..a4b4c9a0d7 --- /dev/null +++ b/examples/SPIN/dipole_spin/fe_dd.dat @@ -0,0 +1,19 @@ + 6 8 + Optimal parameter set + 1 4.100199340884814 F + 2 1.565647547483517 F + 1 0.9332056681088162 T 3.000000000000000 + 2 -1.162558782567700 T 2.866666666666670 + 3 -0.3502026949249225 T 2.733333333333330 + 4 0.4287820835430028 T 2.600000000000000 + 5 4.907925057809273 T 2.400000000000000 + 6 -5.307049068415304 T 2.300000000000000 + 1 -0.1960674387419232 F 4.100000000000000 + 2 0.3687525935422963 F 3.800000000000000 + 3 -1.505333614924853 F 3.500000000000000 + 4 4.948907078156191 T 3.200000000000000 + 5 -4.894613262753399 T 2.900000000000000 + 6 3.468897724782442 T 2.600000000000000 + 7 -1.792218099820337 T 2.400000000000000 + 8 80.22069592246987 T 2.300000000000000 + diff --git a/examples/SPIN/dipole_spin/in.spin.iron_dipole_cut b/examples/SPIN/dipole_spin/in.spin.iron_dipole_cut new file mode 100644 index 0000000000..55bda10b3e --- /dev/null +++ b/examples/SPIN/dipole_spin/in.spin.iron_dipole_cut @@ -0,0 +1,59 @@ +# bcc iron in a 3d periodic box + +clear +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice bcc 2.8665 +region box block 0.0 5.0 0.0 5.0 0.0 5.0 +create_box 1 box +create_atoms 1 box + +# setting mass, mag. moments, and interactions for bcc iron + +mass 1 55.845 +set group all spin 2.2 -1.0 0.0 0.0 +velocity all create 100 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 3.5 spin/dipole/cut 8.0 +pair_coeff * * eam/alloy Fe_Mishin2006.eam.alloy Fe +pair_coeff * * spin/exchange exchange 3.4 0.02726 0.2171 1.841 +pair_coeff * * spin/dipole/cut 8.0 + +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin cubic 0.001 0.0005 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.0 21 + +fix 3 all nve/spin lattice yes +timestep 0.0001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magx equal c_out_mag[1] +variable magy equal c_out_mag[2] +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magx v_magy v_magz v_magnorm v_tmag v_emag pe etotal +thermo 50 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 100 all custom 1 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +run 2000 diff --git a/examples/SPIN/dipole_spin/in.spin.iron_ewald b/examples/SPIN/dipole_spin/in.spin.iron_ewald new file mode 100644 index 0000000000..d4703a2959 --- /dev/null +++ b/examples/SPIN/dipole_spin/in.spin.iron_ewald @@ -0,0 +1,60 @@ +# bcc iron in a 3d periodic box + +clear +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice bcc 2.8665 +region box block 0.0 5.0 0.0 5.0 0.0 5.0 +create_box 1 box +create_atoms 1 box + +# setting mass, mag. moments, and interactions for bcc iron + +mass 1 55.845 +set group all spin 2.2 -1.0 0.0 0.0 +velocity all create 100 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 3.5 +pair_coeff * * eam/alloy Fe_Mishin2006.eam.alloy Fe +pair_coeff * * spin/exchange exchange 3.4 0.02726 0.2171 1.841 +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin cubic 0.001 0.0005 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.0 21 + +fix 3 all nve/spin lattice yes +timestep 0.0001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magx equal c_out_mag[1] +variable magy equal c_out_mag[2] +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magx v_magy v_magz v_magnorm v_tmag v_emag pe etotal +thermo 50 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 100 all custom 1 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +run 2000 +# min_style spin +# min_modify alpha_damp 1.0 discrete_factor 10 +# minimize 1.0e-16 1.0e-16 10000 10000 diff --git a/examples/SPIN/dipole_spin/in.spin.iron_pppm b/examples/SPIN/dipole_spin/in.spin.iron_pppm new file mode 100644 index 0000000000..d4703a2959 --- /dev/null +++ b/examples/SPIN/dipole_spin/in.spin.iron_pppm @@ -0,0 +1,60 @@ +# bcc iron in a 3d periodic box + +clear +units metal +atom_style spin + +dimension 3 +boundary p p p + +# necessary for the serial algorithm (sametag) +atom_modify map array + +lattice bcc 2.8665 +region box block 0.0 5.0 0.0 5.0 0.0 5.0 +create_box 1 box +create_atoms 1 box + +# setting mass, mag. moments, and interactions for bcc iron + +mass 1 55.845 +set group all spin 2.2 -1.0 0.0 0.0 +velocity all create 100 4928459 rot yes dist gaussian + +pair_style hybrid/overlay eam/alloy spin/exchange 3.5 +pair_coeff * * eam/alloy Fe_Mishin2006.eam.alloy Fe +pair_coeff * * spin/exchange exchange 3.4 0.02726 0.2171 1.841 +neighbor 0.1 bin +neigh_modify every 10 check yes delay 20 + +fix 1 all precession/spin cubic 0.001 0.0005 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 +fix_modify 1 energy yes +fix 2 all langevin/spin 0.0 0.0 21 + +fix 3 all nve/spin lattice yes +timestep 0.0001 + +# compute and output options + +compute out_mag all spin +compute out_pe all pe +compute out_ke all ke +compute out_temp all temp + +variable magx equal c_out_mag[1] +variable magy equal c_out_mag[2] +variable magz equal c_out_mag[3] +variable magnorm equal c_out_mag[4] +variable emag equal c_out_mag[5] +variable tmag equal c_out_mag[6] + +thermo_style custom step time v_magx v_magy v_magz v_magnorm v_tmag v_emag pe etotal +thermo 50 + +compute outsp all property/atom spx spy spz sp fmx fmy fmz +dump 100 all custom 1 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] + +run 2000 +# min_style spin +# min_modify alpha_damp 1.0 discrete_factor 10 +# minimize 1.0e-16 1.0e-16 10000 10000 diff --git a/src/SPIN/pair_spin_dipole_cut.cpp b/src/SPIN/pair_spin_dipole_cut.cpp index b8927d62e9..360e3c47de 100644 --- a/src/SPIN/pair_spin_dipole_cut.cpp +++ b/src/SPIN/pair_spin_dipole_cut.cpp @@ -25,8 +25,7 @@ #include #include #include - -#include "pair_spin_dipolar_cut.h" +#include "pair_spin_dipole_cut.h" #include "atom.h" #include "comm.h" #include "neighbor.h" @@ -34,7 +33,6 @@ #include "neigh_request.h" #include "fix_nve_spin.h" #include "force.h" -#include "kspace.h" #include "math_const.h" #include "memory.h" #include "modify.h" @@ -45,17 +43,9 @@ using namespace LAMMPS_NS; using namespace MathConst; -#define EWALD_F 1.12837917 -#define EWALD_P 0.3275911 -#define A1 0.254829592 -#define A2 -0.284496736 -#define A3 1.421413741 -#define A4 -1.453152027 -#define A5 1.061405429 - /* ---------------------------------------------------------------------- */ -PairSpinDipolarCut::PairSpinDipolarCut(LAMMPS *lmp) : PairSpin(lmp), +PairSpinDipoleCut::PairSpinDipoleCut(LAMMPS *lmp) : PairSpin(lmp), lockfixnvespin(NULL) { single_enable = 0; @@ -77,7 +67,7 @@ lockfixnvespin(NULL) free all arrays ------------------------------------------------------------------------- */ -PairSpinDipolarCut::~PairSpinDipolarCut() +PairSpinDipoleCut::~PairSpinDipoleCut() { if (allocated) { memory->destroy(setflag); @@ -90,7 +80,7 @@ PairSpinDipolarCut::~PairSpinDipolarCut() global settings ------------------------------------------------------------------------- */ -void PairSpinDipolarCut::settings(int narg, char **arg) +void PairSpinDipoleCut::settings(int narg, char **arg) { if (narg < 1 || narg > 2) error->all(FLERR,"Incorrect args in pair_style command"); @@ -122,22 +112,18 @@ void PairSpinDipolarCut::settings(int narg, char **arg) set coeffs for one or more type pairs ------------------------------------------------------------------------- */ -void PairSpinDipolarCut::coeff(int narg, char **arg) +void PairSpinDipoleCut::coeff(int narg, char **arg) { if (!allocated) allocate(); - // check if args correct - - if (strcmp(arg[2],"long") != 0) - error->all(FLERR,"Incorrect args in pair_style command"); - if (narg < 1 || narg > 4) + if (narg < 1 || narg > 3) error->all(FLERR,"Incorrect args in pair_style command"); int ilo,ihi,jlo,jhi; force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); - double spin_long_cut_one = force->numeric(FLERR,arg[3]); + double spin_long_cut_one = force->numeric(FLERR,arg[2]); int count = 0; for (int i = ilo; i <= ihi; i++) { @@ -155,7 +141,7 @@ void PairSpinDipolarCut::coeff(int narg, char **arg) init specific to this pair style ------------------------------------------------------------------------- */ -void PairSpinDipolarCut::init_style() +void PairSpinDipoleCut::init_style() { if (!atom->sp_flag) error->all(FLERR,"Pair spin requires atom/spin style"); @@ -191,7 +177,7 @@ void PairSpinDipolarCut::init_style() init for one type pair i,j and corresponding j,i ------------------------------------------------------------------------- */ -double PairSpinDipolarCut::init_one(int i, int j) +double PairSpinDipoleCut::init_one(int i, int j) { if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); @@ -204,7 +190,7 @@ double PairSpinDipolarCut::init_one(int i, int j) extract the larger cutoff if "cut" or "cut_coul" ------------------------------------------------------------------------- */ -void *PairSpinDipolarCut::extract(const char *str, int &dim) +void *PairSpinDipoleCut::extract(const char *str, int &dim) { if (strcmp(str,"cut") == 0) { dim = 0; @@ -227,7 +213,7 @@ void *PairSpinDipolarCut::extract(const char *str, int &dim) /* ---------------------------------------------------------------------- */ -void PairSpinDipolarCut::compute(int eflag, int vflag) +void PairSpinDipoleCut::compute(int eflag, int vflag) { int i,j,ii,jj,inum,jnum,itype,jtype; double rinv,r2inv,r3inv,rsq; @@ -338,7 +324,7 @@ void PairSpinDipolarCut::compute(int eflag, int vflag) removing erf(r)/r (for r in [0,rc]) from the kspace force ------------------------------------------------------------------------- */ -void PairSpinDipolarCut::compute_single_pair(int ii, double fmi[3]) +void PairSpinDipoleCut::compute_single_pair(int ii, double fmi[3]) { int i,j,jj,jnum,itype,jtype; double rsq,rinv,r2inv,r3inv; @@ -406,7 +392,7 @@ void PairSpinDipolarCut::compute_single_pair(int ii, double fmi[3]) compute dipolar interaction between spins i and j ------------------------------------------------------------------------- */ -void PairSpinDipolarCut::compute_dipolar(int i, int j, double eij[3], +void PairSpinDipoleCut::compute_dipolar(int i, int j, double eij[3], double fmi[3], double spi[4], double spj[4], double r3inv) { double sjdotr; @@ -426,7 +412,7 @@ void PairSpinDipolarCut::compute_dipolar(int i, int j, double eij[3], atom i and atom j ------------------------------------------------------------------------- */ -void PairSpinDipolarCut::compute_dipolar_mech(int i, int j, double eij[3], +void PairSpinDipoleCut::compute_dipolar_mech(int i, int j, double eij[3], double fi[3], double spi[3], double spj[3], double r2inv) { double sisj,sieij,sjeij; @@ -449,7 +435,7 @@ void PairSpinDipolarCut::compute_dipolar_mech(int i, int j, double eij[3], allocate all arrays ------------------------------------------------------------------------- */ -void PairSpinDipolarCut::allocate() +void PairSpinDipoleCut::allocate() { allocated = 1; int n = atom->ntypes; @@ -467,7 +453,7 @@ void PairSpinDipolarCut::allocate() proc 0 writes to restart file ------------------------------------------------------------------------- */ -void PairSpinDipolarCut::write_restart(FILE *fp) +void PairSpinDipoleCut::write_restart(FILE *fp) { write_restart_settings(fp); @@ -486,7 +472,7 @@ void PairSpinDipolarCut::write_restart(FILE *fp) proc 0 reads from restart file, bcasts ------------------------------------------------------------------------- */ -void PairSpinDipolarCut::read_restart(FILE *fp) +void PairSpinDipoleCut::read_restart(FILE *fp) { read_restart_settings(fp); @@ -512,7 +498,7 @@ void PairSpinDipolarCut::read_restart(FILE *fp) proc 0 writes to restart file ------------------------------------------------------------------------- */ -void PairSpinDipolarCut::write_restart_settings(FILE *fp) +void PairSpinDipoleCut::write_restart_settings(FILE *fp) { fwrite(&cut_spin_long_global,sizeof(double),1,fp); fwrite(&mix_flag,sizeof(int),1,fp); @@ -522,7 +508,7 @@ void PairSpinDipolarCut::write_restart_settings(FILE *fp) proc 0 reads from restart file, bcasts ------------------------------------------------------------------------- */ -void PairSpinDipolarCut::read_restart_settings(FILE *fp) +void PairSpinDipoleCut::read_restart_settings(FILE *fp) { if (comm->me == 0) { fread(&cut_spin_long_global,sizeof(double),1,fp); diff --git a/src/SPIN/pair_spin_dipole_cut.h b/src/SPIN/pair_spin_dipole_cut.h index ac17ac2120..77e452b179 100644 --- a/src/SPIN/pair_spin_dipole_cut.h +++ b/src/SPIN/pair_spin_dipole_cut.h @@ -13,24 +13,24 @@ #ifdef PAIR_CLASS -PairStyle(spin/dipolar/cut,PairSpinDipolarCut) +PairStyle(spin/dipole/cut,PairSpinDipoleCut) #else -#ifndef LMP_PAIR_SPIN_DIPOLAR_CUT_H -#define LMP_PAIR_SPIN_DIPOLAR_CUT_H +#ifndef LMP_PAIR_SPIN_DIPOLE_CUT_H +#define LMP_PAIR_SPIN_DIPOLE_CUT_H #include "pair_spin.h" namespace LAMMPS_NS { -class PairSpinDipolarCut : public PairSpin { +class PairSpinDipoleCut : public PairSpin { public: double cut_coul; double **sigma; - PairSpinDipolarCut(class LAMMPS *); - ~PairSpinDipolarCut(); + PairSpinDipoleCut(class LAMMPS *); + ~PairSpinDipoleCut(); void settings(int, char **); void coeff(int, char **); double init_one(int, int); diff --git a/src/SPIN/pair_spin_dipole_long.cpp b/src/SPIN/pair_spin_dipole_long.cpp index ef79717f63..45f08955de 100644 --- a/src/SPIN/pair_spin_dipole_long.cpp +++ b/src/SPIN/pair_spin_dipole_long.cpp @@ -21,7 +21,7 @@ #include #include -#include "pair_spin_dipolar_long.h" +#include "pair_spin_dipole_long.h" #include "atom.h" #include "comm.h" #include "neighbor.h" @@ -50,7 +50,7 @@ using namespace MathConst; /* ---------------------------------------------------------------------- */ -PairSpinDipolarLong::PairSpinDipolarLong(LAMMPS *lmp) : PairSpin(lmp), +PairSpinDipoleLong::PairSpinDipoleLong(LAMMPS *lmp) : PairSpin(lmp), lockfixnvespin(NULL) { single_enable = 0; @@ -74,7 +74,7 @@ lockfixnvespin(NULL) free all arrays ------------------------------------------------------------------------- */ -PairSpinDipolarLong::~PairSpinDipolarLong() +PairSpinDipoleLong::~PairSpinDipoleLong() { if (allocated) { memory->destroy(setflag); @@ -87,7 +87,7 @@ PairSpinDipolarLong::~PairSpinDipolarLong() global settings ------------------------------------------------------------------------- */ -void PairSpinDipolarLong::settings(int narg, char **arg) +void PairSpinDipoleLong::settings(int narg, char **arg) { if (narg < 1 || narg > 2) error->all(FLERR,"Incorrect args in pair_style command"); @@ -116,7 +116,7 @@ void PairSpinDipolarLong::settings(int narg, char **arg) set coeffs for one or more type pairs ------------------------------------------------------------------------- */ -void PairSpinDipolarLong::coeff(int narg, char **arg) +void PairSpinDipoleLong::coeff(int narg, char **arg) { if (!allocated) allocate(); @@ -149,7 +149,7 @@ void PairSpinDipolarLong::coeff(int narg, char **arg) init specific to this pair style ------------------------------------------------------------------------- */ -void PairSpinDipolarLong::init_style() +void PairSpinDipoleLong::init_style() { if (!atom->sp_flag) error->all(FLERR,"Pair spin requires atom/spin style"); @@ -196,7 +196,7 @@ void PairSpinDipolarLong::init_style() init for one type pair i,j and corresponding j,i ------------------------------------------------------------------------- */ -double PairSpinDipolarLong::init_one(int i, int j) +double PairSpinDipoleLong::init_one(int i, int j) { if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); @@ -209,7 +209,7 @@ double PairSpinDipolarLong::init_one(int i, int j) extract the larger cutoff if "cut" or "cut_coul" ------------------------------------------------------------------------- */ -void *PairSpinDipolarLong::extract(const char *str, int &dim) +void *PairSpinDipoleLong::extract(const char *str, int &dim) { if (strcmp(str,"cut") == 0) { dim = 0; @@ -232,7 +232,7 @@ void *PairSpinDipolarLong::extract(const char *str, int &dim) /* ---------------------------------------------------------------------- */ -void PairSpinDipolarLong::compute(int eflag, int vflag) +void PairSpinDipoleLong::compute(int eflag, int vflag) { int i,j,ii,jj,inum,jnum,itype,jtype; double r,rinv,r2inv,rsq; @@ -366,7 +366,7 @@ void PairSpinDipolarLong::compute(int eflag, int vflag) update the pair interaction fmi acting on the spin ii ------------------------------------------------------------------------- */ -void PairSpinDipolarLong::compute_single_pair(int ii, double fmi[3]) +void PairSpinDipoleLong::compute_single_pair(int ii, double fmi[3]) { int i,j,jj,jnum,itype,jtype; double r,rinv,r2inv,rsq; @@ -463,7 +463,7 @@ void PairSpinDipolarLong::compute_single_pair(int ii, double fmi[3]) compute dipolar interaction between spins i and j ------------------------------------------------------------------------- */ -void PairSpinDipolarLong::compute_long(int i, int j, double eij[3], +void PairSpinDipoleLong::compute_long(int i, int j, double eij[3], double bij[4], double fmi[3], double spi[4], double spj[4]) { double sjeij,pre; @@ -486,7 +486,7 @@ void PairSpinDipolarLong::compute_long(int i, int j, double eij[3], atom i and atom j ------------------------------------------------------------------------- */ -void PairSpinDipolarLong::compute_long_mech(int i, int j, double eij[3], +void PairSpinDipoleLong::compute_long_mech(int i, int j, double eij[3], double bij[4], double fi[3], double spi[3], double spj[3]) { double sisj,sieij,sjeij,b2,b3; @@ -514,7 +514,7 @@ void PairSpinDipolarLong::compute_long_mech(int i, int j, double eij[3], allocate all arrays ------------------------------------------------------------------------- */ -void PairSpinDipolarLong::allocate() +void PairSpinDipoleLong::allocate() { allocated = 1; int n = atom->ntypes; @@ -532,7 +532,7 @@ void PairSpinDipolarLong::allocate() proc 0 writes to restart file ------------------------------------------------------------------------- */ -void PairSpinDipolarLong::write_restart(FILE *fp) +void PairSpinDipoleLong::write_restart(FILE *fp) { write_restart_settings(fp); @@ -551,7 +551,7 @@ void PairSpinDipolarLong::write_restart(FILE *fp) proc 0 reads from restart file, bcasts ------------------------------------------------------------------------- */ -void PairSpinDipolarLong::read_restart(FILE *fp) +void PairSpinDipoleLong::read_restart(FILE *fp) { read_restart_settings(fp); @@ -577,7 +577,7 @@ void PairSpinDipolarLong::read_restart(FILE *fp) proc 0 writes to restart file ------------------------------------------------------------------------- */ -void PairSpinDipolarLong::write_restart_settings(FILE *fp) +void PairSpinDipoleLong::write_restart_settings(FILE *fp) { fwrite(&cut_spin_long_global,sizeof(double),1,fp); fwrite(&mix_flag,sizeof(int),1,fp); @@ -587,7 +587,7 @@ void PairSpinDipolarLong::write_restart_settings(FILE *fp) proc 0 reads from restart file, bcasts ------------------------------------------------------------------------- */ -void PairSpinDipolarLong::read_restart_settings(FILE *fp) +void PairSpinDipoleLong::read_restart_settings(FILE *fp) { if (comm->me == 0) { fread(&cut_spin_long_global,sizeof(double),1,fp); diff --git a/src/SPIN/pair_spin_dipole_long.h b/src/SPIN/pair_spin_dipole_long.h index 191e983328..d3f9857716 100644 --- a/src/SPIN/pair_spin_dipole_long.h +++ b/src/SPIN/pair_spin_dipole_long.h @@ -13,24 +13,24 @@ #ifdef PAIR_CLASS -PairStyle(spin/dipolar/long,PairSpinDipolarLong) +PairStyle(spin/dipole/long,PairSpinDipoleLong) #else -#ifndef LMP_PAIR_SPIN_DIPOLAR_LONG_H -#define LMP_PAIR_SPIN_DIPOLAR_LONG_H +#ifndef LMP_PAIR_SPIN_DIPOLE_LONG_H +#define LMP_PAIR_SPIN_DIPOLE_LONG_H #include "pair_spin.h" namespace LAMMPS_NS { -class PairSpinDipolarLong : public PairSpin { +class PairSpinDipoleLong : public PairSpin { public: double cut_coul; double **sigma; - PairSpinDipolarLong(class LAMMPS *); - ~PairSpinDipolarLong(); + PairSpinDipoleLong(class LAMMPS *); + ~PairSpinDipoleLong(); void settings(int, char **); void coeff(int, char **); double init_one(int, int); diff --git a/src/SPIN/pair_spin_dipole_long_qsymp.cpp b/src/SPIN/pair_spin_dipole_long_qsymp.cpp index 4b07b540bc..b77c3cb80a 100644 --- a/src/SPIN/pair_spin_dipole_long_qsymp.cpp +++ b/src/SPIN/pair_spin_dipole_long_qsymp.cpp @@ -21,7 +21,7 @@ #include #include -#include "pair_spin_dipolar_long_qsymp.h" +#include "pair_spin_dipole_long_qsymp.h" #include "atom.h" #include "comm.h" #include "neighbor.h" @@ -50,7 +50,7 @@ using namespace MathConst; /* ---------------------------------------------------------------------- */ -PairSpinDipolarLongQsymp::PairSpinDipolarLongQsymp(LAMMPS *lmp) : PairSpin(lmp), +PairSpinDipoleLongQsymp::PairSpinDipoleLongQsymp(LAMMPS *lmp) : PairSpin(lmp), lockfixnvespin(NULL) { single_enable = 0; @@ -75,7 +75,7 @@ lockfixnvespin(NULL) free all arrays ------------------------------------------------------------------------- */ -PairSpinDipolarLongQsymp::~PairSpinDipolarLongQsymp() +PairSpinDipoleLongQsymp::~PairSpinDipoleLongQsymp() { if (allocated) { memory->destroy(setflag); @@ -88,7 +88,7 @@ PairSpinDipolarLongQsymp::~PairSpinDipolarLongQsymp() global settings ------------------------------------------------------------------------- */ -void PairSpinDipolarLongQsymp::settings(int narg, char **arg) +void PairSpinDipoleLongQsymp::settings(int narg, char **arg) { if (narg < 1 || narg > 2) error->all(FLERR,"Incorrect args in pair_style command"); @@ -117,7 +117,7 @@ void PairSpinDipolarLongQsymp::settings(int narg, char **arg) set coeffs for one or more type pairs ------------------------------------------------------------------------- */ -void PairSpinDipolarLongQsymp::coeff(int narg, char **arg) +void PairSpinDipoleLongQsymp::coeff(int narg, char **arg) { if (!allocated) allocate(); @@ -150,7 +150,7 @@ void PairSpinDipolarLongQsymp::coeff(int narg, char **arg) init specific to this pair style ------------------------------------------------------------------------- */ -void PairSpinDipolarLongQsymp::init_style() +void PairSpinDipoleLongQsymp::init_style() { if (!atom->sp_flag) error->all(FLERR,"Pair spin requires atom/spin style"); @@ -193,7 +193,7 @@ void PairSpinDipolarLongQsymp::init_style() init for one type pair i,j and corresponding j,i ------------------------------------------------------------------------- */ -double PairSpinDipolarLongQsymp::init_one(int i, int j) +double PairSpinDipoleLongQsymp::init_one(int i, int j) { if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); @@ -206,7 +206,7 @@ double PairSpinDipolarLongQsymp::init_one(int i, int j) extract the larger cutoff if "cut" or "cut_coul" ------------------------------------------------------------------------- */ -void *PairSpinDipolarLongQsymp::extract(const char *str, int &dim) +void *PairSpinDipoleLongQsymp::extract(const char *str, int &dim) { if (strcmp(str,"cut") == 0) { dim = 0; @@ -229,7 +229,7 @@ void *PairSpinDipolarLongQsymp::extract(const char *str, int &dim) /* ---------------------------------------------------------------------- */ -void PairSpinDipolarLongQsymp::compute(int eflag, int vflag) +void PairSpinDipoleLongQsymp::compute(int eflag, int vflag) { int i,j,ii,jj,inum,jnum,itype,jtype; double r,rinv,r2inv,rsq; @@ -390,7 +390,7 @@ void PairSpinDipolarLongQsymp::compute(int eflag, int vflag) removing erf(r)/r (for r in [0,rc]) from the kspace force ------------------------------------------------------------------------- */ -void PairSpinDipolarLongQsymp::compute_single_pair(int ii, double fmi[3]) +void PairSpinDipoleLongQsymp::compute_single_pair(int ii, double fmi[3]) { int i,j,jj,jnum,itype,jtype; double rinv,r2inv,r3inv,rsq; @@ -470,7 +470,7 @@ void PairSpinDipolarLongQsymp::compute_single_pair(int ii, double fmi[3]) compute dipolar interaction between spins i and j ------------------------------------------------------------------------- */ -void PairSpinDipolarLongQsymp::compute_long(int i, int j, double rij[3], +void PairSpinDipoleLongQsymp::compute_long(int i, int j, double rij[3], double bij[4], double fmi[3], double spi[4], double spj[4]) { double sjdotr; @@ -492,7 +492,7 @@ void PairSpinDipolarLongQsymp::compute_long(int i, int j, double rij[3], atom i and atom j ------------------------------------------------------------------------- */ -void PairSpinDipolarLongQsymp::compute_long_mech(int i, int j, double rij[3], +void PairSpinDipoleLongQsymp::compute_long_mech(int i, int j, double rij[3], double bij[4], double fi[3], double spi[3], double spj[3]) { double sdots,sidotr,sjdotr,b2,b3; @@ -522,7 +522,7 @@ void PairSpinDipolarLongQsymp::compute_long_mech(int i, int j, double rij[3], allocate all arrays ------------------------------------------------------------------------- */ -void PairSpinDipolarLongQsymp::allocate() +void PairSpinDipoleLongQsymp::allocate() { allocated = 1; int n = atom->ntypes; @@ -540,7 +540,7 @@ void PairSpinDipolarLongQsymp::allocate() proc 0 writes to restart file ------------------------------------------------------------------------- */ -void PairSpinDipolarLongQsymp::write_restart(FILE *fp) +void PairSpinDipoleLongQsymp::write_restart(FILE *fp) { write_restart_settings(fp); @@ -559,7 +559,7 @@ void PairSpinDipolarLongQsymp::write_restart(FILE *fp) proc 0 reads from restart file, bcasts ------------------------------------------------------------------------- */ -void PairSpinDipolarLongQsymp::read_restart(FILE *fp) +void PairSpinDipoleLongQsymp::read_restart(FILE *fp) { read_restart_settings(fp); @@ -585,7 +585,7 @@ void PairSpinDipolarLongQsymp::read_restart(FILE *fp) proc 0 writes to restart file ------------------------------------------------------------------------- */ -void PairSpinDipolarLongQsymp::write_restart_settings(FILE *fp) +void PairSpinDipoleLongQsymp::write_restart_settings(FILE *fp) { fwrite(&cut_spin_long_global,sizeof(double),1,fp); fwrite(&mix_flag,sizeof(int),1,fp); @@ -595,7 +595,7 @@ void PairSpinDipolarLongQsymp::write_restart_settings(FILE *fp) proc 0 reads from restart file, bcasts ------------------------------------------------------------------------- */ -void PairSpinDipolarLongQsymp::read_restart_settings(FILE *fp) +void PairSpinDipoleLongQsymp::read_restart_settings(FILE *fp) { if (comm->me == 0) { fread(&cut_spin_long_global,sizeof(double),1,fp); diff --git a/src/SPIN/pair_spin_dipole_long_qsymp.h b/src/SPIN/pair_spin_dipole_long_qsymp.h index 28867b5229..fb5915daa2 100644 --- a/src/SPIN/pair_spin_dipole_long_qsymp.h +++ b/src/SPIN/pair_spin_dipole_long_qsymp.h @@ -13,24 +13,24 @@ #ifdef PAIR_CLASS -PairStyle(spin/dipolar/long/qsymp,PairSpinDipolarLongQsymp) +PairStyle(spin/dipole/long/qsymp,PairSpinDipoleLongQsymp) #else -#ifndef LMP_PAIR_SPIN_DIPOLAR_LONG_QSYMP_H -#define LMP_PAIR_SPIN_DIPOLAR_LONG_QSYMP_H +#ifndef LMP_PAIR_SPIN_DIPOLE_LONG_QSYMP_H +#define LMP_PAIR_SPIN_DIPOLE_LONG_QSYMP_H #include "pair_spin.h" namespace LAMMPS_NS { -class PairSpinDipolarLongQsymp : public PairSpin { +class PairSpinDipoleLongQsymp : public PairSpin { public: double cut_coul; double **sigma; - PairSpinDipolarLongQsymp(class LAMMPS *); - ~PairSpinDipolarLongQsymp(); + PairSpinDipoleLongQsymp(class LAMMPS *); + virtual ~PairSpinDipoleLongQsymp(); void settings(int, char **); void coeff(int, char **); double init_one(int, int); From 27a2d0cbd4eaef91226d73fb697d24532dc4c039 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 16 May 2019 08:55:03 -0400 Subject: [PATCH 160/311] add option to restrict coordination number by group --- doc/src/compute_coord_atom.txt | 19 ++++++++++++----- src/compute_coord_atom.cpp | 39 ++++++++++++++++++++++++---------- src/compute_coord_atom.h | 3 +++ 3 files changed, 45 insertions(+), 16 deletions(-) diff --git a/doc/src/compute_coord_atom.txt b/doc/src/compute_coord_atom.txt index ddc4cc82d3..893efc6cf6 100644 --- a/doc/src/compute_coord_atom.txt +++ b/doc/src/compute_coord_atom.txt @@ -15,8 +15,9 @@ compute ID group-ID coord/atom cstyle args ... :pre ID, group-ID are documented in "compute"_compute.html command :ulb,l coord/atom = style name of this compute command :l cstyle = {cutoff} or {orientorder} :l - {cutoff} args = cutoff typeN + {cutoff} args = cutoff \[group group2-ID\] typeN cutoff = distance within which to count coordination neighbors (distance units) + group {group2-ID} = select group-ID to restrict which atoms to cound for coordination number (optional) typeN = atom type for Nth coordination count (see asterisk form below) {orientorder} args = orientorderID threshold orientorderID = ID of an orientorder/atom compute @@ -28,6 +29,7 @@ cstyle = {cutoff} or {orientorder} :l compute 1 all coord/atom cutoff 2.0 compute 1 all coord/atom cutoff 6.0 1 2 compute 1 all coord/atom cutoff 6.0 2*4 5*8 * +compute 1 solute coord/atom cutoff 2.0 group solvent compute 1 all coord/atom orientorder 2 0.5 :pre [Description:] @@ -38,9 +40,14 @@ meaning of the resulting value depend on the {cstyle} keyword used. The {cutoff} cstyle calculates one or more traditional coordination numbers for each atom. A coordination number is defined as the number -of neighbor atoms with specified atom type(s) that are within the -specified cutoff distance from the central atom. Atoms not in the -specified group are included in the coordination number tally. +of neighbor atoms with specified atom type(s), and optionally within +the specified group, that are within the specified cutoff distance from +the central atom. The compute group selects only the central atoms; all +neighboring atoms, unless selected by type, type range, or group option, +are included in the coordinations number tally. + +The optional {group} keyword allows to specify from which group atoms +contribute to the coordination number. Default setting is group 'all'. The {typeN} keywords allow specification of which atom types contribute to each coordination number. One coordination number is @@ -122,7 +129,9 @@ explained above. "compute cluster/atom"_compute_cluster_atom.html "compute orientorder/atom"_compute_orientorder_atom.html -[Default:] none +[Default:] + +group = all :line diff --git a/src/compute_coord_atom.cpp b/src/compute_coord_atom.cpp index 33b318ea17..021d092bc4 100644 --- a/src/compute_coord_atom.cpp +++ b/src/compute_coord_atom.cpp @@ -25,6 +25,7 @@ #include "force.h" #include "pair.h" #include "comm.h" +#include "group.h" #include "memory.h" #include "error.h" @@ -37,10 +38,12 @@ using namespace LAMMPS_NS; ComputeCoordAtom::ComputeCoordAtom(LAMMPS *lmp, int narg, char **arg) : Compute(lmp, narg, arg), typelo(NULL), typehi(NULL), cvec(NULL), carray(NULL), - id_orientorder(NULL), normv(NULL) + group2(NULL), id_orientorder(NULL), normv(NULL) { if (narg < 5) error->all(FLERR,"Illegal compute coord/atom command"); + jgroup = group->find("all"); + jgroupbit = group->bitmask[jgroup]; cstyle = NONE; if (strcmp(arg[3],"cutoff") == 0) { @@ -48,18 +51,29 @@ ComputeCoordAtom::ComputeCoordAtom(LAMMPS *lmp, int narg, char **arg) : double cutoff = force->numeric(FLERR,arg[4]); cutsq = cutoff*cutoff; - ncol = narg-5 + 1; + int iarg = 5; + if ((narg > 6) && (strcmp(arg[5],"group") == 0)) { + int len = strlen(arg[6])+1; + group2 = new char[len]; + strcpy(group2,arg[6]); + iarg += 2; + jgroup = group->find(group2); + if (jgroup == -1) + error->all(FLERR,"Compute coord/atom group2 ID does not exist"); + jgroupbit = group->bitmask[jgroup]; + } + + ncol = narg-iarg + 1; int ntypes = atom->ntypes; typelo = new int[ncol]; typehi = new int[ncol]; - if (narg == 5) { + if (narg == iarg) { ncol = 1; typelo[0] = 1; typehi[0] = ntypes; } else { ncol = 0; - int iarg = 5; while (iarg < narg) { force->bounds(FLERR,arg[iarg],ntypes,typelo[ncol],typehi[ncol]); if (typelo[ncol] > typehi[ncol]) @@ -106,6 +120,7 @@ ComputeCoordAtom::ComputeCoordAtom(LAMMPS *lmp, int narg, char **arg) : ComputeCoordAtom::~ComputeCoordAtom() { + delete [] group2; delete [] typelo; delete [] typehi; memory->destroy(cvec); @@ -229,13 +244,15 @@ void ComputeCoordAtom::compute_peratom() j = jlist[jj]; j &= NEIGHMASK; - jtype = type[j]; - delx = xtmp - x[j][0]; - dely = ytmp - x[j][1]; - delz = ztmp - x[j][2]; - rsq = delx*delx + dely*dely + delz*delz; - if (rsq < cutsq && jtype >= typelo[0] && jtype <= typehi[0]) - n++; + if (mask[j] & jgroupbit) { + jtype = type[j]; + delx = xtmp - x[j][0]; + dely = ytmp - x[j][1]; + delz = ztmp - x[j][2]; + rsq = delx*delx + dely*dely + delz*delz; + if (rsq < cutsq && jtype >= typelo[0] && jtype <= typehi[0]) + n++; + } } cvec[i] = n; diff --git a/src/compute_coord_atom.h b/src/compute_coord_atom.h index 2bbc1b6720..0c1cc90f84 100644 --- a/src/compute_coord_atom.h +++ b/src/compute_coord_atom.h @@ -45,6 +45,9 @@ class ComputeCoordAtom : public Compute { double *cvec; double **carray; + char *group2; + int jgroup,jgroupbit; + class ComputeOrientOrderAtom *c_orientorder; char *id_orientorder; double threshold; From fb8d31422d2a41f596489e088b753610d4a8c8b2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 16 May 2019 09:06:17 -0400 Subject: [PATCH 161/311] fix typo --- doc/src/compute_coord_atom.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/compute_coord_atom.txt b/doc/src/compute_coord_atom.txt index 893efc6cf6..01901ff77b 100644 --- a/doc/src/compute_coord_atom.txt +++ b/doc/src/compute_coord_atom.txt @@ -44,7 +44,7 @@ of neighbor atoms with specified atom type(s), and optionally within the specified group, that are within the specified cutoff distance from the central atom. The compute group selects only the central atoms; all neighboring atoms, unless selected by type, type range, or group option, -are included in the coordinations number tally. +are included in the coordination number tally. The optional {group} keyword allows to specify from which group atoms contribute to the coordination number. Default setting is group 'all'. From 5b71b3fc57f8cc9bd935202f35db0538006e37e9 Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Thu, 16 May 2019 21:51:24 -0600 Subject: [PATCH 162/311] Added bispectrum compute --- src/SNAP/pair_snap.cpp | 480 +++++------------------------------------ src/SNAP/pair_snap.h | 2 + 2 files changed, 56 insertions(+), 426 deletions(-) diff --git a/src/SNAP/pair_snap.cpp b/src/SNAP/pair_snap.cpp index 4913044369..f3b678971d 100644 --- a/src/SNAP/pair_snap.cpp +++ b/src/SNAP/pair_snap.cpp @@ -192,11 +192,13 @@ void PairSNAP::compute_regular(int eflag, int vflag) if (beta_max < list->inum) { memory->grow(beta,list->inum,ncoeff,"PairSNAP:beta"); + memory->grow(bispectrum,list->inum,ncoeff,"PairSNAP:bispectrum"); beta_max = list->inum; } // compute dE_i/dB_i = beta_i for all i in list + compute_bispectrum(); compute_beta(); numneigh = list->numneigh; @@ -251,10 +253,6 @@ void PairSNAP::compute_regular(int eflag, int vflag) snaptr->compute_ui(ninside); snaptr->compute_zi(); - if (quadraticflag) { - snaptr->compute_bi(); - snaptr->copy_bi2bvec(); - } // for neighbors of I within cutoff: // compute Fij = dEi/dRj = -dEi/dRi @@ -269,31 +267,6 @@ void PairSNAP::compute_regular(int eflag, int vflag) snaptr->compute_duidrj(snaptr->rij[jj], snaptr->wj[jj],snaptr->rcutij[jj]); -// // quadratic contributions - -// if (quadraticflag) { -// int k = ncoeff+1; -// for (int icoeff = 0; icoeff < ncoeff; icoeff++) { -// double bveci = snaptr->bvec[icoeff]; -// double fack = coeffi[k]*bveci; -// double* dbveci = snaptr->dbvec[icoeff]; -// fij[0] += fack*dbveci[0]; -// fij[1] += fack*dbveci[1]; -// fij[2] += fack*dbveci[2]; -// k++; -// for (int jcoeff = icoeff+1; jcoeff < ncoeff; jcoeff++) { -// double facki = coeffi[k]*bveci; -// double fackj = coeffi[k]*snaptr->bvec[jcoeff]; -// double* dbvecj = snaptr->dbvec[jcoeff]; - -// fij[0] += facki*dbvecj[0]+fackj*dbveci[0]; -// fij[1] += facki*dbvecj[1]+fackj*dbveci[1]; -// fij[2] += facki*dbvecj[2]+fackj*dbveci[2]; -// k++; -// } -// } -// } - snaptr->compute_deidrj(fij); f[i][0] += fij[0]; @@ -320,10 +293,6 @@ void PairSNAP::compute_regular(int eflag, int vflag) double* coeffi = coeffelem[ielem]; evdwl = coeffi[0]; - if (!quadraticflag) { - snaptr->compute_bi(); - snaptr->copy_bi2bvec(); - } // E = beta.B + 0.5*B^t.alpha.B // coeff[k] = beta[k-1] or @@ -332,21 +301,9 @@ void PairSNAP::compute_regular(int eflag, int vflag) // linear contributions - for (int k = 1; k <= ncoeff; k++) - evdwl += coeffi[k]*snaptr->bvec[k-1]; + for (int k = 0; k < ncoeff; k++) + evdwl += beta[ii][k]*bispectrum[ii][k]; - // quadratic contributions - - if (quadraticflag) { - int k = ncoeff+1; - for (int icoeff = 0; icoeff < ncoeff; icoeff++) { - double bveci = snaptr->bvec[icoeff]; - evdwl += 0.5*coeffi[k++]*bveci*bveci; - for (int jcoeff = icoeff+1; jcoeff < ncoeff; jcoeff++) { - evdwl += coeffi[k++]*bveci*snaptr->bvec[jcoeff]; - } - } - } ev_tally_full(i,2.0*evdwl,0.0,0.0,0.0,0.0,0.0); } @@ -355,383 +312,6 @@ void PairSNAP::compute_regular(int eflag, int vflag) if (vflag_fdotr) virial_fdotr_compute(); } - -/* ---------------------------------------------------------------------- - This version is optimized for threading, micro-load balancing - ---------------------------------------------------------------------- */ - -void PairSNAP::compute_optimized(int eflag, int vflag) -{ - // if reneighboring took place do load_balance if requested - if (do_load_balance > 0 && - (neighbor->ncalls != ncalls_neigh)) { - ghostinum = 0; - // reset local ghost neighbor lists - ncalls_neigh = neighbor->ncalls; - if (ilistmask_max < list->inum) { - memory->grow(ilistmask,list->inum,"PairSnap::ilistmask"); - ilistmask_max = list->inum; - } - for (int i = 0; i < list->inum; i++) - ilistmask[i] = 1; - - //multiple passes for loadbalancing - for (int i = 0; i < do_load_balance; i++) - load_balance(); - } - - int numpairs = 0; - for (int ii = 0; ii < list->inum; ii++) { - if ((do_load_balance <= 0) || ilistmask[ii]) { - int i = list->ilist[ii]; - int jnum = list->numneigh[i]; - numpairs += jnum; - } - } - - if (do_load_balance) - for (int ii = 0; ii < ghostinum; ii++) { - int i = ghostilist[ii]; - int jnum = ghostnumneigh[i]; - numpairs += jnum; - } - - // optimized schedule setting - - int time_dynamic = 0; - int time_guided = 0; - - if (schedule_user == 0) schedule_user = 4; - - switch (schedule_user) { - case 1: - omp_set_schedule(omp_sched_static,1); - break; - case 2: - omp_set_schedule(omp_sched_dynamic,1); - break; - case 3: - omp_set_schedule(omp_sched_guided,2); - break; - case 4: - omp_set_schedule(omp_sched_auto,0); - break; - case 5: - if (numpairs < 8*nthreads) omp_set_schedule(omp_sched_dynamic,1); - else if (schedule_time_guided < 0.0) { - omp_set_schedule(omp_sched_guided,2); - if (!eflag && !vflag) time_guided = 1; - } else if (schedule_time_dynamic<0.0) { - omp_set_schedule(omp_sched_dynamic,1); - if (!eflag && !vflag) time_dynamic = 1; - } else if (schedule_time_guidedcreate(pairs_tid_unique,numpairs,4,"numpairs"); - pairs = pairs_tid_unique; - } - - if (!use_shared_arrays) { - numpairs = 0; - for (int ii = 0; ii < list->inum; ii++) { - if ((do_load_balance <= 0) || ilistmask[ii]) { - int i = list->ilist[ii]; - int jnum = list->numneigh[i]; - for (int jj = 0; jjx; - double **f = atom->f; - int *type = atom->type; - int nlocal = atom->nlocal; - int newton_pair = force->newton_pair; - - numneigh = list->numneigh; - firstneigh = list->firstneigh; - -#ifdef TIMING_INFO - // only update micro timers after setup - static int count=0; - if (count<2) { - sna[tid]->timers[0] = 0; - sna[tid]->timers[1] = 0; - sna[tid]->timers[2] = 0; - sna[tid]->timers[3] = 0; - sna[tid]->timers[4] = 0; - } - count++; -#endif - - // did thread start working on interactions of new atom - int iold = -1; - - double starttime, endtime; - if (time_dynamic || time_guided) - starttime = MPI_Wtime(); - -#if defined(_OPENMP) -#pragma omp for schedule(runtime) -#endif - for (int iijj = 0; iijj < numpairs; iijj++) { - int i = 0; - if (use_shared_arrays) { - i = i_pairs[iijj][0]; - if (iold != i) { - set_sna_to_shared(tid,i_pairs[iijj][3]); - ielem = map[type[i]]; - } - iold = i; - } else { - i = pairs[iijj][0]; - if (iold != i) { - iold = i; - const double xtmp = x[i][0]; - const double ytmp = x[i][1]; - const double ztmp = x[i][2]; - const int itype = type[i]; - ielem = map[itype]; - const double radi = radelem[ielem]; - - if (i < nlocal) { - jlist = firstneigh[i]; - jnum = numneigh[i]; - } else { - jlist = ghostneighs+ghostfirstneigh[i]; - jnum = ghostnumneigh[i]; - } - - // insure rij, inside, wj, and rcutij are of size jnum - - sna[tid]->grow_rij(jnum); - - // rij[][3] = displacements between atom I and those neighbors - // inside = indices of neighbors of I within cutoff - // wj = weights of neighbors of I within cutoff - // rcutij = cutoffs of neighbors of I within cutoff - // note Rij sign convention => dU/dRij = dU/dRj = -dU/dRi - - ninside = 0; - for (jj = 0; jj < jnum; jj++) { - int j = jlist[jj]; - j &= NEIGHMASK; - delx = x[j][0] - xtmp; //unitialised - dely = x[j][1] - ytmp; - delz = x[j][2] - ztmp; - rsq = delx*delx + dely*dely + delz*delz; - jtype = type[j]; - int jelem = map[jtype]; - - if (rsq < cutsq[itype][jtype]&&rsq>1e-20) { //unitialised - sna[tid]->rij[ninside][0] = delx; - sna[tid]->rij[ninside][1] = dely; - sna[tid]->rij[ninside][2] = delz; - sna[tid]->inside[ninside] = j; - sna[tid]->wj[ninside] = wjelem[jelem]; - sna[tid]->rcutij[ninside] = (radi + radelem[jelem])*rcutfac; - ninside++; - - // update index list with inside index - pairs[iijj + (jj - pairs[iijj][1])][2] = - ninside-1; //unitialised - } - } - - // compute Ui and Zi for atom I - - sna[tid]->compute_ui(ninside); //unitialised - sna[tid]->compute_zi(); - } - } - if (quadraticflag) { - sna[tid]->compute_bi(); - sna[tid]->copy_bi2bvec(); - } - - // for neighbors of I within cutoff: - // compute dUi/drj and dBi/drj - // Fij = dEi/dRj = -dEi/dRi => add to Fi, subtract from Fj - - // entry into loop if inside index is set - - double* coeffi = coeffelem[ielem]; - - if (pairs[iijj][2] >= 0) { - jj = pairs[iijj][2]; - int j = sna[tid]->inside[jj]; - sna[tid]->compute_duidrj(sna[tid]->rij[jj], - sna[tid]->wj[jj],sna[tid]->rcutij[jj]); - - sna[tid]->compute_dbidrj(); - sna[tid]->copy_dbi2dbvec(); - - fij[0] = 0.0; - fij[1] = 0.0; - fij[2] = 0.0; - - // linear contributions - - for (k = 1; k <= ncoeff; k++) { - double bgb = coeffi[k]; - fij[0] += bgb*sna[tid]->dbvec[k-1][0]; - fij[1] += bgb*sna[tid]->dbvec[k-1][1]; - fij[2] += bgb*sna[tid]->dbvec[k-1][2]; - } - - // quadratic contributions - - if (quadraticflag) { - int k = ncoeff+1; - for (int icoeff = 0; icoeff < ncoeff; icoeff++) { - double bveci = sna[tid]->bvec[icoeff]; - double fack = coeffi[k]*bveci; - double* dbveci = sna[tid]->dbvec[icoeff]; - fij[0] += fack*sna[tid]->dbvec[icoeff][0]; - fij[1] += fack*sna[tid]->dbvec[icoeff][1]; - fij[2] += fack*sna[tid]->dbvec[icoeff][2]; - k++; - for (int jcoeff = icoeff+1; jcoeff < ncoeff; jcoeff++) { - double facki = coeffi[k]*bveci; - double fackj = coeffi[k]*sna[tid]->bvec[jcoeff]; - double* dbvecj = sna[tid]->dbvec[jcoeff]; - fij[0] += facki*dbvecj[0]+fackj*dbveci[0]; - fij[1] += facki*dbvecj[1]+fackj*dbveci[1]; - fij[2] += facki*dbvecj[2]+fackj*dbveci[2]; - k++; - } - } - } - -#if defined(_OPENMP) -#pragma omp critical -#endif - { - f[i][0] += fij[0]; - f[i][1] += fij[1]; - f[i][2] += fij[2]; - f[j][0] -= fij[0]; - f[j][1] -= fij[1]; - f[j][2] -= fij[2]; - - // tally per-atom virial contribution - - if (vflag) - ev_tally_xyz(i,j,nlocal,newton_pair,0.0,0.0, - fij[0],fij[1],fij[2], - -sna[tid]->rij[jj][0],-sna[tid]->rij[jj][1], - -sna[tid]->rij[jj][2]); - } - } - - // evdwl = energy of atom I, sum over coeffs_k * Bi_k - // only call this for first pair of each atom i - // if atom has no pairs, eatom=0, which is wrong - - if (eflag&&pairs[iijj][1] == 0) { - evdwl = coeffi[0]; - - if (!quadraticflag) { - sna[tid]->compute_bi(); - sna[tid]->copy_bi2bvec(); - } - - // E = beta.B + 0.5*B^t.alpha.B - // coeff[k] = beta[k-1] or - // coeff[k] = alpha_ii or - // coeff[k] = alpha_ij = alpha_ji, j != i - - // linear contributions - - for (int k = 1; k <= ncoeff; k++) - evdwl += coeffi[k]*sna[tid]->bvec[k-1]; - - // quadratic contributions - - if (quadraticflag) { - int k = ncoeff+1; - for (int icoeff = 0; icoeff < ncoeff; icoeff++) { - double bveci = sna[tid]->bvec[icoeff]; - evdwl += 0.5*coeffi[k++]*bveci*bveci; - for (int jcoeff = icoeff+1; jcoeff < ncoeff; jcoeff++) { - evdwl += coeffi[k++]*bveci*sna[tid]->bvec[jcoeff]; - } - } - } - -#if defined(_OPENMP) -#pragma omp critical -#endif - ev_tally_full(i,2.0*evdwl,0.0,0.0,0.0,0.0,0.0); - } - - } - if (time_dynamic || time_guided) - endtime = MPI_Wtime(); - if (time_dynamic) schedule_time_dynamic = endtime - starttime; - if (time_guided) schedule_time_guided = endtime - starttime; - if (!use_shared_arrays) memory->destroy(pairs); - - }// end of pragma omp parallel - - if (vflag_fdotr) virial_fdotr_compute(); - -} - inline int PairSNAP::equal(double* x,double* y) { double dist2 = @@ -1325,14 +905,61 @@ void PairSNAP::compute_beta() void PairSNAP::compute_bispectrum() { - int i; + int i,j,jnum,ninside; + double delx,dely,delz,rsq; + int *jlist,*numneigh,**firstneigh; + + double **x = atom->x; int *type = atom->type; + class SNA* snaptr = sna[0]; for (int ii = 0; ii < list->inum; ii++) { i = list->ilist[ii]; + + const double xtmp = x[i][0]; + const double ytmp = x[i][1]; + const double ztmp = x[i][2]; const int itype = type[i]; const int ielem = map[itype]; - double* coeffi = coeffelem[ielem]; + const double radi = radelem[ielem]; + + jlist = list->firstneigh[i]; + jnum = list->numneigh[i]; + + // insure rij, inside, wj, and rcutij are of size jnum + + snaptr->grow_rij(jnum); + + // rij[][3] = displacements between atom I and those neighbors + // inside = indices of neighbors of I within cutoff + // wj = weights for neighbors of I within cutoff + // rcutij = cutoffs for neighbors of I within cutoff + // note Rij sign convention => dU/dRij = dU/dRj = -dU/dRi + + ninside = 0; + for (int jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + delx = x[j][0] - xtmp; + dely = x[j][1] - ytmp; + delz = x[j][2] - ztmp; + rsq = delx*delx + dely*dely + delz*delz; + int jtype = type[j]; + int jelem = map[jtype]; + + if (rsq < cutsq[itype][jtype]&&rsq>1e-20) { + snaptr->rij[ninside][0] = delx; + snaptr->rij[ninside][1] = dely; + snaptr->rij[ninside][2] = delz; + snaptr->inside[ninside] = j; + snaptr->wj[ninside] = wjelem[jelem]; + snaptr->rcutij[ninside] = (radi + radelem[jelem])*rcutfac; + ninside++; + } + } + + snaptr->compute_ui(ninside); + snaptr->compute_zi(); snaptr->compute_bi(); snaptr->copy_bi2bvec(); @@ -1470,6 +1097,7 @@ void PairSNAP::coeff(int narg, char **arg) memory->destroy(wjelem); memory->destroy(coeffelem); memory->destroy(beta); + memory->destroy(bispectrum); } char* type1 = arg[0]; diff --git a/src/SNAP/pair_snap.h b/src/SNAP/pair_snap.h index 94d21162e2..1453076b23 100644 --- a/src/SNAP/pair_snap.h +++ b/src/SNAP/pair_snap.h @@ -56,6 +56,7 @@ protected: void build_per_atom_arrays(); void compute_beta(); + void compute_bispectrum(); int schedule_user; double schedule_time_guided; @@ -102,6 +103,7 @@ protected: double *wjelem; // elements weights double **coeffelem; // element bispectrum coefficients double** beta; // betas for all atoms in list + double** bispectrum; // bispectrum components for all atoms in list int *map; // mapping from atom types to elements int twojmax, diagonalstyle, switchflag, bzeroflag; double rfac0, rmin0, wj1, wj2; From 51a6bfd579722cce8bc8f00de63ba08ff37ca9e4 Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Thu, 16 May 2019 22:01:45 -0600 Subject: [PATCH 163/311] Added bispectrum compute --- src/SNAP/pair_snap.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/SNAP/pair_snap.cpp b/src/SNAP/pair_snap.cpp index f3b678971d..7c81eb0e8a 100644 --- a/src/SNAP/pair_snap.cpp +++ b/src/SNAP/pair_snap.cpp @@ -102,6 +102,8 @@ PairSNAP::PairSNAP(LAMMPS *lmp) : Pair(lmp) sna = NULL; beta_max = 0; + beta = NULL; + bispectrum = NULL; } /* ---------------------------------------------------------------------- */ From 803e0631c5e51ed5bdacebb6dbec9e5118d36954 Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Thu, 16 May 2019 22:11:06 -0600 Subject: [PATCH 164/311] Added bispectrum compute --- src/SNAP/pair_snap.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/SNAP/pair_snap.cpp b/src/SNAP/pair_snap.cpp index 7c81eb0e8a..86e709ba03 100644 --- a/src/SNAP/pair_snap.cpp +++ b/src/SNAP/pair_snap.cpp @@ -119,8 +119,9 @@ PairSNAP::~PairSNAP() memory->destroy(radelem); memory->destroy(wjelem); memory->destroy(coeffelem); - memory->destroy(beta); } + memory->destroy(beta); + memory->destroy(bispectrum); // Need to set this because restart not handled by PairHybrid @@ -1098,9 +1099,9 @@ void PairSNAP::coeff(int narg, char **arg) memory->destroy(radelem); memory->destroy(wjelem); memory->destroy(coeffelem); - memory->destroy(beta); - memory->destroy(bispectrum); } + memory->destroy(beta); + memory->destroy(bispectrum); char* type1 = arg[0]; char* type2 = arg[1]; From c7eb9a86262b1553a10cddef98982580f9b31b82 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 17 May 2019 15:25:25 -0400 Subject: [PATCH 165/311] there really isn't a problem with calling this compute multiple times --- src/compute_coord_atom.cpp | 6 ------ src/compute_coord_atom.h | 4 ---- 2 files changed, 10 deletions(-) diff --git a/src/compute_coord_atom.cpp b/src/compute_coord_atom.cpp index 021d092bc4..54f4c70c71 100644 --- a/src/compute_coord_atom.cpp +++ b/src/compute_coord_atom.cpp @@ -158,12 +158,6 @@ void ComputeCoordAtom::init() neighbor->requests[irequest]->half = 0; neighbor->requests[irequest]->full = 1; neighbor->requests[irequest]->occasional = 1; - - int count = 0; - for (int i = 0; i < modify->ncompute; i++) - if (strcmp(modify->compute[i]->style,"coord/atom") == 0) count++; - if (count > 1 && comm->me == 0) - error->warning(FLERR,"More than one compute coord/atom"); } /* ---------------------------------------------------------------------- */ diff --git a/src/compute_coord_atom.h b/src/compute_coord_atom.h index 0c1cc90f84..2a54613cc6 100644 --- a/src/compute_coord_atom.h +++ b/src/compute_coord_atom.h @@ -97,8 +97,4 @@ E: Compute coord/atom cutoff is longer than pairwise cutoff Cannot compute coordination at distances longer than the pair cutoff, since those atoms are not in the neighbor list. -W: More than one compute coord/atom - -It is not efficient to use compute coord/atom more than once. - */ From fbb78e7b78a38a1734bc0abd37e0e3000fe07588 Mon Sep 17 00:00:00 2001 From: julient31 Date: Fri, 17 May 2019 15:04:14 -0600 Subject: [PATCH 166/311] Commit JT 051719 - removed qsymp pair style - cleaned doc (pair/spin/diole and kspace_style) - cleaned kspace .cpp/h files --- doc/src/Eqs/pair_spin_dipole.jpg | Bin 0 -> 38411 bytes doc/src/Eqs/pair_spin_dipole.tex | 42 ++ doc/src/kspace_style.txt | 24 +- doc/src/pair_spin_dipole.txt | 214 +------ examples/SPIN/dipole_spin/in.spin.iron_ewald | 9 +- examples/SPIN/dipole_spin/in.spin.iron_pppm | 7 +- src/.gitignore | 12 + src/KSPACE/ewald_dipole.cpp | 1 - src/KSPACE/ewald_dipole_spin.cpp | 5 - src/KSPACE/pppm_dipole_spin.cpp | 4 +- src/SPIN/pair_spin_dipole_cut.cpp | 141 +++-- src/SPIN/pair_spin_dipole_long.cpp | 198 +++--- src/SPIN/pair_spin_dipole_long.h | 2 +- src/SPIN/pair_spin_dipole_long_qsymp.cpp | 606 ------------------- src/SPIN/pair_spin_dipole_long_qsymp.h | 100 --- src/SPIN/pair_spin_exchange.cpp | 2 +- 16 files changed, 294 insertions(+), 1073 deletions(-) create mode 100644 doc/src/Eqs/pair_spin_dipole.jpg create mode 100644 doc/src/Eqs/pair_spin_dipole.tex delete mode 100644 src/SPIN/pair_spin_dipole_long_qsymp.cpp delete mode 100644 src/SPIN/pair_spin_dipole_long_qsymp.h diff --git a/doc/src/Eqs/pair_spin_dipole.jpg b/doc/src/Eqs/pair_spin_dipole.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e648547ec3de18eaf870e976ee386c9b4b9885f1 GIT binary patch literal 38411 zcmc$_WmsH6wkX=Ty96g_aQ7e~xVyW%OK=SiO>lR28h3XK?he7-HC!@tX3orfGw0s( z=e_Fs_O4o5dw2D!RclqhExv66P$fkrL;+x6V1S|b58!PDAOwH_2me#w3*>u+f`x*D zgoJ{Jfq{laghxa~fJZ<;LPkeLLPkSIKtRPtMZ>_v!oosC`GA9siGz-bh51Ja7{ogd zBorJJ6dWcJ0utu`y1exO&|tyHA!#AN&;a0QU=V0vZ+!p)02lxq;?HpZUZ9{MAYs74 zVBfKr{|Nsp!P_zb5#pT(6#^9i0DD#ZJKH}rf>`jOFaDwbe{EW&0U*GLiINDy9sr~GSUlC$eyAb;(` zu(3y=ojl24l68NyB4pbS5dvKJ*zg=~mL;L@BHMn=z|13x0P!k^eKr0U{{5hbk$(Y! z=}`s!XioV9g(0IiR!DEfa*WprFKN<}2`~oOU#TB|nd0=9rGYGI5y1};}HT~56PfA0TS+ywa1#gyni0xYm*rff*WbM+&c0Z2wu z=@9BmP{~VxmwcZzaz7~f1r|J*I5;ovl(}${CQ&@7FQ?yAiVaw>c0!5sqjLScI44wH z6^$>fQTL`E)n6U0FavY2Si3E_w}d};H>r(+J^GzdgsyUP&;O(HKW%pSVJSLF#e8ka z%bDl`wn|pFxj=Bo6v5vM zE7XyEbcRBmra+L8Va$fez#S74f|U3f(T%8!tn4EHF6N&K^A!MtP1O-`D|CGVUWpR#Kk& z1^^%w2LQ*M<{Uyl`6u!J-62Mngzas7|K57jiM}unY{D?{xD&vk3ZoU||2NTJTG=1| z;|%wLnFK)Ma(%@hr>;{A3oyR%;!iJL=28C_3IAgk*<5?X-;O#s%#dsX2q23>|JRxP zKXL=+Kf+xb1IZtcv;1A zP;>|RCH)b@9~F@U)MaW@GMIWy*(2CjG{lce_K!}Q(!d(H!nO`u+Ue9 zGEpEk96v^Zdxg_|A=u2x%I^9ITO+@~KBSZ%n2>?917k)b(pLJx9zYgqIBS^@sJ}t! z2Ox&$c86i)G5GOs6}$r>valeiCnF>jX!?eIKEnQ)fk;08Dd!`M22rPk|8HivS#? zuaHgu8?8`odm+~Ba;8q&W!O$j>1e;4D+!eW07wlgtK_Ijqa>g@E{)z>0jw%GNEq7Xo7j86SnHu}Syl`J>4UlZ#_Yoz*O);Pmpl z{g7ULe-xUKn)jFbzJS3C;yF78Sf)aPCdZ5|hJoRhsX;FQrIE*v#>{xXW~-8fy2WTj zvO6%9hBbJ=AU%1&B8MEot%oEq3UI<0z6+il0E)3MoP?~aF=L%$$VR&(%hE3zl5)dU zMq@%d0f=Yhz|40qHt+ z!N6c3Ai!b%;_^d6y?g)A08AKE3@q%AOlau(A2{Smm`TaVDJZ}AvAuiyuUHpR1Th*yTHW4b46uO#ad#DBaj0t;!#yDr{U@d-75`*ziF$4iG%b@2XxTNH}kP%{{ap;yElxZH8u^1hP!p@-k zaIQc!jld2geKJ@M2;!}V;tfS1>x?Y=o37N)d>u;jZ-9tQr%+0g6~dwczWF;NpQy&V zAv6<0{0V(AUtOXZfYhwRCZc_BPy-@HyF4S`-zx75a&E?Vw9?xzZGWwC7iPYtQ2V7& zoA-UCpYNUfEbzf+42OL|WdH+fjxR^irBJ_sSZhu&1|U@Eh=n0VLmfEQZCC&Cax$Fa z*_7Z7y)u5v*JYwP)AA(1#B5EAe&yh8SN^TMv0b7coQ}Px0}Mh%p$9}^62|6Qx}o}{ zNs6V6)3&XrPxs+>IM%qCyyEH@q;HCRMqC4k zoqR?(7@`rz*=F0|%JbBBR42VxyYM+^MLl_B7@A)+zpI!(TD)+No$c~xulH?~f zN^jQT&>LV}=7EsK9Hi`&KG>|w<1-~iLN#rlY3wGTB8a{aq1T^QRpH5^}d(;MW+W$6aMt z@ynNLsJ*G59vj{O1cnB346{8e7NKBVzT_BVMU@XhWH>q4UTL46L-Ce=>lMgZIq6}> zJE%ObH4`4wXqDilSi^4x>tttZ=w>dzM*6%)7+sNU?v}7R*hI2l7&!}`c@xtvKTkk6 zKrDobcHkA8vU+^R4ph;$s9Fjl-Ms$LckCuVhsRYf>HpyPgwyrA&2ol5+(mc5kmycL zRH+!XRGYCCUZneX?=X`md%u%>MK9GSl|tIoD7(j(H-Oo#dbIY`(v)b9J4aNx=XG=? z>(WFs-S2cOuUD@5$0vu13#LO|MxS$FBk!ek%7T`e!s?OZ>Ll;+U|v7_?IbMy&(u~ zT4@PaI0>n0FD|eqg!nAg1lK!zvZbUJ&_2M|N zr7Z$hlUfCj6OX0f3p|sp=o_HUM0J%#bjeI^tGxijM6+Rqu4aCmbmcBmR^b%kaK@ol~fwJ(~agHc!6T9MDOkR(I>M3u6T)!BOuAY4v*iu!(3(MDfj zmvs0=^nKxc8MS2^`4FYM*)ilPr_TctTY_p^$7DB+D#f=5M_LkuovRqMigtAh-PVdd zP+D7-WhIns-X3`aK&+33rq1uQg~GQt{rapUt&R}jb`?XHBwiLS1`cCC8AWTshV=JJ8W=R>oZQn%YtaQsXK^j``#X=7CcCFF^e3fx zl=i~Tsy9H0(J4<2o;4!Iq6i8uBGU=3VoSneFu;wZuxjvb_37I$k_byqG3fzJ^PN** zBlqklld?t33iBSa?Enh~&?2&@E-C^o~7%I;S`ThjjQk_tJyq8WOtMgn|0RR?yzj+ENb=3+gI!0pN>P&g=cmcI>k_pHHN z;g6Z9v%970Y}|%P)7;{CoYHI{TVBpl+D#rsomXJg+095V9=}pqmw9E{#s)F z!}8O8G{gi9G9Qm`HW$*d8TRpRw!&bw=CBfS@;5yn4Lxgb^EqV3f(Fle3?~r z3;ApReL{pIM|B>RJi9T6to2WX5H&o~#ukOX?GjtesW*W6i0PLu2+1h{0y1pL47ajS zgHyx&Ts@mY<$h_S(4FhQ*|e%Pb)mU$zxDn&K8bodEXF+vUlyMX2p?Nth!gO?0V8## zOD#J&7x0_@#p`Lh$nIma&K-x0f;-j=NX&^@bH_qZfdDO#k6BEtJAd;%QnKeBq8fa!DZKvu0*y;%YvR*Sh%%+Y$n|J{7Yg}M!Tvp zf>A$l(<69kb@X;9O%BPWhOuR3M6QTHcVB6t7{&8SB#W@{%>9Sw5b~u5l-Kga$yufP zEUx{#y}x-rGy5|OR&eA*1*H=%CDUD??_cJjwKYC`SsMUfww-XVuSC(%F`Ogpi&6*- zvw4lTsZO^EK|(GB-w7Fm2D0aPtQElCDc?iW(&EvS1XfXgmsoboyT`u+iKf6m(rd8N zu`l#W#Gwt=8d^BIgz47VcqZzq<$$^pRCy%EA}ktBc+c#)QHApE_IXtJ@~O7QpM(dO%~?Gj)xX?o z{`Lq{Q;;1hwrp4J%q-LUsZ#Z;6}{~GuQ)_$#Jn`yTG838ntf5Am?w0pN4kv^C|adz zKa-+=zfIHY1Gjv+M|uBT@$29+v`^_{k=a0*r?+cM0zzcHd#q2;#V5gPfuyrK&121& z88Hcd_EuXjga@nJr^Zetb>uc1h=CTPsN@}^7LyhpCi4(V@ zWfD_ZPaot4L7ET0*|0*$Kn47v?W=8(@=P^TyQ5NVTa!4MJ!<3az>n0AF+JC#15GAt z^Q^6GjpzS8@v_CV|7hg(A!mqVnCmR%uRN8Rx>sF z?|lC5_m{d}wv!yIuXiB+0)5gIJ~7=ghdvtA%*y1r`w#uHf!~l(TDOY*he8?f&hnkP zFB;4|gGf(Pz4y^8g}HD^{E~_1ZgHbtHoZG~3?CwO?;|lWMZmsg!hX>l)dyA^Pi)lkT$V$g)ujJ$<0Dkhz+$yCZk z+c_Wjz1`Odr-AZ=#`h;sHxzIs<+~FDA}vkTjLTSd5%~w*nTD7dD=U$M4^|gP91Sg( zLbjLOF-h|V{N>9-bj+>5*YQ)3JLWFUB zZJ#kGlDZIL?vklSO|Dk2p+eNNUYEr?4cYph&yAz487gPaF0*xBbpf41Dx3o#NO$H68O(qJ)A#aKtl`}Qj5!(MIs7+A>< z!|j9U-lWL^nA;uI6lpqZJ;r)@PXg|;EcU7@Euwm$k? z=8Eo}h|ypDVxLvV|3ayzd`2qA1xiX81f!yJUi^=z~;Ju|1H%2*`X z@WH7l_?y5_*Q~lxzQJe z2a5MV!GBSxy~ho}-V>P6u+T_w(9jU?0W)w2NHhQxItB?dDyg7?fdl48GM2CYF*(re zit(UsEOI7RHX(gO$Jm;wX?dl9gxuPht&1 z*+<(SgP^q(je=-gI8~2?m)LT1%>uy2= zwdk14#|;=g`~&57A3eghV?|S?zE!k-Zqq|%Pe62zMWm9qOj27T`P$rx{*)k zWhRFZqUhdh&gpW++6pQ1fo`Bn-`dhJ_Bl8S`ZxLPWk<6?!z9?=M((S3*055(+_#`Q z@qG1?-#Qm;JSJ7CJi@=@?C$k2-KDiRkW0ej!6uWM?-5PnF)K^wVtG!XU*Q8YY}X+$ zOq9gU-few92>{=cMzFDLC2~iO7&7TjmYVIc6|=Dxi@u*_nH{($N78u`X__G0^`4wl zHkU(^bs;V`qAVyZi%peGjo?r7J^|MYJsZ$L*3qJHo|c8YIWGw4J>>rAWHT%>=T5&? zXXO?mQ?KQ6@knnz>iCrHT;ir3Z0o;&b7OSTR<>8;8x}REA#q+9_aglvAdRXLVk%S| ze^CoXUz-Z#MD)Cc;ZUhScYOB z4R!fAmjRp=uSP%IxRA6Iw=+}ZuA^pFxt>6TJm|YlnWESEPW{mqza^vjiXht=ISM{p zR_pm5J@zhqkHKN#nl0xMyE5Tpr^B}l8{TKSa-iBC^QlZ1N|e)0h@V!(3swNg;GeeQ zm3&P-3RBF?(E0^>19V`rTIq8(>a96?wVGej)7j~s5~JE;@jVolrk0wP6?!X3w2Zd& zS=57msEPt_ZYafft7p4)=*t@2KAiV0rP8{wIU6SE1l5DQMc2|fx7Eo%07a;JtGB3% zUMNFOEk4`qHC9+VB%4X7(ZMj6IGMnUj?2V_?hK-jV#XfE>a>auYz|vlb`q_>z?D+d zqyl5(^G%9(X^c(xwbEvxsY;72GK0f2hHNeihcXG%goDiRSN z*J8#?v(kM9OMMli6^Dx(Dge>7XScr`h(NU?W?#eG&G|%%DAr17$R&Llu_TDF(Q=KkSqUaj>ee$sH00uRvLl(JOS%OM zPnpk^lq|0u8dU_yL)g)}Vw2%EnD0x!Em|2C z1KYsX6P+WTaVk34EgdfjEnEyCO)UiHT@SE3@2Au!W44)pLJ{0_kVu?q271)Eh_@Mq zdF^bpfo%kdV5?w5oQbxi?pZ3-EkzF$<#$XFHif&TDJvGc@ab<;9iDEvD8iC-3i4{r zg7KG=OO8Exf8wNH_Sv24xHT{eZ-Eb9P!ip8$r>P8kGlO9cyB@aLx)_k{4-PhG)IYf zL2OL)LB{&AFC`(Fl9v7PfL*GfpahwSB?7xd&EfhNo^R&^S`x`h-LTm~$83Vs_7Zy) z_lWWeY=|Pd*|p$wu!{5dZhcCUKV&Aa#L7Jxm@f;6$FyFw5%!#oeY+YT+QK`KRQN0I z1L$1``gHJ8Kn}eH6(YMZTfbOVH|Gjr(%kB-#a(k7glb=%S$2(J&uF;3N`;R>DCkw72 zNWrmyI{e3P03qT)Q-QgeHvqH%^q6m1(QicZQbLuWQ&LPjgN<#Gi#QrBrPfEc5P%%2 zC;s8BVP=Iwp2iO@HEhz~3q90O9 z&PAYl-|%juh$h6A(=0`rbQbnq^aI-n>#-$BR$L9i~k^kBxrc;Ika}#hjy~-UDA-R z6}0B_O^wW?14$mfx8Wj+NGclP_R6&SQ@kCP{lz;By&!UW)B%OOv|AMWeL^_+dB9@D=P_z@fO@3{I1BMozRv#}uzTFSsmb#ZP?NLyW;Kx(gLhajN>Zkb#rU)n{K} z&u35r#>t_IbSw|yNyCAFF3V%-ii$7@hWzfF=-Ba>OI@vPp5wTr33GX7HOf>tK`(Q7 zYPy0>E)biAmHAP|pvgslCN+x$lVYDJYOMnOev#Og#xm=>xaOL7a&|$|c?r(KlbHK` zx^YVMc5Xt+?g=^q#8bC-Q>y>&5_T>XBK|mTu&EEXPkJ?Yw7UOb1 z!qKmzMbGBLJWo&>6H8O6qu62x6ijq!JT97fWyE2DP zZTMEsNWZW`<7(bah6%_ludlA3icV(Kz;1cN?Yuw&u# zSd$Q^=MALZj729Y`q&pEJ{3e3k}8JCU{ENBpu7~aB9Jy`wSwiOs;Hu@EJ1C+N2oe1 z`SiKI@`8>}+krqOHpLXGvDT8u);YjK9Q(s_r4h<=JumXKkJDk3o*J>4EsHA}pKyh2 z1OfBo#Qav6-Gw)Ad3Wdjl*ohgfP6vc zP0}%!cy2`=kPS~o)ubAy)l}Kfb)vHqDvKr9>56({GRySSc)nMgTt^v$^UzN2)SI6qTqzfk-r>s!5Cz9oscjm}NttBe6i*!Xy(YyN0Toh<4ukrF9Y14Em^!|IHAB z76VhJ%4BkUQtli159t8$d^`;~S#-|$F*VnQZO=zCjRn>5zEHuBWymnDcySDQGKsy? zN;dR44|aq)T=}^|CHj#RPtRV;`Kc)uhuG!fS2hqfq(Uy($K;4Sc_*t;Kdn~aAl0VZ z$yY&#pXwgYHEOTU4F~r6{Pk_twtF{ceXwxnsz#t_uiUl_Q@$rKoU%={A%L3uRjf0u z(UQ)OaPorfdT?w^UO6}g+orK}>ysB{ z%SHCzHo;Z@aIxICjNCMnzVT&uIttETZ3N-*%NkK7S2!0Q5odz-b)75nv*S-Of%RY5 zP1{A;z!P=~w|Z~>eJdvuLUcyochMALa`}-pKpDrlhet8UGXgo=^P$g#J7=gf6^1ji z(~MYi#SSyafGb|p3TjFRGQYR z?O2?)Wl0Sha@$0Ayq-5e=|&P8U0vlxUxm^*etwp-mD7|-b03>2Tw5tN#^KdBqNt}! z5#h35tnf{-vbA_lKbyTDf+M>*6TbF%^ULl`b?UO>;w9|t!<$#ql|WjJgAQjUy7EF8 zM^!!A1<6%;Vm$Q5-T=apUpkE(7Y(Cbi_;S!YE!~#DDD!UAwPI$E+^XLLqu8BlnsOhj^i{bwh2 z2OO3ei8>X-sHT8&t^ni1DS@BJ)1(dP{oJ7F<~Tn~HnSiZB{e?{wx8 zSEEU04$saCV+>BcVCA#k2PIlIoY0N z+*tkWprFEXk{zu?McPLief0@V3SG%fM71>6gubnLu5+1*mO3(WF1GEOx5G)olM`uv zEi&PQZ=eXD(496UvBa;;Scg*FA9=`Q{A!ugLMlQ6>!lR35IG%r(cu;XPnVt4g}3z8 z>#$WxQFRh*jChR-q>B;sz(n(7O{_c7IP|y_d61RE)?TVAA>3CpNvPP>y>e>S6t&RIX!7(x5v~{B* zVx_r*+U~VN!fLKX|L8sjG?9iDC1jU5blN-a&VT#=}MtyY!F9N3*9kB8fL`Mw76g*+^*1dfZAG;L(G z>}z??SL26Z5|i?X49JkGvZk#Xf{{Z#DVJzHY=wjSXw-fYRrCE>#YsHCa3C#GXI-H*)*jzam@cz>ASKyNu=*2g7M%F?pYT`kMbBUR- zZHwpo>`$`Ln(jP&ae!CR|;W${^tV=!(TiJ2} z6Z)LYgmZgth6}}#)UXb>ydR1*<4UtdbHDOvu3XBatk*2YQ@sJ^;@tTQ8jlJ1M5N0g zsoOKg{rVi2bEu8=OO$U;Kxr2ncD|8wSc;x{#*Lt~E4Du=Gz`CF`p&cK`K4sYxr2u%h7mIoK$?eyCZK)55+znhaFxfsguiJn1{PG4+ z+l}aPR7$-Bp$<|;&vU(RwNJ0P1bk4tFYJF^*dN}=U zL&X2tH%%-WxUo02v(xxk=l1^uRDO(8q3F0XPA9hLv3UAy&yL?H z@oNT3qQLWU3*sM@1fgV(mNbzn(lXzI1>8J7iWI?v7%x&9w+yNLO8r4{6KZ}G%-2CKP7DtbcL{okRX}o(3 z=q1+;mz-tB4TIe$WvbyCyUnu<1(jUDj15_^30AI-!5-l#Oa)jY4o}h1&lMG*h^x@v=KNX1lR5g&61~qy`lIGo@WcmxKtG>yexNN6= z3megdk>37*nP=8W5z|3*Qkig#rss|sZ*>9IPKEDz^r~o{)ToHh&r7VPPxS`* z^-EvM(D{vZ&l}x0=vpW&wZfLL9g}v~sW*{_%G5u%zW}F9tq{!u+?cF9&ZB`J_5$y> zRNWh{fGkimzN$nthsI&FjM9Y^vkL~19nnm&NxZ{I!uIr^>C^4j?4Hw^<8*h;>I`?O zwjJbZQ;x_c;YUeYxsJKU?OqmNbHYt{g)R9ue#9!xic$s$7Q{3W$bp-bIyuEMGRqvC!p6nVe^&s@rIE?ii9d<}l<@^E(nb0y9)@0pos!*m4g}gYlWihTDfM z*b?L|{*g-lNs+XT5TFPOegsP+I1@>+M|ilr;Dx&>1*gkR=8hkrnh*j(uP3#Jy(s-9 z31+ylt*RD*&=_1kssd@qgik+e2aY^~T`8x2s)tZvoZI380^M73sZVNPsw1nExWw}OXyKTYoNCA{D_LhI>&9Ik-XA4PA#7c0 z+@Tqr9_*#X+HI5+`zcV9hr*DN_Xz6a8hV9iM*3Xs-q=>j_sPhWecb-IbTyV zj8v7+Rmob8NKX!L*zgE{IxZV@xG@uIVM&JOmyJdOl`(PusV&{iWmS^^@wK|0$ zr^O6niWaZu_oOL3&Tni>FoYz1O`O7M<<##NHPN^*>?ka0{;{Z`AH5s3>Mqds{ ziXLvW=3{P1Pa!a@9-|h*wUYPr1+1T4>^pN+c)C)(g1mHK<3gt^jj^hQC5@g1+q8qx zb4Zv_X7-+vE?%oI)0)5(2mdOxBChO(7_}-`{MpBwhu{M0uJ~37&p1SMb$`kOl?;%$QaO(FC&vTgh{eB0$ zX$~C`)JS-lAsKDwbNH=4cY!HrIv&Y-n4rmNlS?tEuX2@QG`j0i0p4zzi3!vPWfVHt zVif56?l9s9oni#WEDAN`8lG4tw#g$FeRXVSpp+DdT4EvjxwAgD>O-{r%g=o)fw^f3 zeNmrvCGZvGZOf(%PA=Dx(gP)fm$CNnZy*-7WvUxi1gFY^D1c!5yB>+|=0 zVI-`Ct9How4+2{*NTeJE|>q-w(oJ@El~jhG#X!93on$#YHqwuguXxNkTiW zi$5-$^Ru&CJBpG8Lr1YYL?uU56Y@@36SO3%BwCL63k#b*eS4HM+yH>-3osg7SPH;L z9xeO=Pk7|D2TAuxCb_1X=|U~8KAf@$;z_R>D}zP9AC`*5Cp5Au(gmiuJQNcKB=M-e zek#LInI&WvW^fRLvSA9M#TRB3p{$>?I<)Coe*=t$`zM-T93y4c8VvfjJdBuTn?qX;RF5V7k++lHNhZ>e_{*7UQIYsU$PRHb0zKLF3UJ+KhE}d;Q~1Z`$)MxPqko(nnsBq+;UeNH+}~NkNQq?0D+x*{x>_hnBWHNy z-x5iuQAQ?2GpC=9+zbSqbhLTljm~|LX1EpY9aARQ@NQ40#WJiJB<4?lj}-0e&5F{H zBwa`sVj9Z^(w@&9eHif62GsL9Oa&8uny@R@r^59|8S! z`nr9^U0|+g&~Y80v=-hF%-aFG`O(tZ$L0KSEqRpcXgfPL5tQN@ztu}0-zaf%*?>_o zzvX|ZN`OovJyLOWnCo5G`{m1io}ON79MeQ>r8=^a;@${mRBGBMv_T+6A~nSfd8=zw zRCnzBoDX07!-Qe6gja>poUkIxiikZ@P>Y@SV$o>nLi$w098Z0$`0si2aNiztpZU0k zbt{kgLEK>H1jjBXyd)0!eCydIE+DT19Y}&9g<_@7+7>afq3rVXyel;~wxsxwT2fRK z__a{f)}^`qi(zHA*|RQ6G>X!0 zR*wW^+O=y0S>Q-woNGA6dzGX$t~4i*mKN6Axzt1vBN=d*bFnoLDhiKahQHF53 zs+s)UxG?t3^$E5fb=BolqQ>Fr^5#P>;f9OGh#X}Q!aja!%3p-I{0 zX&06m?vv}dIeX7&v+z00n+|-AIuSqidYuYCied86lEDlL;nwGX6|flB1oWn0oS*so zA?If}!m&!cffGM&vYK(JQC85d=TP7T*zULCi)FSGTo5k1bNz2bB(Wt!2+1EyZnM<% zRyRxOJtz$@N4yczXrI3k{T`D*EG44GETcZeDapyWoi(|}a~zCd#57vZce_-o)zlDT zVN}QNoaQ!XvFpcTcOm;lnnv@qa?p3{xSB8JiA?7KIPYS&E6sU4gGtRw{S333VUT3N znEPVw>k3)G;aGyhU z^&TKgS{;Wxt@xxw&zkv@n@CP=IO_;YHY?*i>;xgi7V?7W4z=aGUfX9LOrM95+}3U(Bo+uHWUsL;W_1^t6*fwyRH9Xj2x;*skM>vpl&4UR1v zV8wuPgevE&&V$Mi_s5pJUk8mrsF+3!sI2PEmu07loCq16SuhWo|X+Mgop?u zfmbTu)_z3($j2aFo3;0ICu)>d^55!~B3GU<4~c&DC<{3+@CaW+&DALNSA^?y{unBU=&B(OUvZKRS-oqjngjTjdC zLw~pOkY1J}Hl@aAar;$H>*^LtydH=O?5BBX3R*f(`1XZpx1otba7Xgl(o~vG(?{z-5CoiY@ruRi^a!& zBFcP>^bkf^!F&T4T{qZ$M`u}2&7JDuJO@~8oOX~W50bY)-F$6HzDJgxPIr%gj64V| z#wdF?KlL!4GRfneAlaBRZ3ZzZEo2QmyOPQz+0%vT#x>vDsnERaisCWHwKzB7+K6nM zWoP!Fp9KGunKja#kZ|vI?rZ!!-c0TIXfmUwjMJAY`|PkWEF!3)!l9Ei43}_ZAXUqL z^1;9H6_hNs6{eMN3?3_EkQMS-_3Vr*$kkDz-iGr%(Yq=qKVX4&Q<8so*bgOyUsre8 zd|N!=6Zrjy(vatgDAkn*cTQnRF(|gu)54$U{$__Uns%JV$+L6CdXtUxGvSk8HD|rw zKjlzW$&-Xeb6m{BT$s;rp!@W)x1f}_NnaS46UAv3zKU>B4i7X|pavknM^ z6$UV`+B(F{JhALC9}yY|aZbO7mYmW=;6K=@QdW$y#v}?Am$PA(w@SHW^aI%!tmf*x z<0M;*&Ckc_c#uGKOT*Y#Y$GkQJJ!7T+|UU~b+lug2QXE!u6aq8)guNz7T5;Es(KuW zA)jY^;3?}AD1VzbYZ2>`uqRsPpe~;@VK+P*ay#>C&T@o7rFahTqs>IKYO}7?=Yd|+ zl}(nSydG5um~+B%^g5Z>C9DY7h*o*)YX=o8Xx(^Ynmqfb9C_Tfxi}mNEw#))BsU!M zcZiCW%a2%#0BIrSO4n;#@uR`_@ii?VLF)@R#gX_n>s)*?q=9E0pGwox5MgyHW|`S- z4bmfP2t^FC3rv=^%FpN=DqD3c@=j7!X2`^REDR=X!h$En@9c8V8s=IS`6(LTf&`=B~3huuK!)3-OsH2U4za=u_-l2~*!pNPNw zpJyRcR1-UI#A{q+!Af-C$2$Z=fk#hYx3)mWoRJOVI4f4RDZfpm`F+>zOkf_P2eWh- zUYHKPN(hk!msw$ae#LIC@^z{ziPBuh?{fNG^y<}#c5;XAuuSppn;gfeQ=Au0=EvQv zPQZh$!S&$l8^D1PGC&zo@pv97dNnURQvi0%Qa0SuH{Rpt9x(m0#Ha6S%7g_n5<6r* zTa&zArHPq6i5lzFnd|Oopz5>6r;Y8u`dx19H0*fXxuuPU?|*7?xxm2>?AqbUwfRYC zH3qXMF#&UUXGjypGH<*B9wmkxb^h2LI=J+GG>IzAfSC@VNIBA*5~0b6Ny5_g$5(XZ zfz19aIs1=VwK2(5h^unCG_m1=SX!dOva1lz22@s8VpU^zB1ks6Lx44pKieGXC{8&W5Zx7bEM-aj7cJlzGsMAwh-k;Rpa&&aI{jA@FYS)pX^Bmx(*_0p*u_z@ zMF}}U39iyaiQw21E-IWMTDkT5VaffQg|u@mk4rvGS#+zA$VP-n#p&0;;)~E+_218^ z(e{lQWg%sF>&BY%SC(}Pc!fshU7cS#E7!~abBcNh3zG)uAMOictz)Q#PBXKy&iMKa z5+9CzjbxsvmC~Rb*Y-b%f?R)X$_Y>PPOrzvcPPC-iiuXAr%x;obri_xM(S|mm@r;?2uOJlCD*J<(m+iLo2KdYEB-}x9?0A zdZpbG5G#SQmR{fGlhQpnUF)Pa^u3!#@_^Z=G?o>$MCL*AiMJQKh|1UmC~A}@L=J)s z?ufOPMe^0jQ#`zT*lz$j)mqW`y-Fvl!l=sXs;}F@Nj(Th0UAdb|A)D^j*8>i7KH~G zVDP~m1{mB4u7kTnAXv~K!Gr5CxVyW%LxLr^LvRfcJdi+;kN`z8TPt)+aVD-36j?HsFQo}rL%1Xj zrUDIlcD{{@3}HKk;>FvwWsz9Y`V!Wd!99pZv-3oSEL5E~RA1@UrT6z^6fEC^N_jd^DX*asJj z87hr0?CDYst0U?xG_0X?^yMHAC10U+u@f zy_1Qqsj;=tzc67lZb*yoZQft1xGh5a*-}7C=Gb+EXOF@-)vlJZ#t!xRQQ#e)+8Y99 zd6J_)_NhTr7i{n<_@_U|M{Pk@0~+%l5^Ie){uzh&f;D6itx8L+n6*!zMDK>Oe*?PR zy^ojGe*-R_zK;=bPTdTM%bNen!PUxIq5P!t9#;6&uEW^E?u+g_I5Ik}YgEaIA}gtP z@Y~cPL|k@@fKDoB;y|07mMdv=Z~E9S=_<9qz-=5Y`>%JxkyN$PgH*M)qSWNpFHvq7 z$D<+&so$kr2X1}#Io6G#1I~w-5vjkfMgqRy+ZD0hOfr!p6*%(lL%7L@@G;78&fneo zn@Kkc_0Bf!RIK7|*{R+qJ3{xdn5}kie%{1*OxJdN8YDJ#3oNor@<+z2~4 z82f-jG6Svkb*%ELLF(Ykx%+;O~V*cgn~+)t=4Cpb#ca+t8B z@29&7_|(9Tv#5AwZfIy_XezyuL49Hhs1F&Cw69jeNTD8j%_gnwYjp1^smIf`{l@@e z(s?T0B|0@#S-7j4+`39)oEaG!8XG>I>$Jo8PBy^tzJ-9y*rC>NczC8@0wY#J*+}b5 zPnTi2MTzJkxT~nmhd`H=-(^U29GzbEH-N{eVdLJn)#imYtVQ_q2uVYvgOy#;GnoXd z*E#{WMZ025$gjayxADIQbsD*tKhj$OGA#p?{r&qizutVak*JFgu$!my zoA~9q`Tkef$1#J2`yw3LegnU&hmagZPa z9apg=UI%sKq1L?Is6T#n%$-sEbYW6NoUDort7N+~!06VRZP&qX$MD75g>{MZ=|b$u zmlE<=7FHtH!8u0y-c}y>;$LPq8D)K(u^geBV;NkP9jW~euS3tMIdYh4;*(-^_-=P6 zRpm9+4vjnbIntzzQ>`PJo>25gJ{2v3?lB;QqM&33vX;^Zf-f|=m{bV3XsmIa@h;IP zU#VV6vf36AmfLr}lF+7pNAxlds_ZyN_hM&1e7Y?kYM_WUTreRl;hF;~onQgG z@=rI!AVjPDh^y+cA+fAYNK7)526gOfK^4i7Sa~+p+tq0`{=i}*Cd+M+i6tgn?%Z(_ zchBZ9G6rihEMSl-m>1TL=}y@*R;Mvm1fdI&724`ke*P)QOG_sLjbr6I4+e?m>!;&G zM77X7GBS(P2%pfnZt}?ts8==(i_F`J>ENyY1$BK-YsNbnZi#Qt)Yn@*eB?|`+83z{ zaB&#H+#9^#Ag}M5e_kpfp1!N-msJm|>6yO}a?0qnXtEdxT(wO70*MAb@|nNMeb5Ra zyqp+W8uJ#M)UUs@iCjIOQ;_4OO$0h>?_~uG3MzH-rh3i~&zYa#T~Az~2A0TR^2*Fb zZcpdIDH|}DTNi>X9c}_+E&P%W)7)eN^Zk2S9q@H`6p zp&B}huP3aT-B)owg-CY?sT3d3&@kkoe!);%?Xf@OG?*}ASq+QDO@*7b@)}azfU(ZQ zzgjAnf_1yH3e#>7VE3so_*-3DUWba5_D}H0>!c5P6qsqo{S)}?7E~8Re4x;6t}EwV zo55Rc5~juyVTKa)^=OJ38?m2b3cci+n5)fiOd(4q!^A^uVa5%06(TR zOYDU{dm2hhl!)UOTr@U?fVbXZy$_PsY6hs;709>7?(TZeVuW&`cge?I9$&Mv(fB@k zhTF2tmc=5tY3(l1r?K$O79daPAo{9zeA6KRL~|x}NU_EQ_8r#m|3Fpoxbe}x+nX5O z^u@0|?Gy?gPTjGN{A^m2R94_!Kryzd##deZ(P5Y4N;YJzF+N1Vh_Z}-IMy+UtJm@!oVo8ChK|OZG zn8CW|bC+gZW@Rq!7}S-NH(#`aN%ZF%l@Ms^7q=hZX&$NbpiAMN)aP7lc=bOCF-?Ez zp)%6pqgO`Mu~8gTDi`UAZzI``zc#XOVZw`v`U}v$%cfJkuphKgF%}RRDC`kvn^ zVa>7YJtD+hSw5wkfl9b7mH_C#125?J!ElWfgvvmfJ=>wTfDQK2-2+TWY}T_`Vv zr|JvPZ@_aY;`C@W#kXb=JsmoHJE#<|%p%BNH=CinRMCRP=cSiNylNr(4QRf~GO&YC zQWGuD$Lovv`X?Kr%sUutZFG>Wm*CB%?F<^QzUD7nA=_)6Fna~Dr36B|L?t@himOt- z)bev%qh_{o%c*XgMoq-bqB(1NbCb?5FY*x5)O62}%caRwDp!X9)jFb?B?i*87h#6* zsd){Sn<3AmX$Mgm#Te)rnHUb4Jy~rbWRmY{jm+XI^OvKV>K23{xo4vdziwzEXO6hX zjL29aR<~T)x@c*)jP2e4X7vF+d3`>rG#_a3{(;z0dED z)x57S@ZT;tv{9iCGEobCPPFq!w`}t+pQVQrg)5LzO2}qT-3*X;#_*|V?UdzebBnBA zaP}lsP5HF*pdazwHJF{}RARevcswqspXmGvetGbu9%zc?s#cBY1$jSZbq zSK1N*jZm3bT>lj16ZRM1rklQ6zBFO4#v+BY^tSBIyAmzlQbu>wACkwaa%*P0g=MV* z6wd9GX~fDgoYmduN1&ZDkDjZfg2;4k8RNyNjvj4&ZJ zsG)o@$|<6IESsxeKdsOVOsL_S-Kcii*L^kqF$6AZ?LLDti+hy*FWYhzv|3xulT>PI}(*g)4uf z;KQ=@RRJSBzC?z?IpcodTAYoEKiN-DEmJ^TYSytj;xbw|PEQdkXl*1q7G`wuM>zj- zx_q$9Ci@(ipf^WSkVph2N4V%ps8|twSpezi6VNhYIIMAB2i(7y*7axBh|AxT?ve?L zCs%7iA+jepZjd&&w>F6#)c`QB08VJX~GH4y74;W}6m!}gSq7gBPKHFJoa*DKgfpTB=qbgq2SJYB>d zTE_`zm=dh_q;t%P7cvo3eS_tM-=>0b2vLoBqQTkY^&tR&<_( zC>jtVvJD9Z#}%X*D6NQg?b0wavPHPdJeEEO^RS$?&7WjwZp&9Zq6$M5&+hrT1p(G0 z3Yn*)6b5=2>^k}k-aVSkmQ)uAEcqHOn%0qNaEQug41uI%Ge)X6sYyN3<-Jp7p$MR> zh_Oq+ae#X+Nq_~cY|@0=W@PEFHxkQf9G{4ZZsZB_T@^+%$hm(Dwa3}xu~!j+lrKZV ztROW!*yKtpc{!p)v~A{T6+kq;lH%rB^|0&tg=5T>{|x%&AaN$<3mTc)mRQqslmUA~ zP!1a_(SWsL345$r61{gwcHI(6j;&&zw>#P+;cY6xyRPahwiEKN)(w#_p7*-!aZppI zvVpdf5A_YjOYvet1yAfLE4X@U^5+7W+sZ}=JfoK4w{~-udU`iLH$fsvKul<+zLjel zk!1Mf(y+r}W^oU+_u4PBp>v;J$$C9`b?21{CRLy3uK(`Xv*=CaWU9?R_encmwz61) zDS5rb*-;Nr-7Zv&6|Gf^{#3W=ox?kQDFzpV0x`ugSEuYr>l}OI40@1vFf<0j?tsUd;wJwB^O9Dux-`&2#4U(wDINSYhp(_I`g`DCtA`UGrJ-XsGQk&L6B-Pd8-Zeog)~ z`ac)z-!GsQ*=j!~7kwV=CFYJRsE!H(k&l~_KaxmdoccG|<~NR_3T4L7?Cx1bZ-6Hj zWbZYSAP2v5R?x;$_?vJ$bJltboZxvcs~LCH+qN_z%UA(sO(C&cqpXl0Kb1eikE$G) z7@np1uB09~E$)DfHFZ7C`OvsM!~OT76voQl@Bfe^Q8xpAvf*K#E^Y%ritH8aMV zayPs~FD28m`IF4Glg-TsRHcr_M^@+}y8g%Xt&n2jla1rc&?cTwro!q{Qb&xVb8yQd4w7|q=6sK@9Hw-&CrvF58dTmh8Xb>?q zQ_IuN@4+1>JO+ngYl9Hig~k506t<|BErnyfPcubz3H~psaGqKbm@mlO5$WjpNz}((&LoM!F#8-aN$RH+`Jz>Nj#X!W$TsRAuTgsQS5J z!qpqG}2{0;%CQGa=!CE%#BRO@k;jnOgsVY!1Dext1RQlt=Hx`(PVUa zrF>61fasXSezU_NbpX`CAF|^kD#R_sjs{XoX;f&fn<(qAk4xF*jYkY93mP$OQvh9r z64mR~sOTOU%=?Um`y)FoF$K%b&L))(Y>YPJGe0Gsq77rLR@R3=%yT!^n;)jO@^^lz zF^VO>0g({89$?sQ&wiJ6dw{u84Ee_y)g3z>#e_2we8maJ6g6h9GQ$1bShQ{mGX`*> zT-wio)M}-hqoONpp;}rc!SjbStV7QYZKtA$v5Bu8EYx>YHONjBI{i-hgSjtLB+DG- zQK6ljPGOrfdK7&JUIWZJ6)&8M&02dfLs%Ce4 zL2kM4Zu<24;6qK(v&T6(-aFANgVR$@E171^=j#D_qCZ4v^q9|F6Ms4l`W+ncpxVT> zl13c7)~XO}XiJclW~0UiEd2QPpI?Q>-&(xzqnTm;4fulIOvG299{(F48RVU8(ki{` z^pW(;2WRsmd8fNlgkuV1M85w5@fAW9W#aBz@vB*2!ezw#MS3Yv!Jo=0+lGRdD#)2B*QE>;b1gX7mA|AAKBJN$5K$cbtZ&U9dr?kYF3brVy+RoC z+CTuWJvSf1nZklA{T!XO%#7JsWVY{S>|$=q33vj_z!g5LHuLg!9%SKQ86aZwrwQ3c zvBs=TdlRS6GVV;o(^Om`Zc6Amia7mVh7vX8j&b&gMkh}Gg-VVC^FxpN4M`VOd?WrB zT`gX5(5QyuGozM4OP9oGM@0XZK`N|J*R%(89*nY2@_j3HdglS%fhZSG5Xv(M8u08p z`FVh3ihJ&3&&pSib`Mof^cymi#M0?(@{&O@^WUN$Bu-+>>!X4*8F{)YOu1sg;USR+ znT*h3@J~Fd%K{yUgb+<%DT%^)&T8(4vUQ2Odr(UfFX?*J@~?&OH8&B8IcTx8%(FeA zzQd(GAog7zR*#&d(9yIUcq=5^sH3mAD!1YgjpIr^jxRqn^np81NVT zvSBojp9=qE^qxD#@j{_4ql%Ft{SMogI&*a1g%4x7RD(T+Zd>8ow&AO;A=5Mfr%Vj5 zS7RT?&@$!pI_% z@ad{c#2&d}OPYU-&ibU_>ANRU#Q`H_Nc+^2z3ux{d1NfQQ}r~BDOdYy!LX6puSlFi zHc0Rm5_p=arYb5*e~Dg<+wJ)!$%d;P|Mrj1g%uMG>2ul3<}o@oJFTLA-(>c(_Qkh( ztg}uBX`R;j%D(Nc(Q{ z*>Aw8=94m&Dc-}R|F)x^v9ee0xRXB#zap8vM95;I{ly}KCL1)drFTd0{ zi$*4J{A}e{3pw3b2Cnk67Kwx|wYQGA?SKb#y5ZvNV?O5mj_jznpPy3#Q%BA4yP_&O zI{ek*dQWkY5t>b5C-qQpYysG6PIEVnR5OgIRAeY0&(t>zg*S5aE2+mVH!-g@YevbK z3N1qUj3aoYTjw{RM|-#}wES1SB#RTfU1EI5*8H}}2wOo*Kz-O6csVO8nH|>m2{7aQ zoIc}BasfQbHe-)2{+Qvs(8nR94xZDSUbe&4ujlc(d3H&GSdmeBW+30Uku`Sw4FP~` z^hD*Q?9Bd^}=)Y#+u0zS zH|>G8s>l|>FIME@gb3`r+NsU^yS|=ZiqY)s{Z}US4;7%H4_royqzm?j-+4=tT^m6V zC%I;PhD{P-tJkr8x@H=D`;sJy!+PAf@d{6@;uCAVb_WSZ-zKx#;11KDqz4_Rxd$jb zFj9;p^O7MWn!U!#l@|`k!aqo4#7a}9WNddx({Eo^XXA^yE$|uu5*Z>Yzr0|Oz7DQ= zgvy!c#=;}O!ziXy9K+ASu2^C?9Y-1?PuH#OL_NJIs!K?a>B#+#^UX(vt*9lk{l{JL zBa0G@BqcLl`4RiRBvby5Z(jMEFYB9qn$UZ23#E9ym%!>rVHF8Y_qJRZA(=bRMDPoK z101l+M9b~pKU)tPC*74Bm$7jS32IC_BDMJ zw{eI@`Iw0CvyA?HcO-5iFUu!Z7A6wMf3josGxaZ`t?(jL16U}SE6OVn zZKhlHY)LeF|Hmmufd#59P!0orpr;@cFuh|x*WdMra0ak`Y!i)tVRg>0A#zTg#lYgr zp)~ZES}}(a4brCv>k$*Bj z<0b5p_rdHHx;saARD}s8Sxnn7IkjGZ5fT4wL?jx{u7D^%!do+5FTi{7KDUoc>r0PZ zR7q^F*Ye@^`)Fde6VH<1cS@f_#q2BNtoj|cTCpB=KMt(bb;2vn8dA08O?|By>+iyY z^zlUE$rAgV)=u_zxU(~kG?|d)YEVR=52YjX#w>NeNyHtOf3{IFK-ys&yUu9w?C;*h zxaWob*iRcjhx0LZS6y2lFzz#DIo^d6m1UTqo3)aZ;dKC+3N)LHA~3vh{hg&3qwg*i zkg08dYO}qFCPByDE)n&(2`Oj;q+I9yz;feoZCuttx0kZ<*tegJADhbEdt&vR&fBd( z@%}|{G;-uACvh$z_Y?kXbbE1}&L|Z6@niAvWKJL`=J{(F20px=28dT)J+oq>9WmFb8=rzUuQv%7pO zv>;y~TEh11To_9Oe8$p;8*8TY3Ek$3ufLtQKmPAtL%E{v5aF}=R=@Isa!VW(v-0RN ztIuk_G)WP;i#`WRG-P=ygT0Ze_8B5Ncf0Kon?=*=A0yOjnB(JBON>!(zD!ci&=K2n zozx5FY)Fb1G-Ir@9q)UR=N?Ie#Q*Ln998NLWu$B&qf~cmAm$GVm=R+{XBI!6H>uQT zIs&qNZyIVDzijD^?HE_71?RF*@|blAewK)`HN3}dcm0|rRd@G;7}I9I^ev4J$s?cg z+U!e^Fs{}Y6)l1%7KWRz%$wzY=7IyzM=Rbs=vX=8Yeh<})nI^5^A0VcnSsMMHtEWN zxFZbGbyk9E=m;|av{W{-LQI_G_G#>ThLjTCfv_QXXNundgny)}BHF18^yNIcz^Fk59?})CRiqpCYq9oGhExjS zM`@q$CXu4~OyPTKnVh+230#L)Yk;pC>KR?^M{k_t$_G_Btrd?DO`=xw`>~>Um?^;F7V&-e;UW1x z=*PwS{m?K=zWTG7w7?Q8BYRv`KIV5`a~H>vhp!Ja23;f6f3zc~Y5&?g3xG_Z2LPw3 zLjV636<`_+_`fHDzyhXWLH`t0DAE6lJ0uMY@&_0Tn42m;6YXLwa89Do$* z-x^bp6)b290PqJM1cjqO5r4J(6AL8Szlf*FBDq80st|w*6fO%*lZ7Hwp#arCq)`7l z{s%1N=^tt^=%0=tEB_75e`rrZVgVqip#LrW-_TQ3plK-ocPRgX@Bb60SWxi)?k@eC zv@jqX3rM62K~;qi{R0uHnt#;)s|r%fL|70oQt!yC{|Yz-1_T2je;|>zhl1qw7m6(K zztcF9HCPt;YywbKfpEYd3k1U;09D8z8~d+>`O^pjB9BB^e-j%*gnUe3$cN=G@%}p$ zWV;Ho?+}12kVxeZ@E5AQvSgxMHPTlE?o7GZGcsv2-qJAL@Ixb zD&>zIBFz{|^p`>Yu>mAO*+2BbDiEYO0g&vFCIo{ZbpZxI!6-naWu^fB7(j{&AO$&a zp+MnS08|j<&*=9zVNj4Xp$OQYkpamIpaMz3LJmiN*dd26IC4yb0T3zxFbMjmUG)zZ za&SXdkO0U!l6x8mXtgE08z!rs+CLao5R8me)hmxO^~&oc(??o7c3hH~(`VQM8&wg}K-^hLy}ei>ZF z-GIy>UVlC5WESIMf}uq@;SEJV%x1VHBqkOO_gC1zf9f%?ruLFubtpUdOZhln8&#W9XGuI*YBpqey8I~AJt(Gx?^0Zc| z5UfCEW`z-Gw4BN#)n_-&SwD;$ML0*7Pw`LMir}Pi7&Q)nx~r5xVYn@xx7VSC$eB>A zs+FA@Eh>QN0qV&s)`shVVW<~s-oDo?h1L`L7WB0ppnvi{Im?x6Qeee4MvhbQFuN1w z-A+Wg8Ho3n<*ze92*XY2OBGb1R?naP83XEq6A#jE9Hoh{vpE7}B=a1*FvT9Mt0s|P z47`JK6DXU85x;{DX4`pDt<0{x_C}}R#?NK#?YZ=H@H$0WO1hwXGx@Jd;V;|EjGyD zXu8&YngGq<1{FO3v+Z+B{GNA>Z-#1goo|HxC>ktOjXsbWmj2Qlba_?JD7Z))6MOr> z$L`OFwg{qvfcVT-JV(Kkep4@KVyiK)rON5pXhkb2zk71vKu0bRm!PDQpA9cDv*VDjs%t2qa|{Io_xFZmm(Z4Cs-iyQt_ImCK{&KUm89k zq`;_xLYg7&$t(@H=ye?%p#@((NqO|J3y_^ht2Pp4CB)FY z?eiFDFCk%pb&0Ur;3`m*CgUp_rCIg?FbGKcDd|a2E&Arml^bsw`24;Ej6AMje;9H= zkA^Y~$>=oX$5=%Hi9W(sawBekgO9lmUqZ%+O@UyXMzXI$D}>tFIjh;kNITQvLqS+? z2B&ZfKK#H6+p-dmR$MWiW*Rld=vVt8mq%EljY1d`n>NLAWe`mQuR%fkD*L>C_-P7z z{H;awlR^d7@ta941`ol~$jF4N@I~-vTvpF?TC}%#9oQ3E9P?i9=1FK%f?Yp%ux1r| z=?~OF**J8bnbJuKC-IS@_?Q%j#A=$83cR4F{0*r34e)l~QE`N9qWP~{ zxA+qQ6nuh)dUrF1+;5g(dXh{L=*pf<1T$~>Q^*!mQNJ?iW$jrPU^+ZyDa3lmkgaxl z|Ah4uqH9fV@n!&ZbsoVEJlxb8yJtXq#>J-RbRMb||KsUTMBxJE2o9L5KGP{4& zEJ|*RTyF38Y->W<=Ukyd8CAEZPj8LHN$@I-*Ua{nV0ji)j-BwLkvqQBAK*qyiC>}; zo6+RlM|#zGC4ganfv0;-e!55DA?i_0?3qM9${tUS6N!;V-bt8mr@v*wJ1IJ(=SgHFxHjKi*Y`>`ABIkFz; z*o4-t`XnO11VQvAP3~zigIbX(1BBa}3W*Cd-oa0`ly}R23jAytxC;67)9v5vV4l&Rc^FuIb0LsbM8fCrTT|z$qx41n=yt#@N2p z%B?SgvECEg!saEFj0q!`lwWV1c)l)2NwinnIkzo=BN}LCX7VD;66v}Waes*ct4!eAFe8$V0tPp_UV1xLGa1ie|nWX^- zGO+4`nqE`Rdb%E)YJ*osI7&RTRvbJo_vI(jkyJ#=R%2F53CDRDL1t`IZ)qKZLN|A( zO|%41x!wFRgexzUu{kgC8MO>`G}IDQicHV7h2KQA-gHt*y#x>YzOWL{Q*|+ZLL^Qu zQ^QG+YmN&Ey61z!0TdI|O`$y0G3h^vQtnwZroJmXl%8ZbfZN_QIs!$XRSW9KdaG=x zos-J55%KKEYZd>Z1z|qkQJQkL0I-QW2UOCNefqvqxmsNOH~4N;XW+a~ITipmC`rSSD@YI{KeC9UVE7CIc+4n*f!v6K)|8D*(?a01slaU! zUw5K_rk1nQLJG5JgM4mtlnwK)Nr|_R3__pvd0l-il(W& z?mrjs-^?2bzZ37NGFGS)dX8pvu0caVt-13h_Xxc7nh7JanzcRKw3GNPrVkb&rmzc3 ze=B~gBD2+xqe_LKI2ktV-BMw%z(Lw8W0Dw*oW(L}MfwbMcb$B`F?v-?0LaA9lrQ1r z79p|U!VbohIpeEz+7oyneRh*0l(wP-G^uLY{{fCl#d@0R_;c_58>=HnomIXm3hqn| ze`3f05d~u4aVm0IJAUY!jveRjb$WGjTdE-#YA?C{C%WO#G@5k8h+Pi6LvRcsL4?wl z+j4v!A7tJ>rrNjhqD4B3XF@0fj_$)Vw`yP=y3ACS`naIGjd&1H9Spb7V45&n)?w6V z7HX&U*?WHNqJ1!P&>@Xd;st0kQKNbHwm?i0|7vylw)6`xV6$0?-6!o6l=rzD-Z2A3 z$w`SGwU_8rZCs>^*zQ45yJ8nAnxLQ#0}TyclOo4w$omArp;}cKusY=iprJc>KcDjG zxjFQ30Nn5#lzeXzAm65lPRkOhp+cLmg9fB+ULRbiZ+~VfySAD7RJ8M!uu`i8@Em3d zp{@tA0ZXC~$mqyxCAyz*f@r|*2M5WZ(;YI6f$-)|#y1|%KQpNn!T_uA;i^y9OJ)hE zvh&J-_sQ)iKb^!yhmMx#sY@`A;~I;_KYfWKACLX2GhJ9IsZh?Lrn8YqQi4z!A*%3(9iV4hQ)FSnNiCJ9`%E%M z$W;`o7x~JcY^WQLq0CUdPuvoUBiHx3-q5gaPll5u+T_5B5%!gny}{wTEqTOtnV)(l zno;iLl-rAshffM<<&|s*7;^-JKRSd}c8~za)=&PEnN zb2kniX%uzD?uMHsGmqco)Yuex8hc*-7G62+j!qFKJH=8@Cwu3m~eg_eZk zB-O9J3f`1II{20lDeomq)uH+pfKCfZM}?Fu_+BXBdI2`;2g5SdObsLobT6td0Se02 zzNd^)*;Bm6GA*-k?JqyTTR9&)hXYqG%nb0nwNjV~JECe1b|QCFXeJO$3B2 zG2a<)yuzK*N3QA20_Y=b-*7U-v{1LM+9$J9t|AY&Kumd87T=Y>KUefu7RR zIQ3V@ck;?K&~gb_Ne;NfyQ2zc#Xfr(^1~Rkv0eMd`_r@OF|w1Dc6_jNs%!(=9x6q~ zpqks_#F*vVOe}68+5jO#rM}7H-Ju+`Y!YmmxTd(TMO@n@VwDieE>WIwkE^f}D|}qc z%+yWRUG?iLI6YT)TR;wF2{vQ5$Su23Unj>^>@e2eq0Sk80@J?vqPUtlic+ru3Z$4( zi(d|=Xf=m{5#LR8*%$fK*HdX8ka=Ecy*CxvXB{s>yl$yeHmlA^R+zYeyRSEO0h)so z&Zj{L_ft8}13lT4;)3C&Kg^tFPbN!sGg~{sXk`i;Jf*F4*zTXJNi0FS<_yTW-J~A; z$AwO?RLlkEE0;sYhtg9CO&%=AMTmSMGBvH$KIy$|GsHz!H{Bns6hl0a`Gk8aph^<8 z;JSne>l%7M0tG&%xwL|_8BHnQYN#zgpThd}8_-Jc#gSayx<|waij7X58w8;cuH)!q z&I3oB*R#GwHx&7%cv1({ojLqU@kv}>_p!PAsJy_~aEQnx^U^gdjVS%#g>gzztF z1C<_{3MF{Ejq$HRb2g-fzam4DF;_q-ih?m^qA&PT2NuC`3rn~WxBwU$TzrQ`fNU{d|XtEO14!ZvN~mOy9*6*G!!Rfz(DG*@FGSsQjwyC^!zOW#{&F2;Ol3| zX{!R81~??R|)eJ zjEOe_22*Erv)p|e;EDTyndvYP46rF`?nthTY*wO#L1^hafM7#MZ3r$0ni}bB-C7)Q zGqYM#po7Ze;b8m@8s!8SLpmoswuOcE%eUcWl zqcLi!n2TXYhm#*$G99Ycs=5Hm;I6Anne?B=tq}{+Q`(u*Oquz&?7a0w`DlxS)`aov z^CYo)HgWYdsEe^mT(lIV#GWe#Lj{pKMDunt->q5r2soM>i?wbrP|E?=-f&}vEVigr zD%Kha%BEDMREi`Z!*~N_yP=ZYjjhvcV9o@h;vL>{Nm&&8PuZF{BLjVN>G3x3M^qG5 zTC)amH8#C-bnHq)!`s1pAp=`pC8dV7YI71cFEgxWRN;Pyz9WjmMFjsq7mJj!H+@(R zp*Vpxgl;$J)jsopA_@`TcEv=HM6y$646P7*HbiUss00s7Wv~(;#NdRE`(y!ji{fl9 zp=dFJ$8oVGsadCgpZJzu(1nTDbvQP4V^h9q-Q(0v#cQZt$c2YmcV8d znL@Pq&S-^ZL|{bclvsCsXQ398W2Z2ugZP($lrgA+N(iiw5Hrk%s#aUKk1kjDYg>n{ zM>D8YR~Dw@ia~jdLzS;^2*4=XnN=VR>H}gqkPKQ=Fw&eq`9h9dje$7;LfH>_5Y7t~ zCgN0VEd@_~N)nNh)jK3Hpbur3fpM9FxP5*DR)PP{<+jnSb!LV(3ZiMv7OUB-gt39p zQO~gtYA^Up$t$>2X@1@HzDnQud6tpdUVuY!zQm8*TZ{b!D(gs8uZoLHw2LaEthfm* z1@#pbKk9iMIv|P%8RyGfxA_?v5yQ=B=*SR;obFUUIq8LEFp#IO-aA0GAwZWB=h+ED zmq=Ja56S_Xz~M_`x$#uY6F?l?#iF$&Bgj}`^JBrhb5YttZyKxtT}N6Utk5#gB?7zC z@%jGJlHCm;UYfO+K$waGA$=Xg8v4puvgpNe(Va5wgBk-7oUB=Td{6k?Lx>WQD$#cPm9Mt>X@mm^JglZ~PMdS-UE{-rL zQDrL)i+s_sf>ZLLy!^uCJNr8lf&+@6Ww0n&T}&S)<67u0Xif{4p`ykGZyF=x~R*{p9{@sy%Rg2a5- zQGWx}1UQ}yQAEPRyf;ejC z11_Cx9Rm>z)KI#V%6^F%{LV)hauOXk6IOfyK*fjCig$sNnMyto6I)Wdx9v^@W1AawQiHV)P`9NSoD6WguftQoS0vPJ&TE!<>!LwzD zIc8m2`k?t%p~(^UwEp7@fjVne396u}woDP|@h#S{DKD;(2F)3@gh?sMqdNKV<;!>Z z$4!pJc5EVg-tMQH7^FCl@-+t)MS^r5z_p{UXp@A_7|ojm!OLd?@|qI-3G>1Hnen8c zz7`W!hlP}luA8E^WrTz$Q$3eA+KZbe=Cwq{dU(l24kn&d^}fiCfw=DKzaz=m$g4Z= zk4Y=fq$i4H)k~<+Hfi{680Fo=f$Q$pD#(k(g6z?Po4tY8H?yKi1)B)luQ9B4uH*E* zqBab7fW}sz@EZ#troPF|q@cm5teu%xz=UiL>Devb5_PN+x1!(_`$?mFO=~FN=@>2p zXAIlDmU7Gu`3<6)w2J_$*h1BB`8rm{k#kx*;%jm|TPaAIklvUI=dGocwBav})T?6Z z))wdsUncU3A*m^oc^5<9Vp>DFcaK^d87%=ih)NKHrTDiOC#MXkuj01oEMlpsL^(C2 zVF9ctq_j-0SkYb+p`l#Tjhrskl!oJxd1CvxA0LG6#G=6O2&}zMXI5f>5Jy;9o{92` zxGy^U2So{6aRTXl6G5H1w>{s|*BQQ~K8hs|;VR*io}ddJemgEQO%VblKpCLXR=CE) zem;2=wB`M_1%Syx3N1HQ%M^}mIyaIn0ib4gO6(@6WB~Ut7kb4u>2#ALwFggx(MGA?fT*`C)cSr+$$$)1W9O0g7Ln<9vQ2$L zWr%F*+2Tg5n2JQ9MJp;Ji`A3UZ4``So*2Immp@HUZeVQsGu9GO95%XOT;T-sSJ5uKO~8I6Y`ok@?-Jp@0P0#W*ehip zVl&w8BjPvwD0~c-9YgW-$*{3m7x?_-PAB%RfxS{C zwjP1|7x_QL)ov%3?GiXe>Q;kYR4WfOQdbaWa1qXGl(cWQQ4Ds znVYE!#@?1C?x`dPJ35==OrZI(I_ah6yFq-qbu6cOjK#IC{ZkCXoc9a%s3v7oHE&lA zXaVSOACwY{U@(qRs^+C(hzG3&IjMy@>lpaavnq&B1^%)?&tzjlfHwv;7?*50!O|U` zjEd+YVQaL|ckGiaBL}?XDJ*NY#>n(NeeFH~Ld3w!{Xfvsc^FnZQU;*d>jP=*lbzGx zn=F{(|8T+bdpW-%j6Uoa>!o^u;5b1iEU`Ag8C95r7{dV=WFPy&Xz!0A>Gc=lgmgWz zwNeMH+>?lUOUD5&eBc($u%8Dbv>wjd=^-!FUat@zW`u1<89fndP1Y(Iwnjm0rY7Kn z33qjjK>uF=B?sF0k~Ospb^KI7ad5X)9{u& zu+Pe_8Yv!#onkeSZU<-sB3+(^bi>rDJSQ{sWD}n>A8LuMevmn8L<-Z1)c}@^BWZww z0P1RJxT?P9ARrbWO>*3w%RPZAD=Eq1<+)yD2&9V z)D^^)9NBIAQbztZmnP7ix76rMe4lDbW1CQvofK@iGhVK(9;{hvHdzo_ zk3N1AzE6`BuSAqXf`U>pMl&VA{Ih{egk*P86jZ^qt_m4rY&->;-U-XYBv6eg z-8C|ZGL5YH&~Jm2L&FL;$LGtD$-ettY2qTuqlI7DstJOr34nu8^};A;@yH_=Yapts z01+{`m$0B8Nx2YeQ5=PZoX<@M2NTMA0TK~Xt3#n73IbFGCV-|`>=QW62g19g##_W) z435!e2t;+Zz+e}Myh3lr177M;@L>X*nQo7YW|+UxpnmTPdf^l^_~a3bwU9<*!DIuH zYenQAS#LG|?@%R+kWbDeZx7xoB7@&=#ovbTVZjc?J%HK@PRoQ_Lh>+2Y7lH3Xc(aS zD3DEnfjoaP=lEPysIaUIGt3q>Hi^gp4KT#03EoM{_VVS39>!Z@)JKhKfg`Ct3Il0*s+E$};+AWXZ94AsG;0FHJI}4PAo60~iqC zk()!R*&?>RK$SfK42DY&{zD&mA@@QdtU0SglHnH6yo?drgc}DC`9w&tk(v+`91luG zZUYmcDqX6;hXjn;9ahN|wdfd?0XxY#Ufx`>1K7)J#(`m8YBds^{!~FICvX@eny`Rq zBcKqdP##gEs^{C$`2L@Yw)RE8_^};A;@yH_= zYa+~5pX`YL0GwI?VT3^5-?wjnrqUSDRtV&L!VnfRuwG&X zcmU<`hOOnD`Vkm)a$=IyY>XzMG*{nfpg`h+^51|J1cL5m#i{qlu`E45!L_Sz#H9QN zM+iHi06`c9jYx%*0IIX?=g_K0uD#lN%x9MkS+=P`1Odo45isE18c_cLm55bhEDE5l zQ#?C9pJQ=I#n!`kQa^aebPyDAfktg(qXSn+Y~LFf0p!7Ylq%oN`V>?PJ+GJAhqEUQkleD!5$LYiNiKH!gXkSs-+b zj;{AKSLF>31mr#t1V_q&14Qc3Z{R&(m$@=oNj3w{12%_L9*Txgf%Pmmxc<(42q8SuW`hshkkI122=y);(1rcWF{#-kWke9^9ps#~Qaj84YI}|MW3_Vow zn`DSub(*AMq(U*-r04eOQemGqg1q!Nev;|nx|A-z;3hwSM+llaW-%JOVkRb%ETQ8N zlQKvUY^t5T;JzS)@DK;r=*}f9uJDZb0UZe<0Ujw5uGhENs4@`?C`Qt3l(^!kLed_> z(KvUJPM}$YF~rIjPD1IXgg0Wr;Di7V->ZX>NNTf_boibRd(kF~kT}6E;zU8sn@O+i YL#$CrSbqIuA_|jiH&TL%AG<&Q*=+*PE&u=k literal 0 HcmV?d00001 diff --git a/doc/src/Eqs/pair_spin_dipole.tex b/doc/src/Eqs/pair_spin_dipole.tex new file mode 100644 index 0000000000..27f0bc4d2d --- /dev/null +++ b/doc/src/Eqs/pair_spin_dipole.tex @@ -0,0 +1,42 @@ +\documentclass[preview]{standalone} +\usepackage{varwidth} +\usepackage[utf8x]{inputenc} +\usepackage{amsmath,amssymb,graphics,bm,setspace} + +\begin{document} +\begin{varwidth}{50in} + \begin{equation} + \mathcal{H}_{\rm long}= + -\frac{\mu_{0} \left( \mu_B\right)^2}{4\pi} + \sum_{i,j,i\neq j}^{N} + \frac{g_i g_j}{r_{ij}^3} + \Big(3 + \left(\bm{e}_{ij}\cdot \bm{s}_{i}\right) + \left(\bm{e}_{ij}\cdot \bm{s}_{j}\right) + -\bm{s}_i\cdot\bm{s}_j \Big) + \nonumber + \end{equation} + \begin{equation} + \bm{\omega}_i = + \frac{\mu_0 (\mu_B)^2}{4\pi\hbar}\sum_{j} + \frac{g_i g_j}{r_{ij}^3} + \, \Big( + 3\,(\bm{e}_{ij}\cdot\bm{s}_{j})\bm{e}_{ij} + -\bm{s}_{j} \Big) \nonumber + \end{equation} + \begin{equation} + \bm{F}_i = + \frac{3\, \mu_0 (\mu_B)^2}{4\pi} \sum_j + \frac{g_i g_j}{r_{ij}^4} + \Big[\big( (\bm{s}_i\cdot\bm{s}_j) + -5(\bm{e}_{ij}\cdot\bm{s}_i) + (\bm{e}_{ij}\cdot\bm{s}_j)\big) \bm{e}_{ij}+ + \big( + (\bm{e}_{ij}\cdot\bm{s}_i)\bm{s}_j+ + (\bm{e}_{ij}\cdot\bm{s}_j)\bm{s}_i + \big) + \Big] + \nonumber + \end{equation} +\end{varwidth} +\end{document} diff --git a/doc/src/kspace_style.txt b/doc/src/kspace_style.txt index e1f799a6c9..93709600df 100644 --- a/doc/src/kspace_style.txt +++ b/doc/src/kspace_style.txt @@ -20,6 +20,10 @@ style = {none} or {ewald} or {ewald/disp} or {ewald/omp} or {pppm} or {pppm/cg} accuracy = desired relative error in forces {ewald/omp} value = accuracy accuracy = desired relative error in forces + {ewald/dipole} value = accuracy + accuracy = desired relative error in forces + {ewald/dipole/spin} value = accuracy + accuracy = desired relative error in forces {pppm} value = accuracy accuracy = desired relative error in forces {pppm/cg} values = accuracy (smallq) @@ -47,6 +51,10 @@ style = {none} or {ewald} or {ewald/disp} or {ewald/omp} or {pppm} or {pppm/cg} accuracy = desired relative error in forces {pppm/stagger} value = accuracy accuracy = desired relative error in forces + {pppm/dipole} value = accuracy + accuracy = desired relative error in forces + {pppm/dipole/spin} value = accuracy + accuracy = desired relative error in forces {msm} value = accuracy accuracy = desired relative error in forces {msm/cg} value = accuracy (smallq) @@ -105,9 +113,13 @@ The {ewald/disp} style adds a long-range dispersion sum option for but in a more efficient manner than the {ewald} style. The 1/r^6 capability means that Lennard-Jones or Buckingham potentials can be used without a cutoff, i.e. they become full long-range potentials. -The {ewald/disp} style can also be used with point-dipoles -"(Toukmaji)"_#Toukmaji and is currently the only kspace solver in -LAMMPS with this capability. + +The {ewald/dipole} style adds long-range standard Ewald summations +for dipole-dipole interactions. + +The {ewald/dipole/spin} style adds long-range standard Ewald +summations for magnetic dipole-dipole interactions between +magnetic spins. :line @@ -128,6 +140,12 @@ The optional {smallq} argument defines the cutoff for the absolute charge value which determines whether a particle is considered charged or not. Its default value is 1.0e-5. +The {pppm/dipole} style invokes a particle-particle particle-mesh solver +for dipole-dipole interactions. + +The {pppm/dipole/spin} style invokes a particle-particle particle-mesh solver +for magnetic dipole-dipole interactions between magnetic spins. + The {pppm/tip4p} style is identical to the {pppm} style except that it adds a charge at the massless 4th site in each TIP4P water molecule. It should be used with "pair styles"_pair_style.html with a diff --git a/doc/src/pair_spin_dipole.txt b/doc/src/pair_spin_dipole.txt index 1c1b5b5f19..2f27f91d08 100644 --- a/doc/src/pair_spin_dipole.txt +++ b/doc/src/pair_spin_dipole.txt @@ -8,15 +8,13 @@ pair_style spin/dipole/cut command :h3 pair_style spin/dipole/long command :h3 -pair_style spin/dipole/long/qsymp command :h3 [Syntax:] pair_style spin/dipole/cut cutoff -pair_style spin/dipole/long cutoff -pair_style spin/dipole/long/qsymp cutoff :pre +pair_style spin/dipole/long cutoff :pre -cutoff = global cutoff for Magnetic dipole energy and forces +cutoff = global cutoff for magnetic dipole energy and forces (optional) (distance units) :ulb,l :ule @@ -31,179 +29,31 @@ pair_coeff * * 1.0 1.0 pair_coeff 2 3 1.0 1.0 2.5 4.0 scale 0.5 pair_coeff 2 3 1.0 1.0 2.5 4.0 :pre -pair_style spin/dipole/long/qsymp 10.0 -pair_coeff * * 1.0 1.0 -pair_coeff 2 3 1.0 1.0 2.5 4.0 :pre - [Description:] Style {spin/dipole/cut} computes a short-range dipole-dipole -interactions between pairs of magnetic particles that each +interaction between pairs of magnetic particles that each have a magnetic spin. The magnetic dipole-dipole interactions are computed by the -following formulas for the energy (E), force -(F), and torque (T) between particles I and J. +following formulas for the magnetic energy, magnetic precession +vector omega and mechanical force between particles I and J. -:c,image(Eqs/pair_dipole.jpg) +:c,image(Eqs/pair_spin_dipole.jpg) -where qi and qj are the charges on the two particles, pi and pj are -the dipole moment vectors of the two particles, r is their separation -distance, and the vector r = Ri - Rj is the separation vector between -the two particles. Note that Eqq and Fqq are simply Coulombic energy -and force, Fij = -Fji as symmetric forces, and Tij != -Tji since the -torques do not act symmetrically. These formulas are discussed in -"(Allen)"_#Allen2 and in "(Toukmaji)"_#Toukmaji2. +where si and sj are the spin on two magnetic particles, +r is their separation distance, and the vector e = (Ri - Rj)/|Ri - Rj| +is the direction vector between the two particles. -Also note, that in the code, all of these terms (except Elj) have a -C/epsilon prefactor, the same as the Coulombic term in the LJ + -Coulombic pair styles discussed "here"_pair_lj.html. C is an -energy-conversion constant and epsilon is the dielectric constant -which can be set by the "dielectric"_dielectric.html command. The -same is true of the equations that follow for other dipole pair -styles. - -Style {lj/sf/dipole/sf} computes "shifted-force" interactions between -pairs of particles that each have a charge and/or a point dipole -moment. In general, a shifted-force potential is a (slightly) modified -potential containing extra terms that make both the energy and its -derivative go to zero at the cutoff distance; this removes -(cutoff-related) problems in energy conservation and any numerical -instability in the equations of motion "(Allen)"_#Allen2. Shifted-force -interactions for the Lennard-Jones (E_LJ), charge-charge (Eqq), -charge-dipole (Eqp), dipole-charge (Epq) and dipole-dipole (Epp) -potentials are computed by these formulas for the energy (E), force -(F), and torque (T) between particles I and J: - -:c,image(Eqs/pair_dipole_sf.jpg) -:c,image(Eqs/pair_dipole_sf2.jpg) - -where epsilon and sigma are the standard LJ parameters, r_c is the -cutoff, qi and qj are the charges on the two particles, pi and pj are -the dipole moment vectors of the two particles, r is their separation -distance, and the vector r = Ri - Rj is the separation vector between -the two particles. Note that Eqq and Fqq are simply Coulombic energy -and force, Fij = -Fji as symmetric forces, and Tij != -Tji since the -torques do not act symmetrically. The shifted-force formula for the -Lennard-Jones potential is reported in "(Stoddard)"_#Stoddard. The -original (non-shifted) formulas for the electrostatic potentials, -forces and torques can be found in "(Price)"_#Price2. The shifted-force -electrostatic potentials have been obtained by applying equation 5.13 -of "(Allen)"_#Allen2. The formulas for the corresponding forces and -torques have been obtained by applying the 'chain rule' as in appendix -C.3 of "(Allen)"_#Allen2. - -If one cutoff is specified in the pair_style command, it is used for -both the LJ and Coulombic (q,p) terms. If two cutoffs are specified, -they are used as cutoffs for the LJ and Coulombic (q,p) terms -respectively. This pair style also supports an optional {scale} keyword -as part of a pair_coeff statement, where the interactions can be -scaled according to this factor. This scale factor is also made available -for use with fix adapt. - -Style {lj/cut/dipole/long} computes long-range point-dipole -interactions as discussed in "(Toukmaji)"_#Toukmaji2. Dipole-dipole, -dipole-charge, and charge-charge interactions are all supported, along -with the standard 12/6 Lennard-Jones interactions, which are computed -with a cutoff. A "kspace_style"_kspace_style.html must be defined to -use this pair style. Currently, only "kspace_style -ewald/disp"_kspace_style.html support long-range point-dipole -interactions. - -Style {lj/long/dipole/long} also computes point-dipole interactions as -discussed in "(Toukmaji)"_#Toukmaji2. Long-range dipole-dipole, -dipole-charge, and charge-charge interactions are all supported, along -with the standard 12/6 Lennard-Jones interactions. LJ interactions -can be cutoff or long-ranged. - -For style {lj/long/dipole/long}, if {flag_lj} is set to {long}, no -cutoff is used on the LJ 1/r^6 dispersion term. The long-range -portion is calculated by using the "kspace_style -ewald_disp"_kspace_style.html command. The specified LJ cutoff then -determines which portion of the LJ interactions are computed directly -by the pair potential versus which part is computed in reciprocal -space via the Kspace style. If {flag_lj} is set to {cut}, the LJ -interactions are simply cutoff, as with "pair_style -lj/cut"_pair_lj.html. If {flag_lj} is set to {off}, LJ interactions -are not computed at all. - -If {flag_coul} is set to {long}, no cutoff is used on the Coulombic or -dipole interactions. The long-range portion is calculated by using -{ewald_disp} of the "kspace_style"_kspace_style.html command. If -{flag_coul} is set to {off}, Coulombic and dipole interactions are not -computed at all. - -Atoms with dipole moments should be integrated using the "fix -nve/sphere update dipole"_fix_nve_sphere.html or the "fix -nvt/sphere update dipole"_fix_nvt_sphere.html command to rotate the -dipole moments. The {omega} option on the "fix -langevin"_fix_langevin.html command can be used to thermostat the -rotational motion. The "compute temp/sphere"_compute_temp_sphere.html -command can be used to monitor the temperature, since it includes -rotational degrees of freedom. The "atom_style -hybrid dipole sphere"_atom_style.html command should be used since -it defines the point dipoles and their rotational state. -The magnitude and orientation of the dipole moment for each particle -can be defined by the "set"_set.html command or in the "Atoms" section -of the data file read in by the "read_data"_read_data.html command. - -The following coefficients must be defined for each pair of atoms -types via the "pair_coeff"_pair_coeff.html command as in the examples -above, or in the data file or restart files read by the -"read_data"_read_data.html or "read_restart"_read_restart.html -commands, or by mixing as described below: - -epsilon (energy units) -sigma (distance units) -cutoff1 (distance units) -cutoff2 (distance units) :ul - -The latter 2 coefficients are optional. If not specified, the global -LJ and Coulombic cutoffs specified in the pair_style command are used. -If only one cutoff is specified, it is used as the cutoff for both LJ -and Coulombic interactions for this type pair. If both coefficients -are specified, they are used as the LJ and Coulombic cutoffs for this -type pair. +Style {spin/dipole/long} computes long-range magnetic dipole-dipole +interaction. +A "kspace_style"_kspace_style.html must be defined to +use this pair style. Currently, "kspace_style +ewald/dipole/spin"_kspace_style.html and "kspace_style +pppm/dipole/spin"_kspace_style.html support long-range magnetic +dipole-dipole interactions. :line -Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are -functionally the same as the corresponding style without the suffix. -They have been optimized to run faster, depending on your available -hardware, as discussed on the "Speed packages"_Speed_packages.html doc -page. The accelerated styles take the same arguments and should -produce the same results, except for round-off and precision issues. - -These accelerated styles are part of the GPU, USER-INTEL, KOKKOS, -USER-OMP and OPT packages, respectively. They are only enabled if -LAMMPS was built with those packages. See the "Build -package"_Build_package.html doc page for more info. - -You can specify the accelerated styles explicitly in your input script -by including their suffix, or you can use the "-suffix command-line -switch"_Run_options.html when you invoke LAMMPS, or you can use the -"suffix"_suffix.html command in your input script. - -See the "Speed packages"_Speed_packages.html doc page for more -instructions on how to use the accelerated styles effectively. - -:line - -[Mixing, shift, table, tail correction, restart, rRESPA info]: - -For atom type pairs I,J and I != J, the epsilon and sigma coefficients -and cutoff distances for this pair style can be mixed. The default -mix value is {geometric}. See the "pair_modify" command for details. - -For atom type pairs I,J and I != J, the A, sigma, d1, and d2 -coefficients and cutoff distance for this pair style can be mixed. A -is an energy value mixed like a LJ epsilon. D1 and d2 are distance -values and are mixed like sigma. The default mix value is -{geometric}. See the "pair_modify" command for details. - -This pair style does not support the "pair_modify"_pair_modify.html -shift option for the energy of the Lennard-Jones portion of the pair -interaction; such energy goes to zero at the cutoff by construction. - The "pair_modify"_pair_modify.html table option is not relevant for this pair style. @@ -215,28 +65,20 @@ This pair style writes its information to "binary restart files"_restart.html, 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 -"run_style respa"_run_style.html command. It does not support the -{inner}, {middle}, {outer} keywords. - [Restrictions:] -The {lj/cut/dipole/cut}, {lj/cut/dipole/long}, and -{lj/long/dipole/long} styles are part of the DIPOLE package. They are -only enabled if LAMMPS was built with that package. See the "Build -package"_Build_package.html doc page for more info. +The {spin/dipole/cut} and {spin/dipole/long} styles are part of +the SPIN package. They are only enabled if LAMMPS was built with that +package. See the "Build package"_Build_package.html doc page for more +info. -The {lj/sf/dipole/sf} style is part of the USER-MISC package. It is -only enabled if LAMMPS was built with that package. See the "Build -package"_Build_package.html doc page for more info. - -Using dipole pair styles with {electron} "units"_units.html is not +Using dipole/spin pair styles with {electron} "units"_units.html is not currently supported. [Related commands:] -"pair_coeff"_pair_coeff.html, "set"_set.html, "read_data"_read_data.html, -"fix nve/sphere"_fix_nve_sphere.html, "fix nvt/sphere"_fix_nvt_sphere.html +"pair_coeff"_pair_coeff.html, "kspace_style"_kspace_style.html +"fix nve/spin"_fix_nve_spin.html [Default:] none @@ -245,13 +87,3 @@ currently supported. :link(Allen2) [(Allen)] Allen and Tildesley, Computer Simulation of Liquids, Clarendon Press, Oxford, 1987. - -:link(Toukmaji2) -[(Toukmaji)] Toukmaji, Sagui, Board, and Darden, J Chem Phys, 113, -10913 (2000). - -:link(Stoddard) -[(Stoddard)] Stoddard and Ford, Phys Rev A, 8, 1504 (1973). - -:link(Price2) -[(Price)] Price, Stone and Alderton, Mol Phys, 52, 987 (1984). diff --git a/examples/SPIN/dipole_spin/in.spin.iron_ewald b/examples/SPIN/dipole_spin/in.spin.iron_ewald index d4703a2959..75e202d61c 100644 --- a/examples/SPIN/dipole_spin/in.spin.iron_ewald +++ b/examples/SPIN/dipole_spin/in.spin.iron_ewald @@ -21,12 +21,16 @@ mass 1 55.845 set group all spin 2.2 -1.0 0.0 0.0 velocity all create 100 4928459 rot yes dist gaussian -pair_style hybrid/overlay eam/alloy spin/exchange 3.5 +pair_style hybrid/overlay eam/alloy spin/exchange 3.5 spin/dipole/long 8.0 pair_coeff * * eam/alloy Fe_Mishin2006.eam.alloy Fe pair_coeff * * spin/exchange exchange 3.4 0.02726 0.2171 1.841 +pair_coeff * * spin/dipole/long 8.0 + neighbor 0.1 bin neigh_modify every 10 check yes delay 20 +kspace_style ewald/dipole/spin 1.0e-4 + fix 1 all precession/spin cubic 0.001 0.0005 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 fix_modify 1 energy yes fix 2 all langevin/spin 0.0 0.0 21 @@ -55,6 +59,3 @@ compute outsp all property/atom spx spy spz sp fmx fmy fmz dump 100 all custom 1 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] run 2000 -# min_style spin -# min_modify alpha_damp 1.0 discrete_factor 10 -# minimize 1.0e-16 1.0e-16 10000 10000 diff --git a/examples/SPIN/dipole_spin/in.spin.iron_pppm b/examples/SPIN/dipole_spin/in.spin.iron_pppm index d4703a2959..ea88b518f3 100644 --- a/examples/SPIN/dipole_spin/in.spin.iron_pppm +++ b/examples/SPIN/dipole_spin/in.spin.iron_pppm @@ -21,12 +21,17 @@ mass 1 55.845 set group all spin 2.2 -1.0 0.0 0.0 velocity all create 100 4928459 rot yes dist gaussian -pair_style hybrid/overlay eam/alloy spin/exchange 3.5 +pair_style hybrid/overlay eam/alloy spin/exchange 3.5 spin/dipole/long 8.0 pair_coeff * * eam/alloy Fe_Mishin2006.eam.alloy Fe pair_coeff * * spin/exchange exchange 3.4 0.02726 0.2171 1.841 +pair_coeff * * spin/dipole/long 8.0 + neighbor 0.1 bin neigh_modify every 10 check yes delay 20 +kspace_style pppm/dipole/spin 1.0e-4 +kspace_modify compute yes + fix 1 all precession/spin cubic 0.001 0.0005 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 fix_modify 1 energy yes fix 2 all langevin/spin 0.0 0.0 21 diff --git a/src/.gitignore b/src/.gitignore index 1e073bb657..ad38fc3d46 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -166,6 +166,10 @@ /pair_spin.h /pair_spin_dmi.cpp /pair_spin_dmi.h +/pair_spin_dipole_cut.cpp +/pair_spin_dipole_cut.h +/pair_spin_dipole_long.cpp +/pair_spin_dipole_long.h /pair_spin_exchange.cpp /pair_spin_exchange.h /pair_spin_magelec.cpp @@ -427,6 +431,10 @@ /ewald.h /ewald_cg.cpp /ewald_cg.h +/ewald_dipole.cpp +/ewald_dipole.h +/ewald_dipole_spin.cpp +/ewald_dipole_spin.h /ewald_disp.cpp /ewald_disp.h /ewald_n.cpp @@ -1026,6 +1034,10 @@ /pppm.h /pppm_cg.cpp /pppm_cg.h +/pppm_dipole.cpp +/pppm_dipole.h +/pppm_dipole_spin.cpp +/pppm_dipole_spin.h /pppm_disp.cpp /pppm_disp.h /pppm_disp_tip4p.cpp diff --git a/src/KSPACE/ewald_dipole.cpp b/src/KSPACE/ewald_dipole.cpp index 514ba8925c..25661555fa 100644 --- a/src/KSPACE/ewald_dipole.cpp +++ b/src/KSPACE/ewald_dipole.cpp @@ -94,7 +94,6 @@ void EwaldDipole::init() error->all(FLERR,"Cannot use EwaldDipole with 2d simulation"); if (!atom->mu) error->all(FLERR,"Kspace style requires atom attribute mu"); -//if (!atom->q_flag) error->all(FLERR,"Kspace style requires atom attribute q"); if (dipoleflag && strcmp(update->unit_style,"electron") == 0) error->all(FLERR,"Cannot (yet) use 'electron' units with dipoles"); diff --git a/src/KSPACE/ewald_dipole_spin.cpp b/src/KSPACE/ewald_dipole_spin.cpp index 1aace3eb1b..35f5daafba 100644 --- a/src/KSPACE/ewald_dipole_spin.cpp +++ b/src/KSPACE/ewald_dipole_spin.cpp @@ -51,8 +51,6 @@ EwaldDipoleSpin::EwaldDipoleSpin(LAMMPS *lmp) : spinflag = 1; hbar = force->hplanck/MY_2PI; // eV/(rad.THz) - //mub = 5.78901e-5; // in eV/T - //mu_0 = 1.2566370614e-6; // in T.m/A mub = 9.274e-4; // in A.Ang^2 mu_0 = 785.15; // in eV/Ang/A^2 mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV.Ang^3 @@ -437,7 +435,6 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) // compute field for torque calculation - //partial2 = exprl*sfacrl_all[k] + expim*sfacim_all[k]; partial_peratom = exprl*sfacrl_all[k] + expim*sfacim_all[k]; tk[i][0] += partial2*eg[k][0]; tk[i][1] += partial2*eg[k][1]; @@ -456,12 +453,10 @@ void EwaldDipoleSpin::compute(int eflag, int vflag) // (for per-atom energy and virial calc.) if (evflag_atom) { - //partial_peratom = exprl*sfacrl_all[k] + expim*sfacim_all[k]; if (eflag_atom) eatom[i] += mudotk*ug[k]*partial_peratom; if (vflag_atom) for (j = 0; j < 6; j++) vatom[i][j] += (ug[k]*mudotk*vg[k][j]*partial_peratom - vcik[j]); - //vatom[i][j] += ug[k] * (vg[k][j]*partial_peratom - vcik[j]); } } } diff --git a/src/KSPACE/pppm_dipole_spin.cpp b/src/KSPACE/pppm_dipole_spin.cpp index b864401ae1..23d7beaece 100644 --- a/src/KSPACE/pppm_dipole_spin.cpp +++ b/src/KSPACE/pppm_dipole_spin.cpp @@ -70,8 +70,6 @@ PPPMDipoleSpin::PPPMDipoleSpin(LAMMPS *lmp) : spinflag = 1; hbar = force->hplanck/MY_2PI; // eV/(rad.THz) - //mub = 5.78901e-5; // in eV/T - //mu_0 = 1.2566370614e-6; // in T.m/A mub = 9.274e-4; // in A.Ang^2 mu_0 = 785.15; // in eV/Ang/A^2 mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV.Ang^3 @@ -157,7 +155,7 @@ void PPPMDipoleSpin::init() int itmp = 0; double *p_cutoff = (double *) force->pair->extract("cut_coul",itmp); - // probably not the correct extract here + // check the correct extract here if (p_cutoff == NULL) error->all(FLERR,"KSpace style is incompatible with Pair style"); cutoff = *p_cutoff; diff --git a/src/SPIN/pair_spin_dipole_cut.cpp b/src/SPIN/pair_spin_dipole_cut.cpp index 360e3c47de..405657ccbf 100644 --- a/src/SPIN/pair_spin_dipole_cut.cpp +++ b/src/SPIN/pair_spin_dipole_cut.cpp @@ -58,7 +58,7 @@ lockfixnvespin(NULL) mub = 9.274e-4; // in A.Ang^2 mu_0 = 785.15; // in eV/Ang/A^2 mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV.Ang^3 - mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV + //mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz } @@ -115,8 +115,8 @@ void PairSpinDipoleCut::settings(int narg, char **arg) void PairSpinDipoleCut::coeff(int narg, char **arg) { if (!allocated) allocate(); - - if (narg < 1 || narg > 3) + + if (narg != 3) error->all(FLERR,"Incorrect args in pair_style command"); int ilo,ihi,jlo,jhi; @@ -216,24 +216,21 @@ void *PairSpinDipoleCut::extract(const char *str, int &dim) void PairSpinDipoleCut::compute(int eflag, int vflag) { int i,j,ii,jj,inum,jnum,itype,jtype; - double rinv,r2inv,r3inv,rsq; - double evdwl,ecoul; - double xi[3],rij[3],eij[3]; - double spi[4],spj[4],fi[3],fmi[3]; - double local_cut2; int *ilist,*jlist,*numneigh,**firstneigh; + double rinv,r2inv,r3inv,rsq,local_cut2,evdwl,ecoul; + double xi[3],rij[3],eij[3],spi[4],spj[4],fi[3],fmi[3]; evdwl = ecoul = 0.0; if (eflag || vflag) ev_setup(eflag,vflag); else evflag = vflag_fdotr = 0; + int *type = atom->type; + int nlocal = atom->nlocal; + int newton_pair = force->newton_pair; double **x = atom->x; double **f = atom->f; double **fm = atom->fm; double **sp = atom->sp; - int *type = atom->type; - int nlocal = atom->nlocal; - int newton_pair = force->newton_pair; inum = list->inum; ilist = list->ilist; @@ -320,70 +317,90 @@ void PairSpinDipoleCut::compute(int eflag, int vflag) /* ---------------------------------------------------------------------- update the pair interaction fmi acting on the spin ii - adding 1/r (for r in [0,rc]) contribution to the pair - removing erf(r)/r (for r in [0,rc]) from the kspace force ------------------------------------------------------------------------- */ void PairSpinDipoleCut::compute_single_pair(int ii, double fmi[3]) { - int i,j,jj,jnum,itype,jtype; - double rsq,rinv,r2inv,r3inv; - double xi[3],rij[3],eij[3]; - double spi[4],spj[4]; - double local_cut2; + int j,jnum,itype,jtype,ntypes; int *ilist,*jlist,*numneigh,**firstneigh; + double rsq,rinv,r2inv,r3inv,local_cut2; + double xi[3],rij[3],eij[3],spi[4],spj[4]; + int k,locflag; + int *type = atom->type; double **x = atom->x; double **sp = atom->sp; - int *type = atom->type; - ilist = list->ilist; numneigh = list->numneigh; firstneigh = list->firstneigh; - // computation of the exchange interaction - // loop over neighbors of atom i - - i = ilist[ii]; - xi[0] = x[i][0]; - xi[1] = x[i][1]; - xi[2] = x[i][2]; - spi[0] = sp[i][0]; - spi[1] = sp[i][1]; - spi[2] = sp[i][2]; - spi[3] = sp[i][3]; - jlist = firstneigh[i]; - jnum = numneigh[i]; - itype = type[i]; + // check if interaction applies to type of ii - for (jj = 0; jj < jnum; jj++) { - j = jlist[jj]; - j &= NEIGHMASK; - jtype = type[j]; + itype = type[ii]; + ntypes = atom->ntypes; + locflag = 0; + k = 1; + while (k <= ntypes) { + if (k <= itype) { + if (setflag[k][itype] == 1) { + locflag =1; + break; + } + k++; + } else if (k > itype) { + if (setflag[itype][k] == 1) { + locflag =1; + break; + } + k++; + } else error->all(FLERR,"Wrong type number"); + } - spj[0] = sp[j][0]; - spj[1] = sp[j][1]; - spj[2] = sp[j][2]; - spj[3] = sp[j][3]; - rij[0] = x[j][0] - xi[0]; - rij[1] = x[j][1] - xi[1]; - rij[2] = x[j][2] - xi[2]; - rsq = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; - rinv = 1.0/sqrt(rsq); - eij[0] = rij[0]*rinv; - eij[1] = rij[1]*rinv; - eij[2] = rij[2]*rinv; + // if interaction applies to type ii, + // locflag = 1 and compute pair interaction + + if (locflag == 1) { - local_cut2 = cut_spin_long[itype][jtype]*cut_spin_long[itype][jtype]; + xi[0] = x[ii][0]; + xi[1] = x[ii][1]; + xi[2] = x[ii][2]; + spi[0] = sp[ii][0]; + spi[1] = sp[ii][1]; + spi[2] = sp[ii][2]; + spi[3] = sp[ii][3]; + jlist = firstneigh[ii]; + jnum = numneigh[ii]; + + for (int jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + jtype = type[j]; - if (rsq < local_cut2) { - r2inv = 1.0/rsq; - r3inv = r2inv*rinv; - - // compute dipolar interaction - - compute_dipolar(i,j,eij,fmi,spi,spj,r3inv); + spj[0] = sp[j][0]; + spj[1] = sp[j][1]; + spj[2] = sp[j][2]; + spj[3] = sp[j][3]; + + rij[0] = x[j][0] - xi[0]; + rij[1] = x[j][1] - xi[1]; + rij[2] = x[j][2] - xi[2]; + rsq = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; + rinv = 1.0/sqrt(rsq); + eij[0] = rij[0]*rinv; + eij[1] = rij[1]*rinv; + eij[2] = rij[2]*rinv; + + local_cut2 = cut_spin_long[itype][jtype]*cut_spin_long[itype][jtype]; + + if (rsq < local_cut2) { + r2inv = 1.0/rsq; + r3inv = r2inv*rinv; + + // compute dipolar interaction + + compute_dipolar(ii,j,eij,fmi,spi,spj,r3inv); + } } } } @@ -424,11 +441,11 @@ void PairSpinDipoleCut::compute_dipolar_mech(int i, int j, double eij[3], sjeij = spj[0]*eij[0] + spj[1]*eij[1] + spj[2]*eij[2]; bij = sisj - 5.0*sieij*sjeij; - pre = mub2mu0*gigjri4; + pre = 3.0*mub2mu0*gigjri4; - fi[0] += pre * (eij[0] * bij + (sjeij*spi[0] + sieij*spj[0])); - fi[1] += pre * (eij[1] * bij + (sjeij*spi[1] + sieij*spj[1])); - fi[2] += pre * (eij[2] * bij + (sjeij*spi[2] + sieij*spj[2])); + fi[0] -= pre * (eij[0] * bij + (sjeij*spi[0] + sieij*spj[0])); + fi[1] -= pre * (eij[1] * bij + (sjeij*spi[1] + sieij*spj[1])); + fi[2] -= pre * (eij[2] * bij + (sjeij*spi[2] + sieij*spj[2])); } /* ---------------------------------------------------------------------- diff --git a/src/SPIN/pair_spin_dipole_long.cpp b/src/SPIN/pair_spin_dipole_long.cpp index 45f08955de..bf9bdeb91b 100644 --- a/src/SPIN/pair_spin_dipole_long.cpp +++ b/src/SPIN/pair_spin_dipole_long.cpp @@ -60,8 +60,6 @@ lockfixnvespin(NULL) lattice_flag = 0; hbar = force->hplanck/MY_2PI; // eV/(rad.THz) - //mub = 5.78901e-5; // in eV/T - //mu_0 = 1.2566370614e-6; // in T.m/A mub = 9.274e-4; // in A.Ang^2 mu_0 = 785.15; // in eV/Ang/A^2 mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV.Ang^3 @@ -120,18 +118,14 @@ void PairSpinDipoleLong::coeff(int narg, char **arg) { if (!allocated) allocate(); - // check if args correct - - if (strcmp(arg[2],"long") != 0) - error->all(FLERR,"Incorrect args in pair_style command"); - if (narg < 1 || narg > 4) + if (narg != 3) error->all(FLERR,"Incorrect args in pair_style command"); int ilo,ihi,jlo,jhi; force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); - double spin_long_cut_one = force->numeric(FLERR,arg[3]); + double spin_long_cut_one = force->numeric(FLERR,arg[2]); int count = 0; for (int i = ilo; i <= ihi; i++) { @@ -181,15 +175,10 @@ void PairSpinDipoleLong::init_style() // insure use of KSpace long-range solver, set g_ewald - //if (force->kspace == NULL) - // error->all(FLERR,"Pair style requires a KSpace style"); - - //g_ewald = force->kspace->g_ewald; - - // test case - g_ewald = 0.1; - + if (force->kspace == NULL) + error->all(FLERR,"Pair style requires a KSpace style"); + g_ewald = force->kspace->g_ewald; } /* ---------------------------------------------------------------------- @@ -312,7 +301,6 @@ void PairSpinDipoleLong::compute(int eflag, int vflag) if (rsq < local_cut2) { r2inv = 1.0/rsq; - //rinv = sqrt(r2inv); r = sqrt(rsq); grij = g_ewald * r; @@ -327,8 +315,6 @@ void PairSpinDipoleLong::compute(int eflag, int vflag) compute_long(i,j,eij,bij,fmi,spi,spj); compute_long_mech(i,j,eij,bij,fmi,spi,spj); - //compute_long(i,j,rij,bij,fmi,spi,spj); - //compute_long_mech(i,j,rij,bij,fmi,spi,spj); } // force accumulation @@ -368,95 +354,117 @@ void PairSpinDipoleLong::compute(int eflag, int vflag) void PairSpinDipoleLong::compute_single_pair(int ii, double fmi[3]) { - int i,j,jj,jnum,itype,jtype; - double r,rinv,r2inv,rsq; - double grij,expm2,t,erfc; - double bij[4]; - double xi[3],rij[3],eij[3]; - double spi[4],spj[4]; - double local_cut2; - double pre1,pre2,pre3; + //int i,j,jj,jnum,itype,jtype; + int j,jj,jnum,itype,jtype,ntypes; + int k,locflag; int *ilist,*jlist,*numneigh,**firstneigh; + double r,rinv,r2inv,rsq,grij,expm2,t,erfc; + double local_cut2,pre1,pre2,pre3; + double bij[4],xi[3],rij[3],eij[3],spi[4],spj[4]; + int *type = atom->type; double **x = atom->x; double **sp = atom->sp; double **fm_long = atom->fm_long; - int *type = atom->type; ilist = list->ilist; numneigh = list->numneigh; firstneigh = list->firstneigh; + + // check if interaction applies to type of ii - pre1 = 2.0 * g_ewald / MY_PIS; - pre2 = 4.0 * pow(g_ewald,3.0) / MY_PIS; - pre3 = 8.0 * pow(g_ewald,5.0) / MY_PIS; - - // computation of the exchange interaction - // loop over neighbors of atom i - - i = ilist[ii]; - xi[0] = x[i][0]; - xi[1] = x[i][1]; - xi[2] = x[i][2]; - spi[0] = sp[i][0]; - spi[1] = sp[i][1]; - spi[2] = sp[i][2]; - spi[3] = sp[i][3]; - jlist = firstneigh[i]; - jnum = numneigh[i]; - itype = type[i]; - - for (jj = 0; jj < jnum; jj++) { - j = jlist[jj]; - j &= NEIGHMASK; - jtype = type[j]; - - spj[0] = sp[j][0]; - spj[1] = sp[j][1]; - spj[2] = sp[j][2]; - spj[3] = sp[j][3]; - - fmi[0] = fmi[1] = fmi[2] = 0.0; - bij[0] = bij[1] = bij[2] = bij[3] = 0.0; - - rij[0] = x[j][0] - xi[0]; - rij[1] = x[j][1] - xi[1]; - rij[2] = x[j][2] - xi[2]; - rsq = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; - rinv = 1.0/sqrt(rsq); - eij[0] = rij[0]*rinv; - eij[1] = rij[1]*rinv; - eij[2] = rij[2]*rinv; - - local_cut2 = cut_spin_long[itype][jtype]*cut_spin_long[itype][jtype]; - - if (rsq < local_cut2) { - r2inv = 1.0/rsq; - //rinv = sqrt(r2inv); - - r = sqrt(rsq); - grij = g_ewald * r; - expm2 = exp(-grij*grij); - t = 1.0 / (1.0 + EWALD_P*grij); - erfc = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; - - bij[0] = erfc * rinv; - bij[1] = (bij[0] + pre1*expm2) * r2inv; - bij[2] = (3.0*bij[1] + pre2*expm2) * r2inv; - bij[3] = (5.0*bij[2] + pre3*expm2) * r2inv; - - compute_long(i,j,eij,bij,fmi,spi,spj); - } + itype = type[ii]; + ntypes = atom->ntypes; + locflag = 0; + k = 1; + while (k <= ntypes) { + if (k <= itype) { + if (setflag[k][itype] == 1) { + locflag =1; + break; + } + k++; + } else if (k > itype) { + if (setflag[itype][k] == 1) { + locflag =1; + break; + } + k++; + } else error->all(FLERR,"Wrong type number"); } - // adding the kspace components to fm + // if interaction applies to type ii, + // locflag = 1 and compute pair interaction - //printf("test fm before: %g, %g, %g \n",fmi[0],fmi[1],fmi[2]); - //printf("test fm_long: %g, %g, %g \n",fm_long[i][0],fm_long[i][1],fm_long[i][2]); - fmi[0] += fm_long[i][0]; - fmi[1] += fm_long[i][1]; - fmi[2] += fm_long[i][2]; - //printf("test fm after: %g, %g, %g \n",fmi[0],fmi[1],fmi[2]); + if (locflag == 1) { + + pre1 = 2.0 * g_ewald / MY_PIS; + pre2 = 4.0 * pow(g_ewald,3.0) / MY_PIS; + pre3 = 8.0 * pow(g_ewald,5.0) / MY_PIS; + + // computation of the exchange interaction + // loop over neighbors of atom i + + //i = ilist[ii]; + xi[0] = x[ii][0]; + xi[1] = x[ii][1]; + xi[2] = x[ii][2]; + spi[0] = sp[ii][0]; + spi[1] = sp[ii][1]; + spi[2] = sp[ii][2]; + spi[3] = sp[ii][3]; + jlist = firstneigh[ii]; + jnum = numneigh[ii]; + //itype = type[i]; + + for (jj = 0; jj < jnum; jj++) { + j = jlist[jj]; + j &= NEIGHMASK; + jtype = type[j]; + + spj[0] = sp[j][0]; + spj[1] = sp[j][1]; + spj[2] = sp[j][2]; + spj[3] = sp[j][3]; + + fmi[0] = fmi[1] = fmi[2] = 0.0; + bij[0] = bij[1] = bij[2] = bij[3] = 0.0; + + rij[0] = x[j][0] - xi[0]; + rij[1] = x[j][1] - xi[1]; + rij[2] = x[j][2] - xi[2]; + rsq = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; + rinv = 1.0/sqrt(rsq); + eij[0] = rij[0]*rinv; + eij[1] = rij[1]*rinv; + eij[2] = rij[2]*rinv; + + local_cut2 = cut_spin_long[itype][jtype]*cut_spin_long[itype][jtype]; + + if (rsq < local_cut2) { + r2inv = 1.0/rsq; + + r = sqrt(rsq); + grij = g_ewald * r; + expm2 = exp(-grij*grij); + t = 1.0 / (1.0 + EWALD_P*grij); + erfc = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; + + bij[0] = erfc * rinv; + bij[1] = (bij[0] + pre1*expm2) * r2inv; + bij[2] = (3.0*bij[1] + pre2*expm2) * r2inv; + bij[3] = (5.0*bij[2] + pre3*expm2) * r2inv; + + compute_long(ii,j,eij,bij,fmi,spi,spj); + } + } + + // adding the kspace components to fm + + fmi[0] += fm_long[ii][0]; + fmi[1] += fm_long[ii][1]; + fmi[2] += fm_long[ii][2]; + } } /* ---------------------------------------------------------------------- diff --git a/src/SPIN/pair_spin_dipole_long.h b/src/SPIN/pair_spin_dipole_long.h index d3f9857716..6a05f56032 100644 --- a/src/SPIN/pair_spin_dipole_long.h +++ b/src/SPIN/pair_spin_dipole_long.h @@ -89,7 +89,7 @@ E: Pair dipole/long requires atom attributes q, mu, torque The atom style defined does not have these attributes. -E: Cannot (yet) use 'electron' units with dipoles +E: Can only use 'metal' units with spins This feature is not yet supported. diff --git a/src/SPIN/pair_spin_dipole_long_qsymp.cpp b/src/SPIN/pair_spin_dipole_long_qsymp.cpp deleted file mode 100644 index b77c3cb80a..0000000000 --- a/src/SPIN/pair_spin_dipole_long_qsymp.cpp +++ /dev/null @@ -1,606 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - www.cs.sandia.gov/~sjplimp/lammps.html - Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories - - 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 authors: Julien Tranchida (SNL) - Stan Moore (SNL) -------------------------------------------------------------------------- */ - -#include -#include -#include -#include - -#include "pair_spin_dipole_long_qsymp.h" -#include "atom.h" -#include "comm.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "fix_nve_spin.h" -#include "force.h" -#include "kspace.h" -#include "math_const.h" -#include "memory.h" -#include "modify.h" -#include "error.h" -#include "update.h" - - -using namespace LAMMPS_NS; -using namespace MathConst; - -#define EWALD_F 1.12837917 -#define EWALD_P 0.3275911 -#define A1 0.254829592 -#define A2 -0.284496736 -#define A3 1.421413741 -#define A4 -1.453152027 -#define A5 1.061405429 - -/* ---------------------------------------------------------------------- */ - -PairSpinDipoleLongQsymp::PairSpinDipoleLongQsymp(LAMMPS *lmp) : PairSpin(lmp), -lockfixnvespin(NULL) -{ - single_enable = 0; - ewaldflag = pppmflag = spinflag = 1; - respa_enable = 0; - no_virial_fdotr_compute = 1; - lattice_flag = 0; - - hbar = force->hplanck/MY_2PI; // eV/(rad.THz) - //mub = 5.78901e-5; // in eV/T - //mu_0 = 1.2566370614e-6; // in T.m/A - mub = 9.274e-4; // in A.Ang^2 - mu_0 = 785.15; // in eV/Ang/A^2 - mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV.Ang^3 - //mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV - mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV - mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz - -} - -/* ---------------------------------------------------------------------- - free all arrays -------------------------------------------------------------------------- */ - -PairSpinDipoleLongQsymp::~PairSpinDipoleLongQsymp() -{ - if (allocated) { - memory->destroy(setflag); - memory->destroy(cut_spin_long); - memory->destroy(cutsq); - } -} - -/* ---------------------------------------------------------------------- - global settings -------------------------------------------------------------------------- */ - -void PairSpinDipoleLongQsymp::settings(int narg, char **arg) -{ - if (narg < 1 || narg > 2) - error->all(FLERR,"Incorrect args in pair_style command"); - - if (strcmp(update->unit_style,"metal") != 0) - error->all(FLERR,"Spin simulations require metal unit style"); - - cut_spin_long_global = force->numeric(FLERR,arg[0]); - - // reset cutoffs that have been explicitly set - - if (allocated) { - int i,j; - for (i = 1; i <= atom->ntypes; i++) { - for (j = i+1; j <= atom->ntypes; j++) { - if (setflag[i][j]) { - cut_spin_long[i][j] = cut_spin_long_global; - } - } - } - } - -} - -/* ---------------------------------------------------------------------- - set coeffs for one or more type pairs -------------------------------------------------------------------------- */ - -void PairSpinDipoleLongQsymp::coeff(int narg, char **arg) -{ - if (!allocated) allocate(); - - // check if args correct - - if (strcmp(arg[2],"long") != 0) - error->all(FLERR,"Incorrect args in pair_style command"); - if (narg < 1 || narg > 4) - error->all(FLERR,"Incorrect args in pair_style command"); - - int ilo,ihi,jlo,jhi; - force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); - force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); - - double spin_long_cut_one = force->numeric(FLERR,arg[3]); - - int count = 0; - for (int i = ilo; i <= ihi; i++) { - for (int j = MAX(jlo,i); j <= jhi; j++) { - setflag[i][j] = 1; - cut_spin_long[i][j] = spin_long_cut_one; - count++; - } - } - - if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); -} - -/* ---------------------------------------------------------------------- - init specific to this pair style -------------------------------------------------------------------------- */ - -void PairSpinDipoleLongQsymp::init_style() -{ - if (!atom->sp_flag) - error->all(FLERR,"Pair spin requires atom/spin style"); - - // need a full neighbor list - - int irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->full = 1; - - // checking if nve/spin is a listed fix - - int ifix = 0; - while (ifix < modify->nfix) { - if (strcmp(modify->fix[ifix]->style,"nve/spin") == 0) break; - ifix++; - } - if (ifix == modify->nfix) - error->all(FLERR,"pair/spin style requires nve/spin"); - - // get the lattice_flag from nve/spin - - for (int i = 0; i < modify->nfix; i++) { - if (strcmp(modify->fix[i]->style,"nve/spin") == 0) { - lockfixnvespin = (FixNVESpin *) modify->fix[i]; - lattice_flag = lockfixnvespin->lattice_flag; - } - } - - // insure use of KSpace long-range solver, set g_ewald - - if (force->kspace == NULL) - error->all(FLERR,"Pair style requires a KSpace style"); - - g_ewald = force->kspace->g_ewald; - -} - -/* ---------------------------------------------------------------------- - init for one type pair i,j and corresponding j,i -------------------------------------------------------------------------- */ - -double PairSpinDipoleLongQsymp::init_one(int i, int j) -{ - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); - - cut_spin_long[j][i] = cut_spin_long[i][j]; - - return cut_spin_long_global; -} - -/* ---------------------------------------------------------------------- - extract the larger cutoff if "cut" or "cut_coul" -------------------------------------------------------------------------- */ - -void *PairSpinDipoleLongQsymp::extract(const char *str, int &dim) -{ - if (strcmp(str,"cut") == 0) { - dim = 0; - return (void *) &cut_spin_long_global; - } else if (strcmp(str,"cut_coul") == 0) { - dim = 0; - return (void *) &cut_spin_long_global; - } else if (strcmp(str,"ewald_order") == 0) { - ewald_order = 0; - ewald_order |= 1<<1; - ewald_order |= 1<<3; - dim = 0; - return (void *) &ewald_order; - } else if (strcmp(str,"ewald_mix") == 0) { - dim = 0; - return (void *) &mix_flag; - } - return NULL; -} - -/* ---------------------------------------------------------------------- */ - -void PairSpinDipoleLongQsymp::compute(int eflag, int vflag) -{ - int i,j,ii,jj,inum,jnum,itype,jtype; - double r,rinv,r2inv,rsq; - double grij,expm2,t,erfc,erf; - double sjdotr,gigj; - double bij[4]; - double cij[4]; - double evdwl,ecoul; - double xi[3],rij[3]; - double spi[4],spj[4],fi[3],fmi[3]; - double fmx_erf_s,fmy_erf_s,fmz_erf_s; - double local_cut2; - double pre1,pre2,pre3; - int *ilist,*jlist,*numneigh,**firstneigh; - - evdwl = ecoul = 0.0; - if (eflag || vflag) ev_setup(eflag,vflag); - else evflag = vflag_fdotr = 0; - - double **x = atom->x; - double **f = atom->f; - double **fm = atom->fm; - double **fm_long = atom->fm_long; - double **sp = atom->sp; - int *type = atom->type; - int nlocal = atom->nlocal; - int newton_pair = force->newton_pair; - - inum = list->inum; - ilist = list->ilist; - numneigh = list->numneigh; - firstneigh = list->firstneigh; - - pre1 = 2.0 * g_ewald / MY_PIS; - pre2 = 4.0 * pow(g_ewald,3.0) / MY_PIS; - pre3 = 8.0 * pow(g_ewald,5.0) / MY_PIS; - - // computation of the exchange interaction - // loop over atoms and their neighbors - - for (ii = 0; ii < inum; ii++) { - i = ilist[ii]; - xi[0] = x[i][0]; - xi[1] = x[i][1]; - xi[2] = x[i][2]; - jlist = firstneigh[i]; - jnum = numneigh[i]; - spi[0] = sp[i][0]; - spi[1] = sp[i][1]; - spi[2] = sp[i][2]; - spi[3] = sp[i][3]; - itype = type[i]; - - for (jj = 0; jj < jnum; jj++) { - j = jlist[jj]; - j &= NEIGHMASK; - jtype = type[j]; - - spj[0] = sp[j][0]; - spj[1] = sp[j][1]; - spj[2] = sp[j][2]; - spj[3] = sp[j][3]; - - evdwl = 0.0; - - fi[0] = fi[1] = fi[2] = 0.0; - fmi[0] = fmi[1] = fmi[2] = 0.0; - fmx_erf_s = fmy_erf_s = fmz_erf_s = 0.0; - bij[0] = bij[1] = bij[2] = bij[3] = 0.0; - cij[0] = cij[1] = cij[2] = cij[3] = 0.0; - - rij[0] = x[j][0] - xi[0]; - rij[1] = x[j][1] - xi[1]; - rij[2] = x[j][2] - xi[2]; - rsq = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; - - local_cut2 = cut_spin_long[itype][jtype]*cut_spin_long[itype][jtype]; - - if (rsq < local_cut2) { - r2inv = 1.0/rsq; - rinv = sqrt(r2inv); - - r = sqrt(rsq); - grij = g_ewald * r; - expm2 = exp(-grij*grij); - t = 1.0 / (1.0 + EWALD_P*grij); - erfc = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; - erf = 1.0 - t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2; - - // evaluating erfc for mech. force and energy calc. - - bij[0] = erfc * rinv; - bij[1] = (bij[0] + pre1*expm2) * r2inv; - bij[2] = (3.0*bij[1] + pre2*expm2) * r2inv; - bij[3] = (5.0*bij[2] + pre3*expm2) * r2inv; - - compute_long(i,j,rij,bij,fmi,spi,spj); - compute_long_mech(i,j,rij,bij,fmi,spi,spj); - - // evaluating erf comp. for fm_kspace correction - - cij[0] = erf * rinv; - cij[1] = (bij[0] + pre1*expm2) * r2inv; - cij[2] = (3.0*bij[1] + pre2*expm2) * r2inv; - //cij[3] = (5.0*bij[2] + pre3*expm2) * r2inv; - - gigj = spi[3] * spj[3]; - sjdotr = spj[0]*rij[0] + spj[1]*rij[1] + spj[2]*rij[2]; - - // evaluating short-range correction to the kspace part on [0,rc] - - fmx_erf_s += gigj * (cij[2] * sjdotr * rij[0] - cij[1] * spj[0]); - fmy_erf_s += gigj * (cij[2] * sjdotr * rij[1] - cij[1] * spj[1]); - fmz_erf_s += gigj * (cij[2] * sjdotr * rij[2] - cij[1] * spj[2]); - - } - - // force accumulation - - f[i][0] += fi[0] * mub2mu0; - f[i][1] += fi[1] * mub2mu0; - f[i][2] += fi[2] * mub2mu0; - fm[i][0] += fmi[0] * mub2mu0hbinv; - fm[i][1] += fmi[1] * mub2mu0hbinv; - fm[i][2] += fmi[2] * mub2mu0hbinv; - - // correction of the fm_kspace - - fm_long[i][0] -= (mub2mu0hbinv * fmx_erf_s); - fm_long[i][1] -= (mub2mu0hbinv * fmy_erf_s); - fm_long[i][2] -= (mub2mu0hbinv * fmz_erf_s); - - if (newton_pair || j < nlocal) { - f[j][0] -= fi[0]; - f[j][1] -= fi[1]; - f[j][2] -= fi[2]; - } - - if (eflag) { - if (rsq <= local_cut2) { - evdwl -= spi[0]*fmi[0] + spi[1]*fmi[1] + - spi[2]*fmi[2]; - evdwl *= hbar; - } - } else evdwl = 0.0; - - - if (evflag) ev_tally_xyz(i,j,nlocal,newton_pair, - evdwl,ecoul,fi[0],fi[1],fi[2],rij[0],rij[1],rij[2]); - - } - } -} - -/* ---------------------------------------------------------------------- - update the pair interaction fmi acting on the spin ii - adding 1/r (for r in [0,rc]) contribution to the pair - removing erf(r)/r (for r in [0,rc]) from the kspace force -------------------------------------------------------------------------- */ - -void PairSpinDipoleLongQsymp::compute_single_pair(int ii, double fmi[3]) -{ - int i,j,jj,jnum,itype,jtype; - double rinv,r2inv,r3inv,rsq; - double sjdotr,sjdotrr3inv; - double b1,b2,gigj; - double bij[4],xi[3],rij[3]; - double spi[4],spj[4]; - double local_cut2; - int *ilist,*jlist,*numneigh,**firstneigh; - double fmx_s,fmy_s,fmz_s; - - double **x = atom->x; - double **sp = atom->sp; - double **fm_long = atom->fm_long; - int *type = atom->type; - - ilist = list->ilist; - numneigh = list->numneigh; - firstneigh = list->firstneigh; - - // computation of the exchange interaction - // loop over neighbors of atom i - - i = ilist[ii]; - xi[0] = x[i][0]; - xi[1] = x[i][1]; - xi[2] = x[i][2]; - spi[3] = sp[i][3]; - jlist = firstneigh[i]; - jnum = numneigh[i]; - itype = type[i]; - - fmx_s = fmy_s = fmz_s = 0.0; - - for (jj = 0; jj < jnum; jj++) { - j = jlist[jj]; - j &= NEIGHMASK; - jtype = type[j]; - - spj[0] = sp[j][0]; - spj[1] = sp[j][1]; - spj[2] = sp[j][2]; - spj[3] = sp[j][3]; - - rij[0] = x[j][0] - xi[0]; - rij[1] = x[j][1] - xi[1]; - rij[2] = x[j][2] - xi[2]; - rsq = rij[0]*rij[0] + rij[1]*rij[1] + rij[2]*rij[2]; - - local_cut2 = cut_spin_long[itype][jtype]*cut_spin_long[itype][jtype]; - - // evaluating full dipolar interaction on [0,rc] - - if (rsq < local_cut2) { - r2inv = 1.0/rsq; - rinv = sqrt(r2inv); - r3inv = r2inv*rinv; - - gigj = spi[3] * spj[3]; - sjdotr = spj[0]*rij[0] + spj[1]*rij[1] + spj[2]*rij[2]; - sjdotrr3inv = 3.0 * sjdotr * r3inv; - - fmx_s += mub2mu0hbinv * gigj * (sjdotrr3inv * rij[0] - sp[i][0]/r3inv); - fmy_s += mub2mu0hbinv * gigj * (sjdotrr3inv * rij[1] - sp[i][1]/r3inv); - fmz_s += mub2mu0hbinv * gigj * (sjdotrr3inv * rij[2] - sp[i][2]/r3inv); - } - } - - // adding truncated kspace force and short-range full force - - fmi[0] += (fmx_s + fm_long[i][0]); - fmi[1] += (fmy_s + fm_long[i][1]); - fmi[2] += (fmz_s + fm_long[i][2]); -} - -/* ---------------------------------------------------------------------- - compute dipolar interaction between spins i and j -------------------------------------------------------------------------- */ - -void PairSpinDipoleLongQsymp::compute_long(int i, int j, double rij[3], - double bij[4], double fmi[3], double spi[4], double spj[4]) -{ - double sjdotr; - double b1,b2,gigj; - - gigj = spi[3] * spj[3]; - sjdotr = spj[0]*rij[0] + spj[1]*rij[1] + spj[2]*rij[2]; - - b1 = bij[1]; - b2 = bij[2]; - - fmi[0] += mub2mu0hbinv * gigj * (b2 * sjdotr *rij[0] - b1 * spj[0]); - fmi[1] += mub2mu0hbinv * gigj * (b2 * sjdotr *rij[1] - b1 * spj[1]); - fmi[2] += mub2mu0hbinv * gigj * (b2 * sjdotr *rij[2] - b1 * spj[2]); -} - -/* ---------------------------------------------------------------------- - compute the mechanical force due to the dipolar interaction between - atom i and atom j -------------------------------------------------------------------------- */ - -void PairSpinDipoleLongQsymp::compute_long_mech(int i, int j, double rij[3], - double bij[4], double fi[3], double spi[3], double spj[3]) -{ - double sdots,sidotr,sjdotr,b2,b3; - double g1,g2,g1b2_g2b3,gigj; - - gigj = spi[3] * spj[3]; - sdots = spi[0]*spj[0] + spi[1]*spj[1] + spi[2]*spj[2]; - sidotr = spi[0]*rij[0] + spi[1]*rij[1] + spi[2]*rij[2]; - sjdotr = spj[0]*rij[0] + spj[1]*rij[1] + spj[2]*rij[2]; - - b2 = bij[2]; - b3 = bij[3]; - g1 = sdots; - g2 = -sidotr*sjdotr; - g1b2_g2b3 = g1*b2 + g2*b3; - - fi[0] += gigj * (rij[0] * g1b2_g2b3 + - b2 * (sjdotr*spi[0] + sidotr*spj[0])); - fi[1] += gigj * (rij[1] * g1b2_g2b3 + - b2 * (sjdotr*spi[1] + sidotr*spj[1])); - fi[2] += gigj * (rij[2] * g1b2_g2b3 + - b2 * (sjdotr*spi[2] + sidotr*spj[2])); -} - - -/* ---------------------------------------------------------------------- - allocate all arrays -------------------------------------------------------------------------- */ - -void PairSpinDipoleLongQsymp::allocate() -{ - allocated = 1; - int n = atom->ntypes; - - memory->create(setflag,n+1,n+1,"pair:setflag"); - for (int i = 1; i <= n; i++) - for (int j = i; j <= n; j++) - setflag[i][j] = 0; - - memory->create(cut_spin_long,n+1,n+1,"pair/spin/long:cut_spin_long"); - memory->create(cutsq,n+1,n+1,"pair/spin/long:cutsq"); -} - -/* ---------------------------------------------------------------------- - proc 0 writes to restart file -------------------------------------------------------------------------- */ - -void PairSpinDipoleLongQsymp::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(&cut_spin_long[i][j],sizeof(int),1,fp); - } - } - } -} - -/* ---------------------------------------------------------------------- - proc 0 reads from restart file, bcasts -------------------------------------------------------------------------- */ - -void PairSpinDipoleLongQsymp::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) fread(&setflag[i][j],sizeof(int),1,fp); - MPI_Bcast(&setflag[i][j],1,MPI_INT,0,world); - if (setflag[i][j]) { - if (me == 0) { - fread(&cut_spin_long[i][j],sizeof(int),1,fp); - } - MPI_Bcast(&cut_spin_long[i][j],1,MPI_INT,0,world); - } - } - } -} - -/* ---------------------------------------------------------------------- - proc 0 writes to restart file -------------------------------------------------------------------------- */ - -void PairSpinDipoleLongQsymp::write_restart_settings(FILE *fp) -{ - fwrite(&cut_spin_long_global,sizeof(double),1,fp); - fwrite(&mix_flag,sizeof(int),1,fp); -} - -/* ---------------------------------------------------------------------- - proc 0 reads from restart file, bcasts -------------------------------------------------------------------------- */ - -void PairSpinDipoleLongQsymp::read_restart_settings(FILE *fp) -{ - if (comm->me == 0) { - fread(&cut_spin_long_global,sizeof(double),1,fp); - fread(&mix_flag,sizeof(int),1,fp); - } - MPI_Bcast(&cut_spin_long_global,1,MPI_DOUBLE,0,world); - MPI_Bcast(&mix_flag,1,MPI_INT,0,world); -} diff --git a/src/SPIN/pair_spin_dipole_long_qsymp.h b/src/SPIN/pair_spin_dipole_long_qsymp.h deleted file mode 100644 index fb5915daa2..0000000000 --- a/src/SPIN/pair_spin_dipole_long_qsymp.h +++ /dev/null @@ -1,100 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - www.cs.sandia.gov/~sjplimp/lammps.html - Steve Plimpton, sjplimp@sandia.gov, Sandia National Laboratories - - 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 - -PairStyle(spin/dipole/long/qsymp,PairSpinDipoleLongQsymp) - -#else - -#ifndef LMP_PAIR_SPIN_DIPOLE_LONG_QSYMP_H -#define LMP_PAIR_SPIN_DIPOLE_LONG_QSYMP_H - -#include "pair_spin.h" - -namespace LAMMPS_NS { - -class PairSpinDipoleLongQsymp : public PairSpin { - public: - double cut_coul; - double **sigma; - - PairSpinDipoleLongQsymp(class LAMMPS *); - virtual ~PairSpinDipoleLongQsymp(); - void settings(int, char **); - void coeff(int, char **); - double init_one(int, int); - void init_style(); - void *extract(const char *, int &); - - void compute(int, int); - void compute_single_pair(int, double *); - - void compute_long(int, int, double *, double *, double *, - double *, double *); - void compute_long_mech(int, int, double *, double *, double *, - double *, double *); - - void write_restart(FILE *); - void read_restart(FILE *); - void write_restart_settings(FILE *); - void read_restart_settings(FILE *); - - double cut_spin_long_global; // global long cutoff distance - - protected: - double hbar; // reduced Planck's constant - double mub; // Bohr's magneton - double mu_0; // vacuum permeability - double mub2mu0; // prefactor for mech force - double mub2mu0hbinv; // prefactor for mag force - - double **cut_spin_long; // cutoff distance long - - double g_ewald; - int ewald_order; - - int lattice_flag; // flag for mech force computation - class FixNVESpin *lockfixnvespin; // ptr for setups - - void allocate(); -}; - -} - -#endif -#endif - -/* ERROR/WARNING messages: - -E: Incorrect args in pair_style command - -Self-explanatory. - -E: Incorrect args for pair coefficients - -Self-explanatory. Check the input script or data file. - -E: Pair dipole/long requires atom attributes q, mu, torque - -The atom style defined does not have these attributes. - -E: Cannot (yet) use 'electron' units with dipoles - -This feature is not yet supported. - -E: Pair style requires a KSpace style - -No kspace style is defined. - -*/ diff --git a/src/SPIN/pair_spin_exchange.cpp b/src/SPIN/pair_spin_exchange.cpp index aa9e94be16..93b6d9501e 100644 --- a/src/SPIN/pair_spin_exchange.cpp +++ b/src/SPIN/pair_spin_exchange.cpp @@ -75,7 +75,7 @@ PairSpinExchange::~PairSpinExchange() void PairSpinExchange::settings(int narg, char **arg) { - if (narg < 1 || narg > 2) + if (narg < 1 || narg > 7) error->all(FLERR,"Incorrect number of args in pair_style pair/spin command"); if (strcmp(update->unit_style,"metal") != 0) From 35bb2ac2a30095e9a3e621cf21fb898ed9742535 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 18 May 2019 09:25:20 -0400 Subject: [PATCH 167/311] fix typo --- doc/src/compute_coord_atom.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/compute_coord_atom.txt b/doc/src/compute_coord_atom.txt index 01901ff77b..af0be4be56 100644 --- a/doc/src/compute_coord_atom.txt +++ b/doc/src/compute_coord_atom.txt @@ -17,7 +17,7 @@ coord/atom = style name of this compute command :l cstyle = {cutoff} or {orientorder} :l {cutoff} args = cutoff \[group group2-ID\] typeN cutoff = distance within which to count coordination neighbors (distance units) - group {group2-ID} = select group-ID to restrict which atoms to cound for coordination number (optional) + group {group2-ID} = select group-ID to restrict which atoms to consider for coordination number (optional) typeN = atom type for Nth coordination count (see asterisk form below) {orientorder} args = orientorderID threshold orientorderID = ID of an orientorder/atom compute From 601746b565a447508c91d24eb4ef2ad9488b9f32 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 18 May 2019 13:09:25 -0400 Subject: [PATCH 168/311] restore lost changes to fix gpu from upstream --- src/GPU/fix_gpu.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/GPU/fix_gpu.cpp b/src/GPU/fix_gpu.cpp index 7be87939fe..f0558e6a02 100644 --- a/src/GPU/fix_gpu.cpp +++ b/src/GPU/fix_gpu.cpp @@ -30,6 +30,7 @@ #include "neighbor.h" #include "citeme.h" #include "error.h" +#include "utils.h" using namespace LAMMPS_NS; using namespace FixConst; @@ -231,21 +232,16 @@ void FixGPU::init() // make sure fdotr virial is not accumulated multiple times - if (force->pair_match("hybrid",1) != NULL) { + if (force->pair_match("^hybrid",0) != NULL) { PairHybrid *hybrid = (PairHybrid *) force->pair; for (int i = 0; i < hybrid->nstyles; i++) - if (strstr(hybrid->keywords[i],"/gpu")==NULL) - force->pair->no_virial_fdotr_compute = 1; - } else if (force->pair_match("hybrid/overlay",1) != NULL) { - PairHybridOverlay *hybrid = (PairHybridOverlay *) force->pair; - for (int i = 0; i < hybrid->nstyles; i++) - if (strstr(hybrid->keywords[i],"/gpu")==NULL) + if (!utils::strmatch(hybrid->keywords[i],"/gpu$")) force->pair->no_virial_fdotr_compute = 1; } // rRESPA support - if (strstr(update->integrate_style,"respa")) + if (utils::strmatch(update->integrate_style,"^respa")) _nlevels_respa = ((Respa *) update->integrate)->nlevels; } @@ -276,7 +272,7 @@ void FixGPU::min_setup(int vflag) /* ---------------------------------------------------------------------- */ -void FixGPU::post_force(int vflag) +void FixGPU::post_force(int /* vflag */) { if (!force->pair) return; @@ -308,7 +304,7 @@ void FixGPU::min_post_force(int vflag) /* ---------------------------------------------------------------------- */ -void FixGPU::post_force_respa(int vflag, int ilevel, int iloop) +void FixGPU::post_force_respa(int vflag, int /* ilevel */, int /* iloop */) { post_force(vflag); } From dc8b43a95fe04a5077bb513399422000b9255b9e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 18 May 2019 15:16:10 -0400 Subject: [PATCH 169/311] update docs and sources and for changes in this branch --- doc/src/Errors_messages.txt | 8 -------- doc/src/Speed_compare.txt | 2 +- doc/src/package.txt | 10 ++++------ src/GPU/README | 5 ++--- src/GPU/fix_gpu.h | 8 -------- 5 files changed, 7 insertions(+), 26 deletions(-) diff --git a/doc/src/Errors_messages.txt b/doc/src/Errors_messages.txt index fb5003e602..59371fcb05 100644 --- a/doc/src/Errors_messages.txt +++ b/doc/src/Errors_messages.txt @@ -2146,10 +2146,6 @@ Self-explanatory. :dd This is a current restriction in LAMMPS. :dd -{Cannot use pair hybrid with GPU neighbor list builds} :dt - -Neighbor list builds must be done on the CPU for this pair style. :dd - {Cannot use pair tail corrections with 2d simulations} :dt The correction factors are only currently defined for 3d systems. :dd @@ -5467,10 +5463,6 @@ Self-explanatory. :dd For this pair style, you cannot run part of the force calculation on the host. See the package command. :dd -{GPU split param must be positive for hybrid pair styles} :dt - -See the package gpu command. :dd - {GPUs are requested but Kokkos has not been compiled for CUDA} :dt Re-compile Kokkos with CUDA support to use GPUs. :dd diff --git a/doc/src/Speed_compare.txt b/doc/src/Speed_compare.txt index c93407515e..c95af3cb22 100644 --- a/doc/src/Speed_compare.txt +++ b/doc/src/Speed_compare.txt @@ -104,7 +104,7 @@ code (with a performance penalty due to having data transfers between host and GPU). :ulb,l The GPU package requires neighbor lists to be built on the CPU when using -exclusion lists, hybrid pair styles, or a triclinic simulation box. :l +exclusion lists, or a triclinic simulation box. :l The GPU package can be compiled for CUDA or OpenCL and thus supports both, Nvidia and AMD GPUs well. On Nvidia hardware, using CUDA is typically diff --git a/doc/src/package.txt b/doc/src/package.txt index c226d7942f..c3475266df 100644 --- a/doc/src/package.txt +++ b/doc/src/package.txt @@ -173,12 +173,10 @@ computation will be built. If {neigh} is {yes}, which is the default, neighbor list building is performed on the GPU. If {neigh} is {no}, neighbor list building is performed on the CPU. GPU neighbor list building currently cannot be used with a triclinic box. GPU neighbor -list calculation currently cannot be used with -"hybrid"_pair_hybrid.html pair styles. GPU neighbor lists are not -compatible with commands that are not GPU-enabled. When a non-GPU -enabled command requires a neighbor list, it will also be built on the -CPU. In these cases, it will typically be more efficient to only use -CPU neighbor list builds. +lists are not compatible with commands that are not GPU-enabled. When +a non-GPU enabled command requires a neighbor list, it will also be +built on the CPU. In these cases, it will typically be more efficient +to only use CPU neighbor list builds. The {newton} keyword sets the Newton flags for pairwise (not bonded) interactions to {off} or {on}, the same as the "newton"_newton.html diff --git a/src/GPU/README b/src/GPU/README index 792fc1a8b9..bba532beaf 100644 --- a/src/GPU/README +++ b/src/GPU/README @@ -1,9 +1,8 @@ This package implements GPU optimizations of various LAMMPS styles. -Section 5.3.1 on the manual gives details of what hardware and Cuda +Section 3.7 of the manual gives details of what hardware and Cuda software is required on your system, and full details on how to build -and use this package. See the KOKKOS package, which also has -GPU-enabled styles. +and use this package. The KOKKOS package also has GPU-enabled styles. This package uses an external library provided in lib/gpu which must be compiled before making LAMMPS. See the lib/gpu/README file and the diff --git a/src/GPU/fix_gpu.h b/src/GPU/fix_gpu.h index c190a91061..ba0b4c83cb 100644 --- a/src/GPU/fix_gpu.h +++ b/src/GPU/fix_gpu.h @@ -65,14 +65,6 @@ E: GPU package does not (yet) work with atom_style template Self-explanatory. -E: Cannot use pair hybrid with GPU neighbor list builds - -Neighbor list builds must be done on the CPU for this pair style. - -E: GPU split param must be positive for hybrid pair styles - -See the package gpu command. - E: Cannot use package gpu neigh yes with triclinic box This is a current restriction in LAMMPS. From e3823a521c6b5d260399b4fd1e93478a9b96190f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 18 May 2019 15:36:13 -0400 Subject: [PATCH 170/311] remove leftover references to removed MEAM package --- doc/src/Build_extras.txt | 44 --------------------------------------- doc/src/Build_package.txt | 1 - 2 files changed, 45 deletions(-) diff --git a/doc/src/Build_extras.txt b/doc/src/Build_extras.txt index 3b9da2db39..3fc23c5618 100644 --- a/doc/src/Build_extras.txt +++ b/doc/src/Build_extras.txt @@ -30,7 +30,6 @@ This is the list of packages that may require additional steps. "KIM"_#kim, "KOKKOS"_#kokkos, "LATTE"_#latte, -"MEAM"_#meam, "MESSAGE"_#message, "MSCG"_#mscg, "OPT"_#opt, @@ -351,49 +350,6 @@ the compiler you use on your system to build LATTE. :line -MEAM package :h4,link(meam) - -NOTE: the use of the MEAM package is discouraged, as it has been -superseded by the USER-MEAMC package, which is a direct translation of -the Fortran code in the MEAM library to C++. The code in USER-MEAMC -should be functionally equivalent to the MEAM package, fully supports -use of "pair_style hybrid"_pair_hybrid.html (the MEAM package does -not), and has optimizations that make it significantly faster than the -MEAM package. - -[CMake build]: - -No additional settings are needed besides "-D PKG_MEAM=yes". - -[Traditional make]: - -Before building LAMMPS, you must build the MEAM library in lib/meam. -You can build the MEAM library manually if you prefer; follow the -instructions in lib/meam/README. You can also do it in one step from -the lammps/src dir, using a command like these, which simply invoke -the lib/meam/Install.py script with the specified args: - -make lib-meam # print help message -make lib-meam args="-m mpi" # build with default Fortran compiler compatible with your MPI library -make lib-meam args="-m serial" # build with compiler compatible with "make serial" (GNU Fortran) -make lib-meam args="-m ifort" # build with Intel Fortran compiler using Makefile.ifort :pre - -NOTE: You should test building the MEAM library with both the Intel -and GNU compilers to see if a simulation runs faster with one versus -the other on your system. - -The build should produce two files: lib/meam/libmeam.a and -lib/meam/Makefile.lammps. The latter is copied from an existing -Makefile.lammps.* and has settings needed to link C++ (LAMMPS) with -Fortran (MEAM library). Typically the two compilers used for LAMMPS -and the MEAM library need to be consistent (e.g. both Intel or both -GNU compilers). If necessary, you can edit/create a new -lib/meam/Makefile.machine file for your system, which should define an -EXTRAMAKE variable to specify a corresponding Makefile.lammps.machine -file. - -:line - MESSAGE package :h4,link(message) This package can optionally include support for messaging via sockets, diff --git a/doc/src/Build_package.txt b/doc/src/Build_package.txt index 401f53f638..869175e160 100644 --- a/doc/src/Build_package.txt +++ b/doc/src/Build_package.txt @@ -41,7 +41,6 @@ packages: "KIM"_Build_extras.html#kim, "KOKKOS"_Build_extras.html#kokkos, "LATTE"_Build_extras.html#latte, -"MEAM"_Build_extras.html#meam, "MESSAGE"_Build_extras.html#message, "MSCG"_Build_extras.html#mscg, "OPT"_Build_extras.html#opt, From 50082c287d181b6b34165a9a9542ef80e8a90471 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sat, 18 May 2019 15:41:38 -0400 Subject: [PATCH 171/311] sphinxcontrib-spelling has been updated for Sphinx 2.x. remove enforcing to use old version --- doc/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/Makefile b/doc/Makefile index fa60aa3698..5c679440b8 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -211,7 +211,7 @@ $(VENV): @( \ $(VIRTUALENV) -p $(PYTHON) $(VENV); \ . $(VENV)/bin/activate; \ - pip install Sphinx==1.7.6; \ + pip install Sphinx; \ deactivate;\ ) From 10419345682dfdf224c3cf8833a2ae3a346b7f9f Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Mon, 20 May 2019 10:01:40 -0600 Subject: [PATCH 172/311] Fix bug in pair_eam_alloy_kokkos and pair_eam_fs_kokkos --- src/KOKKOS/pair_eam_alloy_kokkos.cpp | 4 ++-- src/KOKKOS/pair_eam_fs_kokkos.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/KOKKOS/pair_eam_alloy_kokkos.cpp b/src/KOKKOS/pair_eam_alloy_kokkos.cpp index b580f00ed0..b5442c0d29 100644 --- a/src/KOKKOS/pair_eam_alloy_kokkos.cpp +++ b/src/KOKKOS/pair_eam_alloy_kokkos.cpp @@ -569,13 +569,13 @@ void PairEAMAlloyKokkos::operator()(TagPairEAMAlloyKernelA::operator()(TagPairEAMFSKernelA Date: Mon, 20 May 2019 14:15:04 -0400 Subject: [PATCH 173/311] avoid segfault and print more meaningful error message with empty lines in coeff sections --- doc/src/Errors_messages.txt | 20 ++++++++++---------- src/read_data.cpp | 20 ++++++++++++++------ src/read_data.h | 20 ++++++++++---------- 3 files changed, 34 insertions(+), 26 deletions(-) diff --git a/doc/src/Errors_messages.txt b/doc/src/Errors_messages.txt index fb5003e602..4f3bbe8c24 100644 --- a/doc/src/Errors_messages.txt +++ b/doc/src/Errors_messages.txt @@ -9990,25 +9990,25 @@ quote. :dd Self-explanatory. :dd -{Unexpected end of AngleCoeffs section} :dt +{Unexpected empty line in AngleCoeffs section} :dt -Read a blank line. :dd +Read a blank line where there should be coefficient data. :dd -{Unexpected end of BondCoeffs section} :dt +{Unexpected empty line in BondCoeffs section} :dt -Read a blank line. :dd +Read a blank line where there should be coefficient data. :dd -{Unexpected end of DihedralCoeffs section} :dt +{Unexpected empty line in DihedralCoeffs section} :dt -Read a blank line. :dd +Read a blank line where there should be coefficient data. :dd -{Unexpected end of ImproperCoeffs section} :dt +{Unexpected empty line in ImproperCoeffs section} :dt -Read a blank line. :dd +Read a blank line where there should be coefficient data. :dd -{Unexpected end of PairCoeffs section} :dt +{Unexpected empty line in PairCoeffs section} :dt -Read a blank line. :dd +Read a blank line where there should be coefficient data. :dd {Unexpected end of custom file} :dt diff --git a/src/read_data.cpp b/src/read_data.cpp index e2efbaaefa..e70a526c38 100644 --- a/src/read_data.cpp +++ b/src/read_data.cpp @@ -1768,7 +1768,8 @@ void ReadData::paircoeffs() next = strchr(buf,'\n'); *next = '\0'; parse_coeffs(buf,NULL,1,2,toffset); - if (narg == 0) error->all(FLERR,"Unexpected end of PairCoeffs section"); + if (narg == 0) + error->all(FLERR,"Unexpected empty line in PairCoeffs section"); force->pair->coeff(narg,arg); buf = next + 1; } @@ -1794,7 +1795,8 @@ void ReadData::pairIJcoeffs() next = strchr(buf,'\n'); *next = '\0'; parse_coeffs(buf,NULL,0,2,toffset); - if (narg == 0) error->all(FLERR,"Unexpected end of PairCoeffs section"); + if (narg == 0) + error->all(FLERR,"Unexpected empty line in PairCoeffs section"); force->pair->coeff(narg,arg); buf = next + 1; } @@ -1818,7 +1820,8 @@ void ReadData::bondcoeffs() next = strchr(buf,'\n'); *next = '\0'; parse_coeffs(buf,NULL,0,1,boffset); - if (narg == 0) error->all(FLERR,"Unexpected end of BondCoeffs section"); + if (narg == 0) + error->all(FLERR,"Unexpected empty line in BondCoeffs section"); force->bond->coeff(narg,arg); buf = next + 1; } @@ -1844,7 +1847,7 @@ void ReadData::anglecoeffs(int which) if (which == 0) parse_coeffs(buf,NULL,0,1,aoffset); else if (which == 1) parse_coeffs(buf,"bb",0,1,aoffset); else if (which == 2) parse_coeffs(buf,"ba",0,1,aoffset); - if (narg == 0) error->all(FLERR,"Unexpected end of AngleCoeffs section"); + if (narg == 0) error->all(FLERR,"Unexpected empty line in AngleCoeffs section"); force->angle->coeff(narg,arg); buf = next + 1; } @@ -1873,7 +1876,8 @@ void ReadData::dihedralcoeffs(int which) else if (which == 3) parse_coeffs(buf,"at",0,1,doffset); else if (which == 4) parse_coeffs(buf,"aat",0,1,doffset); else if (which == 5) parse_coeffs(buf,"bb13",0,1,doffset); - if (narg == 0) error->all(FLERR,"Unexpected end of DihedralCoeffs section"); + if (narg == 0) + error->all(FLERR,"Unexpected empty line in DihedralCoeffs section"); force->dihedral->coeff(narg,arg); buf = next + 1; } @@ -1898,7 +1902,7 @@ void ReadData::impropercoeffs(int which) *next = '\0'; if (which == 0) parse_coeffs(buf,NULL,0,1,ioffset); else if (which == 1) parse_coeffs(buf,"aa",0,1,ioffset); - if (narg == 0) error->all(FLERR,"Unexpected end of ImproperCoeffs section"); + if (narg == 0) error->all(FLERR,"Unexpected empty line in ImproperCoeffs section"); force->improper->coeff(narg,arg); buf = next + 1; } @@ -2092,6 +2096,10 @@ void ReadData::parse_coeffs(char *line, const char *addstr, word = strtok(NULL," \t\n\r\f"); } + // to avoid segfaults on empty lines + + if (narg == 0) return; + if (noffset) { int value = force->inumeric(FLERR,arg[0]); sprintf(argoffset1,"%d",value+offset); diff --git a/src/read_data.h b/src/read_data.h index 7d011c710a..26ab6ff381 100644 --- a/src/read_data.h +++ b/src/read_data.h @@ -533,25 +533,25 @@ E: Too many lines in one body in data file - boost MAXBODY MAXBODY is a setting at the top of the src/read_data.cpp file. Set it larger and re-compile the code. -E: Unexpected end of PairCoeffs section +E: Unexpected empty line in PairCoeffs section -Read a blank line. +Read a blank line where there should be coefficient data. -E: Unexpected end of BondCoeffs section +E: Unexpected empty line in BondCoeffs section -Read a blank line. +Read a blank line where there should be coefficient data. -E: Unexpected end of AngleCoeffs section +E: Unexpected empty line in AngleCoeffs section -Read a blank line. +Read a blank line where there should be coefficient data. -E: Unexpected end of DihedralCoeffs section +E: Unexpected empty line in DihedralCoeffs section -Read a blank line. +Read a blank line where there should be coefficient data. -E: Unexpected end of ImproperCoeffs section +E: Unexpected empty line in ImproperCoeffs section -Read a blank line. +Read a blank line where there should be coefficient data. E: Cannot open gzipped file From 0349e9fee9edb4a3261c0153b5855dda31637ba9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 20 May 2019 15:08:33 -0400 Subject: [PATCH 174/311] update/correct list of example folders --- doc/src/Examples.txt | 10 +++++++++- examples/HEAT/README | 2 +- examples/README | 27 +++++++++++++-------------- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/doc/src/Examples.txt b/doc/src/Examples.txt index daf9966155..fcf01de383 100644 --- a/doc/src/Examples.txt +++ b/doc/src/Examples.txt @@ -52,13 +52,14 @@ Lowercase directories :h4 accelerate: run with various acceleration options (OpenMP, GPU, Phi) airebo: polyethylene with AIREBO potential +atm: Axilrod-Teller-Muto potential example balance: dynamic load balancing, 2d system body: body particles, 2d system cmap: CMAP 5-body contributions to CHARMM force field colloid: big colloid particles in a small particle solvent, 2d system comb: models using the COMB potential -coreshell: core/shell model using CORESHELL package controller: use of fix controller as a thermostat +coreshell: core/shell model using CORESHELL package crack: crack propagation in a 2d solid deposit: deposit atoms and molecules on a surface dipole: point dipolar particles, 2d system @@ -70,10 +71,13 @@ friction: frictional contact of spherical asperities between 2d surfaces gcmc: Grand Canonical Monte Carlo (GCMC) via the fix gcmc command granregion: use of fix wall/region/gran as boundary on granular particles hugoniostat: Hugoniostat shock dynamics +hyper: global and local hyperdynamics of diffusion on Pt surface indent: spherical indenter into a 2d solid kim: use of potentials in Knowledge Base for Interatomic Models (KIM) +latte: examples for using fix latte for DFTB via the LATTE library meam: MEAM test for SiC and shear (same as shear examples) melt: rapid melt of 3d LJ system +message: demos for LAMMPS client/server coupling with the MESSAGE package micelle: self-assembly of small lipid-like molecules into 2d bilayers min: energy minimization of 2d LJ melt mscg: parameterize a multi-scale coarse-graining (MSCG) model @@ -88,6 +92,7 @@ pour: pouring of granular particles into a 3d box, then chute flow prd: parallel replica dynamics of vacancy diffusion in bulk Si python: using embedded Python in a LAMMPS input script qeq: use of the QEQ package for charge equilibration +rdf-adf: computing radial and angle distribution functions for water reax: RDX and TATB models using the ReaxFF rigid: rigid bodies modeled as independent or coupled shear: sideways shear applied to 2d solid, with and without a void @@ -95,6 +100,7 @@ snap: NVE dynamics for BCC tantalum crystal using SNAP potential srd: stochastic rotation dynamics (SRD) particles as solvent streitz: use of Streitz/Mintmire potential with charge equilibration tad: temperature-accelerated dynamics of vacancy diffusion in bulk Si +threebody: regression test input for a variety of manybody potentials vashishta: use of the Vashishta potential voronoi: Voronoi tesselation via compute voronoi/atom command :tb(s=:) @@ -131,8 +137,10 @@ COUPLE: examples of how to use LAMMPS as a library DIFFUSE: compute diffusion coefficients via several methods ELASTIC: compute elastic constants at zero temperature ELASTIC_T: compute elastic constants at finite temperature +HEAT: compute thermal conductivity for LJ and water via fix ehex KAPPA: compute thermal conductivity via several methods MC: using LAMMPS in a Monte Carlo mode to relax the energy of a system +SPIN: examples for features of the SPIN package USER: examples for USER packages and USER-contributed commands VISCOSITY: compute viscosity via several methods :tb(s=:) diff --git a/examples/HEAT/README b/examples/HEAT/README index b827838091..89ad04398f 100644 --- a/examples/HEAT/README +++ b/examples/HEAT/README @@ -1,6 +1,6 @@ This directory contains 4 input scripts for carrying out NEMD simulations of thermal gradients for a Lennard-Jones fluid and SPC/E -water using the HEX/a (fix heat) and eHEX/a (fix ehex) algorithms. +water using the HEX/a (fix ehex w/ hex option) and eHEX/a (fix ehex) algorithms. All input scripts are part of the supplementary (open access) material supporting the publication of Wirnsberger et al. [J. Chem. Phys. 143, diff --git a/examples/README b/examples/README index e03dacec82..dbfdb3363b 100644 --- a/examples/README +++ b/examples/README @@ -64,37 +64,37 @@ balance: dynamic load balancing, 2d system body: body particles, 2d system cmap: CMAP 5-body contributions to CHARMM force field colloid: big colloid particles in a small particle solvent, 2d system -comb: models using the COMB potential +comb: models using the COMB potential coreshell: adiabatic core/shell model controller: use of fix controller as a thermostat -crack: crack propagation in a 2d solid +crack: crack propagation in a 2d solid deposit: deposition of atoms and molecules onto a 3d substrate dipole: point dipolar particles, 2d system dreiding: methanol via Dreiding FF eim: NaCl using the EIM potential ellipse: ellipsoidal particles in spherical solvent, 2d system -flow: Couette and Poiseuille flow in a 2d channel +flow: Couette and Poiseuille flow in a 2d channel friction: frictional contact of spherical asperities between 2d surfaces gcmc: Grand Canonical Monte Carlo (GCMC) via the fix gcmc command granregion: use of fix wall/region/gran as boundary on granular particles hugoniostat: Hugoniostat shock dynamics hyper: global and local hyperdynamics of diffusion on Pt surface -indent: spherical indenter into a 2d solid +indent: spherical indenter into a 2d solid kim: use of potentials in Knowledge Base for Interatomic Models (KIM) latte: use of LATTE density-functional tight-binding quantum code -meam: MEAM test for SiC and shear (same as shear examples) -melt: rapid melt of 3d LJ system +meam: MEAM test for SiC and shear (same as shear examples) +melt: rapid melt of 3d LJ system message: client/server coupling of 2 codes micelle: self-assembly of small lipid-like molecules into 2d bilayers -min: energy minimization of 2d LJ melt +min: energy minimization of 2d LJ melt mscg: parameterize a multi-scale coarse-graining (MSCG) model -msst: MSST shock dynamics +msst: MSST shock dynamics nb3b: use of nonbonded 3-body harmonic pair style -neb: nudged elastic band (NEB) calculation for barrier finding -nemd: non-equilibrium MD of 2d sheared system +neb: nudged elastic band (NEB) calculation for barrier finding +nemd: non-equilibrium MD of 2d sheared system obstacle: flow around two voids in a 2d channel peptide: dynamics of a small solvated peptide chain (5-mer) -peri: Peridynamic model of cylinder impacted by indenter +peri: Peridynamic model of cylinder impacted by indenter pour: pouring of granular particles into a 3d box, then chute flow prd: parallel replica dynamics of vacancy diffusion in bulk Si python: use of PYTHON package to invoke Python code from input script @@ -107,6 +107,7 @@ srd: stochastic rotation dynamics (SRD) particles as solvent snap: NVE dynamics for BCC tantalum crystal using SNAP potential streitz: Streitz-Mintmire potential for Al2O3 tad: temperature-accelerated dynamics of vacancy diffusion in bulk Si +threebody: regression test input for a variety of manybody potentials vashishta: models using the Vashishta potential voronoi: Voronoi tesselation via compute voronoi/atom command @@ -117,9 +118,7 @@ cp ../../src/lmp_mpi . # copy LAMMPS executable to this dir lmp_mpi -in in.indent # run the problem Running the simulation produces the files {dump.indent} and -{log.lammps}. You can visualize the dump file as follows: - -../../tools/xmovie/xmovie -scale dump.indent +{log.lammps}. If you uncomment the dump image line(s) in the input script a series of JPG images will be produced by the run. These can be viewed From d0c6484fb0daf67ecc8c193779a1e77e00363e8a Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 20 May 2019 15:15:51 -0400 Subject: [PATCH 175/311] add false positive --- doc/utils/sphinx-config/false_positives.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 2d0575ca70..867d3028c6 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -2708,6 +2708,7 @@ Thiaville Thibaudeau Thijsse Thirumalai +threebody thrid ThunderX thylakoid From e90eed91209d4daf8e929b03d36aa6b3670810d8 Mon Sep 17 00:00:00 2001 From: julient31 Date: Mon, 20 May 2019 21:48:05 -0600 Subject: [PATCH 176/311] Commit JT 052019 - deleted old doc - renamed new doc files --- .../SPIN/dipole_spin/Fe_Mishin2006.eam.alloy | 15010 +--------------- ...n.iron_ewald => in.spin.iron_dipole_ewald} | 0 ...pin.iron_pppm => in.spin.iron_dipole_pppm} | 0 .../SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy | 1 - examples/SPIN/pppm_spin/data.2 | 13 - .../exchange_fit_hcp_co/exchange_fit.py | 32 - .../exchange_fit_hcp_co/exchange_hcp_co.dat | 9 - examples/SPIN/pppm_spin/in.dipole.pppm_dipole | 56 - examples/SPIN/pppm_spin/in.spin.2 | 75 - examples/SPIN/pppm_spin/in.spin.cut_comp | 52 - examples/SPIN/pppm_spin/in.spin.ewald_spin | 68 - examples/SPIN/pppm_spin/in.spin.pppm_spin | 66 - .../SPIN/pppm_spin/in.spin.spin_dipolar_cut | 64 - 13 files changed, 1 insertion(+), 15445 deletions(-) mode change 100644 => 120000 examples/SPIN/dipole_spin/Fe_Mishin2006.eam.alloy rename examples/SPIN/dipole_spin/{in.spin.iron_ewald => in.spin.iron_dipole_ewald} (100%) rename examples/SPIN/dipole_spin/{in.spin.iron_pppm => in.spin.iron_dipole_pppm} (100%) delete mode 120000 examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy delete mode 100644 examples/SPIN/pppm_spin/data.2 delete mode 100644 examples/SPIN/pppm_spin/exchange_fit_hcp_co/exchange_fit.py delete mode 100644 examples/SPIN/pppm_spin/exchange_fit_hcp_co/exchange_hcp_co.dat delete mode 100644 examples/SPIN/pppm_spin/in.dipole.pppm_dipole delete mode 100644 examples/SPIN/pppm_spin/in.spin.2 delete mode 100644 examples/SPIN/pppm_spin/in.spin.cut_comp delete mode 100644 examples/SPIN/pppm_spin/in.spin.ewald_spin delete mode 100644 examples/SPIN/pppm_spin/in.spin.pppm_spin delete mode 100644 examples/SPIN/pppm_spin/in.spin.spin_dipolar_cut diff --git a/examples/SPIN/dipole_spin/Fe_Mishin2006.eam.alloy b/examples/SPIN/dipole_spin/Fe_Mishin2006.eam.alloy deleted file mode 100644 index 69231bb7ee..0000000000 --- a/examples/SPIN/dipole_spin/Fe_Mishin2006.eam.alloy +++ /dev/null @@ -1,15009 +0,0 @@ -comment 1 -comment 2 -Converted by Ganga P Purja Pun using C++ code on Mon Nov 3 10:48:17 2014 -1 Fe -5001 2.400000000000000e-03 5001 1.134673400048920e-03 5.673367000244601e+00 -26 5.584700000000000e+01 2.855300000000000e+00 BCC - 0.000000000000000e+00 - -2.338738741480766e-02 - -4.628214468925276e-02 - -6.912258036387915e-02 - -9.175603963501618e-02 - -1.141497214000000e-01 - -1.363388222824136e-01 - -1.583226111166723e-01 - -1.800965752913192e-01 - -2.016645989796093e-01 - -2.230289901000000e-01 - -2.441907391820846e-01 - -2.651515164004249e-01 - -2.859130554412839e-01 - -3.064769176965011e-01 - -3.268446844000000e-01 - -3.470179531091855e-01 - -3.669982968636285e-01 - -3.867872784635140e-01 - -4.063864535839295e-01 - -4.257973671999999e-01 - -4.450215551034667e-01 - -4.640605423684923e-01 - -4.829158454463851e-01 - -5.015889707095635e-01 - -5.200814146000000e-01 - -5.383946650297390e-01 - -5.565301991603658e-01 - -5.744894857268537e-01 - -5.922739837155686e-01 - -6.098851423000000e-01 - -6.273244022645037e-01 - -6.445931939756846e-01 - -6.616929394780281e-01 - -6.786250511352716e-01 - -6.953909318999999e-01 - -7.119919765952718e-01 - -7.284295696432279e-01 - -7.447050873484842e-01 - -7.608198966551055e-01 - -7.767753551999997e-01 - -7.925728126189590e-01 - -8.082136084644670e-01 - -8.236990743647939e-01 - -8.390305327768360e-01 - -8.542092970000001e-01 - -8.692366724924486e-01 - -8.841139549244775e-01 - -8.988424321942350e-01 - -9.134233831702263e-01 - -9.278580778000000e-01 - -9.421477783833053e-01 - -9.562937376266863e-01 - -9.702972006149804e-01 - -9.841594035897939e-01 - -9.978815741999999e-01 - -1.011464932626877e+00 - -1.024910689374227e+00 - -1.038220047492379e+00 - -1.051394201530088e+00 - -1.064434338000000e+00 - -1.077341636148692e+00 - -1.090117264995124e+00 - -1.102762386491716e+00 - -1.115278154872840e+00 - -1.127665716000000e+00 - -1.139926208397942e+00 - -1.152060761127338e+00 - -1.164070496370367e+00 - -1.175956528594255e+00 - -1.187719964000000e+00 - -1.199361901614307e+00 - -1.210883431375302e+00 - -1.222285636497208e+00 - -1.233569592577916e+00 - -1.244736367000000e+00 - -1.255787020138112e+00 - -1.266722603828963e+00 - -1.277544163022812e+00 - -1.288252734706093e+00 - -1.298849349000000e+00 - -1.309335029515858e+00 - -1.319710789766606e+00 - -1.329977637188551e+00 - -1.340136572985217e+00 - -1.350188590000000e+00 - -1.360134674013246e+00 - -1.369975802739515e+00 - -1.379712947700534e+00 - -1.389347073262624e+00 - -1.398879136000000e+00 - -1.408310086019347e+00 - -1.417640866058629e+00 - -1.426872412303706e+00 - -1.436005653062347e+00 - -1.445041510000000e+00 - -1.453980898788701e+00 - -1.462824726507764e+00 - -1.471573894410746e+00 - -1.480229297407323e+00 - -1.488791823000000e+00 - -1.497262352264216e+00 - -1.505641758273629e+00 - -1.513930908641532e+00 - -1.522130664940848e+00 - -1.530241881000000e+00 - -1.538265404312065e+00 - -1.546202075663511e+00 - -1.554052729949587e+00 - -1.561818194964572e+00 - -1.569499292000000e+00 - -1.577096836740392e+00 - -1.584611637631811e+00 - -1.592044497451960e+00 - -1.599396212413425e+00 - -1.606667572000000e+00 - -1.613859360067553e+00 - -1.620972353850301e+00 - -1.628007324820493e+00 - -1.634965037585305e+00 - -1.641846251000000e+00 - -1.648651718746855e+00 - -1.655382187120556e+00 - -1.662038397074428e+00 - -1.668621083574689e+00 - -1.675130975000000e+00 - -1.681568794320005e+00 - -1.687935258528783e+00 - -1.694231079461267e+00 - -1.700456962682860e+00 - -1.706613607000000e+00 - -1.712701705964896e+00 - -1.718721948142722e+00 - -1.724675016499694e+00 - -1.730561586828580e+00 - -1.736382330000000e+00 - -1.742137912457411e+00 - -1.747828994017656e+00 - -1.753456229026646e+00 - -1.759020265526974e+00 - -1.764521747000000e+00 - -1.769961312537754e+00 - -1.775339594027171e+00 - -1.780657218386706e+00 - -1.785914807192779e+00 - -1.791112977000000e+00 - -1.796252339747382e+00 - -1.801333500673453e+00 - -1.806357060360666e+00 - -1.811323614328498e+00 - -1.816233753000000e+00 - -1.821088062150410e+00 - -1.825887120985276e+00 - -1.830631504346673e+00 - -1.835321782397329e+00 - -1.839958520000000e+00 - -1.844542277375300e+00 - -1.849073608812209e+00 - -1.853553064572349e+00 - -1.857981190434394e+00 - -1.862358526000000e+00 - -1.866685606181999e+00 - -1.870962962067843e+00 - -1.875191119963197e+00 - -1.879370599902195e+00 - -1.883501918000000e+00 - -1.887585586736770e+00 - -1.891622112755978e+00 - -1.895611998485404e+00 - -1.899555741651499e+00 - -1.903453835000000e+00 - -1.907306767129976e+00 - -1.911115021853308e+00 - -1.914879078883785e+00 - -1.918599413067872e+00 - -1.922276495000000e+00 - -1.925910791456493e+00 - -1.929502763824010e+00 - -1.933052869645757e+00 - -1.936561562187136e+00 - -1.940029290000000e+00 - -1.943456497684402e+00 - -1.946843625242175e+00 - -1.950191109032846e+00 - -1.953499381145042e+00 - -1.956768869000000e+00 - -1.959999996258605e+00 - -1.963193182622893e+00 - -1.966348843806269e+00 - -1.969467390558660e+00 - -1.972549230000000e+00 - -1.975594766012145e+00 - -1.978604397775412e+00 - -1.981578520793180e+00 - -1.984517526364655e+00 - -1.987421802000000e+00 - -1.990291731861874e+00 - -1.993127695559656e+00 - -1.995930069364364e+00 - -1.998699225767272e+00 - -2.001435533000000e+00 - -2.004139355858378e+00 - -2.006811055538481e+00 - -2.009450989763890e+00 - -2.012059511961222e+00 - -2.014636972000000e+00 - -2.017183716742461e+00 - -2.019700089231340e+00 - -2.022186429001382e+00 - -2.024643071393187e+00 - -2.027070349000000e+00 - -2.029468591629637e+00 - -2.031838124095820e+00 - -2.034179268100215e+00 - -2.036492342201070e+00 - -2.038777662000000e+00 - -2.041035540156417e+00 - -2.043266284490031e+00 - -2.045470200083453e+00 - -2.047647589335177e+00 - -2.049798751000000e+00 - -2.051923980684690e+00 - -2.054023570214561e+00 - -2.056097808968247e+00 - -2.058146983649728e+00 - -2.060171377000000e+00 - -2.062171268551674e+00 - -2.064146934640815e+00 - -2.066098649159696e+00 - -2.068026683134947e+00 - -2.069931304000000e+00 - -2.071812776276246e+00 - -2.073671361471072e+00 - -2.075507318519566e+00 - -2.077320903301032e+00 - -2.079112369000000e+00 - -2.080881966139512e+00 - -2.082629940879466e+00 - -2.084356537486872e+00 - -2.086061998635378e+00 - -2.087746563000000e+00 - -2.089410466229110e+00 - -2.091053941828707e+00 - -2.092677220771137e+00 - -2.094280530723314e+00 - -2.095864097000000e+00 - -2.097428142794787e+00 - -2.098972888139794e+00 - -2.100498550462023e+00 - -2.102005344216306e+00 - -2.103493482000000e+00 - -2.104963174393948e+00 - -2.106414628045970e+00 - -2.107848047779690e+00 - -2.109263636820768e+00 - -2.110661595000000e+00 - -2.112042119471926e+00 - -2.113405405101743e+00 - -2.114751645122076e+00 - -2.116081030815763e+00 - -2.117393750000000e+00 - -2.118689987937912e+00 - -2.119969928191390e+00 - -2.121233752504371e+00 - -2.122481640223532e+00 - -2.123713768000000e+00 - -2.124930310308645e+00 - -2.126131439345980e+00 - -2.127317325650607e+00 - -2.128488137848567e+00 - -2.129644042000000e+00 - -2.130785202020548e+00 - -2.131911779449632e+00 - -2.133023934312029e+00 - -2.134121824962966e+00 - -2.135205607000000e+00 - -2.136275433910872e+00 - -2.137331457489147e+00 - -2.138373827747866e+00 - -2.139402692469194e+00 - -2.140418197999999e+00 - -2.141420489142081e+00 - -2.142409707722756e+00 - -2.143385994030927e+00 - -2.144349486926974e+00 - -2.145300323000000e+00 - -2.146238637076898e+00 - -2.147164562479522e+00 - -2.148078231051947e+00 - -2.148979772720135e+00 - -2.149869315000000e+00 - -2.150746983835218e+00 - -2.151612904662093e+00 - -2.152467200947815e+00 - -2.153309993218032e+00 - -2.154141401000000e+00 - -2.154961542883784e+00 - -2.155770535619624e+00 - -2.156568494253713e+00 - -2.157355531798206e+00 - -2.158131760000000e+00 - -2.158897289576013e+00 - -2.159652229917454e+00 - -2.160396688379106e+00 - -2.161130769707277e+00 - -2.161854579000000e+00 - -2.162568220747540e+00 - -2.163271795520776e+00 - -2.163965403104795e+00 - -2.164649143391419e+00 - -2.165323114000000e+00 - -2.165987410839904e+00 - -2.166642128874188e+00 - -2.167287362019562e+00 - -2.167923202786971e+00 - -2.168549742000000e+00 - -2.169167069289456e+00 - -2.169775273557456e+00 - -2.170374442741976e+00 - -2.170964663390078e+00 - -2.171546020000000e+00 - -2.172118595836383e+00 - -2.172682474202094e+00 - -2.173237737093693e+00 - -2.173784464448991e+00 - -2.174322736000000e+00 - -2.174852630794634e+00 - -2.175374225221640e+00 - -2.175887595177988e+00 - -2.176392816678372e+00 - -2.176889964000000e+00 - -2.177379110090651e+00 - -2.177860327096639e+00 - -2.178333686466943e+00 - -2.178799258747679e+00 - -2.179257113000000e+00 - -2.179707317299531e+00 - -2.180149939409128e+00 - -2.180585046165010e+00 - -2.181012703042297e+00 - -2.181432975000000e+00 - -2.181845926509731e+00 - -2.182251621108717e+00 - -2.182650121032542e+00 - -2.183041486916871e+00 - -2.183425780000000e+00 - -2.183803061402426e+00 - -2.184173389857596e+00 - -2.184536823542827e+00 - -2.184893420600431e+00 - -2.185243238000000e+00 - -2.185586332004080e+00 - -2.185922759056265e+00 - -2.186252574500474e+00 - -2.186575831916728e+00 - -2.186892585000000e+00 - -2.187202887393400e+00 - -2.187506791832633e+00 - -2.187804350256584e+00 - -2.188095613705712e+00 - -2.188380633000000e+00 - -2.188659458643119e+00 - -2.188932140238827e+00 - -2.189198726845117e+00 - -2.189459267002233e+00 - -2.189713809000000e+00 - -2.189962400732430e+00 - -2.190205089044370e+00 - -2.190441920581333e+00 - -2.190672942002169e+00 - -2.190898199000000e+00 - -2.191117736662499e+00 - -2.191331600149922e+00 - -2.191539834109547e+00 - -2.191742482380937e+00 - -2.191939589000000e+00 - -2.192131197889608e+00 - -2.192317351831708e+00 - -2.192498093290244e+00 - -2.192673464653123e+00 - -2.192843508000000e+00 - -2.193008265149897e+00 - -2.193167777657277e+00 - -2.193322086821774e+00 - -2.193471233640668e+00 - -2.193615259000000e+00 - -2.193754203483761e+00 - -2.193888106693908e+00 - -2.194017008313546e+00 - -2.194140948496115e+00 - -2.194259967000000e+00 - -2.194374103230534e+00 - -2.194483396307522e+00 - -2.194587885225862e+00 - -2.194687608881331e+00 - -2.194782606000000e+00 - -2.194872915200472e+00 - -2.194958575082935e+00 - -2.195039623893670e+00 - -2.195116099394696e+00 - -2.195188040000000e+00 - -2.195255484352944e+00 - -2.195318470219860e+00 - -2.195377035223315e+00 - -2.195431217130485e+00 - -2.195481054000000e+00 - -2.195526583926446e+00 - -2.195567844428364e+00 - -2.195604873029958e+00 - -2.195637707516086e+00 - -2.195666386000000e+00 - -2.195690946583878e+00 - -2.195711426545218e+00 - -2.195727863658885e+00 - -2.195740296673043e+00 - -2.195748763000000e+00 - -2.195753299607926e+00 - -2.195753945356280e+00 - -2.195750739132009e+00 - -2.195743719093693e+00 - -2.195732923000000e+00 - -2.195718388771941e+00 - -2.195700155840199e+00 - -2.195678263244660e+00 - -2.195652748934943e+00 - -2.195623652000000e+00 - -2.195591012099144e+00 - -2.195554867993407e+00 - -2.195515258985693e+00 - -2.195472225489285e+00 - -2.195425807000000e+00 - -2.195376042760528e+00 - -2.195322973614639e+00 - -2.195266640267298e+00 - -2.195207082686241e+00 - -2.195144342000000e+00 - -2.195078459809379e+00 - -2.195009476453377e+00 - -2.194937433066797e+00 - -2.194862372466152e+00 - -2.194784337000000e+00 - -2.194703368615792e+00 - -2.194619509257747e+00 - -2.194532801771278e+00 - -2.194443290305841e+00 - -2.194351018000000e+00 - -2.194256027737437e+00 - -2.194158364279782e+00 - -2.194058072250755e+00 - -2.193955195446114e+00 - -2.193849779000000e+00 - -2.193741868885436e+00 - -2.193631510785602e+00 - -2.193518750557477e+00 - -2.193403634464252e+00 - -2.193286209000000e+00 - -2.193166521091908e+00 - -2.193044618884907e+00 - -2.192920550384463e+00 - -2.192794362988794e+00 - -2.192666105000000e+00 - -2.192535825071375e+00 - -2.192403570783236e+00 - -2.192269389306454e+00 - -2.192133327558461e+00 - -2.191995432000000e+00 - -2.191855748732582e+00 - -2.191714323538803e+00 - -2.191571201647935e+00 - -2.191426427571225e+00 - -2.191280046000000e+00 - -2.191132101498374e+00 - -2.190982637495000e+00 - -2.190831697104933e+00 - -2.190679323369808e+00 - -2.190525559000000e+00 - -2.190370446239990e+00 - -2.190214026313205e+00 - -2.190056340263544e+00 - -2.189897429222788e+00 - -2.189737334000000e+00 - -2.189576094894156e+00 - -2.189413751026334e+00 - -2.189250341662785e+00 - -2.189085906605225e+00 - -2.188920484000000e+00 - -2.188754111167896e+00 - -2.188586826517446e+00 - -2.188418667831656e+00 - -2.188249671505532e+00 - -2.188079874000000e+00 - -2.187909311655257e+00 - -2.187738019850499e+00 - -2.187566033827133e+00 - -2.187393388939138e+00 - -2.187220120000000e+00 - -2.187046261198758e+00 - -2.186871845656608e+00 - -2.186696906557450e+00 - -2.186521477499284e+00 - -2.186345591000000e+00 - -2.186169278929348e+00 - -2.185992573469870e+00 - -2.185815507881449e+00 - -2.185638116930091e+00 - -2.185460435000000e+00 - -2.185282496723147e+00 - -2.185104339046128e+00 - -2.184925999471230e+00 - -2.184747515559985e+00 - -2.184568926000000e+00 - -2.184390270419004e+00 - -2.184211589307456e+00 - -2.184032923638580e+00 - -2.183854314918697e+00 - -2.183675806000000e+00 - -2.183497440664645e+00 - -2.183319263062145e+00 - -2.183141318226586e+00 - -2.182963652427783e+00 - -2.182786312000000e+00 - -2.182609343803448e+00 - -2.182432796909005e+00 - -2.182256720850984e+00 - -2.182081165100584e+00 - -2.181906180000000e+00 - -2.181731816772078e+00 - -2.181558127901617e+00 - -2.181385166690271e+00 - -2.181212987245827e+00 - -2.181041644000000e+00 - -2.180871191888493e+00 - -2.180701687214938e+00 - -2.180533187286951e+00 - -2.180365750436408e+00 - -2.180199435000000e+00 - -2.180034299706266e+00 - -2.179870405073628e+00 - -2.179707812476292e+00 - -2.179546583956951e+00 - -2.179386782000000e+00 - -2.179228469569652e+00 - -2.179071710572415e+00 - -2.178916570209873e+00 - -2.178763115274171e+00 - -2.178611412000000e+00 - -2.178461526719817e+00 - -2.178313527960817e+00 - -2.178167485170301e+00 - -2.178023468394170e+00 - -2.177881548000000e+00 - -2.177741794911888e+00 - -2.177604281585152e+00 - -2.177469081134519e+00 - -2.177336267165003e+00 - -2.177205914000000e+00 - -2.177078096781969e+00 - -2.176952892179310e+00 - -2.176830377266735e+00 - -2.176710629289710e+00 - -2.176593727000000e+00 - -2.176479750089725e+00 - -2.176368778170715e+00 - -2.176260892035270e+00 - -2.176156174290115e+00 - -2.176054707000000e+00 - -2.175956572480315e+00 - -2.175861855847520e+00 - -2.175770642395214e+00 - -2.175683016800304e+00 - -2.175599066000000e+00 - -2.175518878125867e+00 - -2.175442540126260e+00 - -2.175370140365612e+00 - -2.175301769822078e+00 - -2.175237519000000e+00 - -2.175177478422601e+00 - -2.175121740498959e+00 - -2.175070398200953e+00 - -2.175023544771637e+00 - -2.174981275000000e+00 - -2.174943684570890e+00 - -2.174910868831887e+00 - -2.174882924320826e+00 - -2.174859949548785e+00 - -2.174842043000000e+00 - -2.174829303331104e+00 - -2.174821830410927e+00 - -2.174819725228089e+00 - -2.174823090027552e+00 - -2.174832027000000e+00 - -2.174846638699704e+00 - -2.174867029559900e+00 - -2.174893304738549e+00 - -2.174925569834485e+00 - -2.174963931000000e+00 - -2.175008495084293e+00 - -2.175059370394289e+00 - -2.175116665887380e+00 - -2.175180491027200e+00 - -2.175250956000000e+00 - -2.175328171805043e+00 - -2.175412250937077e+00 - -2.175503306357684e+00 - -2.175601451271103e+00 - -2.175706800000000e+00 - -2.175819467765500e+00 - -2.175939570549688e+00 - -2.176067225041086e+00 - -2.176202548787411e+00 - -2.176345660000000e+00 - -2.176496677644949e+00 - -2.176655722183164e+00 - -2.176822914601843e+00 - -2.176998376191533e+00 - -2.177182229000000e+00 - -2.177374595921169e+00 - -2.177575601341799e+00 - -2.177785370087074e+00 - -2.178004027196875e+00 - -2.178231699000000e+00 - -2.178468512862275e+00 - -2.178714597011325e+00 - -2.178970080062299e+00 - -2.179235091002944e+00 - -2.179509760000000e+00 - -2.179794218272507e+00 - -2.180088598277346e+00 - -2.180393032665419e+00 - -2.180707654074028e+00 - -2.181032597000000e+00 - -2.181367997183408e+00 - -2.181713990526695e+00 - -2.182070713375897e+00 - -2.182438302803596e+00 - -2.182816897000000e+00 - -2.183206635150288e+00 - -2.183607657686531e+00 - -2.184020105275964e+00 - -2.184444118610974e+00 - -2.184879840000000e+00 - -2.185327412889597e+00 - -2.185786981109685e+00 - -2.186258689137973e+00 - -2.186742682377725e+00 - -2.187239107000000e+00 - -2.187748109862624e+00 - -2.188269838801850e+00 - -2.188804442677439e+00 - -2.189352071523296e+00 - -2.189912875000000e+00 - -2.190487003093955e+00 - -2.191074608322116e+00 - -2.191675843787203e+00 - -2.192290862610885e+00 - -2.192919819000000e+00 - -2.193562867915730e+00 - -2.194220164552147e+00 - -2.194891865404003e+00 - -2.195578128862665e+00 - -2.196279113000000e+00 - -2.196994976008069e+00 - -2.197725877814248e+00 - -2.198471979076637e+00 - -2.199233441010543e+00 - -2.200010426000000e+00 - -2.200803097224683e+00 - -2.201611618154960e+00 - -2.202436152922896e+00 - -2.203276866629103e+00 - -2.204133924999999e+00 - -2.205007494076377e+00 - -2.205897739759803e+00 - -2.206804828380775e+00 - -2.207728927012060e+00 - -2.208670203000000e+00 - -2.209628824019662e+00 - -2.210604958519273e+00 - -2.211598775212799e+00 - -2.212610442959744e+00 - -2.213640131000000e+00 - -2.214688008997179e+00 - -2.215754247358006e+00 - -2.216839016713686e+00 - -2.217942487809252e+00 - -2.219064832000000e+00 - -2.220206221175054e+00 - -2.221366827800435e+00 - -2.222546824259503e+00 - -2.223746382727115e+00 - -2.224965677000000e+00 - -2.226204881636015e+00 - -2.227464170011377e+00 - -2.228743716360184e+00 - -2.230043696636770e+00 - -2.231364286000000e+00 - -2.232705659360148e+00 - -2.234067993079961e+00 - -2.235451464138931e+00 - -2.236856249856844e+00 - -2.238282527000000e+00 - -2.239730472524265e+00 - -2.241200265638654e+00 - -2.242692085287406e+00 - -2.244206109271373e+00 - -2.245742517000000e+00 - -2.247301488882056e+00 - -2.248883204910052e+00 - -2.250487845315945e+00 - -2.252115590911750e+00 - -2.253766623000000e+00 - -2.255441123360801e+00 - -2.257139274542631e+00 - -2.258861259219423e+00 - -2.260607260005651e+00 - -2.262377460000000e+00 - -2.264172042724291e+00 - -2.265991192137124e+00 - -2.267835092970031e+00 - -2.269703930922391e+00 - -2.271597891000000e+00 - -2.273517158096056e+00 - -2.275461918662951e+00 - -2.277432359442962e+00 - -2.279428667085979e+00 - -2.281451029000000e+00 - -2.283499633104788e+00 - -2.285574667389452e+00 - -2.287676320195930e+00 - -2.289804780398682e+00 - -2.291960237000000e+00 - -2.294142879454985e+00 - -2.296352898805551e+00 - -2.298590485768695e+00 - -2.300855830078550e+00 - -2.303149122999999e+00 - -2.305470556795997e+00 - -2.307820323545887e+00 - -2.310198615647936e+00 - -2.312605626084681e+00 - -2.315041548000000e+00 - -2.317506574745174e+00 - -2.320000900224320e+00 - -2.322524719122656e+00 - -2.325078227061991e+00 - -2.327661619000000e+00 - -2.330275089774933e+00 - -2.332918835677479e+00 - -2.335593053485966e+00 - -2.338297940187764e+00 - -2.341033693000000e+00 - -2.343800509406319e+00 - -2.346598587410773e+00 - -2.349428125303093e+00 - -2.352289321686241e+00 - -2.355182376000000e+00 - -2.358107488272472e+00 - -2.361064858786305e+00 - -2.364054687769198e+00 - -2.367077175375671e+00 - -2.370132523000000e+00 - -2.373220932737141e+00 - -2.376342606269360e+00 - -2.379497745810629e+00 - -2.382686554578887e+00 - -2.385909236000000e+00 - -2.389165993580208e+00 - -2.392457030846979e+00 - -2.395782552198058e+00 - -2.399142763298191e+00 - -2.402537869000000e+00 - -2.405968074028050e+00 - -2.409433584975734e+00 - -2.412934608682329e+00 - -2.416471351683178e+00 - -2.420044020999999e+00 - -2.423652824137149e+00 - -2.427297969206864e+00 - -2.430979664728804e+00 - -2.434698119632543e+00 - -2.438453543000000e+00 - -2.442246144168148e+00 - -2.446076133195298e+00 - -2.449943720571852e+00 - -2.453849117184546e+00 - -2.457792534000000e+00 - -2.461774182279110e+00 - -2.465794274341647e+00 - -2.469853022790889e+00 - -2.473950640299041e+00 - -2.478087340000000e+00 - -2.482263335430129e+00 - -2.486478840559030e+00 - -2.490734069661931e+00 - -2.495029237377275e+00 - -2.499364559000000e+00 - -2.503740250274207e+00 - -2.508156527124766e+00 - -2.512613605692700e+00 - -2.517111702474631e+00 - -2.521651035000000e+00 - -2.526231821279088e+00 - -2.530854278665131e+00 - -2.535518625205626e+00 - -2.540225080261870e+00 - -2.544973863000000e+00 - -2.549765192573217e+00 - -2.554599288888442e+00 - -2.559476372494764e+00 - -2.564396664604125e+00 - -2.569360386000000e+00 - -2.574367757513646e+00 - -2.579419001423863e+00 - -2.584514340338642e+00 - -2.589653996851589e+00 - -2.594838193999999e+00 - -2.600067155253186e+00 - -2.605341104662645e+00 - -2.610660266783872e+00 - -2.616024866689215e+00 - -2.621435129000000e+00 - -2.626891278432673e+00 - -2.632393541366548e+00 - -2.637942144571998e+00 - -2.643537314797249e+00 - -2.649179279000000e+00 - -2.654868264471787e+00 - -2.660604499292826e+00 - -2.666388211776204e+00 - -2.672219630341834e+00 - -2.678098984000000e+00 - -2.684026502306392e+00 - -2.690002415494505e+00 - -2.696026954017429e+00 - -2.702100348331385e+00 - -2.708222828000000e+00 - -2.714394620651795e+00 - -2.720615948464916e+00 - -2.726887030965477e+00 - -2.733208085290139e+00 - -2.739579324000000e+00 - -2.746000955816228e+00 - -2.752473185385865e+00 - -2.758996214641690e+00 - -2.765570242469367e+00 - -2.772195463000000e+00 - -2.778872066776275e+00 - -2.785600241574056e+00 - -2.792380171842594e+00 - -2.799212037606767e+00 - -2.806096015000000e+00 - -2.813032277129447e+00 - -2.820020994035244e+00 - -2.827062331911353e+00 - -2.834156451970738e+00 - -2.841303512999999e+00 - -2.848503671252426e+00 - -2.855757077985244e+00 - -2.863063881095023e+00 - -2.870424224890850e+00 - -2.877838249999999e+00 - -2.885306093928394e+00 - -2.892827890388094e+00 - -2.900403769651381e+00 - -2.908033857857018e+00 - -2.915718277999999e+00 - -2.923457150039019e+00 - -2.931250588977881e+00 - -2.939098706889091e+00 - -2.947001612872150e+00 - -2.954959411999998e+00 - -2.962972205810575e+00 - -2.971040091434060e+00 - -2.979163163083816e+00 - -2.987341511831155e+00 - -2.995575224999998e+00 - -3.003864386499012e+00 - -3.012209075546996e+00 - -3.020609368336417e+00 - -3.029065337835770e+00 - -3.037577052999999e+00 - -3.046144579520789e+00 - -3.054767979666142e+00 - -3.063447312238444e+00 - -3.072182631692820e+00 - -3.080973988999999e+00 - -3.089821432099915e+00 - -3.098725004829577e+00 - -3.107684748048404e+00 - -3.116700699185534e+00 - -3.125772890999999e+00 - -3.134901352715559e+00 - -3.144086110699870e+00 - -3.153327188100508e+00 - -3.162624603843408e+00 - -3.171978372999998e+00 - -3.181388507546933e+00 - -3.190855016073102e+00 - -3.200377903469057e+00 - -3.209957169965227e+00 - -3.219592812999998e+00 - -3.229284827363896e+00 - -3.239033203402719e+00 - -3.248837927724427e+00 - -3.258698982652799e+00 - -3.268616347999998e+00 - -3.278590000914418e+00 - -3.288619913401403e+00 - -3.298706054004673e+00 - -3.308848387625167e+00 - -3.319046875999998e+00 - -3.329301477934322e+00 - -3.339612147844228e+00 - -3.349978836592516e+00 - -3.360401490990458e+00 - -3.370880054999998e+00 - -3.381414469596773e+00 - -3.392004670266620e+00 - -3.402650589976440e+00 - -3.413352159446950e+00 - -3.424109303999998e+00 - -3.434921945057392e+00 - -3.445790001867386e+00 - -3.456713390096515e+00 - -3.467692020464062e+00 - -3.478725800999998e+00 - -3.489814636890736e+00 - -3.500958427789171e+00 - -3.512157070764700e+00 - -3.523410460589800e+00 - -3.534718486999998e+00 - -3.546081035880271e+00 - -3.557497990199610e+00 - -3.568969229634993e+00 - -3.580494629586285e+00 - -3.592074061999998e+00 - -3.603707395759104e+00 - -3.615394495446970e+00 - -3.627135222559569e+00 - -3.638929435115233e+00 - -3.650776987000000e+00 - -3.662677728742245e+00 - -3.674631507325805e+00 - -3.686638166579447e+00 - -3.698697546469576e+00 - -3.710809483000000e+00 - -3.722973808828209e+00 - -3.735190352595157e+00 - -3.747458940125227e+00 - -3.759779394010754e+00 - -3.772151532000000e+00 - -3.784575168342916e+00 - -3.797050115062026e+00 - -3.809576180292756e+00 - -3.822153166803174e+00 - -3.834780875000000e+00 - -3.847459102820189e+00 - -3.860187643203489e+00 - -3.872966285667494e+00 - -3.885794816080159e+00 - -3.898673017000000e+00 - -3.911600667911320e+00 - -3.924577543724543e+00 - -3.937603416269590e+00 - -3.950678053996523e+00 - -3.963801221000000e+00 - -3.976972678103186e+00 - -3.990192183512261e+00 - -4.003459491521890e+00 - -4.016774351164608e+00 - -4.030136509000000e+00 - -4.043545709147031e+00 - -4.057001691149858e+00 - -4.070504190840202e+00 - -4.084052939835804e+00 - -4.097647667000000e+00 - -4.111288098419088e+00 - -4.124973955231095e+00 - -4.138704955371648e+00 - -4.152480813397504e+00 - -4.166301240000000e+00 - -4.180165942572286e+00 - -4.194074624537170e+00 - -4.208026986370140e+00 - -4.222022725101974e+00 - -4.236061533000000e+00 - -4.250143098846027e+00 - -4.264267108996074e+00 - -4.278433246261039e+00 - -4.292641188627767e+00 - -4.306890611000000e+00 - -4.321181185386233e+00 - -4.335512579090955e+00 - -4.349884456391911e+00 - -4.364296478350024e+00 - -4.378748302000000e+00 - -4.393239580901771e+00 - -4.407769964394226e+00 - -4.422339098999587e+00 - -4.436946628138934e+00 - -4.451592191000000e+00 - -4.466275423153566e+00 - -4.480995955945297e+00 - -4.495753418053649e+00 - -4.510547435209278e+00 - -4.525377628000000e+00 - -4.540243613376725e+00 - -4.555145006346341e+00 - -4.570081418154680e+00 - -4.585052454714511e+00 - -4.600057719000000e+00 - -4.615096811360685e+00 - -4.630169328028963e+00 - -4.645274861878902e+00 - -4.660413001844071e+00 - -4.675583333000000e+00 - -4.690785437259527e+00 - -4.706018892955582e+00 - -4.721283275134317e+00 - -4.736578154793736e+00 - -4.751903099000000e+00 - -4.767257671719769e+00 - -4.782641433752779e+00 - -4.798053942304498e+00 - -4.813494749953581e+00 - -4.828963406000000e+00 - -4.844459456896403e+00 - -4.859982445123970e+00 - -4.875531909767719e+00 - -4.891107385884028e+00 - -4.906708405000000e+00 - -4.922334495555203e+00 - -4.937985181840751e+00 - -4.953659984814029e+00 - -4.969358421588884e+00 - -4.985080006000000e+00 - -5.000824248840914e+00 - -5.016590656340991e+00 - -5.032378731598668e+00 - -5.048187974277996e+00 - -5.064017880000000e+00 - -5.079867940973151e+00 - -5.095737645459726e+00 - -5.111626480823102e+00 - -5.127533934923204e+00 - -5.143459499999997e+00 - -5.159402672483111e+00 - -5.175362954369220e+00 - -5.191339851303958e+00 - -5.207332872891304e+00 - -5.223341533999998e+00 - -5.239365353688981e+00 - -5.255403855076862e+00 - -5.271456565155025e+00 - -5.287523015792912e+00 - -5.303602743999997e+00 - -5.319695290809813e+00 - -5.335800201177900e+00 - -5.351917023850607e+00 - -5.368045312413205e+00 - -5.384184625999997e+00 - -5.400334527792659e+00 - -5.416494583936292e+00 - -5.432664365069262e+00 - -5.448843447960337e+00 - -5.465031412999998e+00 - -5.481227843963791e+00 - -5.497432330198948e+00 - -5.513644465003656e+00 - -5.529863846001168e+00 - -5.546090074999998e+00 - -5.562322757794160e+00 - -5.578561506278419e+00 - -5.594805935740466e+00 - -5.611055664858841e+00 - -5.627310317999997e+00 - -5.643569523867812e+00 - -5.659832914603254e+00 - -5.676100126691991e+00 - -5.692370802379017e+00 - -5.708644587999997e+00 - -5.724921133351554e+00 - -5.741200092816319e+00 - -5.757481124931912e+00 - -5.773763893288205e+00 - -5.790048065999996e+00 - -5.806333315035348e+00 - -5.822619317227983e+00 - -5.838905753168464e+00 - -5.855192307810226e+00 - -5.871478670999998e+00 - -5.887764536642293e+00 - -5.904049603224381e+00 - -5.920333573291820e+00 - -5.936616154283948e+00 - -5.952897057999997e+00 - -5.969175999997380e+00 - -5.985452700712029e+00 - -6.001726884408804e+00 - -6.017998279848357e+00 - -6.034266620999998e+00 - -6.050531645917840e+00 - -6.066793096565948e+00 - -6.083050719154321e+00 - -6.099304265265417e+00 - -6.115553489999997e+00 - -6.131798152082848e+00 - -6.148038016850530e+00 - -6.164272852974367e+00 - -6.180502432221914e+00 - -6.196726531999996e+00 - -6.212944934149927e+00 - -6.229157424398349e+00 - -6.245363792906498e+00 - -6.261563835474968e+00 - -6.277757350999996e+00 - -6.293944141712862e+00 - -6.310124016459128e+00 - -6.326296787703612e+00 - -6.342462271423720e+00 - -6.358620288999997e+00 - -6.374770666045148e+00 - -6.390913231950829e+00 - -6.407047820441565e+00 - -6.423174270811367e+00 - -6.439292425999997e+00 - -6.455402132459349e+00 - -6.471503242529590e+00 - -6.487595612302881e+00 - -6.503679101824962e+00 - -6.519753575999998e+00 - -6.535818903908587e+00 - -6.551874959678351e+00 - -6.567921621040533e+00 - -6.583958769810407e+00 - -6.599986292999997e+00 - -6.616004081814032e+00 - -6.632012031732002e+00 - -6.648010042213294e+00 - -6.663998017633650e+00 - -6.679975866999997e+00 - -6.695943503153600e+00 - -6.711900843425355e+00 - -6.727847809100131e+00 - -6.743784326279565e+00 - -6.759710325999998e+00 - -6.775625743222601e+00 - -6.791530516957345e+00 - -6.807424590371784e+00 - -6.823307911868753e+00 - -6.839180434000000e+00 - -6.855042113095231e+00 - -6.870892911056689e+00 - -6.886732793343159e+00 - -6.902561729209182e+00 - -6.918379693000000e+00 - -6.934186663377454e+00 - -6.949982623974822e+00 - -6.965767562024019e+00 - -6.981541468861679e+00 - -6.997304341000000e+00 - -7.013056179149240e+00 - -7.028796988372566e+00 - -7.044526777567921e+00 - -7.060245560311449e+00 - -7.075953355000000e+00 - -7.091650184045992e+00 - -7.107336074531737e+00 - -7.123011057484204e+00 - -7.138675168614964e+00 - -7.154328448000000e+00 - -7.169970939523060e+00 - -7.185602692089082e+00 - -7.201223758621499e+00 - -7.216834196750369e+00 - -7.232434069000000e+00 - -7.248023441650831e+00 - -7.263602384451917e+00 - -7.279170972021925e+00 - -7.294729285389790e+00 - -7.310277408000000e+00 - -7.325815426345584e+00 - -7.341343434315181e+00 - -7.356861529294433e+00 - -7.372369811668458e+00 - -7.387868387000000e+00 - -7.403357365322682e+00 - -7.418836861854650e+00 - -7.434306995371617e+00 - -7.449767888578398e+00 - -7.465219669000000e+00 - -7.480662468362842e+00 - -7.496096423635060e+00 - -7.511521675509539e+00 - -7.526938368822738e+00 - -7.542346653000000e+00 - -7.557746681513402e+00 - -7.573138613106206e+00 - -7.588522610348394e+00 - -7.603898840111169e+00 - -7.619267474000000e+00 - -7.634628687556104e+00 - -7.649982660818226e+00 - -7.665329578157865e+00 - -7.680669629212444e+00 - -7.696003007000000e+00 - -7.711329908041110e+00 - -7.726650535322031e+00 - -7.741965095546557e+00 - -7.757273799081691e+00 - -7.772576861000000e+00 - -7.787874500482072e+00 - -7.803166941820082e+00 - -7.818454413357075e+00 - -7.833737148083599e+00 - -7.849015383000000e+00 - -7.864289358883056e+00 - -7.879559322305754e+00 - -7.894825523493435e+00 - -7.910088216491122e+00 - -7.925347660000000e+00 - -7.940604117030949e+00 - -7.955857856656654e+00 - -7.971109151088187e+00 - -7.986358275553978e+00 - -8.001605510999999e+00 - -8.016851143003514e+00 - -8.032095461580266e+00 - -8.047338760488806e+00 - -8.062581337981985e+00 - -8.077823497000001e+00 - -8.093065544394179e+00 - -8.108307791577566e+00 - -8.123550554205780e+00 - -8.138794153086785e+00 - -8.154038912999997e+00 - -8.169285162395173e+00 - -8.184533235306290e+00 - -8.199783469410583e+00 - -8.215036206329255e+00 - -8.230291792999997e+00 - -8.245550580528674e+00 - -8.260812923863309e+00 - -8.276079182235739e+00 - -8.291349720375887e+00 - -8.306624906999998e+00 - -8.321905114401627e+00 - -8.337190720129563e+00 - -8.352482105562956e+00 - -8.367779656388556e+00 - -8.383083762999997e+00 - -8.398394819954635e+00 - -8.413713227271362e+00 - -8.429039388338369e+00 - -8.444373710123081e+00 - -8.459716604999997e+00 - -8.475068489773328e+00 - -8.490429785807564e+00 - -8.505800918193746e+00 - -8.521182316459129e+00 - -8.536574414999997e+00 - -8.551977652264261e+00 - -8.567392471335332e+00 - -8.582819319266729e+00 - -8.598258647834163e+00 - -8.613710912999998e+00 - -8.629176574613023e+00 - -8.644656098315155e+00 - -8.660149953296175e+00 - -8.675658612460374e+00 - -8.691182553999997e+00 - -8.706722260346437e+00 - -8.722278218076596e+00 - -8.737850917931995e+00 - -8.753440855866357e+00 - -8.769048531999996e+00 - -8.784674450012169e+00 - -8.800319118245726e+00 - -8.815983049456063e+00 - -8.831666761752983e+00 - -8.847370776999997e+00 - -8.863095620572640e+00 - -8.878841823409489e+00 - -8.894609920288579e+00 - -8.910400450202564e+00 - -8.926213956999996e+00 - -8.942050988642462e+00 - -8.957912097948702e+00 - -8.973797841249739e+00 - -8.989708778929735e+00 - -9.005645476999996e+00 - -9.021608505891232e+00 - -9.037598440089864e+00 - -9.053615857732957e+00 - -9.069661341483132e+00 - -9.085735478999997e+00 - -9.101838862125330e+00 - -9.117972087538210e+00 - -9.134135755396374e+00 - -9.150330469883286e+00 - -9.166556840999997e+00 - -9.182815483079517e+00 - -9.199107013675079e+00 - -9.215432054583626e+00 - -9.231791233265957e+00 - -9.248185180999997e+00 - -9.264614532683632e+00 - -9.281079929109534e+00 - -9.297582014702897e+00 - -9.314121437654787e+00 - -9.330698850999996e+00 - -9.347314912003528e+00 - -9.363970283188971e+00 - -9.380665630745685e+00 - -9.397401624940878e+00 - -9.414178940999998e+00 - -9.430998258244742e+00 - -9.447860260503859e+00 - -9.464765635761319e+00 - -9.481715077019253e+00 - -9.498709280999996e+00 - -9.515748948037771e+00 - -9.532834784442173e+00 - -9.549967500513571e+00 - -9.567147810785697e+00 - -9.584376433999996e+00 - -9.601654092679016e+00 - -9.618981514566920e+00 - -9.636359431588877e+00 - -9.653788580476306e+00 - -9.671269701999998e+00 - -9.688803540653204e+00 - -9.706390846469759e+00 - -9.724032373152683e+00 - -9.741728878390186e+00 - -9.759481124999997e+00 - -9.777289880050315e+00 - -9.795155915261526e+00 - -9.813080006095444e+00 - -9.831062932433847e+00 - -9.849105478999997e+00 - -9.867208434586416e+00 - -9.885372592754736e+00 - -9.903598750780114e+00 - -9.921887710289466e+00 - -9.940240277999996e+00 - -9.958657264807959e+00 - -9.977139486156000e+00 - -9.995687760994512e+00 - -1.001430291248964e+01 - -1.003298577000000e+01 - -1.005173716741557e+01 - -1.007055794170109e+01 - -1.008944893313717e+01 - -1.010841098632109e+01 - -1.012744495000000e+01 - -1.014655167843811e+01 - -1.016573203809090e+01 - -1.018498689280856e+01 - -1.020431709913334e+01 - -1.022372353000000e+01 - -1.024320706932260e+01 - -1.026276860085199e+01 - -1.028240900753776e+01 - -1.030212917226508e+01 - -1.032192999000000e+01 - -1.034181236270672e+01 - -1.036177718920571e+01 - -1.038182537682789e+01 - -1.040195784652257e+01 - -1.042217551000000e+01 - -1.044247927800797e+01 - -1.046287008429113e+01 - -1.048334886197221e+01 - -1.050391653528098e+01 - -1.052457404000000e+01 - -1.054532232135862e+01 - -1.056616233045517e+01 - -1.058709501821704e+01 - -1.060812133414642e+01 - -1.062924224000000e+01 - -1.065045870478386e+01 - -1.067177169452023e+01 - -1.069318217826154e+01 - -1.071469113174534e+01 - -1.073629954000000e+01 - -1.075800839260036e+01 - -1.077981867489276e+01 - -1.080173138018267e+01 - -1.082374751517595e+01 - -1.084586808000000e+01 - -1.086809407471729e+01 - -1.089042651905600e+01 - -1.091286643223940e+01 - -1.093541482646511e+01 - -1.095807273000000e+01 - -1.098084118002027e+01 - -1.100372120627546e+01 - -1.102671384288809e+01 - -1.104982013415814e+01 - -1.107304113000000e+01 - -1.109637788366843e+01 - -1.111983144958023e+01 - -1.114340288661973e+01 - -1.116709326043168e+01 - -1.119090364000000e+01 - -1.121483509746141e+01 - -1.123888871051257e+01 - -1.126306556352589e+01 - -1.128736674843474e+01 - -1.131179335000000e+01 - -1.133634645465832e+01 - -1.136102717560643e+01 - -1.138583662099362e+01 - -1.141077588304154e+01 - -1.143584608000000e+01 - -1.146104834278586e+01 - -1.148638378227322e+01 - -1.151185351768562e+01 - -1.153745868860526e+01 - -1.156320043000000e+01 - -1.158907987623694e+01 - -1.161509817570602e+01 - -1.164125647703402e+01 - -1.166755592508495e+01 - -1.169399768000000e+01 - -1.172058291041322e+01 - -1.174731277861368e+01 - -1.177418844974534e+01 - -1.180121109657743e+01 - -1.182838189999999e+01 - -1.185570204579555e+01 - -1.188317272006268e+01 - -1.191079511332836e+01 - -1.193857042312863e+01 - -1.196649984999999e+01 - -1.199458459773775e+01 - -1.202282587700695e+01 - -1.205122490269986e+01 - -1.207978289369385e+01 - -1.210850107000000e+01 - -1.213738065440104e+01 - -1.216642287877588e+01 - -1.219562898067898e+01 - -1.222500020303083e+01 - -1.225453779000000e+01 - -1.228424298812801e+01 - -1.231411705144751e+01 - -1.234416123799292e+01 - -1.237437680934280e+01 - -1.240476502999999e+01 - -1.243532716862228e+01 - -1.246606450371358e+01 - -1.249697831672881e+01 - -1.252806989018327e+01 - -1.255934050999999e+01 - -1.259079146663310e+01 - -1.262242406008652e+01 - -1.265423959346900e+01 - -1.268623937120698e+01 - -1.271842469999999e+01 - -1.275079689157634e+01 - -1.278335727210730e+01 - -1.281610716656313e+01 - -1.284904789393346e+01 - -1.288218078999999e+01 - -1.291550719883721e+01 - -1.294902845305343e+01 - -1.298274589252790e+01 - -1.301666087289315e+01 - -1.305077474999999e+01 - -1.308508888000826e+01 - -1.311960462335401e+01 - -1.315432334734565e+01 - -1.318924642810263e+01 - -1.322437523999999e+01 - -1.325971115825294e+01 - -1.329525556797775e+01 - -1.333100986045822e+01 - -1.336697543256989e+01 - -1.340315367999999e+01 - -1.343954599979837e+01 - -1.347615379884262e+01 - -1.351297848978655e+01 - -1.355002149050285e+01 - -1.358728421999999e+01 - -1.362476809975143e+01 - -1.366247455932581e+01 - -1.370040503112116e+01 - -1.373856094968169e+01 - -1.377694375999999e+01 - -1.381555491216690e+01 - -1.385439585021465e+01 - -1.389346802391279e+01 - -1.393277289476898e+01 - -1.397231192999999e+01 - -1.401208659972945e+01 - -1.405209837359219e+01 - -1.409234872413346e+01 - -1.413283912961124e+01 - -1.417357107999999e+01 - -1.421454607102127e+01 - -1.425576559243092e+01 - -1.429723113890712e+01 - -1.433894421536596e+01 - -1.438090632999999e+01 - -1.442311899332400e+01 - -1.446558371903957e+01 - -1.450830202765583e+01 - -1.455127544879836e+01 - -1.459450550999999e+01 - -1.463799373973040e+01 - -1.468174167767078e+01 - -1.472575086722947e+01 - -1.477002285383887e+01 - -1.481455918999999e+01 - -1.485936143285468e+01 - -1.490443114031971e+01 - -1.494976987417127e+01 - -1.499537920245961e+01 - -1.504126069999999e+01 - -1.508741594534576e+01 - -1.513384651602358e+01 - -1.518055399754435e+01 - -1.522753998778076e+01 - -1.527480607999999e+01 - -1.532235386668537e+01 - -1.537018495189360e+01 - -1.541830094448208e+01 - -1.546670345694024e+01 - -1.551539410999999e+01 - -1.556437452805486e+01 - -1.561364632974880e+01 - -1.566321114034704e+01 - -1.571307059764629e+01 - -1.576322633999999e+01 - -1.581368000886133e+01 - -1.586443325932826e+01 - -1.591548774371123e+01 - -1.596684510633198e+01 - -1.601850700999999e+01 - -1.607047512763592e+01 - -1.612275112310131e+01 - -1.617533666634843e+01 - -1.622823344044972e+01 - -1.628144312999999e+01 - -1.633496741991010e+01 - -1.638880799548294e+01 - -1.644296655089035e+01 - -1.649744479372194e+01 - -1.655224442999999e+01 - -1.660736716535794e+01 - -1.666281471098534e+01 - -1.671858878335293e+01 - -1.677469110504862e+01 - -1.683112339999999e+01 - -1.688788739643611e+01 - -1.694498483759857e+01 - -1.700241746523662e+01 - -1.706018701398879e+01 - -1.711829522999999e+01 - -1.717674386844329e+01 - -1.723553468924849e+01 - -1.729466945458232e+01 - -1.735414992865347e+01 - -1.741397788000000e+01 - -1.747415508099178e+01 - -1.753468330867943e+01 - -1.759556434768274e+01 - -1.765679999203036e+01 - -1.771839203000000e+01 - -1.778034225038387e+01 - -1.784265246094084e+01 - -1.790532446959567e+01 - -1.796836007816754e+01 - -1.803176110000000e+01 - -1.809552935720682e+01 - -1.815966667575656e+01 - -1.822417488078262e+01 - -1.828905579597735e+01 - -1.835431126000000e+01 - -1.841994311958100e+01 - -1.848595321475806e+01 - -1.855234338946741e+01 - -1.861911549709020e+01 - -1.868627140000000e+01 - -1.875381296458075e+01 - -1.882174205218422e+01 - -1.889006052915166e+01 - -1.895877027181235e+01 - -1.902787316000000e+01 - -1.909737107797965e+01 - -1.916726592078253e+01 - -1.923755957952593e+01 - -1.930825393714747e+01 - -1.937935090000000e+01 - -1.945085238647674e+01 - -1.952276030080435e+01 - -1.959507655061933e+01 - -1.966780305499929e+01 - -1.974094174000000e+01 - -1.981449453618971e+01 - -1.988846337667131e+01 - -1.996285019538828e+01 - -2.003765692760933e+01 - -2.011288552000000e+01 - -2.018853792621815e+01 - -2.026461609876727e+01 - -2.034112199510926e+01 - -2.041805758075517e+01 - -2.049542482000000e+01 - -2.057322568006621e+01 - -2.065146214471047e+01 - -2.073013619484967e+01 - -2.080924980240138e+01 - -2.088880495999999e+01 - -2.096880367169853e+01 - -2.104924793164823e+01 - -2.113013973534757e+01 - -2.121148108557274e+01 - -2.129327399999999e+01 - -2.137552050224973e+01 - -2.145822260294134e+01 - -2.154138232011573e+01 - -2.162500168821614e+01 - -2.170908273999999e+01 - -2.179362750931509e+01 - -2.187863804236205e+01 - -2.196411638687395e+01 - -2.205006458870765e+01 - -2.213648469999998e+01 - -2.222337877888525e+01 - -2.231074889087196e+01 - -2.239859710699802e+01 - -2.248692550346576e+01 - -2.257573614999999e+01 - -2.266503111825121e+01 - -2.275481250533621e+01 - -2.284508240538831e+01 - -2.293584289979252e+01 - -2.302709608999998e+01 - -2.311884408797131e+01 - -2.321108899308483e+01 - -2.330383291176923e+01 - -2.339707796636268e+01 - -2.349082627999998e+01 - -2.358507997580010e+01 - -2.367984117841246e+01 - -2.377511201965127e+01 - -2.387089464198777e+01 - -2.396719118999998e+01 - -2.406400380890314e+01 - -2.416133464354705e+01 - -2.425918584868402e+01 - -2.435755959379285e+01 - -2.445645803999998e+01 - -2.455588334675619e+01 - -2.465583769169985e+01 - -2.475632325621871e+01 - -2.485734222078360e+01 - -2.495889676999998e+01 - -2.506098909313465e+01 - -2.516362138717989e+01 - -2.526679585042222e+01 - -2.537051468121954e+01 - -2.547478008999998e+01 - -2.557959429416147e+01 - -2.568495950782481e+01 - -2.579087794894506e+01 - -2.589735184307986e+01 - -2.600438342000000e+01 - -2.611197491414786e+01 - -2.622012856937007e+01 - -2.632884662779481e+01 - -2.643813132670684e+01 - -2.654798492000000e+01 - -2.665840967182968e+01 - -2.676940784333127e+01 - -2.688098169572292e+01 - -2.699313349264397e+01 - -2.710586551000000e+01 - -2.721918002998715e+01 - -2.733307932892397e+01 - -2.744756569229334e+01 - -2.756264142140602e+01 - -2.767830881000000e+01 - -2.779457014947893e+01 - -2.791142774510221e+01 - -2.802888390934165e+01 - -2.814694096000261e+01 - -2.826560121000000e+01 - -2.838486697334714e+01 - -2.850474058224100e+01 - -2.862522436986088e+01 - -2.874632066501767e+01 - -2.886803181000000e+01 - -2.899036015446983e+01 - -2.911330804180568e+01 - -2.923687781925054e+01 - -2.936107184331833e+01 - -2.948589248000000e+01 - -2.961134209910011e+01 - -2.973742306338333e+01 - -2.986413774439124e+01 - -2.999148852946843e+01 - -3.011947780000000e+01 - -3.024810793640462e+01 - -3.037738133418102e+01 - -3.050730039248281e+01 - -3.063786751048302e+01 - -3.076908508999995e+01 - -3.090095553801825e+01 - -3.103348127528379e+01 - -3.116666472242296e+01 - -3.130050829541340e+01 - -3.143501442000000e+01 - -3.157018552904646e+01 - -3.170602405762165e+01 - -3.184253244456109e+01 - -3.197971313442012e+01 - -3.211756857999995e+01 - -3.225610123724459e+01 - -3.239531355479052e+01 - -3.253520799120049e+01 - -3.267578702273956e+01 - -3.281705312000000e+01 - -3.295900875199519e+01 - -3.310165640007095e+01 - -3.324499854981137e+01 - -3.338903768896250e+01 - -3.353377630999994e+01 - -3.367921690900354e+01 - -3.382536198480008e+01 - -3.397221404252836e+01 - -3.411977559608952e+01 - -3.426804916000000e+01 - -3.441703725062087e+01 - -3.456674239208418e+01 - -3.471716711255165e+01 - -3.486831394366235e+01 - -3.502018541999994e+01 - -3.517278408030963e+01 - -3.532611247314257e+01 - -3.548017315006599e+01 - -3.563496866378715e+01 - -3.579050157000000e+01 - -3.594677442911821e+01 - -3.610378981290209e+01 - -3.626155029281482e+01 - -3.642005843692588e+01 - -3.657931682999995e+01 - -3.673932806450152e+01 - -3.690009471994529e+01 - -3.706161938636306e+01 - -3.722390467398576e+01 - -3.738695318000000e+01 - -3.755076749872251e+01 - -3.771535025114206e+01 - -3.788070405790332e+01 - -3.804683152981476e+01 - -3.821373528999994e+01 - -3.838141797088579e+01 - -3.854988220802454e+01 - -3.871913063690455e+01 - -3.888916589260551e+01 - -3.905999062000000e+01 - -3.923160747217621e+01 - -3.940401910958111e+01 - -3.957722819105772e+01 - -3.975123737141870e+01 - -3.992604931999993e+01 - -4.010166671506960e+01 - -4.027809223215413e+01 - -4.045532854769397e+01 - -4.063337834194039e+01 - -4.081224431000000e+01 - -4.099192915380458e+01 - -4.117243556512365e+01 - -4.135376624213356e+01 - -4.153592389680070e+01 - -4.171891123999993e+01 - -4.190273098404973e+01 - -4.208738585293229e+01 - -4.227287857304115e+01 - -4.245921187066173e+01 - -4.264638848000000e+01 - -4.283441114000928e+01 - -4.302328258823673e+01 - -4.321300556988346e+01 - -4.340358284230594e+01 - -4.359501715999993e+01 - -4.378731127802528e+01 - -4.398046796379431e+01 - -4.417448998677844e+01 - -4.436938011574802e+01 - -4.456514113000000e+01 - -4.476177581459606e+01 - -4.495928695037842e+01 - -4.515767732491430e+01 - -4.535694973791337e+01 - -4.555710698999992e+01 - -4.575815188265746e+01 - -4.596008722124420e+01 - -4.616291581815827e+01 - -4.636664049491562e+01 - -4.657126407000000e+01 - -4.677678936329625e+01 - -4.698321921012249e+01 - -4.719055644645270e+01 - -4.739880390447049e+01 - -4.760796442999992e+01 - -4.781804087601476e+01 - -4.802903608806237e+01 - -4.824095291782189e+01 - -4.845379422957746e+01 - -4.866756289000000e+01 - -4.888226176793614e+01 - -4.909789373759357e+01 - -4.931446167624577e+01 - -4.953196846445736e+01 - -4.975041698999991e+01 - -4.996981014490353e+01 - -5.019015082042799e+01 - -5.041144191483806e+01 - -5.063368633767777e+01 - -5.085688700000000e+01 - -5.108104681363623e+01 - -5.130616869222998e+01 - -5.153225555529192e+01 - -5.175931033093434e+01 - -5.198733594999992e+01 - -5.221633534632925e+01 - -5.244631146064819e+01 - -5.267726723814258e+01 - -5.290920562821528e+01 - -5.314212958000000e+01 - -5.337604204603855e+01 - -5.361094599406351e+01 - -5.384684439089011e+01 - -5.408374019738633e+01 - -5.432163638999991e+01 - -5.456053595406303e+01 - -5.480044186892415e+01 - -5.504135712069162e+01 - -5.528328470761400e+01 - -5.552622762000000e+01 - -5.577018884907901e+01 - -5.601517141284037e+01 - -5.626117832498171e+01 - -5.650821258404100e+01 - -5.675627720999991e+01 - -5.700537523542541e+01 - -5.725550968441112e+01 - -5.750668358361924e+01 - -5.775889996777224e+01 - -5.801216188000000e+01 - -5.826647236807500e+01 - -5.852183447842080e+01 - -5.877825126017432e+01 - -5.903572576827786e+01 - -5.929426106999990e+01 - -5.955386023803142e+01 - -5.981452633626228e+01 - -6.007626243395679e+01 - -6.033907161265666e+01 - -6.060295696000000e+01 - -6.086792156620618e+01 - -6.113396851889991e+01 - -6.140110091270849e+01 - -6.166932185413050e+01 - -6.193863444999990e+01 - -6.220904180836374e+01 - -6.248054704389698e+01 - -6.275315327303672e+01 - -6.302686361375484e+01 - -6.330168120000000e+01 - -6.357760917255472e+01 - -6.385465065869710e+01 - -6.413280879313753e+01 - -6.441208672717147e+01 - -6.469248761000000e+01 - -6.497401459207148e+01 - -6.525667083785252e+01 - -6.554045951020694e+01 - -6.582538376572784e+01 - -6.611144677999999e+01 - -6.639865173804421e+01 - -6.668700181225154e+01 - -6.697650018322166e+01 - -6.726715004865791e+01 - -6.755895460000001e+01 - -6.785191702754956e+01 - -6.814604053706709e+01 - -6.844132833746227e+01 - -6.873778363702108e+01 - -6.903540965000001e+01 - -6.933420959649558e+01 - -6.963418670433917e+01 - -6.993534420146086e+01 - -7.023768531400407e+01 - -7.054121327999999e+01 - -7.084593134500037e+01 - -7.115184275353549e+01 - -7.145895075432828e+01 - -7.176725860332733e+01 - -7.207676955999989e+01 - -7.238748688676215e+01 - -7.269941385037480e+01 - -7.301255372170849e+01 - -7.332690977697268e+01 - -7.364248530000000e+01 - -7.395928357816831e+01 - -7.427730789465394e+01 - -7.459656154154558e+01 - -7.491704782593285e+01 - -7.523877004999987e+01 - -7.556173151464178e+01 - -7.588593553169946e+01 - -7.621138541944168e+01 - -7.653808450163682e+01 - -7.686603610000000e+01 - -7.719524353805981e+01 - -7.752571015313293e+01 - -7.785743928572181e+01 - -7.819043427631229e+01 - -7.852469846999988e+01 - -7.886023521608357e+01 - -7.919704786882774e+01 - -7.953513978918475e+01 - -7.987451434652237e+01 - -8.021517491000000e+01 - -8.055712484895521e+01 - -8.090036753598372e+01 - -8.124490635250547e+01 - -8.159074469172391e+01 - -8.193788593999987e+01 - -8.228633348416081e+01 - -8.263609073313938e+01 - -8.298716109541151e+01 - -8.333954797103145e+01 - -8.369325477000000e+01 - -8.404828491028280e+01 - -8.440464181412719e+01 - -8.476232890793086e+01 - -8.512134962287996e+01 - -8.548170738999985e+01 - -8.584340564352934e+01 - -8.620644783199920e+01 - -8.657083740482393e+01 - -8.693657780824788e+01 - -8.730367250000000e+01 - -8.767212494371194e+01 - -8.804193859639375e+01 - -8.841311692593891e+01 - -8.878566341870939e+01 - -8.915958154999986e+01 - -8.953487479168578e+01 - -8.991154663471849e+01 - -9.028960057395298e+01 - -9.066904010318096e+01 - -9.104986872000001e+01 - -9.143208992686800e+01 - -9.181570723560402e+01 - -9.220072416114067e+01 - -9.258714421980083e+01 - -9.297497092999986e+01 - -9.336420781525349e+01 - -9.375485841426487e+01 - -9.414692626313253e+01 - -9.454041488965315e+01 - -9.493532784000000e+01 - -9.533166867059026e+01 - -9.572944092950100e+01 - -9.612864816948191e+01 - -9.652929395407540e+01 - -9.693138184999984e+01 - -9.733491542620831e+01 - -9.773989825487583e+01 - -9.814633391500892e+01 - -9.855422599474231e+01 - -9.896357808000000e+01 - -9.937439375553778e+01 - -9.978667660951464e+01 - -1.002004302498873e+02 - -1.006156583113964e+02 - -1.010323643999998e+02 - -1.014505521033422e+02 - -1.018702250167552e+02 - -1.022913867648504e+02 - -1.027140410123223e+02 - -1.031381914000000e+02 - -1.035638415489902e+02 - -1.039909950728156e+02 - -1.044196556182856e+02 - -1.048498268814360e+02 - -1.052815124999998e+02 - -1.057147160851634e+02 - -1.061494413040264e+02 - -1.065856918490972e+02 - -1.070234714266025e+02 - -1.074627837000000e+02 - -1.079036323073108e+02 - -1.083460208994117e+02 - -1.087899531790557e+02 - -1.092354329168266e+02 - -1.096824637999998e+02 - -1.101310494754678e+02 - -1.105811936593542e+02 - -1.110329000832090e+02 - -1.114861724712110e+02 - -1.119410145000000e+02 - -1.123974298499644e+02 - -1.128554223365672e+02 - -1.133149957276709e+02 - -1.137761536721920e+02 - -1.142388998999998e+02 - -1.147032381951767e+02 - -1.151691723223398e+02 - -1.156367060267053e+02 - -1.161058430340008e+02 - -1.165765871000000e+02 - -1.170489420136372e+02 - -1.175229116129598e+02 - -1.179984996644491e+02 - -1.184757098197581e+02 - -1.189545458999998e+02 - -1.194350118004852e+02 - -1.199171112501401e+02 - -1.204008480035419e+02 - -1.208862259161727e+02 - -1.213732488000000e+02 - -1.218619204419225e+02 - -1.223522446637547e+02 - -1.228442252993658e+02 - -1.233378661832514e+02 - -1.238331710999998e+02 - -1.243301438371392e+02 - -1.248287883218059e+02 - -1.253291084262349e+02 - -1.258311078947497e+02 - -1.263347906000000e+02 - -1.268401604692280e+02 - -1.273472212887372e+02 - -1.278559768940106e+02 - -1.283664312433523e+02 - -1.288785881999998e+02 - -1.293924515790011e+02 - -1.299080252758494e+02 - -1.304253131892150e+02 - -1.309443191941241e+02 - -1.314650472000000e+02 - -1.319875011267033e+02 - -1.325116848422910e+02 - -1.330376022476014e+02 - -1.335652573069860e+02 - -1.340946538999998e+02 - -1.346257958892211e+02 - -1.351586873010075e+02 - -1.356933320835031e+02 - -1.362297340185993e+02 - -1.367678971000000e+02 - -1.373078254089903e+02 - -1.378495227933144e+02 - -1.383929931342302e+02 - -1.389382404506380e+02 - -1.394852686999998e+02 - -1.400340818144768e+02 - -1.405846838138316e+02 - -1.411370786853171e+02 - -1.416912703410207e+02 - -1.422472628000000e+02 - -1.428050601118040e+02 - -1.433646661562381e+02 - -1.439260848884736e+02 - -1.444893204354731e+02 - -1.450543767999998e+02 - -1.456212579173106e+02 - -1.461899678121767e+02 - -1.467605105156440e+02 - -1.473328900351724e+02 - -1.479071104000000e+02 - -1.484831756560318e+02 - -1.490610898537698e+02 - -1.496408570188282e+02 - -1.502224811435522e+02 - -1.508059663000000e+02 - -1.513913165938295e+02 - -1.519785360517816e+02 - -1.525676287092765e+02 - -1.531585986433134e+02 - -1.537514498999998e+02 - -1.543461865304275e+02 - -1.549428126935839e+02 - -1.555413324987964e+02 - -1.561417499433451e+02 - -1.567440691000000e+02 - -1.573482940967384e+02 - -1.579544290618548e+02 - -1.585624781173004e+02 - -1.591724453723425e+02 - -1.597843348999998e+02 - -1.603981507727703e+02 - -1.610138971515657e+02 - -1.616315781879854e+02 - -1.622511979884414e+02 - -1.628727607000000e+02 - -1.634962704824068e+02 - -1.641217314319286e+02 - -1.647491476962519e+02 - -1.653785235159056e+02 - -1.660098629999998e+02 - -1.666431702132707e+02 - -1.672784494025457e+02 - -1.679157047805161e+02 - -1.685549404452619e+02 - -1.691961606000000e+02 - -1.698393694891200e+02 - -1.704845712252935e+02 - -1.711317699673001e+02 - -1.717809699904770e+02 - -1.724321754999998e+02 - -1.730853906636835e+02 - -1.737406197069920e+02 - -1.743978668390772e+02 - -1.750571362267288e+02 - -1.757184321000000e+02 - -1.763817587329360e+02 - -1.770471204015179e+02 - -1.777145213342737e+02 - -1.783839656916257e+02 - -1.790554576999997e+02 - -1.797290016348361e+02 - -1.804046017812607e+02 - -1.810822624074922e+02 - -1.817619877551305e+02 - -1.824437821000000e+02 - -1.831276497291853e+02 - -1.838135948809234e+02 - -1.845016218201234e+02 - -1.851917348679873e+02 - -1.858839382999998e+02 - -1.865782363787204e+02 - -1.872746334451072e+02 - -1.879731338116912e+02 - -1.886737417231232e+02 - -1.893764615000000e+02 - -1.900812975069574e+02 - -1.907882540726982e+02 - -1.914973354967214e+02 - -1.922085460544087e+02 - -1.929218900999998e+02 - -1.936373720194894e+02 - -1.943549961169706e+02 - -1.950747667123967e+02 - -1.957966881820183e+02 - -1.965207649000000e+02 - -1.972470012275908e+02 - -1.979754014928308e+02 - -1.987059700466389e+02 - -1.994387112870401e+02 - -2.001736295999997e+02 - -2.009107293657797e+02 - -2.016500149830146e+02 - -2.023914908231823e+02 - -2.031351612174878e+02 - -2.038810306000000e+02 - -2.046291034502658e+02 - -2.053793841544099e+02 - -2.061318770718700e+02 - -2.068865865659776e+02 - -2.076435170999997e+02 - -2.084026731731890e+02 - -2.091640591716557e+02 - -2.099276794995817e+02 - -2.106935386300690e+02 - -2.114616410000000e+02 - -2.122319910255027e+02 - -2.130045931490896e+02 - -2.137794518362718e+02 - -2.145565715736208e+02 - -2.153359567999997e+02 - -2.161176119510612e+02 - -2.169015415764713e+02 - -2.176877501734888e+02 - -2.184762421224458e+02 - -2.192670219000000e+02 - -2.200600940505141e+02 - -2.208554631128035e+02 - -2.216531335679009e+02 - -2.224531098207831e+02 - -2.232553963999997e+02 - -2.240599978997985e+02 - -2.248669188401317e+02 - -2.256761637092654e+02 - -2.264877369816284e+02 - -2.273016432000000e+02 - -2.281178869415660e+02 - -2.289364727411434e+02 - -2.297574051254879e+02 - -2.305806886273285e+02 - -2.314063277999997e+02 - -2.322343272067604e+02 - -2.330646913987978e+02 - -2.338974249389632e+02 - -2.347325324124834e+02 - -2.355700184000000e+02 - -2.364098874788788e+02 - -2.372521442301691e+02 - -2.380967932316097e+02 - -2.389438390563173e+02 - -2.397932862999997e+02 - -2.406451395699314e+02 - -2.414994034603918e+02 - -2.423560825773335e+02 - -2.432151815494090e+02 - -2.440767050000000e+02 - -2.449406575494712e+02 - -2.458070438246558e+02 - -2.466758684438366e+02 - -2.475471360143982e+02 - -2.484208511999996e+02 - -2.492970186823550e+02 - -2.501756430678903e+02 - -2.510567289807632e+02 - -2.519402811010791e+02 - -2.528263041000000e+02 - -2.537148026392507e+02 - -2.546057813786489e+02 - -2.554992449908618e+02 - -2.563951981686694e+02 - -2.572936455999996e+02 - -2.581945919701986e+02 - -2.590980419711499e+02 - -2.600040002856254e+02 - -2.609124715849065e+02 - -2.618234606000000e+02 - -2.627369720784054e+02 - -2.636530106775519e+02 - -2.645715811006028e+02 - -2.654926881465747e+02 - -2.664163364999997e+02 - -2.673425308135112e+02 - -2.682712759281322e+02 - -2.692025766270102e+02 - -2.701364375396030e+02 - -2.710728634000000e+02 - -2.720118590149941e+02 - -2.729534291763713e+02 - -2.738975786300543e+02 - -2.748443120676544e+02 - -2.757936342999997e+02 - -2.767455501787848e+02 - -2.777000643997414e+02 - -2.786571816989448e+02 - -2.796169069311608e+02 - -2.805792449000000e+02 - -2.815442003833780e+02 - -2.825117782146733e+02 - -2.834819832031981e+02 - -2.844548201023671e+02 - -2.854302936999997e+02 - -2.864084088239409e+02 - -2.873891703596309e+02 - -2.883725831483384e+02 - -2.893586519481404e+02 - -2.903473816000000e+02 - -2.913387769892773e+02 - -2.923328429461174e+02 - -2.933295843055886e+02 - -2.943290059327143e+02 - -2.953311126999996e+02 - -2.963359094688269e+02 - -2.973434010446480e+02 - -2.983535922946355e+02 - -2.993664881931061e+02 - -3.003820936000000e+02 - -3.014004133189056e+02 - -3.024214522481863e+02 - -3.034452153213495e+02 - -3.044717074825456e+02 - -3.055009335999997e+02 - -3.065328985120693e+02 - -3.075676071368449e+02 - -3.086050644279766e+02 - -3.096452753553112e+02 - -3.106882447999996e+02 - -3.117339776182681e+02 - -3.127824787990806e+02 - -3.138337533166528e+02 - -3.148878060732492e+02 - -3.159446419999996e+02 - -3.170042660531784e+02 - -3.180666831989414e+02 - -3.191318984100575e+02 - -3.201999166629245e+02 - -3.212707428999996e+02 - -3.223443820580361e+02 - -3.234208391391681e+02 - -3.245001191331626e+02 - -3.255822269890704e+02 - -3.266671677000000e+02 - -3.277549462905472e+02 - -3.288455677875165e+02 - -3.299390371822755e+02 - -3.310353594166140e+02 - -3.321345394999996e+02 - -3.332365824854958e+02 - -3.343414934139734e+02 - -3.354492773045120e+02 - -3.365599391517927e+02 - -3.376734840000000e+02 - -3.387899169180687e+02 - -3.399092429402671e+02 - -3.410314670886827e+02 - -3.421565943845668e+02 - -3.432846298999996e+02 - -3.444155787253185e+02 - -3.455494458929433e+02 - -3.466862364711880e+02 - -3.478259555971263e+02 - -3.489686083000000e+02 - -3.501141995805723e+02 - -3.512627346186799e+02 - -3.524142185495274e+02 - -3.535686563776662e+02 - -3.547260531999996e+02 - -3.558864141649047e+02 - -3.570497443588797e+02 - -3.582160488781844e+02 - -3.593853328562213e+02 - -3.605576014000000e+02 - -3.617328596203877e+02 - -3.629111127187760e+02 - -3.640923658296630e+02 - -3.652766239636252e+02 - -3.664638922999996e+02 - -3.676541760949210e+02 - -3.688474804479435e+02 - -3.700438104641370e+02 - -3.712431713192604e+02 - -3.724455682000000e+02 - -3.736510062917217e+02 - -3.748594907617601e+02 - -3.760710267615897e+02 - -3.772856194324323e+02 - -3.785032739999995e+02 - -3.797239957155368e+02 - -3.809477897125092e+02 - -3.821746611611994e+02 - -3.834046153278488e+02 - -3.846376574000000e+02 - -3.858737925371631e+02 - -3.871130260109560e+02 - -3.883553630688227e+02 - -3.896008088834330e+02 - -3.908493686999996e+02 - -3.921010477895665e+02 - -3.933558513233559e+02 - -3.946137845264227e+02 - -3.958748527376295e+02 - -3.971390612000000e+02 - -3.984064151109821e+02 - -3.996769197585321e+02 - -4.009505804131749e+02 - -4.022274022910074e+02 - -4.035073906999995e+02 - -4.047905509809469e+02 - -4.060768883569506e+02 - -4.073664080804837e+02 - -4.086591154923789e+02 - -4.099550159000000e+02 - -4.112541145837781e+02 - -4.125564168232350e+02 - -4.138619279264533e+02 - -4.151706532436620e+02 - -4.164825980999995e+02 - -4.177977678009782e+02 - -4.191161676484082e+02 - -4.204378029703449e+02 - -4.217626791355866e+02 - -4.230908015000000e+02 - -4.244221753941545e+02 - -4.257568060915354e+02 - -4.270946989435893e+02 - -4.284358594322071e+02 - -4.297802928999995e+02 - -4.311280046181774e+02 - -4.324789999621266e+02 - -4.338332843406102e+02 - -4.351908631680312e+02 - -4.365517418000000e+02 - -4.379159255766193e+02 - -4.392834199290754e+02 - -4.406542302894571e+02 - -4.420283620541414e+02 - -4.434058205999995e+02 - -4.447866113008026e+02 - -4.461707395611302e+02 - -4.475582108324218e+02 - -4.489490306166049e+02 - -4.503432043000000e+02 - -4.517407372272212e+02 - -4.531416348857516e+02 - -4.545459027469901e+02 - -4.559535462055746e+02 - -4.573645706999994e+02 - -4.587789817092769e+02 - -4.601967847429616e+02 - -4.616179852648949e+02 - -4.630425886631084e+02 - -4.644706004000000e+02 - -4.659020259847504e+02 - -4.673368709042424e+02 - -4.687751406384571e+02 - -4.702168406679589e+02 - -4.716619764999995e+02 - -4.731105536500806e+02 - -4.745625775980045e+02 - -4.760180538297375e+02 - -4.774769878558138e+02 - -4.789393852000000e+02 - -4.804052513950263e+02 - -4.818745919803221e+02 - -4.833474124743740e+02 - -4.848237183656923e+02 - -4.863035151999994e+02 - -4.877868085453354e+02 - -4.892736039052198e+02 - -4.907639068268139e+02 - -4.922577229425711e+02 - -4.937550578000000e+02 - -4.952559169027076e+02 - -4.967603058178435e+02 - -4.982682301416788e+02 - -4.997796954853789e+02 - -5.012947073999994e+02 - -5.028132714194502e+02 - -5.043353931676896e+02 - -5.058610782730644e+02 - -5.073903323321115e+02 - -5.089231609000000e+02 - -5.104595695386481e+02 - -5.119995639358939e+02 - -5.135431497453484e+02 - -5.150903325247945e+02 - -5.166411178999995e+02 - -5.181955115300345e+02 - -5.197535190105982e+02 - -5.213151459679927e+02 - -5.228803980937674e+02 - -5.244492810000000e+02 - -5.260218002787250e+02 - -5.275979616609960e+02 - -5.291777708470047e+02 - -5.307612334400695e+02 - -5.323483550999995e+02 - -5.339391415258532e+02 - -5.355335984055753e+02 - -5.371317314077364e+02 - -5.387335461786030e+02 - -5.403390484000000e+02 - -5.419482437848817e+02 - -5.435611380730882e+02 - -5.451777369746786e+02 - -5.467980461477442e+02 - -5.484220712999994e+02 - -5.500498181706811e+02 - -5.516812924850077e+02 - -5.533164999617454e+02 - -5.549554463178829e+02 - -5.565981372999994e+02 - -5.582445786620732e+02 - -5.598947761113077e+02 - -5.615487353817318e+02 - -5.632064622631164e+02 - -5.648679624999994e+02 - -5.665332418238921e+02 - -5.682023060429622e+02 - -5.698751609401672e+02 - -5.715518122344557e+02 - -5.732322656999993e+02 - -5.749165271427032e+02 - -5.766046023386582e+02 - -5.782964970855437e+02 - -5.799922172195480e+02 - -5.816917684999994e+02 - -5.833951566715182e+02 - -5.851023876259811e+02 - -5.868134672043320e+02 - -5.885284011210334e+02 - -5.902471951999993e+02 - -5.919698553287222e+02 - -5.936963873375214e+02 - -5.954267970459595e+02 - -5.971610902818754e+02 - -5.988992728999993e+02 - -6.006413507613062e+02 - -6.023873296844711e+02 - -6.041372155081436e+02 - -6.058910141182311e+02 - -6.076487313999993e+02 - -6.094103732273231e+02 - -6.111759454411804e+02 - -6.129454539033432e+02 - -6.147189045204622e+02 - -6.164963032000001e+02 - -6.182776558378988e+02 - -6.200629682925465e+02 - -6.218522464515877e+02 - -6.236454962577363e+02 - -6.254427235999993e+02 - -6.272439343587159e+02 - -6.290491345295636e+02 - -6.308583300588987e+02 - -6.326715267788347e+02 - -6.344887306000001e+02 - -6.363099474872770e+02 - -6.381351833941451e+02 - -6.399644442896572e+02 - -6.417977361628546e+02 - -6.436350648999993e+02 - -6.454764363684590e+02 - -6.473218566292518e+02 - -6.491713317125350e+02 - -6.510248675271151e+02 - -6.528824700000000e+02 - -6.547441451008573e+02 - -6.566098988943567e+02 - -6.584797373808955e+02 - -6.603536664383599e+02 - -6.622316920999993e+02 - -6.641138204605409e+02 - -6.660000574329696e+02 - -6.678904089961051e+02 - -6.697848812885560e+02 - -6.716834803000000e+02 - -6.735862119462199e+02 - -6.754930822688247e+02 - -6.774040973560088e+02 - -6.793192633079277e+02 - -6.812385860999992e+02 - -6.831620716800010e+02 - -6.850897262089175e+02 - -6.870215557906422e+02 - -6.889575663679858e+02 - -6.908977640000001e+02 - -6.928421548145254e+02 - -6.947907448778678e+02 - -6.967435402481692e+02 - -6.987005469959722e+02 - -7.006617711999993e+02 - -7.026272189534540e+02 - -7.045968963883171e+02 - -7.065708096021641e+02 - -7.085489646318440e+02 - -7.105313676000000e+02 - -7.125180246666655e+02 - -7.145089419064375e+02 - -7.165041254104643e+02 - -7.185035813280965e+02 - -7.205073157999993e+02 - -7.225153349567163e+02 - -7.245276449240899e+02 - -7.265442518464891e+02 - -7.285651618951177e+02 - -7.305903812000000e+02 - -7.326199158832851e+02 - -7.346537721472801e+02 - -7.366919561576724e+02 - -7.387344740033407e+02 - -7.407813318999993e+02 - -7.428325361060332e+02 - -7.448880927069067e+02 - -7.469480078569493e+02 - -7.490122878703525e+02 - -7.510809389000000e+02 - -7.531539670309830e+02 - -7.552313785295614e+02 - -7.573131796529314e+02 - -7.593993765758833e+02 - -7.614899754999992e+02 - -7.635849826556215e+02 - -7.656844042998581e+02 - -7.677882466626152e+02 - -7.698965159244972e+02 - -7.720092183000000e+02 - -7.741263600422619e+02 - -7.762479474594095e+02 - -7.783739868214470e+02 - -7.805044843222228e+02 - -7.826394461999992e+02 - -7.847788787331309e+02 - -7.869227882276110e+02 - -7.890711809493379e+02 - -7.912240631015031e+02 - -7.933814410000000e+02 - -7.955433210068886e+02 - -7.977097093640062e+02 - -7.998806123337483e+02 - -8.020560362523712e+02 - -8.042359873999992e+02 - -8.064204720446323e+02 - -8.086094965664213e+02 - -8.108030673053524e+02 - -8.130011905039750e+02 - -8.152038725000000e+02 - -8.174111196729889e+02 - -8.196229383028856e+02 - -8.218393347070877e+02 - -8.240603152936806e+02 - -8.262858863999992e+02 - -8.285160543327190e+02 - -8.307508254786889e+02 - -8.329902062108882e+02 - -8.352342028550189e+02 - -8.374828218000000e+02 - -8.397360694583805e+02 - -8.419939521636865e+02 - -8.442564762682848e+02 - -8.465236481828920e+02 - -8.487954742999991e+02 - -8.510719610066617e+02 - -8.533531147279726e+02 - -8.556389418758610e+02 - -8.579294488297842e+02 - -8.602246420000000e+02 - -8.625245278111681e+02 - -8.648291126593311e+02 - -8.671384029773127e+02 - -8.694524052578884e+02 - -8.717711258999991e+02 - -8.740945712693658e+02 - -8.764227478547659e+02 - -8.787556621558366e+02 - -8.810933206360036e+02 - -8.834357297000000e+02 - -8.857828957473700e+02 - -8.881348253000285e+02 - -8.904915248639498e+02 - -8.928530008754832e+02 - -8.952192597999992e+02 - -8.975903081273602e+02 - -8.999661523549036e+02 - -9.023467989915350e+02 - -9.047322545556517e+02 - -9.071225255000001e+02 - -9.095176182642568e+02 - -9.119175394073789e+02 - -9.143222954857910e+02 - -9.167318930073794e+02 - -9.191463384999990e+02 - -9.215656384936522e+02 - -9.239897994653498e+02 - -9.264188279352956e+02 - -9.288527305046009e+02 - -9.312915136999991e+02 - -9.337351840217814e+02 - -9.361837480744202e+02 - -9.386372124507991e+02 - -9.410955836845210e+02 - -9.435588682999991e+02 - -9.460270728408829e+02 - -9.485002039375468e+02 - -9.509782681943145e+02 - -9.534612721474879e+02 - -9.559492223999991e+02 - -9.584421255818636e+02 - -9.609399882443452e+02 - -9.634428169536077e+02 - -9.659506183300578e+02 - -9.684633989999990e+02 - -9.709811655949806e+02 - -9.735039247636544e+02 - -9.760316831188370e+02 - -9.785644472182881e+02 - -9.811022236999991e+02 - -9.836450192407020e+02 - -9.861928404528198e+02 - -9.887456939756197e+02 - -9.913035865101050e+02 - -9.938665246999991e+02 - -9.964345151588749e+02 - -9.990075645416573e+02 - -1.001585679508894e+03 - -1.004168866725833e+03 - -1.006757132999999e+03 - -1.009350485088950e+03 - -1.011948929193798e+03 - -1.014552472017065e+03 - -1.017161121149714e+03 - -1.019774882999999e+03 - -1.022393763477281e+03 - -1.025017769745607e+03 - -1.027646908706880e+03 - -1.030281186449000e+03 - -1.032920609999999e+03 - -1.035565186772393e+03 - -1.038214923106640e+03 - -1.040869825393126e+03 - -1.043529900494233e+03 - -1.046195154999999e+03 - -1.048865595518282e+03 - -1.051541229525064e+03 - -1.054222063914517e+03 - -1.056908104442841e+03 - -1.059599357999999e+03 - -1.062295832060889e+03 - -1.064997533253958e+03 - -1.067704468147946e+03 - -1.070416643533965e+03 - -1.073134066000000e+03 - -1.075856742179453e+03 - -1.078584679453085e+03 - -1.081317884808236e+03 - -1.084056364390976e+03 - -1.086800124999999e+03 - -1.089549173751501e+03 - -1.092303517161580e+03 - -1.095063162007773e+03 - -1.097828115663242e+03 - -1.100598385000000e+03 - -1.103373976558467e+03 - -1.106154896984741e+03 - -1.108941153067517e+03 - -1.111732751768433e+03 - -1.114529699999999e+03 - -1.117332004656191e+03 - -1.120139672719820e+03 - -1.122952711033347e+03 - -1.125771126202256e+03 - -1.128594925000000e+03 - -1.131424114391635e+03 - -1.134258701616623e+03 - -1.137098693726371e+03 - -1.139944097362279e+03 - -1.142794918999999e+03 - -1.145651165298781e+03 - -1.148512843975744e+03 - -1.151379962155369e+03 - -1.154252525751212e+03 - -1.157130542000000e+03 - -1.160014018647746e+03 - -1.162902961796701e+03 - -1.165797378002409e+03 - -1.168697275086654e+03 - -1.171602659999999e+03 - -1.174513539162380e+03 - -1.177429919411751e+03 - -1.180351807863387e+03 - -1.183279211838743e+03 - -1.186212138000000e+03 - -1.189150592852472e+03 - -1.192094584016226e+03 - -1.195044118757429e+03 - -1.197999203418656e+03 - -1.200959844999999e+03 - -1.203926050837031e+03 - -1.206897827704460e+03 - -1.209875182550288e+03 - -1.212858122751144e+03 - -1.215846655000000e+03 - -1.218840785789916e+03 - -1.221840522671824e+03 - -1.224845872987532e+03 - -1.227856843385819e+03 - -1.230873440999999e+03 - -1.233895673111333e+03 - -1.236923546192640e+03 - -1.239957067026041e+03 - -1.242996243170224e+03 - -1.246041082000000e+03 - -1.249091590572761e+03 - -1.252147775334870e+03 - -1.255209643154299e+03 - -1.258277201722480e+03 - -1.261350457999999e+03 - -1.264429418673061e+03 - -1.267514091394071e+03 - -1.270604483350415e+03 - -1.273700600740823e+03 - -1.276802451000000e+03 - -1.279910042060014e+03 - -1.283023380429426e+03 - -1.286142472688095e+03 - -1.289267326090673e+03 - -1.292397947999999e+03 - -1.295534345774196e+03 - -1.298676526619691e+03 - -1.301824497524618e+03 - -1.304978265240164e+03 - -1.308137837000000e+03 - -1.311303220289759e+03 - -1.314474422298625e+03 - -1.317651449999705e+03 - -1.320834310180745e+03 - -1.324023009999999e+03 - -1.327217556910311e+03 - -1.330417958531748e+03 - -1.333624221890711e+03 - -1.336836353161044e+03 - -1.340054360000000e+03 - -1.343278250622039e+03 - -1.346508031450468e+03 - -1.349743709083262e+03 - -1.352985291084887e+03 - -1.356232784999999e+03 - -1.359486198143600e+03 - -1.362745537187869e+03 - -1.366010809195683e+03 - -1.369282022032803e+03 - -1.372559183000000e+03 - -1.375842299046690e+03 - -1.379131377356324e+03 - -1.382426425045151e+03 - -1.385727449081319e+03 - -1.389034456999999e+03 - -1.392347456524483e+03 - -1.395666454635196e+03 - -1.398991458464414e+03 - -1.402322475610563e+03 - -1.405659513000000e+03 - -1.409002577344138e+03 - -1.412351676333446e+03 - -1.415706817605260e+03 - -1.419068008353351e+03 - -1.422435255999999e+03 - -1.425808567964313e+03 - -1.429187950969556e+03 - -1.432573411998037e+03 - -1.435964958719179e+03 - -1.439362599000000e+03 - -1.442766340439504e+03 - -1.446176189225631e+03 - -1.449592152360744e+03 - -1.453014238529275e+03 - -1.456442454999999e+03 - -1.459876808245435e+03 - -1.463317305593544e+03 - -1.466763954627232e+03 - -1.470216762966463e+03 - -1.473675738000000e+03 - -1.477140887005819e+03 - -1.480612217422037e+03 - -1.484089736511155e+03 - -1.487573451238554e+03 - -1.491063368999999e+03 - -1.494559497483912e+03 - -1.498061844364458e+03 - -1.501570417048641e+03 - -1.505085222548716e+03 - -1.508606267999999e+03 - -1.512133560790714e+03 - -1.515667108906144e+03 - -1.519206919999463e+03 - -1.522753000996140e+03 - -1.526305358999999e+03 - -1.529864001422905e+03 - -1.533428936276007e+03 - -1.537000171179230e+03 - -1.540577712963951e+03 - -1.544161568999999e+03 - -1.547751747018138e+03 - -1.551348254621497e+03 - -1.554951099280540e+03 - -1.558560288310355e+03 - -1.562175828999999e+03 - -1.565797728689906e+03 - -1.569425994958102e+03 - -1.573060635400619e+03 - -1.576701657553543e+03 - -1.580349068999999e+03 - -1.584002877314684e+03 - -1.587663089901193e+03 - -1.591329713983250e+03 - -1.595002756657312e+03 - -1.598682225999999e+03 - -1.602368130282464e+03 - -1.606060476003810e+03 - -1.609759270166310e+03 - -1.613464521194204e+03 - -1.617176236999999e+03 - -1.620894424965112e+03 - -1.624619091996676e+03 - -1.628350245392540e+03 - -1.632087893195996e+03 - -1.635832042999999e+03 - -1.639582702219653e+03 - -1.643339878880967e+03 - -1.647103580589531e+03 - -1.650873814125992e+03 - -1.654650586999999e+03 - -1.658433907212865e+03 - -1.662223782656940e+03 - -1.666020220927786e+03 - -1.669823229228366e+03 - -1.673632814999999e+03 - -1.677448985879331e+03 - -1.681271749582079e+03 - -1.685101113981527e+03 - -1.688937087086922e+03 - -1.692779675999999e+03 - -1.696628887589857e+03 - -1.700484730162859e+03 - -1.704347211664743e+03 - -1.708216339003609e+03 - -1.712092119999999e+03 - -1.715974562928047e+03 - -1.719863675285195e+03 - -1.723759464515762e+03 - -1.727661938269359e+03 - -1.731571103999999e+03 - -1.735486969207614e+03 - -1.739409542118944e+03 - -1.743338830603560e+03 - -1.747274841733617e+03 - -1.751217582999999e+03 - -1.755167062315964e+03 - -1.759123288009624e+03 - -1.763086267739076e+03 - -1.767056008086542e+03 - -1.771032516999999e+03 - -1.775015803098183e+03 - -1.779005873908525e+03 - -1.783002736756524e+03 - -1.787006399126180e+03 - -1.791016869000000e+03 - -1.795034154506543e+03 - -1.799058263107071e+03 - -1.803089202321619e+03 - -1.807126980015989e+03 - -1.811171603999998e+03 - -1.815223082025504e+03 - -1.819281421835726e+03 - -1.823346631247284e+03 - -1.827418718154363e+03 - -1.831497690000000e+03 - -1.835583554215247e+03 - -1.839676319355180e+03 - -1.843775993459518e+03 - -1.847882583413063e+03 - -1.851996096999998e+03 - -1.856116542493618e+03 - -1.860243927542824e+03 - -1.864378259929794e+03 - -1.868519547846306e+03 - -1.872667799000000e+03 - -1.876823020804590e+03 - -1.880985220849939e+03 - -1.885154407199114e+03 - -1.889330588466962e+03 - -1.893513771999998e+03 - -1.897703964771626e+03 - -1.901901175652285e+03 - -1.906105412964281e+03 - -1.910316683519642e+03 - -1.914534995000000e+03 - -1.918760355678869e+03 - -1.922992773607248e+03 - -1.927232256642219e+03 - -1.931478812455566e+03 - -1.935732448999998e+03 - -1.939993174351127e+03 - -1.944260996306766e+03 - -1.948535922544343e+03 - -1.952817960710870e+03 - -1.957107119000000e+03 - -1.961403405774432e+03 - -1.965706828656891e+03 - -1.970017395435863e+03 - -1.974335114379128e+03 - -1.978659992999998e+03 - -1.982992038634364e+03 - -1.987331259958815e+03 - -1.991677665406797e+03 - -1.996031262526477e+03 - -2.000392059000000e+03 - -2.004760062662544e+03 - -2.009135281420714e+03 - -2.013517723394651e+03 - -2.017907396963966e+03 - -2.022304309999998e+03 - -2.026708470129302e+03 - -2.031119885371980e+03 - -2.035538563783372e+03 - -2.039964513323241e+03 - -2.044397742000000e+03 - -2.048838257821666e+03 - -2.053286068652342e+03 - -2.057741182613919e+03 - -2.062203608203423e+03 - -2.066673352999998e+03 - -2.071150424296029e+03 - -2.075634830690161e+03 - -2.080126580708826e+03 - -2.084625682242698e+03 - -2.089132143000000e+03 - -2.093645970720743e+03 - -2.098167173603271e+03 - -2.102695759983049e+03 - -2.107231738184183e+03 - -2.111775115999998e+03 - -2.116325901057278e+03 - -2.120884101683680e+03 - -2.125449726108530e+03 - -2.130022782163747e+03 - -2.134603278000000e+03 - -2.139191221924691e+03 - -2.143786621957349e+03 - -2.148389485981318e+03 - -2.152999821836896e+03 - -2.157617637999998e+03 - -2.162242943074696e+03 - -2.166875744534069e+03 - -2.171516050262848e+03 - -2.176163869133622e+03 - -2.180819209000000e+03 - -2.185482077327040e+03 - -2.190152482871076e+03 - -2.194830433950524e+03 - -2.199515937814626e+03 - -2.204209002999998e+03 - -2.208909638535144e+03 - -2.213617851857877e+03 - -2.218333650781778e+03 - -2.223057044225780e+03 - -2.227788040000000e+03 - -2.232526645541351e+03 - -2.237272869895315e+03 - -2.242026721580949e+03 - -2.246788207788726e+03 - -2.251557336999999e+03 - -2.256334118250544e+03 - -2.261118559161676e+03 - -2.265910667352767e+03 - -2.270710451040453e+03 - -2.275517918999998e+03 - -2.280333080014267e+03 - -2.285155941593499e+03 - -2.289986511539142e+03 - -2.294824798563590e+03 - -2.299670810999998e+03 - -2.304524556927484e+03 - -2.309386044592275e+03 - -2.314255282195762e+03 - -2.319132277836808e+03 - -2.324017039999998e+03 - -2.328909577220459e+03 - -2.333809897224200e+03 - -2.338718008145149e+03 - -2.343633918994289e+03 - -2.348557637999998e+03 - -2.353489172912608e+03 - -2.358428531797252e+03 - -2.363375723128402e+03 - -2.368330755820120e+03 - -2.373293637999998e+03 - -2.378264377427878e+03 - -2.383242982526706e+03 - -2.388229461889857e+03 - -2.393223824063392e+03 - -2.398226076999998e+03 - -2.403236228525699e+03 - -2.408254287477974e+03 - -2.413280262494937e+03 - -2.418314161547432e+03 - -2.423355992999998e+03 - -2.428405765403690e+03 - -2.433463486890615e+03 - -2.438529165661329e+03 - -2.443602810190047e+03 - -2.448684428999998e+03 - -2.453774030522361e+03 - -2.458871622761939e+03 - -2.463977214083831e+03 - -2.469090813490053e+03 - -2.474212428999998e+03 - -2.479342068313477e+03 - -2.484479740528551e+03 - -2.489625454539379e+03 - -2.494779218375099e+03 - -2.499941039999998e+03 - -2.505110927624773e+03 - -2.510288890409285e+03 - -2.515474937052364e+03 - -2.520669075212765e+03 - -2.525871312999998e+03 - -2.531081658990217e+03 - -2.536300122220549e+03 - -2.541526711425658e+03 - -2.546761434689014e+03 - -2.552004299999998e+03 - -2.557255315555890e+03 - -2.562514490474060e+03 - -2.567781833501355e+03 - -2.573057352510476e+03 - -2.578341055999998e+03 - -2.583632952807378e+03 - -2.588933051312229e+03 - -2.594241359879810e+03 - -2.599557887014108e+03 - -2.604882640999998e+03 - -2.610215630196411e+03 - -2.615556863841929e+03 - -2.620906350516468e+03 - -2.626264097579904e+03 - -2.631630113999998e+03 - -2.637004409331177e+03 - -2.642386991059378e+03 - -2.647777867311749e+03 - -2.653177047878767e+03 - -2.658584540999998e+03 - -2.664000354190328e+03 - -2.669424496446296e+03 - -2.674856976816473e+03 - -2.680297803844182e+03 - -2.685746985999998e+03 - -2.691204531699670e+03 - -2.696670449221115e+03 - -2.702144747143579e+03 - -2.707627434527642e+03 - -2.713118519999998e+03 - -2.718618011850782e+03 - -2.724125918263655e+03 - -2.729642247949266e+03 - -2.735167010382318e+03 - -2.740700213999998e+03 - -2.746241866699575e+03 - -2.751791977076697e+03 - -2.757350554006517e+03 - -2.762917606479738e+03 - -2.768493143000000e+03 - -2.774077171851313e+03 - -2.779669701724049e+03 - -2.785270741295763e+03 - -2.790880299095185e+03 - -2.796498383999998e+03 - -2.802125004968091e+03 - -2.807760170344632e+03 - -2.813403888501788e+03 - -2.819056168106567e+03 - -2.824717018000000e+03 - -2.830386447079949e+03 - -2.836064464083062e+03 - -2.841751077483182e+03 - -2.847446295475182e+03 - -2.853150126999998e+03 - -2.858862581346520e+03 - -2.864583667200011e+03 - -2.870313392988722e+03 - -2.876051767015894e+03 - -2.881798798000000e+03 - -2.887554494917011e+03 - -2.893318866668325e+03 - -2.899091922031221e+03 - -2.904873669618204e+03 - -2.910664117999998e+03 - -2.916463275808826e+03 - -2.922271151990944e+03 - -2.928087755363771e+03 - -2.933913094445438e+03 - -2.939747178000000e+03 - -2.945590014959967e+03 - -2.951441614226611e+03 - -2.957301984588625e+03 - -2.963171134666888e+03 - -2.969049072999998e+03 - -2.974935808208847e+03 - -2.980831349417174e+03 - -2.986735705755709e+03 - -2.992648886132359e+03 - -2.998570899000000e+03 - -3.004501752659864e+03 - -3.010441455936329e+03 - -3.016390017858416e+03 - -3.022347447554316e+03 - -3.028313753999998e+03 - -3.034288946006182e+03 - -3.040273032141582e+03 - -3.046266021078663e+03 - -3.052267921739149e+03 - -3.058278743000000e+03 - -3.064298493698561e+03 - -3.070327182685398e+03 - -3.076364818827055e+03 - -3.082411411001809e+03 - -3.088466967999998e+03 - -3.094531498652569e+03 - -3.100605012177602e+03 - -3.106687517554494e+03 - -3.112779023262762e+03 - -3.118879538000000e+03 - -3.124989070695736e+03 - -3.131107630527278e+03 - -3.137235226491168e+03 - -3.143371867254447e+03 - -3.149517561999998e+03 - -3.155672319953097e+03 - -3.161836149115856e+03 - -3.168009058152651e+03 - -3.174191057129923e+03 - -3.180382155000000e+03 - -3.186582360055111e+03 - -3.192791681144167e+03 - -3.199010127274887e+03 - -3.205237707493432e+03 - -3.211474430999998e+03 - -3.217720306909038e+03 - -3.223975343611381e+03 - -3.230239549889151e+03 - -3.236512935355519e+03 - -3.242795509000000e+03 - -3.249087279482800e+03 - -3.255388255944051e+03 - -3.261698447489179e+03 - -3.268017862963467e+03 - -3.274346510999998e+03 - -3.280684400401313e+03 - -3.287031541121871e+03 - -3.293387942369432e+03 - -3.299753611888159e+03 - -3.306128559000000e+03 - -3.312512793688797e+03 - -3.318906324190636e+03 - -3.325309159228279e+03 - -3.331721308860119e+03 - -3.338142781999998e+03 - -3.344573586933190e+03 - -3.351013732692941e+03 - -3.357463228591956e+03 - -3.363922084041577e+03 - -3.370390307999997e+03 - -3.376867909193196e+03 - -3.383354896616435e+03 - -3.389851279509897e+03 - -3.396357067337695e+03 - -3.402872268999997e+03 - -3.409396893188545e+03 - -3.415930949268335e+03 - -3.422474446597307e+03 - -3.429027394238212e+03 - -3.435589800999997e+03 - -3.442161675674332e+03 - -3.448743027574159e+03 - -3.455333866086035e+03 - -3.461934200499129e+03 - -3.468544039999997e+03 - -3.475163393634110e+03 - -3.481792270131310e+03 - -3.488430678432703e+03 - -3.495078627927044e+03 - -3.501736127999997e+03 - -3.508403187927853e+03 - -3.515079816661691e+03 - -3.521766023349286e+03 - -3.528461817510494e+03 - -3.535167207999998e+03 - -3.541882203477436e+03 - -3.548606813620608e+03 - -3.555341047964333e+03 - -3.562084915431213e+03 - -3.568838424999997e+03 - -3.575601585773337e+03 - -3.582374407066678e+03 - -3.589156898185297e+03 - -3.595949068354316e+03 - -3.602750926999998e+03 - -3.609562483468940e+03 - -3.616383746264014e+03 - -3.623214724488114e+03 - -3.630055428392298e+03 - -3.636905866999997e+03 - -3.643766048793625e+03 - -3.650635983516456e+03 - -3.657515680680700e+03 - -3.664405149014039e+03 - -3.671304397999997e+03 - -3.678213437374473e+03 - -3.685132275760156e+03 - -3.692060922035369e+03 - -3.698999385901594e+03 - -3.705947676999997e+03 - -3.712905804797643e+03 - -3.719873778403308e+03 - -3.726851606752037e+03 - -3.733839298718909e+03 - -3.740836863999997e+03 - -3.747844312547997e+03 - -3.754861653211674e+03 - -3.761888895074585e+03 - -3.768926047955085e+03 - -3.775973120999997e+03 - -3.783030123074376e+03 - -3.790097063813473e+03 - -3.797173952745452e+03 - -3.804260798968512e+03 - -3.811357611999997e+03 - -3.818464401472386e+03 - -3.825581176303607e+03 - -3.832707945585785e+03 - -3.839844718954238e+03 - -3.846991505999998e+03 - -3.854148316201428e+03 - -3.861315158822798e+03 - -3.868492043129635e+03 - -3.875678978458987e+03 - -3.882875973999997e+03 - -3.890083038997269e+03 - -3.897300183310783e+03 - -3.904527416633095e+03 - -3.911764748154242e+03 - -3.919012186999997e+03 - -3.926269742452437e+03 - -3.933537424464352e+03 - -3.940815242621297e+03 - -3.948103205720294e+03 - -3.955401322999997e+03 - -3.962709604107895e+03 - -3.970028058998795e+03 - -3.977356697163350e+03 - -3.984695527326294e+03 - -3.992044558999997e+03 - -3.999403802144854e+03 - -4.006773266302151e+03 - -4.014152960820400e+03 - -4.021542894928240e+03 - -4.028943077999997e+03 - -4.036353519583599e+03 - -4.043774229513202e+03 - -4.051205217431756e+03 - -4.058646492564995e+03 - -4.066098063999997e+03 - -4.073559940995820e+03 - -4.081032133755226e+03 - -4.088514652104142e+03 - -4.096007504979870e+03 - -4.103510702000000e+03 - -4.111024253097677e+03 - -4.118548167510886e+03 - -4.126082454416708e+03 - -4.133627123225803e+03 - -4.141182184000000e+03 - -4.148747646853033e+03 - -4.156323520486682e+03 - -4.163909814098826e+03 - -4.171506538118098e+03 - -4.179113701999993e+03 - -4.186731314728609e+03 - -4.194359386189681e+03 - -4.201997926116393e+03 - -4.209646943720986e+03 - -4.217306449000000e+03 - -4.224976452122954e+03 - -4.232656961817923e+03 - -4.240347987240753e+03 - -4.248049538718602e+03 - -4.255761626000000e+03 - -4.263484258397591e+03 - -4.271217445246016e+03 - -4.278961196276451e+03 - -4.286715521743729e+03 - -4.294480431000000e+03 - -4.302255933066315e+03 - -4.310042038085233e+03 - -4.317838756007569e+03 - -4.325646096087124e+03 - -4.333464067999995e+03 - -4.341292681602012e+03 - -4.349131946225953e+03 - -4.356981871466000e+03 - -4.364842467485710e+03 - -4.372713744000000e+03 - -4.380595710372718e+03 - -4.388488375861229e+03 - -4.396391750264422e+03 - -4.404305844160006e+03 - -4.412230667000000e+03 - -4.420166227736474e+03 - -4.428112536405837e+03 - -4.436069603088062e+03 - -4.444037437481978e+03 - -4.452016049000000e+03 - -4.460005447074678e+03 - -4.468005641867199e+03 - -4.476016643204103e+03 - -4.484038460200805e+03 - -4.492071102999995e+03 - -4.500114582060231e+03 - -4.508168906299815e+03 - -4.516234085098625e+03 - -4.524310129075975e+03 - -4.532397048000000e+03 - -4.540494851104932e+03 - -4.548603547974418e+03 - -4.556723148595408e+03 - -4.564853663376500e+03 - -4.572995102000000e+03 - -4.581147473755137e+03 - -4.589310788334117e+03 - -4.597485055595826e+03 - -4.605670285497996e+03 - -4.613866488000000e+03 - -4.622073673035890e+03 - -4.630291850451470e+03 - -4.638521029781397e+03 - -4.646761220207367e+03 - -4.655012431999994e+03 - -4.663274675842531e+03 - -4.671547961173437e+03 - -4.679832297267551e+03 - -4.688127693710799e+03 - -4.696434161000000e+03 - -4.704751709752170e+03 - -4.713080348793824e+03 - -4.721420087561993e+03 - -4.729770937031085e+03 - -4.738132907000000e+03 - -4.746506006604411e+03 - -4.754890245715343e+03 - -4.763285634540516e+03 - -4.771692183448750e+03 - -4.780109901999994e+03 - -4.788538799466528e+03 - -4.796978886096308e+03 - -4.805430172162917e+03 - -4.813892667577567e+03 - -4.822366381999994e+03 - -4.830851325088147e+03 - -4.839347507060687e+03 - -4.847854938123849e+03 - -4.856373628221604e+03 - -4.864903587000000e+03 - -4.873444824101478e+03 - -4.881997349859994e+03 - -4.890561174364984e+03 - -4.899136307099045e+03 - -4.907722758000000e+03 - -4.916320537362784e+03 - -4.924929655587317e+03 - -4.933550122528648e+03 - -4.942181947260091e+03 - -4.950825139999994e+03 - -4.959479711457802e+03 - -4.968145671175524e+03 - -4.976823028809056e+03 - -4.985511794647833e+03 - -4.994211978999993e+03 - -5.002923592007461e+03 - -5.011646643245516e+03 - -5.020381142480443e+03 - -5.029127099988444e+03 - -5.037884526000000e+03 - -5.046653430641881e+03 - -5.055433823857634e+03 - -5.064225715527905e+03 - -5.073029115529123e+03 - -5.081844034000000e+03 - -5.090670481166524e+03 - -5.099508466925161e+03 - -5.108358001180135e+03 - -5.117219094017154e+03 - -5.126091755999993e+03 - -5.134975997626908e+03 - -5.143871827953957e+03 - -5.152779256704796e+03 - -5.161698295082459e+03 - -5.170628952999993e+03 - -5.179571239778229e+03 - -5.188525166029071e+03 - -5.197490742130520e+03 - -5.206467977662855e+03 - -5.215456883000000e+03 - -5.224457468752808e+03 - -5.233469744262066e+03 - -5.242493719420175e+03 - -5.251529405361101e+03 - -5.260576812000000e+03 - -5.269635948683524e+03 - -5.278706825911151e+03 - -5.287789454172008e+03 - -5.296883843495917e+03 - -5.305990003999993e+03 - -5.315107945871962e+03 - -5.324237679253967e+03 - -5.333379214299059e+03 - -5.342532561186867e+03 - -5.351697729999993e+03 - -5.360874730862462e+03 - -5.370063574314554e+03 - -5.379264270604972e+03 - -5.388476829418795e+03 - -5.397701261000000e+03 - -5.406937575887649e+03 - -5.416185784228891e+03 - -5.425445896082409e+03 - -5.434717921547790e+03 - -5.444001871000000e+03 - -5.453297754883592e+03 - -5.462605583222671e+03 - -5.471925366229407e+03 - -5.481257114511772e+03 - -5.490600837999993e+03 - -5.499956546429602e+03 - -5.509324250592133e+03 - -5.518703961068116e+03 - -5.528095687743725e+03 - -5.537499440999993e+03 - -5.546915231361128e+03 - -5.556343068498348e+03 - -5.565782962476614e+03 - -5.575234924238452e+03 - -5.584698964000000e+03 - -5.594175091687396e+03 - -5.603663318133420e+03 - -5.613163653827974e+03 - -5.622676108416792e+03 - -5.632200692000000e+03 - -5.641737415094019e+03 - -5.651286288507457e+03 - -5.660847322604374e+03 - -5.670420527008017e+03 - -5.680005911999993e+03 - -5.689603488367688e+03 - -5.699213267038800e+03 - -5.708835258184300e+03 - -5.718469470901945e+03 - -5.728115915999992e+03 - -5.737774605002216e+03 - -5.747445547634946e+03 - -5.757128753652110e+03 - -5.766824233562706e+03 - -5.776531998000000e+03 - -5.786252057564687e+03 - -5.795984422575620e+03 - -5.805729103393980e+03 - -5.815486110517342e+03 - -5.825255454000000e+03 - -5.835037143865786e+03 - -5.844831191184440e+03 - -5.854637606668529e+03 - -5.864456400127173e+03 - -5.874287581999993e+03 - -5.884131163070459e+03 - -5.893987153665426e+03 - -5.903855564090225e+03 - -5.913736404781277e+03 - -5.923629686000000e+03 - -5.933535418061928e+03 - -5.943453611973397e+03 - -5.953384278439786e+03 - -5.963327427438455e+03 - -5.973283069000000e+03 - -5.983251213525049e+03 - -5.993231872573540e+03 - -6.003225056744913e+03 - -6.013230774891098e+03 - -6.023249038000000e+03 - -6.033279857947543e+03 - -6.043323244258373e+03 - -6.053379206808452e+03 - -6.063447756872029e+03 - -6.073528904999992e+03 - -6.083622661322729e+03 - -6.093729036471069e+03 - -6.103848041095609e+03 - -6.113979685699232e+03 - -6.124123981000000e+03 - -6.134280937646101e+03 - -6.144450565430006e+03 - -6.154632874755873e+03 - -6.164827877191976e+03 - -6.175035583000000e+03 - -6.185256001935748e+03 - -6.195489145360168e+03 - -6.205735024246584e+03 - -6.215993648382001e+03 - -6.226265028000000e+03 - -6.236549173839082e+03 - -6.246846097225249e+03 - -6.257155808917487e+03 - -6.267478318647532e+03 - -6.277813636999993e+03 - -6.288161775039973e+03 - -6.298522743318929e+03 - -6.308896552332133e+03 - -6.319283212690151e+03 - -6.329682735000000e+03 - -6.340095129841887e+03 - -6.350520407726451e+03 - -6.360958579315570e+03 - -6.371409655512612e+03 - -6.381873647000000e+03 - -6.392350564293673e+03 - -6.402840417873253e+03 - -6.413343218449801e+03 - -6.423858977046060e+03 - -6.434387704000000e+03 - -6.444929409479182e+03 - -6.455484104800415e+03 - -6.466051800878468e+03 - -6.476632507643834e+03 - -6.487226235999992e+03 - -6.497832997260840e+03 - -6.508452801649206e+03 - -6.519085659445890e+03 - -6.529731581482401e+03 - -6.540390579000000e+03 - -6.551062663116751e+03 - -6.561747843536938e+03 - -6.572446130639311e+03 - -6.583157536279329e+03 - -6.593882071000000e+03 - -6.604619744763902e+03 - -6.615370568925604e+03 - -6.626134554413510e+03 - -6.636911711064461e+03 - -6.647702049999992e+03 - -6.658505582840396e+03 - -6.669322319643610e+03 - -6.680152270785791e+03 - -6.690995447680221e+03 - -6.701851860999993e+03 - -6.712721521095499e+03 - -6.723604439166686e+03 - -6.734500626205399e+03 - -6.745410092579864e+03 - -6.756332849000000e+03 - -6.767268906377159e+03 - -6.778218275408767e+03 - -6.789180966973428e+03 - -6.800156992270870e+03 - -6.811146362000000e+03 - -6.822149086596000e+03 - -6.833165176809022e+03 - -6.844194643583943e+03 - -6.855237498022965e+03 - -6.866293750999992e+03 - -6.877363413246921e+03 - -6.888446495554016e+03 - -6.899543008749155e+03 - -6.910652963678518e+03 - -6.921776370999992e+03 - -6.932913241460104e+03 - -6.944063586638155e+03 - -6.955227417524035e+03 - -6.966404743973952e+03 - -6.977595577000000e+03 - -6.988799928187199e+03 - -7.000017808173458e+03 - -7.011249227729020e+03 - -7.022494198140058e+03 - -7.033752730000000e+03 - -7.045024833685246e+03 - -7.056310520605544e+03 - -7.067609802022496e+03 - -7.078922688575014e+03 - -7.090249190999992e+03 - -7.101589320140114e+03 - -7.112943086874141e+03 - -7.124310502404821e+03 - -7.135691578318693e+03 - -7.147086324999992e+03 - -7.158494752468790e+03 - -7.169916872475182e+03 - -7.181352696510882e+03 - -7.192802235036809e+03 - -7.204265499000000e+03 - -7.215742499578333e+03 - -7.227233247391960e+03 - -7.238737753333357e+03 - -7.250256028887258e+03 - -7.261788085000000e+03 - -7.273333932305611e+03 - -7.284893581718426e+03 - -7.296467044458082e+03 - -7.308054332025791e+03 - -7.319655454999992e+03 - -7.331270423697963e+03 - -7.342899249833889e+03 - -7.354541944862027e+03 - -7.366198519315069e+03 - -7.377868983999992e+03 - -7.389553350032372e+03 - -7.401251628839381e+03 - -7.412963831476617e+03 - -7.424689968390403e+03 - -7.436430051000000e+03 - -7.448184091042194e+03 - -7.459952098877861e+03 - -7.471734085033887e+03 - -7.483530060856024e+03 - -7.495340038000000e+03 - -7.507164027981260e+03 - -7.519002041143363e+03 - -7.530854088088799e+03 - -7.542720180263871e+03 - -7.554600328999991e+03 - -7.566494545476364e+03 - -7.578402840747203e+03 - -7.590325225748156e+03 - -7.602261711334166e+03 - -7.614212308999990e+03 - -7.626177030375796e+03 - -7.638155885970103e+03 - -7.650148886679111e+03 - -7.662156044359298e+03 - -7.674177370000000e+03 - -7.686212874133715e+03 - -7.698262567927072e+03 - -7.710326462858042e+03 - -7.722404570574414e+03 - -7.734496902000000e+03 - -7.746603467726753e+03 - -7.758724278933637e+03 - -7.770859347070250e+03 - -7.783008683730720e+03 - -7.795172299999991e+03 - -7.807350206747154e+03 - -7.819542415323729e+03 - -7.831748936928582e+03 - -7.843969782379609e+03 - -7.856204962999991e+03 - -7.868454490389281e+03 - -7.880718375856472e+03 - -7.892996630459527e+03 - -7.905289265033489e+03 - -7.917596291000000e+03 - -7.929917719977670e+03 - -7.942253562811284e+03 - -7.954603830544003e+03 - -7.966968534806996e+03 - -7.979347687000000e+03 - -7.991741298275563e+03 - -8.004149379532312e+03 - -8.016571941875890e+03 - -8.029008996834256e+03 - -8.041460555999991e+03 - -8.053926630829063e+03 - -8.066407232164392e+03 - -8.078902371093302e+03 - -8.091412059283156e+03 - -8.103936307999991e+03 - -8.116475128348727e+03 - -8.129028531951320e+03 - -8.141596530160446e+03 - -8.154179133753471e+03 - -8.166776354000000e+03 - -8.179388202500601e+03 - -8.192014690774517e+03 - -8.204655830155478e+03 - -8.217311631752342e+03 - -8.229982107000000e+03 - -8.242667267443709e+03 - -8.255367124181290e+03 - -8.268081688506129e+03 - -8.280810972124258e+03 - -8.293554985999990e+03 - -8.306313740930424e+03 - -8.319087249046417e+03 - -8.331875522237864e+03 - -8.344678571514016e+03 - -8.357496408000001e+03 - -8.370329042981793e+03 - -8.383176487893126e+03 - -8.396038754236946e+03 - -8.408915853538949e+03 - -8.421807796999999e+03 - -8.434714595760075e+03 - -8.447636261558551e+03 - -8.460572806112319e+03 - -8.473524240852536e+03 - -8.486490577000000e+03 - -8.499471825734363e+03 - -8.512467998550057e+03 - -8.525479106914012e+03 - -8.538505162160651e+03 - -8.551546175999989e+03 - -8.564602160205039e+03 - -8.577673125806519e+03 - -8.590759084111069e+03 - -8.603860047081474e+03 - -8.616976026000000e+03 - -8.630107031891077e+03 - -8.643253076647045e+03 - -8.656414171854482e+03 - -8.669590328370747e+03 - -8.682781558000001e+03 - -8.695987872906602e+03 - -8.709209284090668e+03 - -8.722445802791402e+03 - -8.735697441007769e+03 - -8.748964210000000e+03 - -8.762246120773598e+03 - -8.775543185390141e+03 - -8.788855415760128e+03 - -8.802182823160678e+03 - -8.815525418999991e+03 - -8.828883214778334e+03 - -8.842256221886048e+03 - -8.855644451817980e+03 - -8.869047916276779e+03 - -8.882466627000000e+03 - -8.895900595656447e+03 - -8.909349833599377e+03 - -8.922814352320849e+03 - -8.936294163622882e+03 - -8.949789279000001e+03 - -8.963299709806102e+03 - -8.976825467697834e+03 - -8.990366564425331e+03 - -9.003923011733321e+03 - -9.017494820999989e+03 - -9.031082003570244e+03 - -9.044684571593196e+03 - -9.058302536801553e+03 - -9.071935910043938e+03 - -9.085584702999991e+03 - -9.099248927805194e+03 - -9.112928596071970e+03 - -9.126623719398038e+03 - -9.140334309541779e+03 - -9.154060378000000e+03 - -9.167801936143134e+03 - -9.181558995552323e+03 - -9.195331568052554e+03 - -9.209119665711642e+03 - -9.222923300000000e+03 - -9.236742482191501e+03 - -9.250577224366738e+03 - -9.264427538348678e+03 - -9.278293435300837e+03 - -9.292174926999989e+03 - -9.306072025514850e+03 - -9.319984742353185e+03 - -9.333913089239737e+03 - -9.347857078372264e+03 - -9.361816720999988e+03 - -9.375792028076301e+03 - -9.389783011923670e+03 - -9.403789684689073e+03 - -9.417812057757259e+03 - -9.431850143000000e+03 - -9.445903952452922e+03 - -9.459973497383473e+03 - -9.474058789280491e+03 - -9.488159840242311e+03 - -9.502276662000000e+03 - -9.516409266099370e+03 - -9.530557664431180e+03 - -9.544721868948835e+03 - -9.558901891554557e+03 - -9.573097743999990e+03 - -9.587309437907974e+03 - -9.601536984771086e+03 - -9.615780396443668e+03 - -9.630039685320193e+03 - -9.644314862999989e+03 - -9.658605940694017e+03 - -9.672912930240365e+03 - -9.687235843732506e+03 - -9.701574693379191e+03 - -9.715929491000001e+03 - -9.730300248146514e+03 - -9.744686976337332e+03 - -9.759089687418043e+03 - -9.773508393705906e+03 - -9.787943106999999e+03 - -9.802393838806964e+03 - -9.816860600913731e+03 - -9.831343405392694e+03 - -9.845842264577648e+03 - -9.860357189999990e+03 - -9.874888192875391e+03 - -9.889435285292540e+03 - -9.903998479577405e+03 - -9.918577788007758e+03 - -9.933173221999989e+03 - -9.947784792760667e+03 - -9.962412512866247e+03 - -9.977056394630243e+03 - -9.991716449514770e+03 - -1.000639269000000e+04 - -1.002108512827329e+04 - -1.003579377260607e+04 - -1.005051863510592e+04 - -1.006525973450424e+04 - -1.008001708000000e+04 - -1.009479067738785e+04 - -1.010958054488143e+04 - -1.012438669671707e+04 - -1.013920913701616e+04 - -1.015404787999999e+04 - -1.016890294387830e+04 - -1.018377433451942e+04 - -1.019866206104612e+04 - -1.021356614193473e+04 - -1.022848658999999e+04 - -1.024342341422066e+04 - -1.025837662498870e+04 - -1.027334623400460e+04 - -1.028833225445739e+04 - -1.030333470000000e+04 - -1.031835358368700e+04 - -1.033338891534757e+04 - -1.034844070623467e+04 - -1.036350897076085e+04 - -1.037859372000000e+04 - -1.039369496373519e+04 - -1.040881271589677e+04 - -1.042394698923176e+04 - -1.043909779325773e+04 - -1.045426513999999e+04 - -1.046944904320307e+04 - -1.048464951626011e+04 - -1.049986657147346e+04 - -1.051510021951631e+04 - -1.053035046999999e+04 - -1.054561733346490e+04 - -1.056090082649770e+04 - -1.057620096382862e+04 - -1.059151775501402e+04 - -1.060685121000000e+04 - -1.062220133982168e+04 - -1.063756815769902e+04 - -1.065295167679853e+04 - -1.066835190951487e+04 - -1.068376887000000e+04 - -1.069920257172756e+04 - -1.071465302083269e+04 - -1.073012022736731e+04 - -1.074560420973240e+04 - -1.076110497999999e+04 - -1.077662254698522e+04 - -1.079215692468130e+04 - -1.080770812602064e+04 - -1.082327616047952e+04 - -1.083886103999999e+04 - -1.085446277832030e+04 - -1.087008138917964e+04 - -1.088571688451933e+04 - -1.090136927381244e+04 - -1.091703857000000e+04 - -1.093272478707855e+04 - -1.094842793381667e+04 - -1.096414802233435e+04 - -1.097988507119364e+04 - -1.099563909000000e+04 - -1.101141008471468e+04 - -1.102719807131307e+04 - -1.104300306633410e+04 - -1.105882508291791e+04 - -1.107466412999999e+04 - -1.109052021511841e+04 - -1.110639335038349e+04 - -1.112228355101184e+04 - -1.113819083451417e+04 - -1.115411520999999e+04 - -1.117005668368749e+04 - -1.118601527242516e+04 - -1.120199099177015e+04 - -1.121798385114509e+04 - -1.123399386000000e+04 - -1.125002102929127e+04 - -1.126606537454743e+04 - -1.128212691149971e+04 - -1.129820565394142e+04 - -1.131430161000000e+04 - -1.133041478676655e+04 - -1.134654520134832e+04 - -1.136269286880464e+04 - -1.137885779750048e+04 - -1.139503999999999e+04 - -1.141123949060806e+04 - -1.142745627830015e+04 - -1.144369037489935e+04 - -1.145994179819328e+04 - -1.147621056000000e+04 - -1.149249666929363e+04 - -1.150880014040390e+04 - -1.152512098586926e+04 - -1.154145921396878e+04 - -1.155781484000000e+04 - -1.157418788116290e+04 - -1.159057834325663e+04 - -1.160698623573862e+04 - -1.162341157750990e+04 - -1.163985437999999e+04 - -1.165631465167572e+04 - -1.167279241049137e+04 - -1.168928767028212e+04 - -1.170580043559586e+04 - -1.172233071999999e+04 - -1.173887854137991e+04 - -1.175544390951204e+04 - -1.177202683447122e+04 - -1.178862732998528e+04 - -1.180524541000000e+04 - -1.182188108744826e+04 - -1.183853437152247e+04 - -1.185520527417456e+04 - -1.187189381268968e+04 - -1.188860000000000e+04 - -1.190532384555031e+04 - -1.192206535739879e+04 - -1.193882454957090e+04 - -1.195560144455150e+04 - -1.197239604999999e+04 - -1.198920836801576e+04 - -1.200603841862060e+04 - -1.202288622005816e+04 - -1.203975178087160e+04 - -1.205663510999999e+04 - -1.207353621858988e+04 - -1.209045512337030e+04 - -1.210739183876488e+04 - -1.212434637372514e+04 - -1.214131874000000e+04 - -1.215830895146994e+04 - -1.217531702204386e+04 - -1.219234296344827e+04 - -1.220938678454126e+04 - -1.222644850000000e+04 - -1.224352812665298e+04 - -1.226062567426862e+04 - -1.227774115320455e+04 - -1.229487457740941e+04 - -1.231202595999999e+04 - -1.232919531361497e+04 - -1.234638265190763e+04 - -1.236358798719477e+04 - -1.238081132944854e+04 - -1.239805268999999e+04 - -1.241531208224867e+04 - -1.243258952373459e+04 - -1.244988502746729e+04 - -1.246719859854622e+04 - -1.248453025000000e+04 - -1.250187999937352e+04 - -1.251924785997314e+04 - -1.253663384322633e+04 - -1.255403795942784e+04 - -1.257146022000000e+04 - -1.258890063824787e+04 - -1.260635923174130e+04 - -1.262383601348307e+04 - -1.264133098848631e+04 - -1.265884416999999e+04 - -1.267637557565735e+04 - -1.269392521755929e+04 - -1.271149310837373e+04 - -1.272907926320349e+04 - -1.274668368999999e+04 - -1.276430639533002e+04 - -1.278194739917555e+04 - -1.279960671868295e+04 - -1.281728436173200e+04 - -1.283498034000000e+04 - -1.285269466774105e+04 - -1.287042735763161e+04 - -1.288817842259290e+04 - -1.290594787633268e+04 - -1.292373573000000e+04 - -1.294154199365508e+04 - -1.295936667981993e+04 - -1.297720980264566e+04 - -1.299507137776778e+04 - -1.301295141999999e+04 - -1.303084994203483e+04 - -1.304876695061188e+04 - -1.306670245535235e+04 - -1.308465647270176e+04 - -1.310262901999999e+04 - -1.312062011245361e+04 - -1.313862975604251e+04 - -1.315665796055223e+04 - -1.317470474462057e+04 - -1.319277012000000e+04 - -1.321085409533674e+04 - -1.322895668661698e+04 - -1.324707790969205e+04 - -1.326521777718879e+04 - -1.328337630000000e+04 - -1.330155348851537e+04 - -1.331974935491385e+04 - -1.333796391362056e+04 - -1.335619718140170e+04 - -1.337444916999999e+04 - -1.339271988874384e+04 - -1.341100935082290e+04 - -1.342931756987852e+04 - -1.344764455872234e+04 - -1.346599032999999e+04 - -1.348435489664480e+04 - -1.350273827293541e+04 - -1.352114047045672e+04 - -1.353956149695641e+04 - -1.355800137000000e+04 - -1.357646010972569e+04 - -1.359493772045508e+04 - -1.361343421245217e+04 - -1.363194960986463e+04 - -1.365048392000000e+04 - -1.366903714425879e+04 - -1.368760930691950e+04 - -1.370620042690972e+04 - -1.372481050688227e+04 - -1.374343955999999e+04 - -1.376208760473736e+04 - -1.378075465005087e+04 - -1.379944070672178e+04 - -1.381814579185646e+04 - -1.383686991999999e+04 - -1.385561310323773e+04 - -1.387437535187516e+04 - -1.389315667691767e+04 - -1.391195709130158e+04 - -1.393077661000000e+04 - -1.394961524865979e+04 - -1.396847302075987e+04 - -1.398734993803961e+04 - -1.400624601054151e+04 - -1.402516125000000e+04 - -1.404409566989268e+04 - -1.406304928589068e+04 - -1.408202211294199e+04 - -1.410101416389908e+04 - -1.412002544999999e+04 - -1.413905598164077e+04 - -1.415810576964489e+04 - -1.417717482985645e+04 - -1.419626318438561e+04 - -1.421537083999999e+04 - -1.423449779870650e+04 - -1.425364408441530e+04 - -1.427280971628262e+04 - -1.429199469812906e+04 - -1.431119904000000e+04 - -1.433042275698022e+04 - -1.434966586475864e+04 - -1.436892837784737e+04 - -1.438821030874347e+04 - -1.440751167000000e+04 - -1.442683247464153e+04 - -1.444617273693482e+04 - -1.446553246845352e+04 - -1.448491167696990e+04 - -1.450431037999999e+04 - -1.452372859766022e+04 - -1.454316633455064e+04 - -1.456262360064903e+04 - -1.458210041914065e+04 - -1.460159679999998e+04 - -1.462111274782618e+04 - -1.464064828275210e+04 - -1.466020342227678e+04 - -1.467977817411577e+04 - -1.469937255000000e+04 - -1.471898656425745e+04 - -1.473862022905967e+04 - -1.475827355783788e+04 - -1.477794656667906e+04 - -1.479763927000000e+04 - -1.481735168022591e+04 - -1.483708380678435e+04 - -1.485683566151257e+04 - -1.487660726097236e+04 - -1.489639861999999e+04 - -1.491620975095499e+04 - -1.493604066191429e+04 - -1.495589136614776e+04 - -1.497576188555746e+04 - -1.499565223000000e+04 - -1.501556240451360e+04 - -1.503549242791256e+04 - -1.505544231896391e+04 - -1.507541209051985e+04 - -1.509540175000000e+04 - -1.511541130465759e+04 - -1.513544077375174e+04 - -1.515549017500820e+04 - -1.517555951933053e+04 - -1.519564881999999e+04 - -1.521575809081157e+04 - -1.523588734003694e+04 - -1.525603658036919e+04 - -1.527620583277191e+04 - -1.529639510999998e+04 - -1.531660442034102e+04 - -1.533683377728779e+04 - -1.535708319443415e+04 - -1.537735268372974e+04 - -1.539764226000000e+04 - -1.541795193921473e+04 - -1.543828173411788e+04 - -1.545863165713528e+04 - -1.547900172144165e+04 - -1.549939194000000e+04 - -1.551980232569260e+04 - -1.554023289178161e+04 - -1.556068365093051e+04 - -1.558115461506463e+04 - -1.560164579999999e+04 - -1.562215722197032e+04 - -1.564268888875843e+04 - -1.566324081295743e+04 - -1.568381301679686e+04 - -1.570440550999999e+04 - -1.572501829745089e+04 - -1.574565139909988e+04 - -1.576630483256334e+04 - -1.578697860613842e+04 - -1.580767273000000e+04 - -1.582838721786272e+04 - -1.584912209052793e+04 - -1.586987736246908e+04 - -1.589065303680525e+04 - -1.591144913000000e+04 - -1.593226566336701e+04 - -1.595310264072689e+04 - -1.597396007256353e+04 - -1.599483798518879e+04 - -1.601573638999999e+04 - -1.603665529105288e+04 - -1.605759470511345e+04 - -1.607855464838671e+04 - -1.609953513161670e+04 - -1.612053616999998e+04 - -1.614155778004294e+04 - -1.616259997081388e+04 - -1.618366275348782e+04 - -1.620474614514243e+04 - -1.622585016000000e+04 - -1.624697481007329e+04 - -1.626812010728422e+04 - -1.628928606592670e+04 - -1.631047270337715e+04 - -1.633168003000000e+04 - -1.635290805454565e+04 - -1.637415679800609e+04 - -1.639542627592296e+04 - -1.641671649164588e+04 - -1.643802745999998e+04 - -1.645935920179283e+04 - -1.648071172935930e+04 - -1.650208505431875e+04 - -1.652347919039644e+04 - -1.654489414999998e+04 - -1.656632994566724e+04 - -1.658778659427021e+04 - -1.660926410974226e+04 - -1.663076250029903e+04 - -1.665228178000000e+04 - -1.667382196574960e+04 - -1.669538306946903e+04 - -1.671696510420377e+04 - -1.673856808645374e+04 - -1.676019203000000e+04 - -1.678183694695306e+04 - -1.680350285053965e+04 - -1.682518975366077e+04 - -1.684689766850574e+04 - -1.686862660999998e+04 - -1.689037659405139e+04 - -1.691214763326874e+04 - -1.693393974023558e+04 - -1.695575292860696e+04 - -1.697758720999999e+04 - -1.699944259677470e+04 - -1.702131910964586e+04 - -1.704321676352935e+04 - -1.706513556209216e+04 - -1.708707552000000e+04 - -1.710903665790321e+04 - -1.713101898938551e+04 - -1.715302252479822e+04 - -1.717504727292061e+04 - -1.719709325000000e+04 - -1.721916047545785e+04 - -1.724124896174670e+04 - -1.726335872072246e+04 - -1.728548976595536e+04 - -1.730764210999998e+04 - -1.732981576548871e+04 - -1.735201074834581e+04 - -1.737422707347338e+04 - -1.739646475299950e+04 - -1.741872379999999e+04 - -1.744100422776899e+04 - -1.746330604747148e+04 - -1.748562927386205e+04 - -1.750797392735042e+04 - -1.753034002000000e+04 - -1.755272756012299e+04 - -1.757513656385630e+04 - -1.759756704698003e+04 - -1.762001902165879e+04 - -1.764249250000000e+04 - -1.766498749503509e+04 - -1.768750402279969e+04 - -1.771004209797560e+04 - -1.773260173223158e+04 - -1.775518293999998e+04 - -1.777778573725219e+04 - -1.780041013823985e+04 - -1.782305615380817e+04 - -1.784572379125812e+04 - -1.786841306999998e+04 - -1.789112401297027e+04 - -1.791385662520795e+04 - -1.793661091551944e+04 - -1.795938690506571e+04 - -1.798218461000000e+04 - -1.800500404157250e+04 - -1.802784520726593e+04 - -1.805070812126097e+04 - -1.807359280836476e+04 - -1.809649928000000e+04 - -1.811942754077938e+04 - -1.814237760512274e+04 - -1.816534949154946e+04 - -1.818834322012563e+04 - -1.821135879999998e+04 - -1.823439623670011e+04 - -1.825745554979138e+04 - -1.828053675712656e+04 - -1.830363986886144e+04 - -1.832676489999998e+04 - -1.834991186721417e+04 - -1.837308077964562e+04 - -1.839627164834952e+04 - -1.841948449011883e+04 - -1.844271932000000e+04 - -1.846597615248214e+04 - -1.848925500551537e+04 - -1.851255589141731e+04 - -1.853587881367952e+04 - -1.855922379000000e+04 - -1.858259084403384e+04 - -1.860597998459446e+04 - -1.862939122130964e+04 - -1.865282457086503e+04 - -1.867628004999998e+04 - -1.869975767367864e+04 - -1.872325745125265e+04 - -1.874677939400045e+04 - -1.877032351829797e+04 - -1.879388983999998e+04 - -1.881747837395618e+04 - -1.884108913346766e+04 - -1.886472213066709e+04 - -1.888837737699991e+04 - -1.891205489000000e+04 - -1.893575468867888e+04 - -1.895947678210836e+04 - -1.898322118083019e+04 - -1.900698790146692e+04 - -1.903077696000000e+04 - -1.905458837122149e+04 - -1.907842214817702e+04 - -1.910227830328199e+04 - -1.912615684887913e+04 - -1.915005779999998e+04 - -1.917398117252360e+04 - -1.919792697876641e+04 - -1.922189523162585e+04 - -1.924588594641727e+04 - -1.926989913999998e+04 - -1.929393482787026e+04 - -1.931799301676958e+04 - -1.934207372057390e+04 - -1.936617696590223e+04 - -1.939030276000000e+04 - -1.941445110358184e+04 - -1.943862202401437e+04 - -1.946281554213054e+04 - -1.948703165938676e+04 - -1.951127038999998e+04 - -1.953553175531375e+04 - -1.955981576784185e+04 - -1.958412243887696e+04 - -1.960845178142548e+04 - -1.963280380999998e+04 - -1.965717854010317e+04 - -1.968157598764983e+04 - -1.970599616682758e+04 - -1.973043908928781e+04 - -1.975490477000000e+04 - -1.977939322508017e+04 - -1.980390446612710e+04 - -1.982843850672890e+04 - -1.985299536464853e+04 - -1.987757505000000e+04 - -1.990217757132781e+04 - -1.992680295149982e+04 - -1.995145120910892e+04 - -1.997612235106852e+04 - -2.000081638999998e+04 - -2.002553334291399e+04 - -2.005027322692212e+04 - -2.007503605456619e+04 - -2.009982183242756e+04 - -2.012463057999998e+04 - -2.014946232050470e+04 - -2.017431705750974e+04 - -2.019919480128925e+04 - -2.022409557869796e+04 - -2.024901940000000e+04 - -2.027396626876084e+04 - -2.029893620825063e+04 - -2.032392923791251e+04 - -2.034894536415857e+04 - -2.037398460000000e+04 - -2.039904696273123e+04 - -2.042413246681671e+04 - -2.044924112749899e+04 - -2.047437296177629e+04 - -2.049952797999998e+04 - -2.052470619105544e+04 - -2.054990761544010e+04 - -2.057513226917888e+04 - -2.060038015795331e+04 - -2.062565129999998e+04 - -2.065094571854568e+04 - -2.067626342205840e+04 - -2.070160442063917e+04 - -2.072696873225083e+04 - -2.075235637000000e+04 - -2.077776734528838e+04 - -2.080320167696219e+04 - -2.082865938214449e+04 - -2.085414047244347e+04 - -2.087964496000000e+04 - -2.090517285805777e+04 - -2.093072418166662e+04 - -2.095629894648643e+04 - -2.098189716820891e+04 - -2.100751885999998e+04 - -2.103316403410750e+04 - -2.105883270565323e+04 - -2.108452489048020e+04 - -2.111024060421226e+04 - -2.113597985999998e+04 - -2.116174267011207e+04 - -2.118752904964539e+04 - -2.121333901446366e+04 - -2.123917258027344e+04 - -2.126502976000000e+04 - -2.129091056582378e+04 - -2.131681501406569e+04 - -2.134274311932949e+04 - -2.136869489244911e+04 - -2.139467035000000e+04 - -2.142066951097057e+04 - -2.144669238829770e+04 - -2.147273899344209e+04 - -2.149880933837191e+04 - -2.152490343999998e+04 - -2.155102131698669e+04 - -2.157716298229367e+04 - -2.160332844744082e+04 - -2.162951772437019e+04 - -2.165573082999998e+04 - -2.168196778300156e+04 - -2.170822859627157e+04 - -2.173451328139519e+04 - -2.176082185053812e+04 - -2.178715432000000e+04 - -2.181351070821111e+04 - -2.183989103150391e+04 - -2.186629530288904e+04 - -2.189272353140778e+04 - -2.191917573000000e+04 - -2.194565191497987e+04 - -2.197215210512397e+04 - -2.199867631637375e+04 - -2.202522455969623e+04 - -2.205179684999998e+04 - -2.207839320363563e+04 - -2.210501363148952e+04 - -2.213165814783550e+04 - -2.215832677350680e+04 - -2.218501951999998e+04 - -2.221173639532642e+04 - -2.223847741910094e+04 - -2.226524260850044e+04 - -2.229203197306979e+04 - -2.231884553000000e+04 - -2.234568329890952e+04 - -2.237254528774074e+04 - -2.239943150806158e+04 - -2.242634198094407e+04 - -2.245327672000000e+04 - -2.248023573585785e+04 - -2.250721904853940e+04 - -2.253422667413636e+04 - -2.256125861967753e+04 - -2.258831489999998e+04 - -2.261539553480252e+04 - -2.264250054093014e+04 - -2.266962993052693e+04 - -2.269678371062339e+04 - -2.272396189999998e+04 - -2.275116452153000e+04 - -2.277839158301363e+04 - -2.280564309534358e+04 - -2.283291907950545e+04 - -2.286021955000000e+04 - -2.288754451771620e+04 - -2.291489399812011e+04 - -2.294226800704672e+04 - -2.296966655917324e+04 - -2.299708967000000e+04 - -2.302453735490683e+04 - -2.305200962641978e+04 - -2.307950649734620e+04 - -2.310702798236498e+04 - -2.313457409999998e+04 - -2.316214486856879e+04 - -2.318974029613145e+04 - -2.321736039447026e+04 - -2.324500518448656e+04 - -2.327267467999998e+04 - -2.330036889175501e+04 - -2.332808783850466e+04 - -2.335583153764027e+04 - -2.338360000121357e+04 - -2.341139324000000e+04 - -2.343921126672951e+04 - -2.346705410394532e+04 - -2.349492176951476e+04 - -2.352281427072812e+04 - -2.355073162000000e+04 - -2.357867383414989e+04 - -2.360664093193761e+04 - -2.363463292919098e+04 - -2.366264983684289e+04 - -2.369069166999998e+04 - -2.371875844507638e+04 - -2.374685017193912e+04 - -2.377496686591387e+04 - -2.380310855200050e+04 - -2.383127523999998e+04 - -2.385946693403709e+04 - -2.388768365690810e+04 - -2.391592542840760e+04 - -2.394419225713039e+04 - -2.397248416000000e+04 - -2.400080115691363e+04 - -2.402914325571854e+04 - -2.405751046800998e+04 - -2.408590281513924e+04 - -2.411432031000000e+04 - -2.414276296293371e+04 - -2.417123079796694e+04 - -2.419972383203242e+04 - -2.422824206706797e+04 - -2.425678551999998e+04 - -2.428535421485334e+04 - -2.431394816200073e+04 - -2.434256737430352e+04 - -2.437121187300517e+04 - -2.439988166999998e+04 - -2.442857677325164e+04 - -2.445729720103540e+04 - -2.448604297194451e+04 - -2.451481410082247e+04 - -2.454361060000000e+04 - -2.457243248182022e+04 - -2.460127976431730e+04 - -2.463015246522100e+04 - -2.465905059942621e+04 - -2.468797417999998e+04 - -2.471692321945616e+04 - -2.474589773222362e+04 - -2.477489773480251e+04 - -2.480392324581322e+04 - -2.483297427999998e+04 - -2.486205084917968e+04 - -2.489115296405446e+04 - -2.492028064024748e+04 - -2.494943390068509e+04 - -2.497861275999998e+04 - -2.500781722863925e+04 - -2.503704732334474e+04 - -2.506630305872901e+04 - -2.509558444448151e+04 - -2.512489150000000e+04 - -2.515422424757818e+04 - -2.518358269497819e+04 - -2.521296685328307e+04 - -2.524237674371633e+04 - -2.527181237999998e+04 - -2.530127377273551e+04 - -2.533076094162915e+04 - -2.536027390311031e+04 - -2.538981266594794e+04 - -2.541937724999998e+04 - -2.544896767801531e+04 - -2.547858395406606e+04 - -2.550822608802068e+04 - -2.553789410507042e+04 - -2.556758802000000e+04 - -2.559730784246711e+04 - -2.562705359189478e+04 - -2.565682528525429e+04 - -2.568662293247029e+04 - -2.571644655000000e+04 - -2.574629615713407e+04 - -2.577617176604459e+04 - -2.580607338891535e+04 - -2.583600104095400e+04 - -2.586595473999998e+04 - -2.589593450400127e+04 - -2.592594034522632e+04 - -2.595597227610649e+04 - -2.598603031176017e+04 - -2.601611446999998e+04 - -2.604622476879967e+04 - -2.607636122042706e+04 - -2.610652383730750e+04 - -2.613671263455693e+04 - -2.616692763000000e+04 - -2.619716884161440e+04 - -2.622743628160562e+04 - -2.625772996246335e+04 - -2.628804989951923e+04 - -2.631839611000000e+04 - -2.634876861165059e+04 - -2.637916741999917e+04 - -2.640959254907723e+04 - -2.644004401148305e+04 - -2.647052181999998e+04 - -2.650102598983489e+04 - -2.653155654491748e+04 - -2.656211350103963e+04 - -2.659269685960091e+04 - -2.662330663999998e+04 - -2.665394286925502e+04 - -2.668460555517195e+04 - -2.671529470758218e+04 - -2.674601034670874e+04 - -2.677675249000000e+04 - -2.680752115154265e+04 - -2.683831634157976e+04 - -2.686913807564717e+04 - -2.689998637786448e+04 - -2.693086126000000e+04 - -2.696176272916689e+04 - -2.699269080763921e+04 - -2.702364551500381e+04 - -2.705462686113689e+04 - -2.708563485999998e+04 - -2.711666952809900e+04 - -2.714773087942122e+04 - -2.717881892991400e+04 - -2.720993369901594e+04 - -2.724107519999998e+04 - -2.727224344400496e+04 - -2.730343845029767e+04 - -2.733466023562860e+04 - -2.736590881019403e+04 - -2.739718419000000e+04 - -2.742848639412166e+04 - -2.745981543741902e+04 - -2.749117133427855e+04 - -2.752255410001475e+04 - -2.755396375000000e+04 - -2.758540029934807e+04 - -2.761686376223195e+04 - -2.764835415476579e+04 - -2.767987149599797e+04 - -2.771141579999997e+04 - -2.774298707825893e+04 - -2.777458534547961e+04 - -2.780621061813955e+04 - -2.783786291408934e+04 - -2.786954224999998e+04 - -2.790124864062599e+04 - -2.793298209650868e+04 - -2.796474263269793e+04 - -2.799653027215609e+04 - -2.802834503000000e+04 - -2.806018691678819e+04 - -2.809205594694776e+04 - -2.812395213748840e+04 - -2.815587550739401e+04 - -2.818782607000000e+04 - -2.821980383662756e+04 - -2.825180882556652e+04 - -2.828384105454396e+04 - -2.831590053775406e+04 - -2.834798728999998e+04 - -2.838010132665882e+04 - -2.841224266303304e+04 - -2.844441131398464e+04 - -2.847660729395342e+04 - -2.850883061999998e+04 - -2.854108131015271e+04 - -2.857335937943549e+04 - -2.860566484233479e+04 - -2.863799771378746e+04 - -2.867035801000000e+04 - -2.870274574643904e+04 - -2.873516093256026e+04 - -2.876760358436649e+04 - -2.880007372909855e+04 - -2.883257138000000e+04 - -2.886509654365616e+04 - -2.889764923870952e+04 - -2.893022948372628e+04 - -2.896283729252707e+04 - -2.899547267999998e+04 - -2.902813566168059e+04 - -2.906082625190441e+04 - -2.909354446650575e+04 - -2.912629032389195e+04 - -2.915906383999998e+04 - -2.919186502919167e+04 - -2.922469390650106e+04 - -2.925755048733507e+04 - -2.929043478725063e+04 - -2.932334682000000e+04 - -2.935628660019129e+04 - -2.938925415043921e+04 - -2.942224948806936e+04 - -2.945527261979538e+04 - -2.948832356000000e+04 - -2.952140232838030e+04 - -2.955450894361826e+04 - -2.958764342089699e+04 - -2.962080577090842e+04 - -2.965399600999997e+04 - -2.968721415715336e+04 - -2.972046022629084e+04 - -2.975373423280592e+04 - -2.978703619592538e+04 - -2.982036612999997e+04 - -2.985372404652352e+04 - -2.988710995909819e+04 - -2.992052388535540e+04 - -2.995396584761164e+04 - -2.998743586000000e+04 - -3.002093393306212e+04 - -3.005446008516229e+04 - -3.008801433415196e+04 - -3.012159669410924e+04 - -3.015520717999998e+04 - -3.018884580728562e+04 - -3.022251259030155e+04 - -3.025620754490144e+04 - -3.028993068950620e+04 - -3.032368203999997e+04 - -3.035746161072607e+04 - -3.039126941699663e+04 - -3.042510547393189e+04 - -3.045896979612689e+04 - -3.049286239999998e+04 - -3.052678330335746e+04 - -3.056073252467363e+04 - -3.059471007984014e+04 - -3.062871598061521e+04 - -3.066275024000000e+04 - -3.069681287356475e+04 - -3.073090390293319e+04 - -3.076502334621974e+04 - -3.079917121404217e+04 - -3.083334751999997e+04 - -3.086755228023463e+04 - -3.090178551167921e+04 - -3.093604723225209e+04 - -3.097033746063074e+04 - -3.100465620999998e+04 - -3.103900349175437e+04 - -3.107337932446759e+04 - -3.110778372555016e+04 - -3.114221670819769e+04 - -3.117667828999997e+04 - -3.121116848957679e+04 - -3.124568731744623e+04 - -3.128023478769976e+04 - -3.131481092268889e+04 - -3.134941574000000e+04 - -3.138404925321087e+04 - -3.141871147408727e+04 - -3.145340241670125e+04 - -3.148812209933996e+04 - -3.152287053999997e+04 - -3.155764775577736e+04 - -3.159245376185456e+04 - -3.162728857279384e+04 - -3.166215220315186e+04 - -3.169704466999997e+04 - -3.173196599132658e+04 - -3.176691618227545e+04 - -3.180189525721778e+04 - -3.183690323068162e+04 - -3.187194012000000e+04 - -3.190700594323912e+04 - -3.194210071422084e+04 - -3.197722444868163e+04 - -3.201237716636405e+04 - -3.204755888000000e+04 - -3.208276960047787e+04 - -3.211800935023939e+04 - -3.215327814773632e+04 - -3.218857600158763e+04 - -3.222390292999997e+04 - -3.225925895535199e+04 - -3.229464408973093e+04 - -3.233005834462857e+04 - -3.236550173499735e+04 - -3.240097427999997e+04 - -3.243647600017841e+04 - -3.247200691143220e+04 - -3.250756702669824e+04 - -3.254315635678932e+04 - -3.257877492000000e+04 - -3.261442273792899e+04 - -3.265009982555360e+04 - -3.268580619650297e+04 - -3.272154186523808e+04 - -3.275730685000000e+04 - -3.279310116911321e+04 - -3.282892483177912e+04 - -3.286477785354587e+04 - -3.290066026202923e+04 - -3.293657206999998e+04 - -3.297251328378459e+04 - -3.300848392497173e+04 - -3.304448401407080e+04 - -3.308051356412061e+04 - -3.311657258999998e+04 - -3.315266110752813e+04 - -3.318877912993135e+04 - -3.322492667413289e+04 - -3.326110376297835e+04 - -3.329731041000000e+04 - -3.333354662539115e+04 - -3.336981243131684e+04 - -3.340610784669931e+04 - -3.344243288124504e+04 - -3.347878755000000e+04 - -3.351517187197135e+04 - -3.355158586607149e+04 - -3.358802954742114e+04 - -3.362450292603845e+04 - -3.366100601999997e+04 - -3.369753885113907e+04 - -3.373410143432544e+04 - -3.377069378324004e+04 - -3.380731591267414e+04 - -3.384396783999997e+04 - -3.388064958319757e+04 - -3.391736115628571e+04 - -3.395410257481684e+04 - -3.399087385786547e+04 - -3.402767502000000e+04 - -3.406450607498593e+04 - -3.410136704569621e+04 - -3.413825794940452e+04 - -3.417517879208190e+04 - -3.421212959000000e+04 - -3.424911036577375e+04 - -3.428612113814977e+04 - -3.432316192150666e+04 - -3.436023272579379e+04 - -3.439733356999998e+04 - -3.443446447621852e+04 - -3.447162545467578e+04 - -3.450881651888796e+04 - -3.454603769159935e+04 - -3.458328898999997e+04 - -3.462057042742187e+04 - -3.465788201822977e+04 - -3.469522377879945e+04 - -3.473259572783916e+04 - -3.476999788000000e+04 - -3.480743024920274e+04 - -3.484489285737491e+04 - -3.488238572274076e+04 - -3.491990885516477e+04 - -3.495746227000000e+04 - -3.499504598627476e+04 - -3.503266002163332e+04 - -3.507030439252002e+04 - -3.510797911399110e+04 - -3.514568419999997e+04 - -3.518341966538968e+04 - -3.522118553105182e+04 - -3.525898181605689e+04 - -3.529680853433678e+04 - -3.533466569999997e+04 - -3.537255332834070e+04 - -3.541047143775194e+04 - -3.544842004484196e+04 - -3.548639916273562e+04 - -3.552440881000000e+04 - -3.556244900769237e+04 - -3.560051977192599e+04 - -3.563862111528000e+04 - -3.567675304773126e+04 - -3.571491559000000e+04 - -3.575310876677514e+04 - -3.579133259025522e+04 - -3.582958707123636e+04 - -3.586787222387752e+04 - -3.590618806999997e+04 - -3.594453463328037e+04 - -3.598291192576281e+04 - -3.602131995866808e+04 - -3.605975874687618e+04 - -3.609822830999997e+04 - -3.613672866872384e+04 - -3.617525983663845e+04 - -3.621382182906358e+04 - -3.625241466608051e+04 - -3.629103836000000e+04 - -3.632969292147818e+04 - -3.636837837559645e+04 - -3.640709474306420e+04 - -3.644584203277781e+04 - -3.648462026000000e+04 - -3.652342944409004e+04 - -3.656226960170399e+04 - -3.660114075023598e+04 - -3.664004290875195e+04 - -3.667897608999997e+04 - -3.671794030512006e+04 - -3.675693557547587e+04 - -3.679596192058374e+04 - -3.683501935339895e+04 - -3.687410788999997e+04 - -3.691322754870546e+04 - -3.695237834723054e+04 - -3.699156030212950e+04 - -3.703077342834224e+04 - -3.707001774000000e+04 - -3.710929325203417e+04 - -3.714859998429457e+04 - -3.718793795692067e+04 - -3.722730718808447e+04 - -3.726670768999997e+04 - -3.730613947399677e+04 - -3.734560256273038e+04 - -3.738509697431393e+04 - -3.742462271654350e+04 - -3.746417980999997e+04 - -3.750376828013417e+04 - -3.754338813660564e+04 - -3.758303939267375e+04 - -3.762272207245150e+04 - -3.766243618999997e+04 - -3.770218175518502e+04 - -3.774195878945678e+04 - -3.778176731257176e+04 - -3.782160733741773e+04 - -3.786147888000000e+04 - -3.790138195864309e+04 - -3.794131659132003e+04 - -3.798128279431332e+04 - -3.802128058166662e+04 - -3.806130996999997e+04 - -3.810137097737330e+04 - -3.814146362046005e+04 - -3.818158791697343e+04 - -3.822174388615621e+04 - -3.826193153999997e+04 - -3.830215088938532e+04 - -3.834240195971708e+04 - -3.838268477130731e+04 - -3.842299933188884e+04 - -3.846334565999997e+04 - -3.850372377842891e+04 - -3.854413369633216e+04 - -3.858457542816681e+04 - -3.862504900090371e+04 - -3.866555443000000e+04 - -3.870609172486966e+04 - -3.874666090332934e+04 - -3.878726198409722e+04 - -3.882789498399841e+04 - -3.886855991999997e+04 - -3.890925680946781e+04 - -3.894998567054054e+04 - -3.899074651957592e+04 - -3.903153937021765e+04 - -3.907236423999997e+04 - -3.911322114736439e+04 - -3.915411010384250e+04 - -3.919503112747372e+04 - -3.923598424716172e+04 - -3.927696946999997e+04 - -3.931798680038228e+04 - -3.935903628964794e+04 - -3.940011793259103e+04 - -3.944123164809230e+04 - -3.948237770000000e+04 - -3.952355620675491e+04 - -3.956476584662273e+04 - -3.960600801403134e+04 - -3.964728735507886e+04 - -3.968859104999997e+04 - 1.819886919039960e+01 - 1.816405130921966e+01 - 1.812918280091599e+01 - 1.809426424653407e+01 - 1.805929622711938e+01 - 1.802427932371738e+01 - 1.798921411737356e+01 - 1.795410118913339e+01 - 1.791894112004234e+01 - 1.788373449114589e+01 - 1.784848188348950e+01 - 1.781318387811866e+01 - 1.777784105607885e+01 - 1.774245399841551e+01 - 1.770702328617416e+01 - 1.767154950040025e+01 - 1.763603322213927e+01 - 1.760047503243666e+01 - 1.756487551233793e+01 - 1.752923524288855e+01 - 1.749355480513398e+01 - 1.745783478011969e+01 - 1.742207574889119e+01 - 1.738627829249391e+01 - 1.735044299197335e+01 - 1.731457042837498e+01 - 1.727866118274428e+01 - 1.724271583612671e+01 - 1.720673496956776e+01 - 1.717071916411290e+01 - 1.713466900080759e+01 - 1.709858506069732e+01 - 1.706246792482757e+01 - 1.702631817424381e+01 - 1.699013638999150e+01 - 1.695392315311613e+01 - 1.691767904466317e+01 - 1.688140464567809e+01 - 1.684510053720637e+01 - 1.680876730029348e+01 - 1.677240551598491e+01 - 1.673601576532611e+01 - 1.669959862936258e+01 - 1.666315468913977e+01 - 1.662668452570318e+01 - 1.659018872009826e+01 - 1.655366785337049e+01 - 1.651712250656536e+01 - 1.648055326072833e+01 - 1.644396069690488e+01 - 1.640734539614049e+01 - 1.637070793948063e+01 - 1.633404890797076e+01 - 1.629736888265638e+01 - 1.626066844458294e+01 - 1.622394817479593e+01 - 1.618720865434082e+01 - 1.615045046426309e+01 - 1.611367418560821e+01 - 1.607688039942165e+01 - 1.604006968674890e+01 - 1.600324262863542e+01 - 1.596639980612668e+01 - 1.592954180026817e+01 - 1.589266919210536e+01 - 1.585578256268371e+01 - 1.581888249304872e+01 - 1.578196956424585e+01 - 1.574504435732057e+01 - 1.570810745331836e+01 - 1.567115943328470e+01 - 1.563420087826506e+01 - 1.559723236930490e+01 - 1.556025448744972e+01 - 1.552326781374499e+01 - 1.548627292923617e+01 - 1.544927041496875e+01 - 1.541226085198818e+01 - 1.537524482133997e+01 - 1.533822290406956e+01 - 1.530119568122245e+01 - 1.526416373384410e+01 - 1.522712764298000e+01 - 1.519008798967561e+01 - 1.515304535497640e+01 - 1.511600031992786e+01 - 1.507895346557546e+01 - 1.504190537296467e+01 - 1.500485662314096e+01 - 1.496780779714983e+01 - 1.493075947603672e+01 - 1.489371224084713e+01 - 1.485666667262652e+01 - 1.481962335242037e+01 - 1.478258286127416e+01 - 1.474554578023335e+01 - 1.470851269034343e+01 - 1.467148417264987e+01 - 1.463446080819813e+01 - 1.459744317803371e+01 - 1.456043186320207e+01 - 1.452342744474869e+01 - 1.448643050371903e+01 - 1.444944162115858e+01 - 1.441246137811282e+01 - 1.437549035562720e+01 - 1.433852913474722e+01 - 1.430157829651834e+01 - 1.426463842198604e+01 - 1.422771009219579e+01 - 1.419079388819307e+01 - 1.415389039102334e+01 - 1.411700018173210e+01 - 1.408012384136481e+01 - 1.404326195096694e+01 - 1.400641509158398e+01 - 1.396958384426139e+01 - 1.393276879004464e+01 - 1.389597050997923e+01 - 1.385918958511061e+01 - 1.382242659648426e+01 - 1.378568212514566e+01 - 1.374895675214029e+01 - 1.371225105851361e+01 - 1.367556562531110e+01 - 1.363890103357824e+01 - 1.360225786436050e+01 - 1.356563669870335e+01 - 1.352903811765228e+01 - 1.349246270225274e+01 - 1.345591103355023e+01 - 1.341938369259021e+01 - 1.338288126041816e+01 - 1.334640431807955e+01 - 1.330995344661985e+01 - 1.327352922708455e+01 - 1.323713224051912e+01 - 1.320076306796902e+01 - 1.316442229047974e+01 - 1.312811048909675e+01 - 1.309182824486553e+01 - 1.305557613883154e+01 - 1.301935475204027e+01 - 1.298316466553718e+01 - 1.294700646036776e+01 - 1.291088071757748e+01 - 1.287478801821181e+01 - 1.283872894331622e+01 - 1.280270407393619e+01 - 1.276671399111720e+01 - 1.273075927590472e+01 - 1.269484050934423e+01 - 1.265895827248119e+01 - 1.262311314636109e+01 - 1.258730571202939e+01 - 1.255153655053158e+01 - 1.251580624291313e+01 - 1.248011537021950e+01 - 1.244446451349619e+01 - 1.240885425378865e+01 - 1.237328517214237e+01 - 1.233775784960283e+01 - 1.230227286721548e+01 - 1.226683080602582e+01 - 1.223143224707931e+01 - 1.219607777142142e+01 - 1.216076796009764e+01 - 1.212550339415344e+01 - 1.209028465463429e+01 - 1.205511232258567e+01 - 1.201998697905305e+01 - 1.198490920508190e+01 - 1.194987958171770e+01 - 1.191489869000593e+01 - 1.187996711099206e+01 - 1.184508542572157e+01 - 1.181025421523992e+01 - 1.177547406059259e+01 - 1.174074554282507e+01 - 1.170606924298281e+01 - 1.167144574211130e+01 - 1.163687562125602e+01 - 1.160235946146243e+01 - 1.156789784377601e+01 - 1.153349134924223e+01 - 1.149914055890657e+01 - 1.146484605381452e+01 - 1.143060841501152e+01 - 1.139642822354308e+01 - 1.136230606045464e+01 - 1.132824250679170e+01 - 1.129423814359974e+01 - 1.126029355192421e+01 - 1.122640931281059e+01 - 1.119258600730437e+01 - 1.115882421645102e+01 - 1.112512452129600e+01 - 1.109148750288479e+01 - 1.105791374226288e+01 - 1.102440382047573e+01 - 1.099095831856882e+01 - 1.095757781758762e+01 - 1.092426289857761e+01 - 1.089101414258426e+01 - 1.085783213065305e+01 - 1.082471744382945e+01 - 1.079167066315892e+01 - 1.075869236968697e+01 - 1.072578314445905e+01 - 1.069294356852064e+01 - 1.066017422291721e+01 - 1.062747568869424e+01 - 1.059484854689720e+01 - 1.056229337857157e+01 - 1.052981076476282e+01 - 1.049740128651643e+01 - 1.046506552487787e+01 - 1.043280406089261e+01 - 1.040061747560614e+01 - 1.036850635006392e+01 - 1.033647126531143e+01 - 1.030451280239414e+01 - 1.027263154235754e+01 - 1.024082806624708e+01 - 1.020910295510825e+01 - 1.017745678998653e+01 - 1.014589015192738e+01 - 1.011440362197629e+01 - 1.008299778117872e+01 - 1.005167321058014e+01 - 1.002043049122605e+01 - 9.989270204161905e+00 - 9.958192930433185e+00 - 9.927199251085362e+00 - 9.896289747163912e+00 - 9.865464999714312e+00 - 9.834725589782032e+00 - 9.804072098412551e+00 - 9.773505106651340e+00 - 9.743025195543877e+00 - 9.712632946135633e+00 - 9.682328939472086e+00 - 9.652113756598707e+00 - 9.621987978560973e+00 - 9.591952186404358e+00 - 9.562006961174337e+00 - 9.532152883916382e+00 - 9.502390535675973e+00 - 9.472720497498580e+00 - 9.443143350429677e+00 - 9.413659675514742e+00 - 9.384270053799249e+00 - 9.354975066328668e+00 - 9.325775294148480e+00 - 9.296671318304156e+00 - 9.267663719841170e+00 - 9.238753079804999e+00 - 9.209939979241115e+00 - 9.181224999194994e+00 - 9.152608720712111e+00 - 9.124091724837941e+00 - 9.095674592617954e+00 - 9.067357905097630e+00 - 9.039142243322441e+00 - 9.011028188337864e+00 - 8.983016292445305e+00 - 8.955106689123129e+00 - 8.927299195109086e+00 - 8.899593619314148e+00 - 8.871989770649284e+00 - 8.844487458025464e+00 - 8.817086490353660e+00 - 8.789786676544839e+00 - 8.762587825509975e+00 - 8.735489746160036e+00 - 8.708492247405990e+00 - 8.681595138158814e+00 - 8.654798227329470e+00 - 8.628101323828931e+00 - 8.601504236568170e+00 - 8.575006774458155e+00 - 8.548608746409855e+00 - 8.522309961334242e+00 - 8.496110228142285e+00 - 8.470009355744955e+00 - 8.444007153053219e+00 - 8.418103428978053e+00 - 8.392297992430423e+00 - 8.366590652321301e+00 - 8.340981217561657e+00 - 8.315469497062459e+00 - 8.290055299734679e+00 - 8.264738434489287e+00 - 8.239518710237252e+00 - 8.214395935889545e+00 - 8.189369920357137e+00 - 8.164440472550996e+00 - 8.139607401382095e+00 - 8.114870515761401e+00 - 8.090229624599887e+00 - 8.065684536808520e+00 - 8.041235061298275e+00 - 8.016881006980118e+00 - 7.992622182765018e+00 - 7.968458397563950e+00 - 7.944389460287880e+00 - 7.920415179847782e+00 - 7.896535365154623e+00 - 7.872749825119373e+00 - 7.849058368653004e+00 - 7.825460804666484e+00 - 7.801956942070785e+00 - 7.778546589776878e+00 - 7.755229556695729e+00 - 7.732005651738313e+00 - 7.708874683815599e+00 - 7.685836461838553e+00 - 7.662890794718152e+00 - 7.640037491365358e+00 - 7.617276360691148e+00 - 7.594607211606489e+00 - 7.572029853022352e+00 - 7.549544093849708e+00 - 7.527149742999527e+00 - 7.504846609382777e+00 - 7.482634501910429e+00 - 7.460513229493455e+00 - 7.438482601042820e+00 - 7.416542425469502e+00 - 7.394692511684465e+00 - 7.372932668598682e+00 - 7.351262705123121e+00 - 7.329682430168755e+00 - 7.308191652646553e+00 - 7.286790181467484e+00 - 7.265477825542517e+00 - 7.244254393782626e+00 - 7.223119695098779e+00 - 7.202073538401945e+00 - 7.181115732603097e+00 - 7.160246086613204e+00 - 7.139464409343233e+00 - 7.118770509704159e+00 - 7.098164196606950e+00 - 7.077645278962576e+00 - 7.057213565682006e+00 - 7.036868865676214e+00 - 7.016610987856166e+00 - 6.996439741132834e+00 - 6.976354934417186e+00 - 6.956356376620197e+00 - 6.936443876652832e+00 - 6.916617243426063e+00 - 6.896876285850862e+00 - 6.877220812838198e+00 - 6.857650633299039e+00 - 6.838165556144358e+00 - 6.818765390285123e+00 - 6.799449944632306e+00 - 6.780219028096876e+00 - 6.761072449589803e+00 - 6.742010018022058e+00 - 6.723031542304612e+00 - 6.704136831348434e+00 - 6.685325694064492e+00 - 6.666597939363759e+00 - 6.647953376157203e+00 - 6.629391813355797e+00 - 6.610913059870509e+00 - 6.592516924612310e+00 - 6.574203216492170e+00 - 6.555971744421058e+00 - 6.537822317309946e+00 - 6.519754744069803e+00 - 6.501768833611600e+00 - 6.483864394846306e+00 - 6.466041236684891e+00 - 6.448299168038327e+00 - 6.430637997817582e+00 - 6.413057534933630e+00 - 6.395557588297437e+00 - 6.378137966819973e+00 - 6.360798479412210e+00 - 6.343538934985117e+00 - 6.326359142449666e+00 - 6.309258910716826e+00 - 6.292238048697567e+00 - 6.275296365302859e+00 - 6.258433669443673e+00 - 6.241649770030978e+00 - 6.224944475975745e+00 - 6.208317596188945e+00 - 6.191768939581546e+00 - 6.175298315064517e+00 - 6.158905531548833e+00 - 6.142590397945462e+00 - 6.126352723165372e+00 - 6.110192316119535e+00 - 6.094108985718921e+00 - 6.078102540874499e+00 - 6.062172790497243e+00 - 6.046319543498117e+00 - 6.030542608788095e+00 - 6.014841795278149e+00 - 5.999216911879244e+00 - 5.983667767502356e+00 - 5.968194171058448e+00 - 5.952795931458497e+00 - 5.937472857613470e+00 - 5.922224758434336e+00 - 5.907051442832068e+00 - 5.891952719717633e+00 - 5.876928398002004e+00 - 5.861978286596150e+00 - 5.847102194411042e+00 - 5.832299930357648e+00 - 5.817571303346941e+00 - 5.802916122289888e+00 - 5.788334196097460e+00 - 5.773825333680629e+00 - 5.759389343950365e+00 - 5.745026035817635e+00 - 5.730735218193414e+00 - 5.716516699988668e+00 - 5.702370290114368e+00 - 5.688295797481486e+00 - 5.674293031000990e+00 - 5.660361799583851e+00 - 5.646501912141039e+00 - 5.632713177583526e+00 - 5.618995404822279e+00 - 5.605348402768269e+00 - 5.591771980332467e+00 - 5.578265946425844e+00 - 5.564830109959368e+00 - 5.551464279844009e+00 - 5.538168264990741e+00 - 5.524941874310529e+00 - 5.511784916714348e+00 - 5.498697201113163e+00 - 5.485678536417949e+00 - 5.472728731539672e+00 - 5.459847595389306e+00 - 5.447031950668924e+00 - 5.434258417587328e+00 - 5.421509378931341e+00 - 5.408790202589383e+00 - 5.396101725502927e+00 - 5.383442552149385e+00 - 5.370812984345576e+00 - 5.358213038980171e+00 - 5.345642546622406e+00 - 5.333101463094469e+00 - 5.320589727671893e+00 - 5.308107264570896e+00 - 5.295654006874094e+00 - 5.283229887334054e+00 - 5.270834837715376e+00 - 5.258468789944041e+00 - 5.246131676000384e+00 - 5.233823428164784e+00 - 5.221543979540164e+00 - 5.209293263422158e+00 - 5.197071212820756e+00 - 5.184877759775030e+00 - 5.172712837552656e+00 - 5.160576380473933e+00 - 5.148468322098453e+00 - 5.136388595958436e+00 - 5.124337135726472e+00 - 5.112313875048248e+00 - 5.100318748362747e+00 - 5.088351690727316e+00 - 5.076412636057685e+00 - 5.064501518839616e+00 - 5.052618274474592e+00 - 5.040762837425790e+00 - 5.028935142799786e+00 - 5.017135126690616e+00 - 5.005362723409764e+00 - 4.993617868159293e+00 - 4.981900498164465e+00 - 4.970210548621045e+00 - 4.958547954855285e+00 - 4.946912653797631e+00 - 4.935304581602165e+00 - 4.923723674430540e+00 - 4.912169869219803e+00 - 4.900643102722201e+00 - 4.889143311682699e+00 - 4.877670433140317e+00 - 4.866224404407401e+00 - 4.854805162838305e+00 - 4.843412645620055e+00 - 4.832046790470948e+00 - 4.820707535433044e+00 - 4.809394818449872e+00 - 4.798108577205163e+00 - 4.786848749644187e+00 - 4.775615274885523e+00 - 4.764408091170769e+00 - 4.753227136475494e+00 - 4.742072350593207e+00 - 4.730943672320340e+00 - 4.719841039761676e+00 - 4.708764392793848e+00 - 4.697713670947889e+00 - 4.686688813308958e+00 - 4.675689760077749e+00 - 4.664716450776882e+00 - 4.653768824355144e+00 - 4.642846821849820e+00 - 4.631950383864691e+00 - 4.621079449911801e+00 - 4.610233960271208e+00 - 4.599413855814052e+00 - 4.588619077726644e+00 - 4.577849566594633e+00 - 4.567105263324451e+00 - 4.556386109499332e+00 - 4.545692045920192e+00 - 4.535023013830533e+00 - 4.524378955558838e+00 - 4.513759812087895e+00 - 4.503165524982657e+00 - 4.492596037765430e+00 - 4.482051291649467e+00 - 4.471531227881555e+00 - 4.461035790191556e+00 - 4.450564920902143e+00 - 4.440118561957067e+00 - 4.429696656605228e+00 - 4.419299148008472e+00 - 4.408925979093191e+00 - 4.398577092681390e+00 - 4.388252432408600e+00 - 4.377951941955149e+00 - 4.367675563647617e+00 - 4.357423241911437e+00 - 4.347194921954801e+00 - 4.336990545878941e+00 - 4.326810057907454e+00 - 4.316653403787664e+00 - 4.306520526395858e+00 - 4.296411370095723e+00 - 4.286325880845187e+00 - 4.276264002847886e+00 - 4.266225680614548e+00 - 4.256210859410026e+00 - 4.246219484255977e+00 - 4.236251500111860e+00 - 4.226306852214246e+00 - 4.216385487075638e+00 - 4.206487350454588e+00 - 4.196612386873075e+00 - 4.186760542346591e+00 - 4.176931763412669e+00 - 4.167125996517556e+00 - 4.157343187931778e+00 - 4.147583283659849e+00 - 4.137846229598449e+00 - 4.128131973158434e+00 - 4.118440461620333e+00 - 4.108771640965568e+00 - 4.099125458381889e+00 - 4.089501861348100e+00 - 4.079900796648449e+00 - 4.070322211621146e+00 - 4.060766054068578e+00 - 4.051232271987449e+00 - 4.041720812903752e+00 - 4.032231624389123e+00 - 4.022764654839604e+00 - 4.013319852102482e+00 - 4.003897163974346e+00 - 3.994496539375360e+00 - 3.985117927005318e+00 - 3.975761275162846e+00 - 3.966426531955261e+00 - 3.957113646635731e+00 - 3.947822569087183e+00 - 3.938553247905866e+00 - 3.929305631685672e+00 - 3.920079669524097e+00 - 3.910875311427285e+00 - 3.901692507178291e+00 - 3.892531206204140e+00 - 3.883391358396833e+00 - 3.874272913657344e+00 - 3.865175821793835e+00 - 3.856100032879644e+00 - 3.847045497225832e+00 - 3.838012165320722e+00 - 3.828999987558789e+00 - 3.820008914413926e+00 - 3.811038896595444e+00 - 3.802089885254187e+00 - 3.793161831237620e+00 - 3.784254684890362e+00 - 3.775368398252875e+00 - 3.766502923100440e+00 - 3.757658209579520e+00 - 3.748834209295840e+00 - 3.740030874433959e+00 - 3.731248156753105e+00 - 3.722486008117639e+00 - 3.713744380387517e+00 - 3.705023225280349e+00 - 3.696322495070079e+00 - 3.687642142318910e+00 - 3.678982119432947e+00 - 3.670342378801804e+00 - 3.661722872867589e+00 - 3.653123554235752e+00 - 3.644544376023881e+00 - 3.635985291634798e+00 - 3.627446254192749e+00 - 3.618927216218316e+00 - 3.610428130335504e+00 - 3.601948951051534e+00 - 3.593489632231203e+00 - 3.585050126838500e+00 - 3.576630388153148e+00 - 3.568230370457688e+00 - 3.559850028500160e+00 - 3.551489315016799e+00 - 3.543148183918080e+00 - 3.534826590807976e+00 - 3.526524489935861e+00 - 3.518241835011243e+00 - 3.509978579991082e+00 - 3.501734680809670e+00 - 3.493510092697708e+00 - 3.485304769188242e+00 - 3.477118665289576e+00 - 3.468951736765370e+00 - 3.460803939385451e+00 - 3.452675227557384e+00 - 3.444565556219660e+00 - 3.436474882078371e+00 - 3.428403160505571e+00 - 3.420350346590145e+00 - 3.412316396304707e+00 - 3.404301265792477e+00 - 3.396304911176187e+00 - 3.388327288491305e+00 - 3.380368354160161e+00 - 3.372428064623584e+00 - 3.364506375833607e+00 - 3.356603244211646e+00 - 3.348718626640740e+00 - 3.340852480236101e+00 - 3.333004761693424e+00 - 3.325175427644580e+00 - 3.317364435527293e+00 - 3.309571742493616e+00 - 3.301797305408617e+00 - 3.294041081414062e+00 - 3.286303028194412e+00 - 3.278583103726798e+00 - 3.270881265443555e+00 - 3.263197471011956e+00 - 3.255531678390248e+00 - 3.247883845209004e+00 - 3.240253929642225e+00 - 3.232641890347850e+00 - 3.225047684908113e+00 - 3.217471271425511e+00 - 3.209912608923088e+00 - 3.202371655667555e+00 - 3.194848370181972e+00 - 3.187342711658790e+00 - 3.179854638881827e+00 - 3.172384110380890e+00 - 3.164931084707051e+00 - 3.157495521384956e+00 - 3.150077380058776e+00 - 3.142676619877814e+00 - 3.135293200073600e+00 - 3.127927079946843e+00 - 3.120578218905895e+00 - 3.113246577218404e+00 - 3.105932114937815e+00 - 3.098634790846833e+00 - 3.091354565058342e+00 - 3.084091398271724e+00 - 3.076845250485478e+00 - 3.069616081755534e+00 - 3.062403852244847e+00 - 3.055208522175611e+00 - 3.048030052549899e+00 - 3.040868404439169e+00 - 3.033723537524932e+00 - 3.026595412527113e+00 - 3.019483991059011e+00 - 3.012389234177664e+00 - 3.005311102428361e+00 - 2.998249556405217e+00 - 2.991204558170310e+00 - 2.984176069441633e+00 - 2.977164051262350e+00 - 2.970168464749357e+00 - 2.963189271462946e+00 - 2.956226433370632e+00 - 2.949279912203107e+00 - 2.942349669912605e+00 - 2.935435668735732e+00 - 2.928537870478263e+00 - 2.921656236941307e+00 - 2.914790730227295e+00 - 2.907941313056430e+00 - 2.901107948114753e+00 - 2.894290597705669e+00 - 2.887489224186201e+00 - 2.880703790004707e+00 - 2.873934257778331e+00 - 2.867180590721052e+00 - 2.860442752157053e+00 - 2.853720705060128e+00 - 2.847014412004529e+00 - 2.840323835735203e+00 - 2.833648939802342e+00 - 2.826989688360529e+00 - 2.820346045051714e+00 - 2.813717971838249e+00 - 2.807105432809830e+00 - 2.800508392739872e+00 - 2.793926814285955e+00 - 2.787360661385112e+00 - 2.780809898806732e+00 - 2.774274490318202e+00 - 2.767754399418414e+00 - 2.761249589980850e+00 - 2.754760027276096e+00 - 2.748285675987487e+00 - 2.741826499952791e+00 - 2.735382462817888e+00 - 2.728953529693038e+00 - 2.722539666591989e+00 - 2.716140837199994e+00 - 2.709757005928732e+00 - 2.703388138477217e+00 - 2.697034199719776e+00 - 2.690695154612969e+00 - 2.684370968516638e+00 - 2.678061606722120e+00 - 2.671767034388748e+00 - 2.665487216663756e+00 - 2.659222119420964e+00 - 2.652971708466898e+00 - 2.646735949170681e+00 - 2.640514807328682e+00 - 2.634308248813400e+00 - 2.628116239351709e+00 - 2.621938745026414e+00 - 2.615775731978081e+00 - 2.609627166192403e+00 - 2.603493014125890e+00 - 2.597373242133807e+00 - 2.591267815972944e+00 - 2.585176702619338e+00 - 2.579099869106871e+00 - 2.573037281022092e+00 - 2.566988905295047e+00 - 2.560954709471109e+00 - 2.554934660124372e+00 - 2.548928723658388e+00 - 2.542936866838776e+00 - 2.536959057454498e+00 - 2.530995262744329e+00 - 2.525045449466102e+00 - 2.519109584724339e+00 - 2.513187636248425e+00 - 2.507279571988880e+00 - 2.501385358975255e+00 - 2.495504964649074e+00 - 2.489638357011514e+00 - 2.483785503877440e+00 - 2.477946372993181e+00 - 2.472120932153270e+00 - 2.466309149445497e+00 - 2.460510993028623e+00 - 2.454726431004756e+00 - 2.448955431279121e+00 - 2.443197962222979e+00 - 2.437453992749473e+00 - 2.431723490873920e+00 - 2.426006424702946e+00 - 2.420302763016215e+00 - 2.414612474849150e+00 - 2.408935529060812e+00 - 2.403271894158963e+00 - 2.397621539164549e+00 - 2.391984432987164e+00 - 2.386360544006294e+00 - 2.380749841635097e+00 - 2.375152295549876e+00 - 2.369567874852914e+00 - 2.363996548806182e+00 - 2.358438286639424e+00 - 2.352893057314327e+00 - 2.347360830870365e+00 - 2.341841577523073e+00 - 2.336335266205249e+00 - 2.330841866367291e+00 - 2.325361348038680e+00 - 2.319893681430557e+00 - 2.314438836350213e+00 - 2.308996782525400e+00 - 2.303567490482044e+00 - 2.298150930506590e+00 - 2.292747072570897e+00 - 2.287355886755380e+00 - 2.281977343203661e+00 - 2.276611412298537e+00 - 2.271258065216148e+00 - 2.265917272602903e+00 - 2.260589004572198e+00 - 2.255273232290290e+00 - 2.249969926489583e+00 - 2.244679057245269e+00 - 2.239400595715412e+00 - 2.234134513404378e+00 - 2.228880781619142e+00 - 2.223639370658599e+00 - 2.218410251587366e+00 - 2.213193396784469e+00 - 2.207988776668006e+00 - 2.202796362022329e+00 - 2.197616125439223e+00 - 2.192448038696543e+00 - 2.187292072961057e+00 - 2.182148199232985e+00 - 2.177016389630072e+00 - 2.171896616273634e+00 - 2.166788850281173e+00 - 2.161693063906081e+00 - 2.156609229682959e+00 - 2.151537319229026e+00 - 2.146477304323076e+00 - 2.141429157241363e+00 - 2.136392850965788e+00 - 2.131368357474257e+00 - 2.126355648357996e+00 - 2.121354696293322e+00 - 2.116365474412895e+00 - 2.111387955644702e+00 - 2.106422111701483e+00 - 2.101467915161587e+00 - 2.096525339256323e+00 - 2.091594356269759e+00 - 2.086674939419586e+00 - 2.081767062556874e+00 - 2.076870697792070e+00 - 2.071985817585338e+00 - 2.067112395385072e+00 - 2.062250405333861e+00 - 2.057399820685575e+00 - 2.052560613690088e+00 - 2.047732757766644e+00 - 2.042916226752948e+00 - 2.038110994473384e+00 - 2.033317034456518e+00 - 2.028534320143143e+00 - 2.023762825026766e+00 - 2.019002522786289e+00 - 2.014253387371010e+00 - 2.009515392980107e+00 - 2.004788513366984e+00 - 2.000072722331970e+00 - 1.995367994084281e+00 - 1.990674302528751e+00 - 1.985991621875054e+00 - 1.981319927135009e+00 - 1.976659192144684e+00 - 1.972009390577169e+00 - 1.967370497271926e+00 - 1.962742487042732e+00 - 1.958125334423246e+00 - 1.953519013586483e+00 - 1.948923499307053e+00 - 1.944338766657414e+00 - 1.939764790288013e+00 - 1.935201544608222e+00 - 1.930649004305472e+00 - 1.926107145248571e+00 - 1.921575942429786e+00 - 1.917055370205972e+00 - 1.912545403920843e+00 - 1.908046018818900e+00 - 1.903557190023903e+00 - 1.899078893306255e+00 - 1.894611103753838e+00 - 1.890153795996532e+00 - 1.885706946418488e+00 - 1.881270530851602e+00 - 1.876844524133795e+00 - 1.872428902057808e+00 - 1.868023640555410e+00 - 1.863628715350075e+00 - 1.859244102235784e+00 - 1.854869776995271e+00 - 1.850505715382929e+00 - 1.846151893336109e+00 - 1.841808287113597e+00 - 1.837474873250078e+00 - 1.833151627500553e+00 - 1.828838525627810e+00 - 1.824535544058799e+00 - 1.820242659570220e+00 - 1.815959848693184e+00 - 1.811687087278560e+00 - 1.807424351697017e+00 - 1.803171618832717e+00 - 1.798928865872756e+00 - 1.794696068965575e+00 - 1.790473204047284e+00 - 1.786260248130819e+00 - 1.782057178544553e+00 - 1.777863972462110e+00 - 1.773680606381003e+00 - 1.769507057021776e+00 - 1.765343301422396e+00 - 1.761189316819223e+00 - 1.757045080431908e+00 - 1.752910569457795e+00 - 1.748785761158555e+00 - 1.744670632638435e+00 - 1.740565161064786e+00 - 1.736469324420783e+00 - 1.732383100261040e+00 - 1.728306465595185e+00 - 1.724239397824929e+00 - 1.720181874717039e+00 - 1.716133874165168e+00 - 1.712095373335323e+00 - 1.708066350172305e+00 - 1.704046783495335e+00 - 1.700036650108550e+00 - 1.696035927584721e+00 - 1.692044595228792e+00 - 1.688062630443701e+00 - 1.684090010658294e+00 - 1.680126714513943e+00 - 1.676172720475745e+00 - 1.672228006742128e+00 - 1.668292551293985e+00 - 1.664366332353613e+00 - 1.660449328407859e+00 - 1.656541518177628e+00 - 1.652642880144113e+00 - 1.648753392536404e+00 - 1.644873033459887e+00 - 1.641001782122826e+00 - 1.637139617814172e+00 - 1.633286518510287e+00 - 1.629442462986198e+00 - 1.625607430332010e+00 - 1.621781398816242e+00 - 1.617964347766720e+00 - 1.614156256896447e+00 - 1.610357104501046e+00 - 1.606566869528149e+00 - 1.602785531410984e+00 - 1.599013068753329e+00 - 1.595249460964023e+00 - 1.591494688099418e+00 - 1.587748729316499e+00 - 1.584011563661260e+00 - 1.580283170366302e+00 - 1.576563528988570e+00 - 1.572852618951484e+00 - 1.569150419635379e+00 - 1.565456911345500e+00 - 1.561772073862832e+00 - 1.558095886092752e+00 - 1.554428327545355e+00 - 1.550769378486889e+00 - 1.547119019605569e+00 - 1.543477229774924e+00 - 1.539843988467248e+00 - 1.536219276909035e+00 - 1.532603074921508e+00 - 1.528995362108325e+00 - 1.525396118748853e+00 - 1.521805324624735e+00 - 1.518222960029189e+00 - 1.514649006474386e+00 - 1.511083443428444e+00 - 1.507526250258141e+00 - 1.503977408416516e+00 - 1.500436898413773e+00 - 1.496904700394939e+00 - 1.493380795245864e+00 - 1.489865163193006e+00 - 1.486357784560608e+00 - 1.482858641108495e+00 - 1.479367713055452e+00 - 1.475884980161266e+00 - 1.472410424507970e+00 - 1.468944026943859e+00 - 1.465485767394345e+00 - 1.462035627142284e+00 - 1.458593587684006e+00 - 1.455159630175685e+00 - 1.451733734815932e+00 - 1.448315882934573e+00 - 1.444906056735074e+00 - 1.441504236540235e+00 - 1.438110403156542e+00 - 1.434724538391589e+00 - 1.431346623689521e+00 - 1.427976640530080e+00 - 1.424614570482120e+00 - 1.421260394583763e+00 - 1.417914094214416e+00 - 1.414575651360096e+00 - 1.411245047472556e+00 - 1.407922264020345e+00 - 1.404607282835409e+00 - 1.401300085863839e+00 - 1.398000654669480e+00 - 1.394708970355802e+00 - 1.391425015768138e+00 - 1.388148773421020e+00 - 1.384880223867722e+00 - 1.381619349200565e+00 - 1.378366132070768e+00 - 1.375120554406545e+00 - 1.371882598139520e+00 - 1.368652245409923e+00 - 1.365429478679455e+00 - 1.362214280063096e+00 - 1.359006631544336e+00 - 1.355806515436745e+00 - 1.352613914349998e+00 - 1.349428810943258e+00 - 1.346251187518860e+00 - 1.343081026346772e+00 - 1.339918309785753e+00 - 1.336763020411036e+00 - 1.333615141050152e+00 - 1.330474654669161e+00 - 1.327341544046787e+00 - 1.324215791384803e+00 - 1.321097378844990e+00 - 1.317986290481943e+00 - 1.314882509034005e+00 - 1.311786015892630e+00 - 1.308696795174431e+00 - 1.305614830505543e+00 - 1.302540104058677e+00 - 1.299472598550161e+00 - 1.296412297281467e+00 - 1.293359183920592e+00 - 1.290313241355424e+00 - 1.287274452437336e+00 - 1.284242800425524e+00 - 1.281218268758570e+00 - 1.278200840971845e+00 - 1.275190500607243e+00 - 1.272187230813499e+00 - 1.269191014801793e+00 - 1.266201836184906e+00 - 1.263219678244913e+00 - 1.260244524601725e+00 - 1.257276359774731e+00 - 1.254315166659556e+00 - 1.251360928048363e+00 - 1.248413628680403e+00 - 1.245473252809453e+00 - 1.242539783866816e+00 - 1.239613204552696e+00 - 1.236693499248504e+00 - 1.233780652886690e+00 - 1.230874648458874e+00 - 1.227975469917747e+00 - 1.225083101914005e+00 - 1.222197528080320e+00 - 1.219318732110022e+00 - 1.216446698153004e+00 - 1.213581411119631e+00 - 1.210722855169846e+00 - 1.207871013783067e+00 - 1.205025871252235e+00 - 1.202187412198626e+00 - 1.199355621285526e+00 - 1.196530482820713e+00 - 1.193711981112556e+00 - 1.190900100540550e+00 - 1.188094825240966e+00 - 1.185296139829988e+00 - 1.182504029475636e+00 - 1.179718478336080e+00 - 1.176939470878376e+00 - 1.174166992368249e+00 - 1.171401026812090e+00 - 1.168641558834780e+00 - 1.165888574598542e+00 - 1.163142057955574e+00 - 1.160401992993886e+00 - 1.157668365957760e+00 - 1.154941161055026e+00 - 1.152220362585152e+00 - 1.149505957086653e+00 - 1.146797929075238e+00 - 1.144096262593592e+00 - 1.141400943461258e+00 - 1.138711957183691e+00 - 1.136029288721929e+00 - 1.133352922646698e+00 - 1.130682844729473e+00 - 1.128019040871752e+00 - 1.125361495026299e+00 - 1.122710192813904e+00 - 1.120065120718956e+00 - 1.117426263156838e+00 - 1.114793605478939e+00 - 1.112167133798269e+00 - 1.109546832911627e+00 - 1.106932688501257e+00 - 1.104324686965964e+00 - 1.101722813149718e+00 - 1.099127052563592e+00 - 1.096537391606932e+00 - 1.093953815681381e+00 - 1.091376310184498e+00 - 1.088804860939953e+00 - 1.086239454210304e+00 - 1.083680075729654e+00 - 1.081126710640132e+00 - 1.078579345517792e+00 - 1.076037966489376e+00 - 1.073502558540405e+00 - 1.070973108232868e+00 - 1.068449602380304e+00 - 1.065932027008114e+00 - 1.063420367175204e+00 - 1.060914608734753e+00 - 1.058414739347230e+00 - 1.055920744292059e+00 - 1.053432609053344e+00 - 1.050950321750202e+00 - 1.048473868029229e+00 - 1.046003233045439e+00 - 1.043538404185668e+00 - 1.041079368203120e+00 - 1.038626111099421e+00 - 1.036178618557632e+00 - 1.033736877638818e+00 - 1.031300875738098e+00 - 1.028870598541307e+00 - 1.026446032279889e+00 - 1.024027163804816e+00 - 1.021613979927458e+00 - 1.019206467749757e+00 - 1.016804614201984e+00 - 1.014408404816817e+00 - 1.012017826403038e+00 - 1.009632866898133e+00 - 1.007253512894913e+00 - 1.004879750675442e+00 - 1.002511566831996e+00 - 1.000148949144661e+00 - 9.977918847145494e-01 - 9.954403597206510e-01 - 9.930943614528360e-01 - 9.907538771638876e-01 - 9.884188936740620e-01 - 9.860893982148410e-01 - 9.837653780132122e-01 - 9.814468200970017e-01 - 9.791337116433633e-01 - 9.768260399168340e-01 - 9.745237922184445e-01 - 9.722269558574113e-01 - 9.699355181124353e-01 - 9.676494662336389e-01 - 9.653687876978898e-01 - 9.630934699744002e-01 - 9.608235003289306e-01 - 9.585588662885656e-01 - 9.562995554410040e-01 - 9.540455551859868e-01 - 9.517968530931009e-01 - 9.495534368089285e-01 - 9.473152938858177e-01 - 9.450824119343849e-01 - 9.428547786515334e-01 - 9.406323818265262e-01 - 9.384152091378831e-01 - 9.362032482272097e-01 - 9.339964869112888e-01 - 9.317949130473703e-01 - 9.295985145023118e-01 - 9.274072791539573e-01 - 9.252211948367504e-01 - 9.230402494034374e-01 - 9.208644309329761e-01 - 9.186937274260252e-01 - 9.165281267878318e-01 - 9.143676170947915e-01 - 9.122121864230248e-01 - 9.100618228160294e-01 - 9.079165144228375e-01 - 9.057762494101416e-01 - 9.036410159434681e-01 - 9.015108022852656e-01 - 8.993855966397851e-01 - 8.972653871281971e-01 - 8.951501621417270e-01 - 8.930399100640233e-01 - 8.909346191274636e-01 - 8.888342777366450e-01 - 8.867388743114113e-01 - 8.846483971822027e-01 - 8.825628348501290e-01 - 8.804821758633001e-01 - 8.784064086961259e-01 - 8.763355218399448e-01 - 8.742695038377348e-01 - 8.722083433110044e-01 - 8.701520288632569e-01 - 8.681005490981059e-01 - 8.660538926659707e-01 - 8.640120483003465e-01 - 8.619750047630993e-01 - 8.599427507590320e-01 - 8.579152750196485e-01 - 8.558925663402844e-01 - 8.538746136199826e-01 - 8.518614056598554e-01 - 8.498529312415619e-01 - 8.478491793952468e-01 - 8.458501390477595e-01 - 8.438557990450950e-01 - 8.418661484572341e-01 - 8.398811762963594e-01 - 8.379008715007146e-01 - 8.359252231704962e-01 - 8.339542204095658e-01 - 8.319878522912720e-01 - 8.300261079597043e-01 - 8.280689765769632e-01 - 8.261164473121154e-01 - 8.241685093974929e-01 - 8.222251520716921e-01 - 8.202863645582569e-01 - 8.183521361157176e-01 - 8.164224560764958e-01 - 8.144973138478017e-01 - 8.125766987264839e-01 - 8.106606000443977e-01 - 8.087490072689457e-01 - 8.068419098143643e-01 - 8.049392971238847e-01 - 8.030411587461223e-01 - 8.011474841608780e-01 - 7.992582628576694e-01 - 7.973734844327619e-01 - 7.954931384582111e-01 - 7.936172145055983e-01 - 7.917457022017643e-01 - 7.898785912282000e-01 - 7.880158712799969e-01 - 7.861575320154112e-01 - 7.843035631939634e-01 - 7.824539546080472e-01 - 7.806086959262468e-01 - 7.787677769423338e-01 - 7.769311875560446e-01 - 7.750989176225404e-01 - 7.732709569908990e-01 - 7.714472955211897e-01 - 7.696279231052234e-01 - 7.678128297211314e-01 - 7.660020053954494e-01 - 7.641954400346342e-01 - 7.623931236302374e-01 - 7.605950462809293e-01 - 7.588011979868697e-01 - 7.570115688113509e-01 - 7.552261489288551e-01 - 7.534449284973839e-01 - 7.516678976340316e-01 - 7.498950464317325e-01 - 7.481263651057625e-01 - 7.463618439154999e-01 - 7.446014731170009e-01 - 7.428452429690515e-01 - 7.410931437272748e-01 - 7.393451656574506e-01 - 7.376012991597445e-01 - 7.358615346418724e-01 - 7.341258624174279e-01 - 7.323942728636854e-01 - 7.306667564033948e-01 - 7.289433034811010e-01 - 7.272239046205010e-01 - 7.255085503342084e-01 - 7.237972310231134e-01 - 7.220899372662432e-01 - 7.203866596915919e-01 - 7.186873887451811e-01 - 7.169921150530395e-01 - 7.153008293485266e-01 - 7.136135222426403e-01 - 7.119301843519804e-01 - 7.102508063464710e-01 - 7.085753789925818e-01 - 7.069038930034782e-01 - 7.052363390742027e-01 - 7.035727080638011e-01 - 7.019129907750439e-01 - 7.002571779481277e-01 - 6.986052604437083e-01 - 6.969572291357313e-01 - 6.953130748988353e-01 - 6.936727887020229e-01 - 6.920363614522840e-01 - 6.904037839913317e-01 - 6.887750473773369e-01 - 6.871501426160253e-01 - 6.855290605871678e-01 - 6.839117924040222e-01 - 6.822983292013320e-01 - 6.806886620123715e-01 - 6.790827818618205e-01 - 6.774806798407976e-01 - 6.758823471448717e-01 - 6.742877749381793e-01 - 6.726969543916550e-01 - 6.711098767181217e-01 - 6.695265330883416e-01 - 6.679469147191758e-01 - 6.663710129607012e-01 - 6.647988190816884e-01 - 6.632303243195694e-01 - 6.616655199754741e-01 - 6.601043974442724e-01 - 6.585469481315596e-01 - 6.569931633409668e-01 - 6.554430344698831e-01 - 6.538965529680326e-01 - 6.523537102216029e-01 - 6.508144977390269e-01 - 6.492789070902356e-01 - 6.477469297088367e-01 - 6.462185570471877e-01 - 6.446937806333431e-01 - 6.431725921186934e-01 - 6.416549831028872e-01 - 6.401409451291091e-01 - 6.386304698205402e-01 - 6.371235488250266e-01 - 6.356201737964903e-01 - 6.341203364004929e-01 - 6.326240283504814e-01 - 6.311312414023209e-01 - 6.296419672600960e-01 - 6.281561976359686e-01 - 6.266739242956670e-01 - 6.251951391194286e-01 - 6.237198339322255e-01 - 6.222480004492102e-01 - 6.207796305731890e-01 - 6.193147162378443e-01 - 6.178532493027741e-01 - 6.163952216645050e-01 - 6.149406252489860e-01 - 6.134894519984210e-01 - 6.120416938491114e-01 - 6.105973427932988e-01 - 6.091563909278429e-01 - 6.077188302116784e-01 - 6.062846526061169e-01 - 6.048538502614210e-01 - 6.034264152733694e-01 - 6.020023397068369e-01 - 6.005816156757759e-01 - 5.991642353027361e-01 - 5.977501907311656e-01 - 5.963394741611191e-01 - 5.949320777981851e-01 - 5.935279938331314e-01 - 5.921272144271874e-01 - 5.907297318514260e-01 - 5.893355384452119e-01 - 5.879446264415406e-01 - 5.865569881004723e-01 - 5.851726157460215e-01 - 5.837915017610071e-01 - 5.824136384878618e-01 - 5.810390182425506e-01 - 5.796676334763571e-01 - 5.782994765837256e-01 - 5.769345398883866e-01 - 5.755728159164172e-01 - 5.742142971757567e-01 - 5.728589760824728e-01 - 5.715068451452269e-01 - 5.701578968814059e-01 - 5.688121237820786e-01 - 5.674695184134964e-01 - 5.661300733449661e-01 - 5.647937811172017e-01 - 5.634606343850478e-01 - 5.621306258016221e-01 - 5.608037479323033e-01 - 5.594799934047830e-01 - 5.581593548937616e-01 - 5.568418251014721e-01 - 5.555273967809645e-01 - 5.542160626584934e-01 - 5.529078153599613e-01 - 5.516026476869607e-01 - 5.503005524879265e-01 - 5.490015224489507e-01 - 5.477055503706971e-01 - 5.464126291394721e-01 - 5.451227516109934e-01 - 5.438359105997491e-01 - 5.425520989229732e-01 - 5.412713094911021e-01 - 5.399935352390902e-01 - 5.387187691034094e-01 - 5.374470040087604e-01 - 5.361782329113639e-01 - 5.349124487848638e-01 - 5.336496445514358e-01 - 5.323898132502169e-01 - 5.311329480044003e-01 - 5.298790417206248e-01 - 5.286280874266170e-01 - 5.273800783238198e-01 - 5.261350074387794e-01 - 5.248928678300107e-01 - 5.236536526638225e-01 - 5.224173550711992e-01 - 5.211839681868924e-01 - 5.199534851768893e-01 - 5.187258992380968e-01 - 5.175012035574781e-01 - 5.162793913049719e-01 - 5.150604557657682e-01 - 5.138443902158373e-01 - 5.126311878387027e-01 - 5.114208419243966e-01 - 5.102133457996210e-01 - 5.090086927559088e-01 - 5.078068761246483e-01 - 5.066078892445277e-01 - 5.054117254264059e-01 - 5.042183780707232e-01 - 5.030278406156905e-01 - 5.018401064512819e-01 - 5.006551689399448e-01 - 4.994730214827681e-01 - 4.982936576173500e-01 - 4.971170708196209e-01 - 4.959432545161117e-01 - 4.947722021784954e-01 - 4.936039073158257e-01 - 4.924383634713059e-01 - 4.912755642215030e-01 - 4.901155031029966e-01 - 4.889581736357913e-01 - 4.878035694426762e-01 - 4.866516841617155e-01 - 4.855025114095978e-01 - 4.843560447562852e-01 - 4.832122778219742e-01 - 4.820712043014287e-01 - 4.809328179063641e-01 - 4.797971123302187e-01 - 4.786640812406847e-01 - 4.775337183184862e-01 - 4.764060173050261e-01 - 4.752809720122764e-01 - 4.741585762111217e-01 - 4.730388236459319e-01 - 4.719217080626099e-01 - 4.708072233097221e-01 - 4.696953632391141e-01 - 4.685861216425942e-01 - 4.674794923970907e-01 - 4.663754693817960e-01 - 4.652740464091041e-01 - 4.641752174102053e-01 - 4.630789763262008e-01 - 4.619853169869301e-01 - 4.608942333544824e-01 - 4.598057194461572e-01 - 4.587197692038988e-01 - 4.576363766028796e-01 - 4.565555356433393e-01 - 4.554772403132010e-01 - 4.544014845983438e-01 - 4.533282625263808e-01 - 4.522575682421708e-01 - 4.511893957834002e-01 - 4.501237391381080e-01 - 4.490605924783677e-01 - 4.479999499003729e-01 - 4.469418054464263e-01 - 4.458861533467765e-01 - 4.448329877503518e-01 - 4.437823027182840e-01 - 4.427340924804984e-01 - 4.416883512661691e-01 - 4.406450732493647e-01 - 4.396042525949710e-01 - 4.385658835318161e-01 - 4.375299603591805e-01 - 4.364964773180230e-01 - 4.354654286529535e-01 - 4.344368086449737e-01 - 4.334106115882546e-01 - 4.323868317973252e-01 - 4.313654636098987e-01 - 4.303465013528135e-01 - 4.293299393608014e-01 - 4.283157719943348e-01 - 4.273039936389254e-01 - 4.262945986862648e-01 - 4.252875815207442e-01 - 4.242829365388910e-01 - 4.232806581737543e-01 - 4.222807409163533e-01 - 4.212831792180283e-01 - 4.202879675160039e-01 - 4.192951002821390e-01 - 4.183045720190468e-01 - 4.173163772308877e-01 - 4.163305103895081e-01 - 4.153469660738844e-01 - 4.143657388899517e-01 - 4.133868232899575e-01 - 4.124102138463511e-01 - 4.114359052122226e-01 - 4.104638919136763e-01 - 4.094941685453110e-01 - 4.085267297797091e-01 - 4.075615702608746e-01 - 4.065986846247451e-01 - 4.056380675149961e-01 - 4.046797136100241e-01 - 4.037236175791848e-01 - 4.027697740867438e-01 - 4.018181778668817e-01 - 4.008688236537185e-01 - 3.999217061664900e-01 - 3.989768201804763e-01 - 3.980341604347806e-01 - 3.970937216243767e-01 - 3.961554986257766e-01 - 3.952194862561716e-01 - 3.942856791749246e-01 - 3.933540722797152e-01 - 3.924246604937682e-01 - 3.914974386057962e-01 - 3.905724013991230e-01 - 3.896495437210211e-01 - 3.887288605266558e-01 - 3.878103467384126e-01 - 3.868939972364765e-01 - 3.859798068708922e-01 - 3.850677705778728e-01 - 3.841578833358520e-01 - 3.832501400994028e-01 - 3.823445358203205e-01 - 3.814410654593080e-01 - 3.805397240004402e-01 - 3.796405064500310e-01 - 3.787434078281850e-01 - 3.778484231550217e-01 - 3.769555474293507e-01 - 3.760647756653435e-01 - 3.751761029803938e-01 - 3.742895244689736e-01 - 3.734050351897463e-01 - 3.725226302131253e-01 - 3.716423046174657e-01 - 3.707640535037849e-01 - 3.698878720450124e-01 - 3.690137553825144e-01 - 3.681416986254492e-01 - 3.672716969834960e-01 - 3.664037456169829e-01 - 3.655378396196581e-01 - 3.646739742353085e-01 - 3.638121447254376e-01 - 3.629523462980791e-01 - 3.620945741078652e-01 - 3.612388233782960e-01 - 3.603850894480597e-01 - 3.595333675652969e-01 - 3.586836529581271e-01 - 3.578359408972814e-01 - 3.569902267099870e-01 - 3.561465057284826e-01 - 3.553047732480240e-01 - 3.544650245489661e-01 - 3.536272549462773e-01 - 3.527914598373741e-01 - 3.519576346281267e-01 - 3.511257746893044e-01 - 3.502958753213151e-01 - 3.494679319027064e-01 - 3.486419398734283e-01 - 3.478178946841421e-01 - 3.469957917542031e-01 - 3.461756264906874e-01 - 3.453573943334770e-01 - 3.445410907466465e-01 - 3.437267112053919e-01 - 3.429142511753236e-01 - 3.421037061357636e-01 - 3.412950715914754e-01 - 3.404883430871680e-01 - 3.396835161220511e-01 - 3.388805861778083e-01 - 3.380795488742585e-01 - 3.372803997559251e-01 - 3.364831342820857e-01 - 3.356877480644493e-01 - 3.348942367473924e-01 - 3.341025959445759e-01 - 3.333128211902062e-01 - 3.325249080644813e-01 - 3.317388522349806e-01 - 3.309546493345364e-01 - 3.301722950123494e-01 - 3.293917849546400e-01 - 3.286131147929292e-01 - 3.278362801760134e-01 - 3.270612768173198e-01 - 3.262881004205997e-01 - 3.255167466776044e-01 - 3.247472112772871e-01 - 3.239794899591130e-01 - 3.232135784952971e-01 - 3.224494726613195e-01 - 3.216871681318617e-01 - 3.209266606147330e-01 - 3.201679460077643e-01 - 3.194110200806869e-01 - 3.186558785671545e-01 - 3.179025173467112e-01 - 3.171509322207308e-01 - 3.164011189537259e-01 - 3.156530734030461e-01 - 3.149067914068442e-01 - 3.141622688005587e-01 - 3.134195014964591e-01 - 3.126784853846941e-01 - 3.119392163234083e-01 - 3.112016901727622e-01 - 3.104659028247113e-01 - 3.097318502149898e-01 - 3.089995283319454e-01 - 3.082689330721005e-01 - 3.075400602663161e-01 - 3.068129059444455e-01 - 3.060874661234649e-01 - 3.053637367362504e-01 - 3.046417137079979e-01 - 3.039213930418579e-01 - 3.032027708160949e-01 - 3.024858429572295e-01 - 3.017706054435225e-01 - 3.010570543910775e-01 - 3.003451858060657e-01 - 2.996349956970866e-01 - 2.989264801519126e-01 - 2.982196352437723e-01 - 2.975144570351090e-01 - 2.968109415899733e-01 - 2.961090850010212e-01 - 2.954088833712375e-01 - 2.947103327960572e-01 - 2.940134293733013e-01 - 2.933181692489545e-01 - 2.926245486550200e-01 - 2.919325636534309e-01 - 2.912422103009782e-01 - 2.905534849067459e-01 - 2.898663836341845e-01 - 2.891809025716850e-01 - 2.884970379499296e-01 - 2.878147859946116e-01 - 2.871341429080666e-01 - 2.864551048929091e-01 - 2.857776681836698e-01 - 2.851018290276999e-01 - 2.844275836247271e-01 - 2.837549281975342e-01 - 2.830838590248334e-01 - 2.824143724756855e-01 - 2.817464648036653e-01 - 2.810801321714598e-01 - 2.804153709678348e-01 - 2.797521775256636e-01 - 2.790905480675208e-01 - 2.784304789557904e-01 - 2.777719665515425e-01 - 2.771150071618110e-01 - 2.764595971293084e-01 - 2.758057328280932e-01 - 2.751534106502780e-01 - 2.745026269461392e-01 - 2.738533780697315e-01 - 2.732056604090851e-01 - 2.725594703611444e-01 - 2.719148043516682e-01 - 2.712716588414341e-01 - 2.706300302048149e-01 - 2.699899148252890e-01 - 2.693513091897057e-01 - 2.687142097803046e-01 - 2.680786130525787e-01 - 2.674445154290628e-01 - 2.668119133864937e-01 - 2.661808034370396e-01 - 2.655511820876730e-01 - 2.649230457933240e-01 - 2.642963910212357e-01 - 2.636712143601993e-01 - 2.630475123173707e-01 - 2.624252813696634e-01 - 2.618045181320832e-01 - 2.611852191534089e-01 - 2.605673809346502e-01 - 2.599510000768786e-01 - 2.593360731482656e-01 - 2.587225966857610e-01 - 2.581105673020023e-01 - 2.574999816218594e-01 - 2.568908362541323e-01 - 2.562831277681717e-01 - 2.556768527608984e-01 - 2.550720078808991e-01 - 2.544685898158210e-01 - 2.538665952029344e-01 - 2.532660206235198e-01 - 2.526668627769018e-01 - 2.520691183671673e-01 - 2.514727840477828e-01 - 2.508778564832650e-01 - 2.502843323450471e-01 - 2.496922083184503e-01 - 2.491014811741685e-01 - 2.485121476502302e-01 - 2.479242043768022e-01 - 2.473376480750936e-01 - 2.467524755330193e-01 - 2.461686835577825e-01 - 2.455862688342147e-01 - 2.450052280577099e-01 - 2.444255580815592e-01 - 2.438472556710649e-01 - 2.432703175621061e-01 - 2.426947405763887e-01 - 2.421205215374063e-01 - 2.415476572469543e-01 - 2.409761444715131e-01 - 2.404059800179439e-01 - 2.398371607406130e-01 - 2.392696835287547e-01 - 2.387035451998669e-01 - 2.381387425460481e-01 - 2.375752724876774e-01 - 2.370131319015487e-01 - 2.364523176042576e-01 - 2.358928264341899e-01 - 2.353346553264918e-01 - 2.347778012643444e-01 - 2.342222610470114e-01 - 2.336680315481888e-01 - 2.331151097630285e-01 - 2.325634926002070e-01 - 2.320131769932555e-01 - 2.314641599195968e-01 - 2.309164382391606e-01 - 2.303700088852327e-01 - 2.298248689205450e-01 - 2.292810152383314e-01 - 2.287384447851956e-01 - 2.281971546639490e-01 - 2.276571417710518e-01 - 2.271184030444375e-01 - 2.265809356255705e-01 - 2.260447364485637e-01 - 2.255098024678978e-01 - 2.249761308577043e-01 - 2.244437185775247e-01 - 2.239125625576918e-01 - 2.233826599324974e-01 - 2.228540078061592e-01 - 2.223266032159731e-01 - 2.218004431318401e-01 - 2.212755246546400e-01 - 2.207518449320089e-01 - 2.202294009962271e-01 - 2.197081899542086e-01 - 2.191882089472320e-01 - 2.186694550184439e-01 - 2.181519252528444e-01 - 2.176356167922184e-01 - 2.171205268020538e-01 - 2.166066524055817e-01 - 2.160939907132310e-01 - 2.155825389406823e-01 - 2.150722942170351e-01 - 2.145632535999474e-01 - 2.140554143128364e-01 - 2.135487735713488e-01 - 2.130433285376680e-01 - 2.125390763961598e-01 - 2.120360143225986e-01 - 2.115341394866721e-01 - 2.110334491301104e-01 - 2.105339404911263e-01 - 2.100356107692428e-01 - 2.095384571593845e-01 - 2.090424768875718e-01 - 2.085476672286868e-01 - 2.080540254649787e-01 - 2.075615488420417e-01 - 2.070702345483775e-01 - 2.065800798220710e-01 - 2.060910819584345e-01 - 2.056032383022174e-01 - 2.051165461242101e-01 - 2.046310026800104e-01 - 2.041466052775261e-01 - 2.036633511978056e-01 - 2.031812377402102e-01 - 2.027002622847228e-01 - 2.022204221329609e-01 - 2.017417145657832e-01 - 2.012641369577989e-01 - 2.007876866366623e-01 - 2.003123609141739e-01 - 1.998381571847571e-01 - 1.993650728223044e-01 - 1.988931051658790e-01 - 1.984222515391579e-01 - 1.979525093566432e-01 - 1.974838760798574e-01 - 1.970163490394448e-01 - 1.965499255924087e-01 - 1.960846031634822e-01 - 1.956203792216227e-01 - 1.951572511456189e-01 - 1.946952162469976e-01 - 1.942342720345011e-01 - 1.937744160087473e-01 - 1.933156455855021e-01 - 1.928579581617409e-01 - 1.924013511601302e-01 - 1.919458220512063e-01 - 1.914913683490730e-01 - 1.910379875218400e-01 - 1.905856769690048e-01 - 1.901344342343178e-01 - 1.896842568245793e-01 - 1.892351421122624e-01 - 1.887870876905098e-01 - 1.883400911382459e-01 - 1.878941498265747e-01 - 1.874492612709913e-01 - 1.870054230608876e-01 - 1.865626327533365e-01 - 1.861208878413260e-01 - 1.856801858136446e-01 - 1.852405242290795e-01 - 1.848019006561455e-01 - 1.843643126785636e-01 - 1.839277579090688e-01 - 1.834922338318696e-01 - 1.830577379260484e-01 - 1.826242679175190e-01 - 1.821918214082343e-01 - 1.817603959062191e-01 - 1.813299890419420e-01 - 1.809005984096844e-01 - 1.804722215715290e-01 - 1.800448561676805e-01 - 1.796184998471616e-01 - 1.791931502428031e-01 - 1.787688049585256e-01 - 1.783454616010165e-01 - 1.779231178061076e-01 - 1.775017712916434e-01 - 1.770814197185338e-01 - 1.766620606643876e-01 - 1.762436917707559e-01 - 1.758263107475443e-01 - 1.754099153420786e-01 - 1.749945031691721e-01 - 1.745800718793870e-01 - 1.741666192327871e-01 - 1.737541428912765e-01 - 1.733426405128906e-01 - 1.729321098263452e-01 - 1.725225486037993e-01 - 1.721139545737653e-01 - 1.717063253659770e-01 - 1.712996586978482e-01 - 1.708939523524782e-01 - 1.704892041326627e-01 - 1.700854117308264e-01 - 1.696825728315613e-01 - 1.692806852413719e-01 - 1.688797467224855e-01 - 1.684797550119726e-01 - 1.680807078836749e-01 - 1.676826031516292e-01 - 1.672854386236076e-01 - 1.668892120257625e-01 - 1.664939211364053e-01 - 1.660995637803862e-01 - 1.657061377653481e-01 - 1.653136408872399e-01 - 1.649220709518862e-01 - 1.645314258210089e-01 - 1.641417032838678e-01 - 1.637529010922642e-01 - 1.633650171697226e-01 - 1.629780493848234e-01 - 1.625919955117979e-01 - 1.622068533722165e-01 - 1.618226208359533e-01 - 1.614392958070308e-01 - 1.610568761629498e-01 - 1.606753597398519e-01 - 1.602947443525945e-01 - 1.599150279328092e-01 - 1.595362083976419e-01 - 1.591582835876941e-01 - 1.587812513806259e-01 - 1.584051096895935e-01 - 1.580298564486488e-01 - 1.576554895336735e-01 - 1.572820068494865e-01 - 1.569094063844064e-01 - 1.565376859935812e-01 - 1.561668435389086e-01 - 1.557968770322644e-01 - 1.554277844430587e-01 - 1.550595637013555e-01 - 1.546922127252644e-01 - 1.543257294352004e-01 - 1.539601117962810e-01 - 1.535953578647676e-01 - 1.532314655336160e-01 - 1.528684326732572e-01 - 1.525062574192351e-01 - 1.521449377506904e-01 - 1.517844715391133e-01 - 1.514248568043021e-01 - 1.510660915767141e-01 - 1.507081738546517e-01 - 1.503511015850067e-01 - 1.499948728018673e-01 - 1.496394855976185e-01 - 1.492849379312514e-01 - 1.489312277844460e-01 - 1.485783532079666e-01 - 1.482263122946834e-01 - 1.478751030581660e-01 - 1.475247234388987e-01 - 1.471751715323068e-01 - 1.468264454469171e-01 - 1.464785432366154e-01 - 1.461314629165984e-01 - 1.457852025452889e-01 - 1.454397602433564e-01 - 1.450951340257908e-01 - 1.447513219420110e-01 - 1.444083221508569e-01 - 1.440661327109938e-01 - 1.437247516822454e-01 - 1.433841772072484e-01 - 1.430444073901374e-01 - 1.427054403077353e-01 - 1.423672740371242e-01 - 1.420299067307786e-01 - 1.416933365389871e-01 - 1.413575615237460e-01 - 1.410225798197031e-01 - 1.406883895901710e-01 - 1.403549889435149e-01 - 1.400223760032770e-01 - 1.396905489310608e-01 - 1.393595059398338e-01 - 1.390292451224472e-01 - 1.386997645496112e-01 - 1.383710625136722e-01 - 1.380431371824567e-01 - 1.377159866326167e-01 - 1.373896091055998e-01 - 1.370640027752214e-01 - 1.367391657592925e-01 - 1.364150963290927e-01 - 1.360917926783734e-01 - 1.357692529162330e-01 - 1.354474752994454e-01 - 1.351264580487222e-01 - 1.348061993122180e-01 - 1.344866973181728e-01 - 1.341679503229942e-01 - 1.338499565682958e-01 - 1.335327142013654e-01 - 1.332162214320106e-01 - 1.329004765902875e-01 - 1.325854779258548e-01 - 1.322712236439755e-01 - 1.319577119415115e-01 - 1.316449410589970e-01 - 1.313329092858229e-01 - 1.310216149439378e-01 - 1.307110562100912e-01 - 1.304012313067827e-01 - 1.300921386594473e-01 - 1.297837764741680e-01 - 1.294761429396481e-01 - 1.291692364743583e-01 - 1.288630553353233e-01 - 1.285575977268189e-01 - 1.282528620001082e-01 - 1.279488464604472e-01 - 1.276455493846629e-01 - 1.273429690961771e-01 - 1.270411039265308e-01 - 1.267399521912149e-01 - 1.264395121606617e-01 - 1.261397821624623e-01 - 1.258407605612416e-01 - 1.255424456647032e-01 - 1.252448358003494e-01 - 1.249479293256652e-01 - 1.246517245985584e-01 - 1.243562199440227e-01 - 1.240614136699035e-01 - 1.237673041530004e-01 - 1.234738897833225e-01 - 1.231811689369122e-01 - 1.228891399541342e-01 - 1.225978011897444e-01 - 1.223071510285007e-01 - 1.220171878485729e-01 - 1.217279100221359e-01 - 1.214393159216827e-01 - 1.211514039479249e-01 - 1.208641725134118e-01 - 1.205776200272462e-01 - 1.202917448643591e-01 - 1.200065453999493e-01 - 1.197220200388544e-01 - 1.194381672203820e-01 - 1.191549853738593e-01 - 1.188724728867774e-01 - 1.185906281982059e-01 - 1.183094497403516e-01 - 1.180289358802264e-01 - 1.177490851172322e-01 - 1.174698959467804e-01 - 1.171913666738082e-01 - 1.169134957966049e-01 - 1.166362818664215e-01 - 1.163597231976005e-01 - 1.160838182295854e-01 - 1.158085654926154e-01 - 1.155339634301463e-01 - 1.152600105152270e-01 - 1.149867052503320e-01 - 1.147140461081585e-01 - 1.144420315115333e-01 - 1.141706598827868e-01 - 1.138999297876022e-01 - 1.136298397724347e-01 - 1.133603883121320e-01 - 1.130915738073908e-01 - 1.128233947404400e-01 - 1.125558496925181e-01 - 1.122889371862514e-01 - 1.120226557224089e-01 - 1.117570037925019e-01 - 1.114919798574519e-01 - 1.112275824488763e-01 - 1.109638101830490e-01 - 1.107006615250319e-01 - 1.104381349837027e-01 - 1.101762291935612e-01 - 1.099149425817940e-01 - 1.096542736337556e-01 - 1.093942210611990e-01 - 1.091347833750166e-01 - 1.088759590309823e-01 - 1.086177465849946e-01 - 1.083601446468375e-01 - 1.081031518187680e-01 - 1.078467666394599e-01 - 1.075909876365943e-01 - 1.073358133695979e-01 - 1.070812424691808e-01 - 1.068272734935852e-01 - 1.065739049762412e-01 - 1.063211355273724e-01 - 1.060689637753818e-01 - 1.058173883167701e-01 - 1.055664076522099e-01 - 1.053160204177178e-01 - 1.050662253083730e-01 - 1.048170208178578e-01 - 1.045684055544151e-01 - 1.043203782231123e-01 - 1.040729373745031e-01 - 1.038260815947437e-01 - 1.035798095388146e-01 - 1.033341198496129e-01 - 1.030890111353506e-01 - 1.028444819874746e-01 - 1.026005310752415e-01 - 1.023571570589419e-01 - 1.021143585605686e-01 - 1.018721342063349e-01 - 1.016304826397723e-01 - 1.013894025261397e-01 - 1.011488925387934e-01 - 1.009089513225976e-01 - 1.006695774897203e-01 - 1.004307697412456e-01 - 1.001925267601519e-01 - 9.995484714928184e-02 - 9.971772961029543e-02 - 9.948117285600222e-02 - 9.924517553207431e-02 - 9.900973631553432e-02 - 9.877485389836264e-02 - 9.854052696321766e-02 - 9.830675420513860e-02 - 9.807353432053509e-02 - 9.784086599274402e-02 - 9.760874792461041e-02 - 9.737717882679013e-02 - 9.714615739564664e-02 - 9.691568233864475e-02 - 9.668575237168565e-02 - 9.645636620785530e-02 - 9.622752256709627e-02 - 9.599922017186617e-02 - 9.577145773476621e-02 - 9.554423398421420e-02 - 9.531754766036228e-02 - 9.509139748951084e-02 - 9.486578220406576e-02 - 9.464070054491446e-02 - 9.441615125061270e-02 - 9.419213306609350e-02 - 9.396864474309072e-02 - 9.374568502973517e-02 - 9.352325267700241e-02 - 9.330134644110695e-02 - 9.307996508088016e-02 - 9.285910736057421e-02 - 9.263877204899980e-02 - 9.241895790580944e-02 - 9.219966369924239e-02 - 9.198088821288498e-02 - 9.176263021506216e-02 - 9.154488848131032e-02 - 9.132766180778470e-02 - 9.111094897456264e-02 - 9.089474876186458e-02 - 9.067905996494766e-02 - 9.046388137755315e-02 - 9.024921179550818e-02 - 9.003505002157913e-02 - 8.982139485394958e-02 - 8.960824509461397e-02 - 8.939559956013639e-02 - 8.918345705664489e-02 - 8.897181638949078e-02 - 8.876067638185769e-02 - 8.855003585659860e-02 - 8.833989363307079e-02 - 8.813024852794749e-02 - 8.792109937217552e-02 - 8.771244500411417e-02 - 8.750428424959714e-02 - 8.729661594151820e-02 - 8.708943892038122e-02 - 8.688275202450782e-02 - 8.667655409894154e-02 - 8.647084399500883e-02 - 8.626562056133152e-02 - 8.606088264727801e-02 - 8.585662910508592e-02 - 8.565285879275303e-02 - 8.544957056834111e-02 - 8.524676329099723e-02 - 8.504443583456130e-02 - 8.484258706983651e-02 - 8.464121585953427e-02 - 8.444032107793580e-02 - 8.423990160173883e-02 - 8.403995630660985e-02 - 8.384048408000297e-02 - 8.364148380739438e-02 - 8.344295436518863e-02 - 8.324489464319758e-02 - 8.304730353631981e-02 - 8.285017993778075e-02 - 8.265352274723796e-02 - 8.245733086610936e-02 - 8.226160319325253e-02 - 8.206633863307464e-02 - 8.187153609323948e-02 - 8.167719448173898e-02 - 8.148331271120264e-02 - 8.128988969775824e-02 - 8.109692435907066e-02 - 8.090441561287741e-02 - 8.071236238052074e-02 - 8.052076359329230e-02 - 8.032961817777003e-02 - 8.013892505875637e-02 - 7.994868317110082e-02 - 7.975889145271257e-02 - 7.956954884117817e-02 - 7.938065427030368e-02 - 7.919220668490153e-02 - 7.900420503735811e-02 - 7.881664826626886e-02 - 7.862953532075569e-02 - 7.844286516277023e-02 - 7.825663674598571e-02 - 7.807084902471831e-02 - 7.788550095723919e-02 - 7.770059150356423e-02 - 7.751611963202924e-02 - 7.733208431808952e-02 - 7.714848452080215e-02 - 7.696531920714285e-02 - 7.678258736267791e-02 - 7.660028796508990e-02 - 7.641841999039113e-02 - 7.623698241865759e-02 - 7.605597423593993e-02 - 7.587539442823407e-02 - 7.569524197859213e-02 - 7.551551588287067e-02 - 7.533621514035872e-02 - 7.515733874432233e-02 - 7.497888568830134e-02 - 7.480085497230264e-02 - 7.462324560850588e-02 - 7.444605660139321e-02 - 7.426928695221670e-02 - 7.409293566891996e-02 - 7.391700176673981e-02 - 7.374148426439617e-02 - 7.356638217848553e-02 - 7.339169452681224e-02 - 7.321742033027905e-02 - 7.304355861552074e-02 - 7.287010840815517e-02 - 7.269706873346385e-02 - 7.252443862192341e-02 - 7.235221710900047e-02 - 7.218040323296335e-02 - 7.200899602923243e-02 - 7.183799453782064e-02 - 7.166739780328910e-02 - 7.149720486628935e-02 - 7.132741477295296e-02 - 7.115802657678706e-02 - 7.098903933028558e-02 - 7.082045208266741e-02 - 7.065226388294948e-02 - 7.048447379884398e-02 - 7.031708089501212e-02 - 7.015008422428966e-02 - 6.998348285005500e-02 - 6.981727584178653e-02 - 6.965146227138255e-02 - 6.948604121024822e-02 - 6.932101172952453e-02 - 6.915637290177927e-02 - 6.899212381049466e-02 - 6.882826353831664e-02 - 6.866479115768206e-02 - 6.850170575553913e-02 - 6.833900642241270e-02 - 6.817669223943085e-02 - 6.801476230171261e-02 - 6.785321570853013e-02 - 6.769205154760372e-02 - 6.753126891476798e-02 - 6.737086691265436e-02 - 6.721084464422118e-02 - 6.705120121123045e-02 - 6.689193571639933e-02 - 6.673304726820108e-02 - 6.657453497707803e-02 - 6.641639795452120e-02 - 6.625863531334618e-02 - 6.610124617104705e-02 - 6.594422964866814e-02 - 6.578758486543299e-02 - 6.563131094165708e-02 - 6.547540700031643e-02 - 6.531987216906585e-02 - 6.516470557837332e-02 - 6.500990635997374e-02 - 6.485547364331327e-02 - 6.470140656204018e-02 - 6.454770425495959e-02 - 6.439436585565442e-02 - 6.424139050518185e-02 - 6.408877735587415e-02 - 6.393652554954243e-02 - 6.378463422860429e-02 - 6.363310254304622e-02 - 6.348192964216136e-02 - 6.333111467891862e-02 - 6.318065681259971e-02 - 6.303055519506789e-02 - 6.288080898167979e-02 - 6.273141734118348e-02 - 6.258237943694549e-02 - 6.243369443027962e-02 - 6.228536148636779e-02 - 6.213737977420020e-02 - 6.198974846629291e-02 - 6.184246673830131e-02 - 6.169553375986874e-02 - 6.154894870195880e-02 - 6.140271075002260e-02 - 6.125681908485271e-02 - 6.111127288458502e-02 - 6.096607133498923e-02 - 6.082121362330186e-02 - 6.067669893778977e-02 - 6.053252647002724e-02 - 6.038869541057570e-02 - 6.024520494995262e-02 - 6.010205428441878e-02 - 5.995924261312039e-02 - 5.981676913606451e-02 - 5.967463305068377e-02 - 5.953283356000520e-02 - 5.939136987405440e-02 - 5.925024120274393e-02 - 5.910944675075109e-02 - 5.896898572024133e-02 - 5.882885733338872e-02 - 5.868906080796419e-02 - 5.854959534943303e-02 - 5.841046018167366e-02 - 5.827165452667381e-02 - 5.813317759547484e-02 - 5.799502862000658e-02 - 5.785720683145133e-02 - 5.771971144629215e-02 - 5.758254169802959e-02 - 5.744569682168989e-02 - 5.730917604038396e-02 - 5.717297859181381e-02 - 5.703710371771920e-02 - 5.690155065150715e-02 - 5.676631863514842e-02 - 5.663140691176988e-02 - 5.649681471550019e-02 - 5.636254129818796e-02 - 5.622858591623749e-02 - 5.609494780637568e-02 - 5.596162621719655e-02 - 5.582862040612746e-02 - 5.569592962469259e-02 - 5.556355312969728e-02 - 5.543149018219354e-02 - 5.529974004038473e-02 - 5.516830196534387e-02 - 5.503717522021812e-02 - 5.490635906464716e-02 - 5.477585276550550e-02 - 5.464565559606692e-02 - 5.451576682310098e-02 - 5.438618571514530e-02 - 5.425691154653305e-02 - 5.412794360021059e-02 - 5.399928115030668e-02 - 5.387092346220070e-02 - 5.374286982722595e-02 - 5.361511953114147e-02 - 5.348767184376742e-02 - 5.336052605560348e-02 - 5.323368145967647e-02 - 5.310713734132736e-02 - 5.298089299097181e-02 - 5.285494769998652e-02 - 5.272930075794034e-02 - 5.260395145882699e-02 - 5.247889910164562e-02 - 5.235414299012888e-02 - 5.222968242359068e-02 - 5.210551670083303e-02 - 5.198164512479836e-02 - 5.185806699751586e-02 - 5.173478162567831e-02 - 5.161178832737659e-02 - 5.148908640731603e-02 - 5.136667516904735e-02 - 5.124455393713079e-02 - 5.112272202541198e-02 - 5.100117874145336e-02 - 5.087992340415878e-02 - 5.075895533879782e-02 - 5.063827387090040e-02 - 5.051787831631814e-02 - 5.039776799903027e-02 - 5.027794224956293e-02 - 5.015840039018700e-02 - 5.003914174911826e-02 - 4.992016566217095e-02 - 4.980147146451835e-02 - 4.968305848565534e-02 - 4.956492605368701e-02 - 4.944707351707827e-02 - 4.932950021762891e-02 - 4.921220548403189e-02 - 4.909518865563611e-02 - 4.897844908008390e-02 - 4.886198610990230e-02 - 4.874579909103274e-02 - 4.862988736593407e-02 - 4.851425027765261e-02 - 4.839888718215429e-02 - 4.828379743688660e-02 - 4.816898039344981e-02 - 4.805443540666063e-02 - 4.794016183433197e-02 - 4.782615903628512e-02 - 4.771242637003347e-02 - 4.759896319572905e-02 - 4.748576888074151e-02 - 4.737284278529100e-02 - 4.726018427180961e-02 - 4.714779271742187e-02 - 4.703566749191604e-02 - 4.692380796083007e-02 - 4.681221349433169e-02 - 4.670088346648602e-02 - 4.658981725459431e-02 - 4.647901423861556e-02 - 4.636847379587147e-02 - 4.625819530165282e-02 - 4.614817813294777e-02 - 4.603842167462240e-02 - 4.592892531626435e-02 - 4.581968844113481e-02 - 4.571071043517037e-02 - 4.560199068716930e-02 - 4.549352858172214e-02 - 4.538532351139604e-02 - 4.527737487551017e-02 - 4.516968206047602e-02 - 4.506224446147816e-02 - 4.495506148526871e-02 - 4.484813252205796e-02 - 4.474145696749865e-02 - 4.463503423038843e-02 - 4.452886371233129e-02 - 4.442294481444441e-02 - 4.431727694184067e-02 - 4.421185950249874e-02 - 4.410669190344264e-02 - 4.400177354999718e-02 - 4.389710385863231e-02 - 4.379268224561385e-02 - 4.368850811842072e-02 - 4.358458089102907e-02 - 4.348089998166713e-02 - 4.337746480946211e-02 - 4.327427479290449e-02 - 4.317132935104961e-02 - 4.306862790538591e-02 - 4.296616988021409e-02 - 4.286395470044128e-02 - 4.276198178905291e-02 - 4.266025057462805e-02 - 4.255876048879523e-02 - 4.245751096050290e-02 - 4.235650142249979e-02 - 4.225573130868781e-02 - 4.215520004666404e-02 - 4.205490707118502e-02 - 4.195485182346907e-02 - 4.185503374212908e-02 - 4.175545226547943e-02 - 4.165610683241490e-02 - 4.155699688308426e-02 - 4.145812186261490e-02 - 4.135948121993713e-02 - 4.126107439911159e-02 - 4.116290084444992e-02 - 4.106496000347922e-02 - 4.096725133001662e-02 - 4.086977427671171e-02 - 4.077252829257245e-02 - 4.067551282880393e-02 - 4.057872734137224e-02 - 4.048217129089726e-02 - 4.038584413229004e-02 - 4.028974532214836e-02 - 4.019387432351806e-02 - 4.009823059884492e-02 - 4.000281360871143e-02 - 3.990762281263916e-02 - 3.981265768084040e-02 - 3.971791768404272e-02 - 3.962340228400397e-02 - 3.952911094818634e-02 - 3.943504314911767e-02 - 3.934119836154264e-02 - 3.924757605343093e-02 - 3.915417569553582e-02 - 3.906099677494528e-02 - 3.896803876462888e-02 - 3.887530113159737e-02 - 3.878278335807980e-02 - 3.869048493136602e-02 - 3.859840533540703e-02 - 3.850654403935494e-02 - 3.841490053099362e-02 - 3.832347430867683e-02 - 3.823226484521238e-02 - 3.814127162485314e-02 - 3.805049414568009e-02 - 3.795993189727254e-02 - 3.786958436838804e-02 - 3.777945104950908e-02 - 3.768953143238456e-02 - 3.759982501241896e-02 - 3.751033128919119e-02 - 3.742104976390229e-02 - 3.733197993101921e-02 - 3.724312127956968e-02 - 3.715447331892652e-02 - 3.706603555538170e-02 - 3.697780748276271e-02 - 3.688978860838169e-02 - 3.680197844047203e-02 - 3.671437648083043e-02 - 3.662698223859462e-02 - 3.653979522528233e-02 - 3.645281495050149e-02 - 3.636604092401768e-02 - 3.627947265609178e-02 - 3.619310965841749e-02 - 3.610695145022991e-02 - 3.602099755007137e-02 - 3.593524746722872e-02 - 3.584970072102484e-02 - 3.576435683502647e-02 - 3.567921532660211e-02 - 3.559427571435374e-02 - 3.550953752116312e-02 - 3.542500027693078e-02 - 3.534066350384148e-02 - 3.525652672170999e-02 - 3.517258946309138e-02 - 3.508885125628003e-02 - 3.500531162678291e-02 - 3.492197010940873e-02 - 3.483882623525817e-02 - 3.475587953263527e-02 - 3.467312953919303e-02 - 3.459057578876406e-02 - 3.450821781198862e-02 - 3.442605515251815e-02 - 3.434408734999198e-02 - 3.426231393723483e-02 - 3.418073445581654e-02 - 3.409934844816886e-02 - 3.401815545480084e-02 - 3.393715501912345e-02 - 3.385634668688416e-02 - 3.377573000557660e-02 - 3.369530452244349e-02 - 3.361506978424043e-02 - 3.353502533757853e-02 - 3.345517073173793e-02 - 3.337550551749302e-02 - 3.329602924688495e-02 - 3.321674147756795e-02 - 3.313764176353938e-02 - 3.305872964905672e-02 - 3.298000469915312e-02 - 3.290146647870388e-02 - 3.282311452928582e-02 - 3.274494841443989e-02 - 3.266696770524984e-02 - 3.258917195579586e-02 - 3.251156072835543e-02 - 3.243413358906379e-02 - 3.235689009597382e-02 - 3.227982981604406e-02 - 3.220295232152501e-02 - 3.212625717796667e-02 - 3.204974395335523e-02 - 3.197341221860803e-02 - 3.189726154412311e-02 - 3.182129149811844e-02 - 3.174550164996338e-02 - 3.166989158019418e-02 - 3.159446086552403e-02 - 3.151920907660396e-02 - 3.144413578635114e-02 - 3.136924057603768e-02 - 3.129452303273958e-02 - 3.121998273049806e-02 - 3.114561924523454e-02 - 3.107143216011856e-02 - 3.099742105799270e-02 - 3.092358552474080e-02 - 3.084992514925186e-02 - 3.077643951122557e-02 - 3.070312819305190e-02 - 3.062999078663620e-02 - 3.055702688363699e-02 - 3.048423607160382e-02 - 3.041161793396379e-02 - 3.033917207015753e-02 - 3.026689807846873e-02 - 3.019479554128978e-02 - 3.012286404982057e-02 - 3.005110320361238e-02 - 2.997951260681279e-02 - 2.990809185255966e-02 - 2.983684053226568e-02 - 2.976575824919644e-02 - 2.969484460522792e-02 - 2.962409920087884e-02 - 2.955352163824170e-02 - 2.948311151647172e-02 - 2.941286843696999e-02 - 2.934279201383451e-02 - 2.927288185012002e-02 - 2.920313754405053e-02 - 2.913355871301240e-02 - 2.906414496442064e-02 - 2.899489589842786e-02 - 2.892581113440367e-02 - 2.885689028447655e-02 - 2.878813295173805e-02 - 2.871953875071393e-02 - 2.865110730129668e-02 - 2.858283822298987e-02 - 2.851473112218837e-02 - 2.844678561226344e-02 - 2.837900131834860e-02 - 2.831137785774055e-02 - 2.824391484910513e-02 - 2.817661191561155e-02 - 2.810946867322990e-02 - 2.804248474261467e-02 - 2.797565975421473e-02 - 2.790899332866750e-02 - 2.784248508684310e-02 - 2.777613465729838e-02 - 2.770994166752542e-02 - 2.764390574354870e-02 - 2.757802651096095e-02 - 2.751230360164656e-02 - 2.744673664902718e-02 - 2.738132528259552e-02 - 2.731606912935157e-02 - 2.725096782054994e-02 - 2.718602099881922e-02 - 2.712122829441404e-02 - 2.705658933533107e-02 - 2.699210376654040e-02 - 2.692777122629619e-02 - 2.686359134766074e-02 - 2.679956376855050e-02 - 2.673568813034148e-02 - 2.667196407449100e-02 - 2.660839123653040e-02 - 2.654496925932325e-02 - 2.648169779209303e-02 - 2.641857647953893e-02 - 2.635560496230991e-02 - 2.629278288047702e-02 - 2.623010988365326e-02 - 2.616758562366618e-02 - 2.610520975031933e-02 - 2.604298190560967e-02 - 2.598090173551063e-02 - 2.591896889422694e-02 - 2.585718303968204e-02 - 2.579554382343284e-02 - 2.573405088890056e-02 - 2.567270388987125e-02 - 2.561150248485746e-02 - 2.555044633271165e-02 - 2.548953508798725e-02 - 2.542876840653832e-02 - 2.536814594843316e-02 - 2.530766736730480e-02 - 2.524733231969847e-02 - 2.518714047250964e-02 - 2.512709148651639e-02 - 2.506718502244662e-02 - 2.500742074738894e-02 - 2.494779831751132e-02 - 2.488831739145854e-02 - 2.482897764751662e-02 - 2.476977875068464e-02 - 2.471072035836960e-02 - 2.465180213557270e-02 - 2.459302375909131e-02 - 2.453438490494015e-02 - 2.447588522684439e-02 - 2.441752439632618e-02 - 2.435930209686822e-02 - 2.430121799563831e-02 - 2.424327176191257e-02 - 2.418546306971884e-02 - 2.412779159320392e-02 - 2.407025701015483e-02 - 2.401285899981317e-02 - 2.395559723318545e-02 - 2.389847138352894e-02 - 2.384148113010493e-02 - 2.378462615809818e-02 - 2.372790614977233e-02 - 2.367132078182184e-02 - 2.361486973012364e-02 - 2.355855267628842e-02 - 2.350236930912776e-02 - 2.344631931433045e-02 - 2.339040237260871e-02 - 2.333461816188979e-02 - 2.327896637661412e-02 - 2.322344670789084e-02 - 2.316805883183489e-02 - 2.311280243515378e-02 - 2.305767721100430e-02 - 2.300268285332459e-02 - 2.294781904779433e-02 - 2.289308548135576e-02 - 2.283848185163481e-02 - 2.278400785322520e-02 - 2.272966317657758e-02 - 2.267544750906289e-02 - 2.262136054576819e-02 - 2.256740198705395e-02 - 2.251357153295969e-02 - 2.245986887460843e-02 - 2.240629370372433e-02 - 2.235284572997816e-02 - 2.229952464835474e-02 - 2.224633014749699e-02 - 2.219326193897085e-02 - 2.214031972536749e-02 - 2.208750320104361e-02 - 2.203481207216736e-02 - 2.198224604054712e-02 - 2.192980480490446e-02 - 2.187748807809197e-02 - 2.182529556587840e-02 - 2.177322696546572e-02 - 2.172128198614426e-02 - 2.166946034002218e-02 - 2.161776173674180e-02 - 2.156618587797776e-02 - 2.151473246970182e-02 - 2.146340122648612e-02 - 2.141219186176581e-02 - 2.136110408595206e-02 - 2.131013760699968e-02 - 2.125929213929720e-02 - 2.120856739943827e-02 - 2.115796310282077e-02 - 2.110747896148574e-02 - 2.105711468773744e-02 - 2.100686999708853e-02 - 2.095674460640470e-02 - 2.090673823470377e-02 - 2.085685060390323e-02 - 2.080708143284909e-02 - 2.075743043865024e-02 - 2.070789733896461e-02 - 2.065848185338519e-02 - 2.060918370358626e-02 - 2.056000261352416e-02 - 2.051093830731156e-02 - 2.046199050841276e-02 - 2.041315893918832e-02 - 2.036444332670061e-02 - 2.031584339811113e-02 - 2.026735887003067e-02 - 2.021898947028043e-02 - 2.017073493461869e-02 - 2.012259498752183e-02 - 2.007456935661649e-02 - 2.002665777297167e-02 - 1.997885996051357e-02 - 1.993117564943755e-02 - 1.988360457741823e-02 - 1.983614647798445e-02 - 1.978880107994216e-02 - 1.974156811085027e-02 - 1.969444731166336e-02 - 1.964743841723802e-02 - 1.960054115227784e-02 - 1.955375525837354e-02 - 1.950708047707909e-02 - 1.946051654129042e-02 - 1.941406318497287e-02 - 1.936772014474174e-02 - 1.932148716119990e-02 - 1.927536398140690e-02 - 1.922935034564512e-02 - 1.918344598004621e-02 - 1.913765063001423e-02 - 1.909196404425976e-02 - 1.904638595925336e-02 - 1.900091612254435e-02 - 1.895555428061772e-02 - 1.891030016469744e-02 - 1.886515352637163e-02 - 1.882011411999479e-02 - 1.877518167521970e-02 - 1.873035594232305e-02 - 1.868563668110157e-02 - 1.864102363246424e-02 - 1.859651653826993e-02 - 1.855211514697215e-02 - 1.850781921692858e-02 - 1.846362849811174e-02 - 1.841954273425713e-02 - 1.837556167722399e-02 - 1.833168508274460e-02 - 1.828791270638760e-02 - 1.824424429587613e-02 - 1.820067960186819e-02 - 1.815721838079814e-02 - 1.811386039242822e-02 - 1.807060539155448e-02 - 1.802745312809132e-02 - 1.798440336027523e-02 - 1.794145584667328e-02 - 1.789861034396235e-02 - 1.785586661445831e-02 - 1.781322441713358e-02 - 1.777068350457842e-02 - 1.772824363606736e-02 - 1.768590457480606e-02 - 1.764366608520215e-02 - 1.760152792777148e-02 - 1.755948986314423e-02 - 1.751755165530868e-02 - 1.747571306959304e-02 - 1.743397386795286e-02 - 1.739233380686453e-02 - 1.735079266012027e-02 - 1.730935019969591e-02 - 1.726800617515195e-02 - 1.722676035861175e-02 - 1.718561252878033e-02 - 1.714456244423200e-02 - 1.710360987245781e-02 - 1.706275458478830e-02 - 1.702199634263978e-02 - 1.698133492251816e-02 - 1.694077010510486e-02 - 1.690030164730331e-02 - 1.685992932068962e-02 - 1.681965290804600e-02 - 1.677947217681714e-02 - 1.673938689521877e-02 - 1.669939683666028e-02 - 1.665950177991986e-02 - 1.661970150205939e-02 - 1.657999577711447e-02 - 1.654038437906895e-02 - 1.650086708478969e-02 - 1.646144367321789e-02 - 1.642211391798679e-02 - 1.638287759543946e-02 - 1.634373448754158e-02 - 1.630468437732129e-02 - 1.626572704186934e-02 - 1.622686225251448e-02 - 1.618808979718675e-02 - 1.614940946170872e-02 - 1.611082101996680e-02 - 1.607232425440962e-02 - 1.603391895041710e-02 - 1.599560489122978e-02 - 1.595738185903658e-02 - 1.591924963852954e-02 - 1.588120801872957e-02 - 1.584325677844977e-02 - 1.580539569909259e-02 - 1.576762457813194e-02 - 1.572994319938502e-02 - 1.569235134492561e-02 - 1.565484881311209e-02 - 1.561743538476679e-02 - 1.558011083839993e-02 - 1.554287497958433e-02 - 1.550572759639263e-02 - 1.546866846769255e-02 - 1.543169739218311e-02 - 1.539481416304957e-02 - 1.535801856691179e-02 - 1.532131039389481e-02 - 1.528468944222785e-02 - 1.524815551153465e-02 - 1.521170838270258e-02 - 1.517534784896265e-02 - 1.513907371629201e-02 - 1.510288577422132e-02 - 1.506678381600347e-02 - 1.503076764230081e-02 - 1.499483704594779e-02 - 1.495899182406707e-02 - 1.492323178010325e-02 - 1.488755670734373e-02 - 1.485196640180961e-02 - 1.481646066682016e-02 - 1.478103929846549e-02 - 1.474570209596410e-02 - 1.471044886603309e-02 - 1.467527940456368e-02 - 1.464019351058384e-02 - 1.460519099481427e-02 - 1.457027165550810e-02 - 1.453543528903122e-02 - 1.450068170024789e-02 - 1.446601069487559e-02 - 1.443142207965322e-02 - 1.439691566271563e-02 - 1.436249124410753e-02 - 1.432814862414793e-02 - 1.429388761459182e-02 - 1.425970802314729e-02 - 1.422560965483165e-02 - 1.419159231701311e-02 - 1.415765581387266e-02 - 1.412379995194592e-02 - 1.409002455116132e-02 - 1.405632941792580e-02 - 1.402271435207008e-02 - 1.398917917303820e-02 - 1.395572369124169e-02 - 1.392234770932106e-02 - 1.388905104392205e-02 - 1.385583350997071e-02 - 1.382269491788422e-02 - 1.378963507987753e-02 - 1.375665380791922e-02 - 1.372375091366015e-02 - 1.369092621121959e-02 - 1.365817951715469e-02 - 1.362551064978645e-02 - 1.359291942581090e-02 - 1.356040565686591e-02 - 1.352796915179558e-02 - 1.349560973812908e-02 - 1.346332723540702e-02 - 1.343112144483463e-02 - 1.339899219360082e-02 - 1.336693930891053e-02 - 1.333496260043193e-02 - 1.330306188734133e-02 - 1.327123699224855e-02 - 1.323948773476910e-02 - 1.320781393642416e-02 - 1.317621541705235e-02 - 1.314469199166208e-02 - 1.311324348463446e-02 - 1.308186972415766e-02 - 1.305057053367403e-02 - 1.301934573289238e-02 - 1.298819514247371e-02 - 1.295711859027024e-02 - 1.292611590142988e-02 - 1.289518689817567e-02 - 1.286433140253433e-02 - 1.283354924175516e-02 - 1.280284024626999e-02 - 1.277220424320462e-02 - 1.274164105512193e-02 - 1.271115050454398e-02 - 1.268073242580564e-02 - 1.265038664885281e-02 - 1.262011299771964e-02 - 1.258991130045622e-02 - 1.255978138928737e-02 - 1.252972309744999e-02 - 1.249973624798444e-02 - 1.246982067106488e-02 - 1.243997620568067e-02 - 1.241020267461013e-02 - 1.238049990730756e-02 - 1.235086774662455e-02 - 1.232130602051964e-02 - 1.229181455798258e-02 - 1.226239319685087e-02 - 1.223304176770951e-02 - 1.220376010347082e-02 - 1.217454804486660e-02 - 1.214540542341299e-02 - 1.211633207079968e-02 - 1.208732782681391e-02 - 1.205839252771904e-02 - 1.202952600673308e-02 - 1.200072809652295e-02 - 1.197199864009422e-02 - 1.194333748171596e-02 - 1.191474445503102e-02 - 1.188621939116683e-02 - 1.185776212675846e-02 - 1.182937251288597e-02 - 1.180105038815069e-02 - 1.177279558400601e-02 - 1.174460794107161e-02 - 1.171648730396891e-02 - 1.168843351609301e-02 - 1.166044641171630e-02 - 1.163252583370262e-02 - 1.160467163102319e-02 - 1.157688364263099e-02 - 1.154916170933044e-02 - 1.152150567570712e-02 - 1.149391538555893e-02 - 1.146639068095789e-02 - 1.143893140447911e-02 - 1.141153740781534e-02 - 1.138420853673168e-02 - 1.135694462854312e-02 - 1.132974552839056e-02 - 1.130261108533809e-02 - 1.127554114921167e-02 - 1.124853556496432e-02 - 1.122159417997002e-02 - 1.119471684585664e-02 - 1.116790340283271e-02 - 1.114115369710312e-02 - 1.111446758944324e-02 - 1.108784492177717e-02 - 1.106128553754357e-02 - 1.103478929728668e-02 - 1.100835604711145e-02 - 1.098198563223047e-02 - 1.095567791133747e-02 - 1.092943273475230e-02 - 1.090324994987072e-02 - 1.087712940981543e-02 - 1.085107096608238e-02 - 1.082507447053145e-02 - 1.079913977931768e-02 - 1.077326674497864e-02 - 1.074745521859533e-02 - 1.072170505538783e-02 - 1.069601611066200e-02 - 1.067038823886727e-02 - 1.064482129354728e-02 - 1.061931513219808e-02 - 1.059386961330933e-02 - 1.056848458681972e-02 - 1.054315990640127e-02 - 1.051789543133304e-02 - 1.049269102209236e-02 - 1.046754653920045e-02 - 1.044246184044743e-02 - 1.041743677288729e-02 - 1.039247119540387e-02 - 1.036756497988909e-02 - 1.034271797805630e-02 - 1.031793004647734e-02 - 1.029320105343422e-02 - 1.026853085073464e-02 - 1.024391929539164e-02 - 1.021936625852857e-02 - 1.019487159885800e-02 - 1.017043517132599e-02 - 1.014605683522427e-02 - 1.012173646293816e-02 - 1.009747392058842e-02 - 1.007326905588179e-02 - 1.004912173629082e-02 - 1.002503183346208e-02 - 1.000099920653610e-02 - 9.977023717087764e-03 - 9.953105229386335e-03 - 9.929243608872406e-03 - 9.905438720973011e-03 - 9.881690430827046e-03 - 9.857998603258316e-03 - 9.834363104786413e-03 - 9.810783802355094e-03 - 9.787260560990621e-03 - 9.763793247942843e-03 - 9.740381731591760e-03 - 9.717025877967826e-03 - 9.693725554510663e-03 - 9.670480630152000e-03 - 9.647290973567844e-03 - 9.624156453317901e-03 - 9.601076938062841e-03 - 9.578052297039983e-03 - 9.555082399653962e-03 - 9.532167115690399e-03 - 9.509306316445141e-03 - 9.486499872512266e-03 - 9.463747653553711e-03 - 9.441049530896879e-03 - 9.418405376662433e-03 - 9.395815063104617e-03 - 9.373278461427175e-03 - 9.350795443499088e-03 - 9.328365882617906e-03 - 9.305989651970981e-03 - 9.283666624824176e-03 - 9.261396674723778e-03 - 9.239179675408710e-03 - 9.217015500757821e-03 - 9.194904024947497e-03 - 9.172845123632957e-03 - 9.150838672277813e-03 - 9.128884544858834e-03 - 9.106982617538152e-03 - 9.085132766987650e-03 - 9.063334868396023e-03 - 9.041588798714301e-03 - 9.019894435479832e-03 - 8.998251654894885e-03 - 8.976660334271958e-03 - 8.955120351755344e-03 - 8.933631585369030e-03 - 8.912193913264732e-03 - 8.890807213885918e-03 - 8.869471366214972e-03 - 8.848186249259440e-03 - 8.826951742251321e-03 - 8.805767725383001e-03 - 8.784634078744540e-03 - 8.763550682317645e-03 - 8.742517416743529e-03 - 8.721534162832835e-03 - 8.700600801502468e-03 - 8.679717214101214e-03 - 8.658883282492529e-03 - 8.638098888885700e-03 - 8.617363915025602e-03 - 8.596678243443276e-03 - 8.576041757693640e-03 - 8.555454340593486e-03 - 8.534915875110577e-03 - 8.514426244844865e-03 - 8.493985333674233e-03 - 8.473593025909724e-03 - 8.453249206335058e-03 - 8.432953759374154e-03 - 8.412706569850796e-03 - 8.392507523503252e-03 - 8.372356505624580e-03 - 8.352253401838657e-03 - 8.332198098800467e-03 - 8.312190482450988e-03 - 8.292230438871008e-03 - 8.272317855399050e-03 - 8.252452619663047e-03 - 8.232634619050869e-03 - 8.212863740331295e-03 - 8.193139871755427e-03 - 8.173462902270600e-03 - 8.153832719956143e-03 - 8.134249213438031e-03 - 8.114712271802299e-03 - 8.095221784035302e-03 - 8.075777639824947e-03 - 8.056379729417138e-03 - 8.037027942938956e-03 - 8.017722170154111e-03 - 7.998462301028743e-03 - 7.979248227381455e-03 - 7.960079840401237e-03 - 7.940957030626293e-03 - 7.921879690329333e-03 - 7.902847711453821e-03 - 7.883860985421759e-03 - 7.864919405368889e-03 - 7.846022864037674e-03 - 7.827171253341911e-03 - 7.808364466777525e-03 - 7.789602397948123e-03 - 7.770884940051978e-03 - 7.752211987488857e-03 - 7.733583434567862e-03 - 7.714999174963997e-03 - 7.696459103766686e-03 - 7.677963116338556e-03 - 7.659511107448910e-03 - 7.641102971817726e-03 - 7.622738605046243e-03 - 7.604417904226960e-03 - 7.586140765207791e-03 - 7.567907083543369e-03 - 7.549716755813157e-03 - 7.531569679511053e-03 - 7.513465752109027e-03 - 7.495404870064185e-03 - 7.477386931039745e-03 - 7.459411833357052e-03 - 7.441479474804043e-03 - 7.423589753808636e-03 - 7.405742569108545e-03 - 7.387937818890154e-03 - 7.370175402616828e-03 - 7.352455220325825e-03 - 7.334777170378787e-03 - 7.317141152312192e-03 - 7.299547066866589e-03 - 7.281994814230038e-03 - 7.264484294760120e-03 - 7.247015409129196e-03 - 7.229588058070396e-03 - 7.212202142721502e-03 - 7.194857564639825e-03 - 7.177554225359851e-03 - 7.160292026920549e-03 - 7.143070871828701e-03 - 7.125890661781023e-03 - 7.108751299151369e-03 - 7.091652687463649e-03 - 7.074594729473165e-03 - 7.057577328092346e-03 - 7.040600386920140e-03 - 7.023663809440293e-03 - 7.006767499621119e-03 - 6.989911362283671e-03 - 6.973095301761098e-03 - 6.956319222246642e-03 - 6.939583028242014e-03 - 6.922886624933184e-03 - 6.906229917977133e-03 - 6.889612813237578e-03 - 6.873035215956658e-03 - 6.856497031627250e-03 - 6.839998167124653e-03 - 6.823538528849983e-03 - 6.807118022950776e-03 - 6.790736556102037e-03 - 6.774394036012678e-03 - 6.758090370503938e-03 - 6.741825465874382e-03 - 6.725599229831710e-03 - 6.709411571076730e-03 - 6.693262397262002e-03 - 6.677151616823099e-03 - 6.661079138883049e-03 - 6.645044871881905e-03 - 6.629048724424302e-03 - 6.613090605727208e-03 - 6.597170426169362e-03 - 6.581288095176429e-03 - 6.565443521393368e-03 - 6.549636616015259e-03 - 6.533867289690503e-03 - 6.518135451870410e-03 - 6.502441013826720e-03 - 6.486783886693610e-03 - 6.471163980906190e-03 - 6.455581208648475e-03 - 6.440035481784445e-03 - 6.424526710952946e-03 - 6.409054808194274e-03 - 6.393619686148648e-03 - 6.378221257389647e-03 - 6.362859434216829e-03 - 6.347534129405275e-03 - 6.332245256702231e-03 - 6.316992728926398e-03 - 6.301776458848883e-03 - 6.286596360249587e-03 - 6.271452347303485e-03 - 6.256344334335297e-03 - 6.241272235637497e-03 - 6.226235965289892e-03 - 6.211235437617355e-03 - 6.196270567881593e-03 - 6.181341271239764e-03 - 6.166447462747857e-03 - 6.151589057705613e-03 - 6.136765971896623e-03 - 6.121978121401951e-03 - 6.107225422158738e-03 - 6.092507790132517e-03 - 6.077825141615326e-03 - 6.063177393866219e-03 - 6.048564463915550e-03 - 6.033986268442907e-03 - 6.019442724444331e-03 - 6.004933749322879e-03 - 5.990459260846786e-03 - 5.976019176895193e-03 - 5.961613415583682e-03 - 5.947241895231883e-03 - 5.932904533953020e-03 - 5.918601250164555e-03 - 5.904331962789744e-03 - 5.890096590861083e-03 - 5.875895053571317e-03 - 5.861727270328322e-03 - 5.847593160694864e-03 - 5.833492644473149e-03 - 5.819425641715960e-03 - 5.805392072163253e-03 - 5.791391855962741e-03 - 5.777424914193254e-03 - 5.763491167389796e-03 - 5.749590536018355e-03 - 5.735722941127108e-03 - 5.721888304505554e-03 - 5.708086547766434e-03 - 5.694317591457392e-03 - 5.680581357894303e-03 - 5.666877769868901e-03 - 5.653206748498332e-03 - 5.639568216215936e-03 - 5.625962096156960e-03 - 5.612388310444156e-03 - 5.598846782244085e-03 - 5.585337435180374e-03 - 5.571860191464977e-03 - 5.558414974887664e-03 - 5.545001710146245e-03 - 5.531620319651646e-03 - 5.518270727342278e-03 - 5.504952858629092e-03 - 5.491666637149790e-03 - 5.478411987013346e-03 - 5.465188833301630e-03 - 5.451997101098349e-03 - 5.438836715460566e-03 - 5.425707601454353e-03 - 5.412609684284744e-03 - 5.399542889597323e-03 - 5.386507143481766e-03 - 5.373502371672819e-03 - 5.360528500347250e-03 - 5.347585456320476e-03 - 5.334673165238440e-03 - 5.321791553290573e-03 - 5.308940548233661e-03 - 5.296120077396591e-03 - 5.283330067535706e-03 - 5.270570445063373e-03 - 5.257841138170363e-03 - 5.245142075198895e-03 - 5.232473183108559e-03 - 5.219834389656078e-03 - 5.207225623450342e-03 - 5.194646813662877e-03 - 5.182097888019903e-03 - 5.169578774433769e-03 - 5.157089403379224e-03 - 5.144629703265777e-03 - 5.132199601938705e-03 - 5.119799030212023e-03 - 5.107427917986021e-03 - 5.095086194230444e-03 - 5.082773788422456e-03 - 5.070490630851877e-03 - 5.058236652191947e-03 - 5.046011782411770e-03 - 5.033815952050060e-03 - 5.021649092096963e-03 - 5.009511132708167e-03 - 4.997402004872952e-03 - 4.985321640554899e-03 - 4.973269971256597e-03 - 4.961246927915243e-03 - 4.949252441362114e-03 - 4.937286444284467e-03 - 4.925348869112448e-03 - 4.913439647407981e-03 - 4.901558711796497e-03 - 4.889705994683389e-03 - 4.877881427891544e-03 - 4.866084944974813e-03 - 4.854316479151838e-03 - 4.842575962313763e-03 - 4.830863328342665e-03 - 4.819178511323663e-03 - 4.807521444209243e-03 - 4.795892060902922e-03 - 4.784290295384500e-03 - 4.772716080911616e-03 - 4.761169351999607e-03 - 4.749650043687660e-03 - 4.738158090505544e-03 - 4.726693426328077e-03 - 4.715255985490762e-03 - 4.703845704177584e-03 - 4.692462517255530e-03 - 4.681106359266913e-03 - 4.669777166671382e-03 - 4.658474874679097e-03 - 4.647199418051047e-03 - 4.635950733693824e-03 - 4.624728757814554e-03 - 4.613533426035275e-03 - 4.602364675085555e-03 - 4.591222441193854e-03 - 4.580106660340010e-03 - 4.569017270133631e-03 - 4.557954207729684e-03 - 4.546917409606468e-03 - 4.535906813063030e-03 - 4.524922355662980e-03 - 4.513963975024341e-03 - 4.503031608847450e-03 - 4.492125194604706e-03 - 4.481244669721014e-03 - 4.470389973075004e-03 - 4.459561043403103e-03 - 4.448757818627942e-03 - 4.437980237157132e-03 - 4.427228237584914e-03 - 4.416501758569245e-03 - 4.405800739475310e-03 - 4.395125119625431e-03 - 4.384474837838549e-03 - 4.373849833628650e-03 - 4.363250046735974e-03 - 4.352675416676511e-03 - 4.342125883231542e-03 - 4.331601386396421e-03 - 4.321101866314548e-03 - 4.310627263408189e-03 - 4.300177518182486e-03 - 4.289752570999768e-03 - 4.279352362569397e-03 - 4.268976833692708e-03 - 4.258625924837488e-03 - 4.248299577436886e-03 - 4.237997733292803e-03 - 4.227720333115902e-03 - 4.217467318344088e-03 - 4.207238631130676e-03 - 4.197034213451204e-03 - 4.186854006892898e-03 - 4.176697952964437e-03 - 4.166565994071401e-03 - 4.156458073034852e-03 - 4.146374132669977e-03 - 4.136314114934178e-03 - 4.126277962231265e-03 - 4.116265617785051e-03 - 4.106277025130100e-03 - 4.096312127225507e-03 - 4.086370866498099e-03 - 4.076453186851077e-03 - 4.066559032318193e-03 - 4.056688346384167e-03 - 4.046841072375552e-03 - 4.037017154234894e-03 - 4.027216536753351e-03 - 4.017439163691562e-03 - 4.007684978984143e-03 - 3.997953927616382e-03 - 3.988245954341580e-03 - 3.978561003853811e-03 - 3.968899020987378e-03 - 3.959259950174110e-03 - 3.949643736363211e-03 - 3.940050325917084e-03 - 3.930479663940112e-03 - 3.920931695287086e-03 - 3.911406366153988e-03 - 3.901903622192779e-03 - 3.892423408886956e-03 - 3.882965672529350e-03 - 3.873530359308857e-03 - 3.864117415340676e-03 - 3.854726787040829e-03 - 3.845358421069152e-03 - 3.836012264203419e-03 - 3.826688263119290e-03 - 3.817386364639579e-03 - 3.808106515834866e-03 - 3.798848664119608e-03 - 3.789612756624806e-03 - 3.780398740246358e-03 - 3.771206562411011e-03 - 3.762036171140922e-03 - 3.752887514765301e-03 - 3.743760540740341e-03 - 3.734655196719529e-03 - 3.725571430980986e-03 - 3.716509192135922e-03 - 3.707468428387338e-03 - 3.698449087559120e-03 - 3.689451119263604e-03 - 3.680474472533827e-03 - 3.671519094850921e-03 - 3.662584935894309e-03 - 3.653671945297336e-03 - 3.644780071212910e-03 - 3.635909263417586e-03 - 3.627059471971036e-03 - 3.618230645951014e-03 - 3.609422734605362e-03 - 3.600635687799489e-03 - 3.591869456282116e-03 - 3.583123989955615e-03 - 3.574399238584414e-03 - 3.565695152845392e-03 - 3.557011682930304e-03 - 3.548348778903569e-03 - 3.539706391532652e-03 - 3.531084471778191e-03 - 3.522482970666699e-03 - 3.513901839239252e-03 - 3.505341028388093e-03 - 3.496800489111114e-03 - 3.488280173119797e-03 - 3.479780031892506e-03 - 3.471300016604386e-03 - 3.462840078578430e-03 - 3.454400170006921e-03 - 3.445980243580072e-03 - 3.437580250715228e-03 - 3.429200142992534e-03 - 3.420839872683964e-03 - 3.412499392748279e-03 - 3.404178655562702e-03 - 3.395877612913789e-03 - 3.387596218304602e-03 - 3.379334424898988e-03 - 3.371092184764359e-03 - 3.362869450661228e-03 - 3.354666175991870e-03 - 3.346482314543412e-03 - 3.338317819175880e-03 - 3.330172642972068e-03 - 3.322046740007612e-03 - 3.313940064235304e-03 - 3.305852569386344e-03 - 3.297784208976364e-03 - 3.289734936574093e-03 - 3.281704706272533e-03 - 3.273693473070924e-03 - 3.265701191257636e-03 - 3.257727814803984e-03 - 3.249773298074863e-03 - 3.241837595979994e-03 - 3.233920663596386e-03 - 3.226022455622204e-03 - 3.218142926555998e-03 - 3.210282031163023e-03 - 3.202439725215123e-03 - 3.194615964134223e-03 - 3.186810703067027e-03 - 3.179023897602838e-03 - 3.171255503398923e-03 - 3.163505475998486e-03 - 3.155773770652277e-03 - 3.148060343553685e-03 - 3.140365151430291e-03 - 3.132688149313277e-03 - 3.125029293443853e-03 - 3.117388541383308e-03 - 3.109765848736372e-03 - 3.102161171408776e-03 - 3.094574466373093e-03 - 3.087005690728782e-03 - 3.079454801280003e-03 - 3.071921754555924e-03 - 3.064406507880629e-03 - 3.056909018530570e-03 - 3.049429243338136e-03 - 3.041967139485151e-03 - 3.034522664377966e-03 - 3.027095775562892e-03 - 3.019686430816400e-03 - 3.012294588055786e-03 - 3.004920205212209e-03 - 2.997563239705405e-03 - 2.990223649173174e-03 - 2.982901392198357e-03 - 2.975596427311395e-03 - 2.968308712822513e-03 - 2.961038206776656e-03 - 2.953784867392937e-03 - 2.946548653201694e-03 - 2.939329523194637e-03 - 2.932127436582907e-03 - 2.924942352269057e-03 - 2.917774228121468e-03 - 2.910623023643702e-03 - 2.903488699056754e-03 - 2.896371212514376e-03 - 2.889270523304112e-03 - 2.882186591679052e-03 - 2.875119376658924e-03 - 2.868068837676741e-03 - 2.861034934776638e-03 - 2.854017627809473e-03 - 2.847016876513213e-03 - 2.840032640686938e-03 - 2.833064880681456e-03 - 2.826113557103426e-03 - 2.819178630449384e-03 - 2.812260060105674e-03 - 2.805357806481411e-03 - 2.798471831428214e-03 - 2.791602094948384e-03 - 2.784748557109701e-03 - 2.777911179108391e-03 - 2.771089922400815e-03 - 2.764284748007964e-03 - 2.757495616304825e-03 - 2.750722488782177e-03 - 2.743965327115693e-03 - 2.737224092409578e-03 - 2.730498746008289e-03 - 2.723789249648372e-03 - 2.717095565426717e-03 - 2.710417654358784e-03 - 2.703755477800617e-03 - 2.697108999073383e-03 - 2.690478179939920e-03 - 2.683862981660020e-03 - 2.677263366970269e-03 - 2.670679298051182e-03 - 2.664110736894467e-03 - 2.657557646411518e-03 - 2.651019989061974e-03 - 2.644497727126834e-03 - 2.637990823748049e-03 - 2.631499241776077e-03 - 2.625022943767310e-03 - 2.618561892619121e-03 - 2.612116051581085e-03 - 2.605685383984310e-03 - 2.599269852507916e-03 - 2.592869420565223e-03 - 2.586484052278204e-03 - 2.580113710814501e-03 - 2.573758359383719e-03 - 2.567417961609419e-03 - 2.561092481362380e-03 - 2.554781882413309e-03 - 2.548486128464411e-03 - 2.542205184036424e-03 - 2.535939013422343e-03 - 2.529687580238901e-03 - 2.523450848436006e-03 - 2.517228782352248e-03 - 2.511021346720505e-03 - 2.504828506444104e-03 - 2.498650225958320e-03 - 2.492486468967693e-03 - 2.486337200680032e-03 - 2.480202386472821e-03 - 2.474081990653096e-03 - 2.467975978460781e-03 - 2.461884315215007e-03 - 2.455806965243642e-03 - 2.449743893777428e-03 - 2.443695066608286e-03 - 2.437660449328877e-03 - 2.431640007119714e-03 - 2.425633705211946e-03 - 2.419641509634817e-03 - 2.413663385966202e-03 - 2.407699299632079e-03 - 2.401749216909934e-03 - 2.395813103777745e-03 - 2.389890925926915e-03 - 2.383982649399740e-03 - 2.378088240561300e-03 - 2.372207665865560e-03 - 2.366340891258303e-03 - 2.360487883037754e-03 - 2.354648608018378e-03 - 2.348823033118129e-03 - 2.343011124539103e-03 - 2.337212848054228e-03 - 2.331428171390765e-03 - 2.325657062040943e-03 - 2.319899486412222e-03 - 2.314155410784699e-03 - 2.308424802407836e-03 - 2.302707629600105e-03 - 2.297003858807791e-03 - 2.291313456815245e-03 - 2.285636391934661e-03 - 2.279972631361444e-03 - 2.274322142294874e-03 - 2.268684892803898e-03 - 2.263060850445441e-03 - 2.257449982675230e-03 - 2.251852257331842e-03 - 2.246267642469826e-03 - 2.240696106224612e-03 - 2.235137616698782e-03 - 2.229592141925271e-03 - 2.224059650030012e-03 - 2.218540109447705e-03 - 2.213033488566449e-03 - 2.207539755750870e-03 - 2.202058879448589e-03 - 2.196590827868759e-03 - 2.191135569406817e-03 - 2.185693073538250e-03 - 2.180263309295804e-03 - 2.174846245146934e-03 - 2.169441849486111e-03 - 2.164050091629877e-03 - 2.158670941358884e-03 - 2.153304367034930e-03 - 2.147950337590323e-03 - 2.142608822828710e-03 - 2.137279792340324e-03 - 2.131963215445541e-03 - 2.126659061301170e-03 - 2.121367299363035e-03 - 2.116087899310018e-03 - 2.110820830985273e-03 - 2.105566064252215e-03 - 2.100323568822542e-03 - 2.095093314356113e-03 - 2.089875271479949e-03 - 2.084669410319118e-03 - 2.079475699908646e-03 - 2.074294110902819e-03 - 2.069124614088778e-03 - 2.063967179294363e-03 - 2.058821776747180e-03 - 2.053688376991423e-03 - 2.048566950718572e-03 - 2.043457468582260e-03 - 2.038359901240009e-03 - 2.033274219398007e-03 - 2.028200393563254e-03 - 2.023138394473247e-03 - 2.018088193625467e-03 - 2.013049761808302e-03 - 2.008023069533293e-03 - 2.003008088023720e-03 - 1.998004788922133e-03 - 1.993013143739461e-03 - 1.988033123025423e-03 - 1.983064698401174e-03 - 1.978107841939004e-03 - 1.973162523959716e-03 - 1.968228716337500e-03 - 1.963306391971906e-03 - 1.958395521239848e-03 - 1.953496075620802e-03 - 1.948608028019931e-03 - 1.943731350228688e-03 - 1.938866013789267e-03 - 1.934011990485791e-03 - 1.929169252901841e-03 - 1.924337773155020e-03 - 1.919517522737516e-03 - 1.914708474346116e-03 - 1.909910600724645e-03 - 1.905123874118434e-03 - 1.900348266781407e-03 - 1.895583751238830e-03 - 1.890830300301618e-03 - 1.886087886140893e-03 - 1.881356481302734e-03 - 1.876636059328014e-03 - 1.871926593048255e-03 - 1.867228054886164e-03 - 1.862540417322874e-03 - 1.857863653843670e-03 - 1.853197738035545e-03 - 1.848542642643349e-03 - 1.843898340659710e-03 - 1.839264805482605e-03 - 1.834642010884087e-03 - 1.830029929675155e-03 - 1.825428534756660e-03 - 1.820837800826725e-03 - 1.816257700994342e-03 - 1.811688207883416e-03 - 1.807129296515363e-03 - 1.802580940478343e-03 - 1.798043112569654e-03 - 1.793515787775185e-03 - 1.788998939681262e-03 - 1.784492541016137e-03 - 1.779996567290557e-03 - 1.775510992946437e-03 - 1.771035790955467e-03 - 1.766570935188881e-03 - 1.762116400368900e-03 - 1.757672161650980e-03 - 1.753238193179788e-03 - 1.748814468721301e-03 - 1.744400962234815e-03 - 1.739997649147064e-03 - 1.735604504535336e-03 - 1.731221502449809e-03 - 1.726848617398671e-03 - 1.722485824273258e-03 - 1.718133098140551e-03 - 1.713790413411143e-03 - 1.709457744960287e-03 - 1.705135068710917e-03 - 1.700822359316501e-03 - 1.696519591326764e-03 - 1.692226740206531e-03 - 1.687943780998710e-03 - 1.683670689031842e-03 - 1.679407440586236e-03 - 1.675154010255336e-03 - 1.670910372590760e-03 - 1.666676504276520e-03 - 1.662452380680008e-03 - 1.658237976786625e-03 - 1.654033269138933e-03 - 1.649838233189823e-03 - 1.645652843894769e-03 - 1.641477077483747e-03 - 1.637310910181093e-03 - 1.633154317979306e-03 - 1.629007276710043e-03 - 1.624869761977525e-03 - 1.620741749539434e-03 - 1.616623216289868e-03 - 1.612514138626602e-03 - 1.608414492386588e-03 - 1.604324254066237e-03 - 1.600243399893093e-03 - 1.596171905775712e-03 - 1.592109748332882e-03 - 1.588056904380057e-03 - 1.584013350591343e-03 - 1.579979063015354e-03 - 1.575954018417919e-03 - 1.571938194458784e-03 - 1.567931567017785e-03 - 1.563934112240304e-03 - 1.559945807641685e-03 - 1.555966630779868e-03 - 1.551996558434039e-03 - 1.548035566441649e-03 - 1.544083632647983e-03 - 1.540140734902817e-03 - 1.536206849423688e-03 - 1.532281953055403e-03 - 1.528366023373284e-03 - 1.524459038476067e-03 - 1.520560975283225e-03 - 1.516671810636623e-03 - 1.512791522697568e-03 - 1.508920088807869e-03 - 1.505057486015793e-03 - 1.501203692209861e-03 - 1.497358685322736e-03 - 1.493522443062933e-03 - 1.489694942724099e-03 - 1.485876162194853e-03 - 1.482066079697174e-03 - 1.478264672890618e-03 - 1.474471919644568e-03 - 1.470687798121700e-03 - 1.466912286519041e-03 - 1.463145362594138e-03 - 1.459387003990816e-03 - 1.455637189563730e-03 - 1.451895897787254e-03 - 1.448163106500405e-03 - 1.444438793947980e-03 - 1.440722938760434e-03 - 1.437015519703072e-03 - 1.433316514691718e-03 - 1.429625901910583e-03 - 1.425943660193772e-03 - 1.422269768088744e-03 - 1.418604204318803e-03 - 1.414946947952337e-03 - 1.411297977567125e-03 - 1.407657271824714e-03 - 1.404024809794961e-03 - 1.400400570139807e-03 - 1.396784531434119e-03 - 1.393176672533590e-03 - 1.389576972970703e-03 - 1.385985412235932e-03 - 1.382401969107074e-03 - 1.378826622443783e-03 - 1.375259351219489e-03 - 1.371700134514839e-03 - 1.368148952079336e-03 - 1.364605783757036e-03 - 1.361070608632290e-03 - 1.357543405835987e-03 - 1.354024154621594e-03 - 1.350512834317403e-03 - 1.347009424934256e-03 - 1.343513906652181e-03 - 1.340026258589547e-03 - 1.336546459739890e-03 - 1.333074489680093e-03 - 1.329610329681042e-03 - 1.326153959375566e-03 - 1.322705357081586e-03 - 1.319264503327096e-03 - 1.315831378649060e-03 - 1.312405962942001e-03 - 1.308988235813027e-03 - 1.305578177302038e-03 - 1.302175767936687e-03 - 1.298780987783750e-03 - 1.295393816813521e-03 - 1.292014235092867e-03 - 1.288642222828844e-03 - 1.285277760581296e-03 - 1.281920829182064e-03 - 1.278571408463430e-03 - 1.275229478684235e-03 - 1.271895021211065e-03 - 1.268568016022571e-03 - 1.265248443161927e-03 - 1.261936283866222e-03 - 1.258631518851812e-03 - 1.255334128626978e-03 - 1.252044093890807e-03 - 1.248761395151665e-03 - 1.245486013113075e-03 - 1.242217929129610e-03 - 1.238957124307338e-03 - 1.235703579418827e-03 - 1.232457274959363e-03 - 1.229218191838193e-03 - 1.225986311430220e-03 - 1.222761615473843e-03 - 1.219544084856006e-03 - 1.216333699988417e-03 - 1.213130441964228e-03 - 1.209934292565758e-03 - 1.206745233676102e-03 - 1.203563245963205e-03 - 1.200388310525061e-03 - 1.197220409053557e-03 - 1.194059523052293e-03 - 1.190905633902454e-03 - 1.187758723052301e-03 - 1.184618772531461e-03 - 1.181485763720917e-03 - 1.178359677471923e-03 - 1.175240496495629e-03 - 1.172128202790389e-03 - 1.169022777016151e-03 - 1.165924201427151e-03 - 1.162832457974330e-03 - 1.159747527667428e-03 - 1.156669393342115e-03 - 1.153598037513975e-03 - 1.150533441195656e-03 - 1.147475586343000e-03 - 1.144424455192698e-03 - 1.141380029693999e-03 - 1.138342292070108e-03 - 1.135311224784675e-03 - 1.132286810371483e-03 - 1.129269030382949e-03 - 1.126257866687504e-03 - 1.123253302806332e-03 - 1.120255320585528e-03 - 1.117263901594027e-03 - 1.114279029333705e-03 - 1.111300685926414e-03 - 1.108328853214485e-03 - 1.105363515126287e-03 - 1.102404653695880e-03 - 1.099452250276090e-03 - 1.096506289065756e-03 - 1.093566752790314e-03 - 1.090633622975802e-03 - 1.087706882683815e-03 - 1.084786514992603e-03 - 1.081872502714538e-03 - 1.078964828755093e-03 - 1.076063476054719e-03 - 1.073168427526746e-03 - 1.070279665938792e-03 - 1.067397174442816e-03 - 1.064520936417689e-03 - 1.061650934087830e-03 - 1.058787150577005e-03 - 1.055929570192933e-03 - 1.053078175257412e-03 - 1.050232948596978e-03 - 1.047393874491941e-03 - 1.044560935952646e-03 - 1.041734115621369e-03 - 1.038913396581877e-03 - 1.036098763274602e-03 - 1.033290199394467e-03 - 1.030487686748966e-03 - 1.027691209748195e-03 - 1.024900752824401e-03 - 1.022116298137994e-03 - 1.019337829638554e-03 - 1.016565331581354e-03 - 1.013798786681050e-03 - 1.011038178744547e-03 - 1.008283492069452e-03 - 1.005534710312413e-03 - 1.002791817167788e-03 - 1.000054796401326e-03 - 9.973236317525795e-04 - 9.945983071579347e-04 - 9.918788066535795e-04 - 9.891651141399331e-04 - 9.864572135795289e-04 - 9.837550890187182e-04 - 9.810587245440681e-04 - 9.783681042165289e-04 - 9.756832121036981e-04 - 9.730040324093254e-04 - 9.703305493295432e-04 - 9.676627470403841e-04 - 9.650006098016114e-04 - 9.623441219373007e-04 - 9.596932677964791e-04 - 9.570480316324495e-04 - 9.544083978205768e-04 - 9.517743508934125e-04 - 9.491458752396962e-04 - 9.465229553012878e-04 - 9.439055756501852e-04 - 9.412937207895038e-04 - 9.386873752809525e-04 - 9.360865238076440e-04 - 9.334911509791107e-04 - 9.309012414140627e-04 - 9.283167798171848e-04 - 9.257377509839119e-04 - 9.231641396993918e-04 - 9.205959306774516e-04 - 9.180331088080401e-04 - 9.154756590138127e-04 - 9.129235660962607e-04 - 9.103768149701878e-04 - 9.078353906321772e-04 - 9.052992780955343e-04 - 9.027684623946166e-04 - 9.002429285800444e-04 - 8.977226617159664e-04 - 8.952076469091944e-04 - 8.926978693026045e-04 - 8.901933140640126e-04 - 8.876939664445818e-04 - 8.851998117353022e-04 - 8.827108351548252e-04 - 8.802270219825557e-04 - 8.777483575705740e-04 - 8.752748272927118e-04 - 8.728064165680979e-04 - 8.703431108522175e-04 - 8.678848955854838e-04 - 8.654317562117358e-04 - 8.629836782258149e-04 - 8.605406473168484e-04 - 8.581026490766350e-04 - 8.556696689660546e-04 - 8.532416927295966e-04 - 8.508187061075220e-04 - 8.484006947265324e-04 - 8.459876443379812e-04 - 8.435795407180884e-04 - 8.411763696276702e-04 - 8.387781169670006e-04 - 8.363847686436173e-04 - 8.339963104952486e-04 - 8.316127284703911e-04 - 8.292340085393665e-04 - 8.268601366269382e-04 - 8.244910987818749e-04 - 8.221268810991789e-04 - 8.197674696351961e-04 - 8.174128504795555e-04 - 8.150630097863373e-04 - 8.127179337987174e-04 - 8.103776086785577e-04 - 8.080420206116735e-04 - 8.057111559859151e-04 - 8.033850010442538e-04 - 8.010635420033148e-04 - 7.987467653572807e-04 - 7.964346575211490e-04 - 7.941272048473775e-04 - 7.918243938145987e-04 - 7.895262109139402e-04 - 7.872326426395918e-04 - 7.849436755404454e-04 - 7.826592961986925e-04 - 7.803794912312032e-04 - 7.781042473133076e-04 - 7.758335511109105e-04 - 7.735673892815593e-04 - 7.713057485643111e-04 - 7.690486157536814e-04 - 7.667959776727836e-04 - 7.645478211004869e-04 - 7.623041328912646e-04 - 7.600649000053854e-04 - 7.578301093264215e-04 - 7.555997477583347e-04 - 7.533738022910566e-04 - 7.511522599897612e-04 - 7.489351079282785e-04 - 7.467223331578882e-04 - 7.445139227962291e-04 - 7.423098639775247e-04 - 7.401101438263767e-04 - 7.379147496119391e-04 - 7.357236686066337e-04 - 7.335368879604144e-04 - 7.313543950177981e-04 - 7.291761771981462e-04 - 7.270022218267318e-04 - 7.248325162821272e-04 - 7.226670479949025e-04 - 7.205058044241288e-04 - 7.183487730730944e-04 - 7.161959414766152e-04 - 7.140472971809699e-04 - 7.119028277561113e-04 - 7.097625208231147e-04 - 7.076263641063239e-04 - 7.054943452576004e-04 - 7.033664519218169e-04 - 7.012426719956601e-04 - 6.991229932510109e-04 - 6.970074033540157e-04 - 6.948958902400331e-04 - 6.927884418689321e-04 - 6.906850461485944e-04 - 6.885856909689247e-04 - 6.864903643067344e-04 - 6.843990542306164e-04 - 6.823117487354689e-04 - 6.802284359113009e-04 - 6.781491039842488e-04 - 6.760737410664455e-04 - 6.740023352773578e-04 - 6.719348748282754e-04 - 6.698713480434448e-04 - 6.678117432465053e-04 - 6.657560487034911e-04 - 6.637042527655789e-04 - 6.616563438432147e-04 - 6.596123103782944e-04 - 6.575721408025738e-04 - 6.555358236048545e-04 - 6.535033473936704e-04 - 6.514747007198682e-04 - 6.494498721244171e-04 - 6.474288502266283e-04 - 6.454116237722280e-04 - 6.433981815196293e-04 - 6.413885120963034e-04 - 6.393826043225120e-04 - 6.373804471016686e-04 - 6.353820291728463e-04 - 6.333873394523912e-04 - 6.313963669651093e-04 - 6.294091005879305e-04 - 6.274255292885601e-04 - 6.254456421348147e-04 - 6.234694281911996e-04 - 6.214968766042923e-04 - 6.195279765738893e-04 - 6.175627172048796e-04 - 6.156010877068991e-04 - 6.136430774102346e-04 - 6.116886755862946e-04 - 6.097378715435904e-04 - 6.077906546697107e-04 - 6.058470144286753e-04 - 6.039069402835228e-04 - 6.019704216802507e-04 - 6.000374481409778e-04 - 5.981080092530985e-04 - 5.961820946588096e-04 - 5.942596940083503e-04 - 5.923407969721301e-04 - 5.904253932616448e-04 - 5.885134726736782e-04 - 5.866050250202793e-04 - 5.847000400980857e-04 - 5.827985078791194e-04 - 5.809004183470366e-04 - 5.790057613579966e-04 - 5.771145269606196e-04 - 5.752267052829598e-04 - 5.733422863841403e-04 - 5.714612604000550e-04 - 5.695836175305099e-04 - 5.677093480037018e-04 - 5.658384420678564e-04 - 5.639708900266142e-04 - 5.621066823022896e-04 - 5.602458092869138e-04 - 5.583882613744714e-04 - 5.565340290827777e-04 - 5.546831029664671e-04 - 5.528354736013446e-04 - 5.509911316015094e-04 - 5.491500676402182e-04 - 5.473122724461832e-04 - 5.454777367810608e-04 - 5.436464514412940e-04 - 5.418184072613321e-04 - 5.399935951226492e-04 - 5.381720060069473e-04 - 5.363536309736959e-04 - 5.345384609776805e-04 - 5.327264870731968e-04 - 5.309177004752346e-04 - 5.291120923593077e-04 - 5.273096539494221e-04 - 5.255103765544823e-04 - 5.237142514407170e-04 - 5.219212699733492e-04 - 5.201314236865307e-04 - 5.183447040146093e-04 - 5.165611024246747e-04 - 5.147806105331874e-04 - 5.130032200114061e-04 - 5.112289225530487e-04 - 5.094577098620987e-04 - 5.076895736854020e-04 - 5.059245058583464e-04 - 5.041624983517820e-04 - 5.024035430839573e-04 - 5.006476319990773e-04 - 4.988947572035529e-04 - 4.971449107942239e-04 - 4.953980848818115e-04 - 4.936542716805855e-04 - 4.919134634956966e-04 - 4.901756526846954e-04 - 4.884408316006080e-04 - 4.867089926403434e-04 - 4.849801282731475e-04 - 4.832542310892493e-04 - 4.815312937309208e-04 - 4.798113088560132e-04 - 4.780942690954599e-04 - 4.763801672259719e-04 - 4.746689961731605e-04 - 4.729607488395965e-04 - 4.712554181333483e-04 - 4.695529970142063e-04 - 4.678534786182833e-04 - 4.661568561056742e-04 - 4.644631226216267e-04 - 4.627722714285577e-04 - 4.610842958399921e-04 - 4.593991892076899e-04 - 4.577169450300335e-04 - 4.560375568336446e-04 - 4.543610181249096e-04 - 4.526873225594637e-04 - 4.510164638467393e-04 - 4.493484356950898e-04 - 4.476832319569833e-04 - 4.460208465382815e-04 - 4.443612733350173e-04 - 4.427045064285867e-04 - 4.410505399510805e-04 - 4.393993679504339e-04 - 4.377509846774214e-04 - 4.361053844834223e-04 - 4.344625616662297e-04 - 4.328225106365193e-04 - 4.311852259097922e-04 - 4.295507020701359e-04 - 4.279189337521271e-04 - 4.262899156467061e-04 - 4.246636425301464e-04 - 4.230401092565931e-04 - 4.214193107478168e-04 - 4.198012419839599e-04 - 4.181858979868060e-04 - 4.165732738692198e-04 - 4.149633649793705e-04 - 4.133561665739344e-04 - 4.117516738453971e-04 - 4.101498823326724e-04 - 4.085507876181731e-04 - 4.069543852399522e-04 - 4.053606707914893e-04 - 4.037696400086752e-04 - 4.021812887746215e-04 - 4.005956129436248e-04 - 3.990126084760660e-04 - 3.974322714846641e-04 - 3.958545980293214e-04 - 3.942795842513983e-04 - 3.927072264688036e-04 - 3.911375211195356e-04 - 3.895704646516968e-04 - 3.880060534869329e-04 - 3.864442842922655e-04 - 3.848851538066537e-04 - 3.833286587063809e-04 - 3.817747958651508e-04 - 3.802235622593628e-04 - 3.786749548688228e-04 - 3.771289708205180e-04 - 3.755856073392733e-04 - 3.740448616816441e-04 - 3.725067311649692e-04 - 3.709712132043737e-04 - 3.694383053790672e-04 - 3.679080053579325e-04 - 3.663803108503057e-04 - 3.648552195606523e-04 - 3.633327293646475e-04 - 3.618128382932607e-04 - 3.602955444344858e-04 - 3.587808459078391e-04 - 3.572687408998931e-04 - 3.557592277792442e-04 - 3.542523049927096e-04 - 3.527479710408145e-04 - 3.512462245019904e-04 - 3.497470640500036e-04 - 3.482504884770882e-04 - 3.467564967437580e-04 - 3.452650877985240e-04 - 3.437762605764859e-04 - 3.422900143250168e-04 - 3.408063483640538e-04 - 3.393252619896345e-04 - 3.378467546103840e-04 - 3.363708257653936e-04 - 3.348974751341996e-04 - 3.334267024660963e-04 - 3.319585075646510e-04 - 3.304928903038992e-04 - 3.290298507212495e-04 - 3.275693889604049e-04 - 3.261115052402690e-04 - 3.246561999078441e-04 - 3.232034733603981e-04 - 3.217533259984899e-04 - 3.203057585048498e-04 - 3.188607716794152e-04 - 3.174183662346357e-04 - 3.159785430822741e-04 - 3.145413032833238e-04 - 3.131066479369465e-04 - 3.116745782136557e-04 - 3.102450954058189e-04 - 3.088182010197684e-04 - 3.073938965650610e-04 - 3.059721835802734e-04 - 3.045530637916020e-04 - 3.031365390386899e-04 - 3.017226112552691e-04 - 3.003112824793533e-04 - 2.989025548234045e-04 - 2.974964304955006e-04 - 2.960929118913988e-04 - 2.946920014422941e-04 - 2.932937016150965e-04 - 2.918980151023185e-04 - 2.905049446767149e-04 - 2.891144931550728e-04 - 2.877266634923031e-04 - 2.863414587568181e-04 - 2.849588821248430e-04 - 2.835789368717610e-04 - 2.822016263526234e-04 - 2.808269540128114e-04 - 2.794549234525530e-04 - 2.780855383858511e-04 - 2.767188026160350e-04 - 2.753547199733251e-04 - 2.739932944362576e-04 - 2.726345302253411e-04 - 2.712784314751994e-04 - 2.699250024118205e-04 - 2.685742475595017e-04 - 2.672261714415124e-04 - 2.658807786371782e-04 - 2.645380739000219e-04 - 2.631980619957597e-04 - 2.618607478073471e-04 - 2.605261365239288e-04 - 2.591942332540738e-04 - 2.578650431168888e-04 - 2.565385715181067e-04 - 2.552148239188000e-04 - 2.538938058269625e-04 - 2.525755228940477e-04 - 2.512599808919393e-04 - 2.499471856899045e-04 - 2.486371432244064e-04 - 2.473298595107682e-04 - 2.460253406646765e-04 - 2.447235929605613e-04 - 2.434246227773826e-04 - 2.421284365723855e-04 - 2.408350408491505e-04 - 2.395444422583646e-04 - 2.382566475978551e-04 - 2.369716636126905e-04 - 2.356894972066169e-04 - 2.344101555067014e-04 - 2.331336455922197e-04 - 2.318599746393059e-04 - 2.305891500038487e-04 - 2.293211790903458e-04 - 2.280560693749351e-04 - 2.267938284406659e-04 - 2.255344639796373e-04 - 2.242779837481179e-04 - 2.230243955584571e-04 - 2.217737074088738e-04 - 2.205259273750273e-04 - 2.192810635194828e-04 - 2.180391240377155e-04 - 2.168001172473318e-04 - 2.155640515683406e-04 - 2.143309354202995e-04 - 2.131007772856537e-04 - 2.118735858306198e-04 - 2.106493698084787e-04 - 2.094281380089542e-04 - 2.082098992208740e-04 - 2.069946624015073e-04 - 2.057824366286796e-04 - 2.045732309577213e-04 - 2.033670545521807e-04 - 2.021639166762670e-04 - 2.009638266139778e-04 - 1.997667937615743e-04 - 1.985728276099416e-04 - 1.973819376249420e-04 - 1.961941334186818e-04 - 1.950094247288422e-04 - 1.938278211445808e-04 - 1.926493324216112e-04 - 1.914739685443153e-04 - 1.903017394244089e-04 - 1.891326549660665e-04 - 1.879667251315557e-04 - 1.868039600691931e-04 - 1.856443699312781e-04 - 1.844879648170397e-04 - 1.833347550402995e-04 - 1.821847509305592e-04 - 1.810379627269367e-04 - 1.798944008330572e-04 - 1.787540757117569e-04 - 1.776169978023503e-04 - 1.764831776083264e-04 - 1.753526257075039e-04 - 1.742253527510645e-04 - 1.731013693254543e-04 - 1.719806860311682e-04 - 1.708633135911149e-04 - 1.697492627671219e-04 - 1.686385443331759e-04 - 1.675311690584120e-04 - 1.664271477052953e-04 - 1.653264910845736e-04 - 1.642292101438652e-04 - 1.631353157524277e-04 - 1.620448187436031e-04 - 1.609577300754615e-04 - 1.598740606888992e-04 - 1.587938214812250e-04 - 1.577170233258566e-04 - 1.566436772168694e-04 - 1.555737942159133e-04 - 1.545073851968179e-04 - 1.534444610998845e-04 - 1.523850329588589e-04 - 1.513291117056277e-04 - 1.502767082718022e-04 - 1.492278336091406e-04 - 1.481824986061289e-04 - 1.471407142013266e-04 - 1.461024913960903e-04 - 1.450678410475480e-04 - 1.440367739871709e-04 - 1.430093010797408e-04 - 1.419854331666308e-04 - 1.409651810501559e-04 - 1.399485554884026e-04 - 1.389355672434459e-04 - 1.379262270311977e-04 - 1.369205454852166e-04 - 1.359185332657421e-04 - 1.349202010239166e-04 - 1.339255593445051e-04 - 1.329346186642912e-04 - 1.319473893926901e-04 - 1.309638820305585e-04 - 1.299841069283569e-04 - 1.290080743627276e-04 - 1.280357946577360e-04 - 1.270672779908064e-04 - 1.261025344295187e-04 - 1.251415740258344e-04 - 1.241844068414831e-04 - 1.232310428585276e-04 - 1.222814917974582e-04 - 1.213357634573326e-04 - 1.203938676644921e-04 - 1.194558139769228e-04 - 1.185216119071049e-04 - 1.175912709437735e-04 - 1.166648004395201e-04 - 1.157422096820540e-04 - 1.148235078941047e-04 - 1.139087041565015e-04 - 1.129978074560730e-04 - 1.120908266963163e-04 - 1.111877706801771e-04 - 1.102886481165339e-04 - 1.093934676008822e-04 - 1.085022375478793e-04 - 1.076149663238430e-04 - 1.067316622735248e-04 - 1.058523335072715e-04 - 1.049769880021785e-04 - 1.041056336506420e-04 - 1.032382782134568e-04 - 1.023749293560659e-04 - 1.015155946454073e-04 - 1.006602814254268e-04 - 9.980899691604087e-05 - 9.896174827822380e-05 - 9.811854249648769e-05 - 9.727938640362722e-05 - 9.644428669167931e-05 - 9.561324990949941e-05 - 9.478628247235907e-05 - 9.396339064407664e-05 - 9.314458052650697e-05 - 9.232985807344924e-05 - 9.151922908266137e-05 - 9.071269919463392e-05 - 8.991027389908417e-05 - 8.911195851702552e-05 - 8.831775819982511e-05 - 8.752767793866873e-05 - 8.674172256023528e-05 - 8.595989672073575e-05 - 8.518220490590348e-05 - 8.440865141920385e-05 - 8.363924039733809e-05 - 8.287397580722622e-05 - 8.211286142104977e-05 - 8.135590084051729e-05 - 8.060309749193613e-05 - 7.985445459658365e-05 - 7.910997520302950e-05 - 7.836966218298747e-05 - 7.763351820320998e-05 - 7.690154574559998e-05 - 7.617374709914362e-05 - 7.545012436145964e-05 - 7.473067944430294e-05 - 7.401541405207780e-05 - 7.330432968888297e-05 - 7.259742767376570e-05 - 7.189470911942744e-05 - 7.119617492698978e-05 - 7.050182580949816e-05 - 6.981166227552030e-05 - 6.912568461899398e-05 - 6.844389294104750e-05 - 6.776628713300132e-05 - 6.709286687130013e-05 - 6.642363163388969e-05 - 6.575858067871575e-05 - 6.509771305493562e-05 - 6.444102761503343e-05 - 6.378852298738557e-05 - 6.314019758583242e-05 - 6.249604962295056e-05 - 6.185607708979005e-05 - 6.122027775903875e-05 - 6.058864919749181e-05 - 5.996118875684596e-05 - 5.933789356597989e-05 - 5.871876053888907e-05 - 5.810378637807827e-05 - 5.749296757228591e-05 - 5.688630039241354e-05 - 5.628378087841946e-05 - 5.568540486517338e-05 - 5.509116797959273e-05 - 5.450106561933422e-05 - 5.391509296529475e-05 - 5.333324497665832e-05 - 5.275551640753726e-05 - 5.218190179953343e-05 - 5.161239545977182e-05 - 5.104699148146081e-05 - 5.048568375913861e-05 - 4.992846596763329e-05 - 4.937533154817934e-05 - 4.882627374147808e-05 - 4.828128557792042e-05 - 4.774035986717692e-05 - 4.720348921279551e-05 - 4.667066599018748e-05 - 4.614188237688400e-05 - 4.561713035194944e-05 - 4.509640165438987e-05 - 4.457968783032909e-05 - 4.406698023190481e-05 - 4.355826996891768e-05 - 4.305354796420506e-05 - 4.255280495560636e-05 - 4.205603144616347e-05 - 4.156321774032957e-05 - 4.107435395613752e-05 - 4.058942999665175e-05 - 4.010843556869507e-05 - 3.963136019085871e-05 - 3.915819316952545e-05 - 3.868892361719641e-05 - 3.822354046226270e-05 - 3.776203244031561e-05 - 3.730438809005640e-05 - 3.685059575689182e-05 - 3.640064360230198e-05 - 3.595451960373741e-05 - 3.551221155134442e-05 - 3.507370705450421e-05 - 3.463899354241650e-05 - 3.420805825588243e-05 - 3.378088825986720e-05 - 3.335747045272196e-05 - 3.293779155463552e-05 - 3.252183811026268e-05 - 3.210959649877579e-05 - 3.170105292073684e-05 - 3.129619341367949e-05 - 3.089500386055728e-05 - 3.049746997239612e-05 - 3.010357730585059e-05 - 2.971331126487755e-05 - 2.932665707619367e-05 - 2.894359982344077e-05 - 2.856412445132613e-05 - 2.818821573877814e-05 - 2.781585831987375e-05 - 2.744703669454755e-05 - 2.708173520948728e-05 - 2.671993807124836e-05 - 2.636162935767626e-05 - 2.600679300301263e-05 - 2.565541280257304e-05 - 2.530747242805460e-05 - 2.496295542635910e-05 - 2.462184521206604e-05 - 2.428412507785163e-05 - 2.394977819771233e-05 - 2.361878762181457e-05 - 2.329113628448998e-05 - 2.296680701293541e-05 - 2.264578251757474e-05 - 2.232804539557172e-05 - 2.201357814530585e-05 - 2.170236315904943e-05 - 2.139438272306276e-05 - 2.108961903561866e-05 - 2.078805419745760e-05 - 2.048967020582218e-05 - 2.019444897050880e-05 - 1.990237231614296e-05 - 1.961342197777572e-05 - 1.932757961462368e-05 - 1.904482680353188e-05 - 1.876514502948172e-05 - 1.848851571515060e-05 - 1.821492021640795e-05 - 1.794433980831370e-05 - 1.767675569461099e-05 - 1.741214902258527e-05 - 1.715050088166273e-05 - 1.689179228451716e-05 - 1.663600419203502e-05 - 1.638311752659296e-05 - 1.613311314360082e-05 - 1.588597184706167e-05 - 1.564167440067926e-05 - 1.540020151829502e-05 - 1.516153387453479e-05 - 1.492565211244357e-05 - 1.469253682958783e-05 - 1.446216858599219e-05 - 1.423452791421707e-05 - 1.400959531801727e-05 - 1.378735127470914e-05 - 1.356777623611474e-05 - 1.335085063337062e-05 - 1.313655487876277e-05 - 1.292486936494610e-05 - 1.271577446639333e-05 - 1.250925054517824e-05 - 1.230527796605363e-05 - 1.210383708165599e-05 - 1.190490823144681e-05 - 1.170847175649016e-05 - 1.151450799717159e-05 - 1.132299729345123e-05 - 1.113391999104486e-05 - 1.094725644586371e-05 - 1.076298702423590e-05 - 1.058109209097755e-05 - 1.040155202830912e-05 - 1.022434724511555e-05 - 1.004945815519835e-05 - 9.876865191434875e-06 - 9.706548817576976e-06 - 9.538489515829050e-06 - 9.372667791395497e-06 - 9.209064181113714e-06 - 9.047659251528417e-06 - 8.888433598428113e-06 - 8.731367852817854e-06 - 8.576442682615395e-06 - 8.423638791088146e-06 - 8.272936922653283e-06 - 8.124317863654203e-06 - 7.977762440936675e-06 - 7.833251528895281e-06 - 7.690766049713759e-06 - 7.550286971453687e-06 - 7.411795314787993e-06 - 7.275272152381047e-06 - 7.140698608042407e-06 - 7.008055865069554e-06 - 6.877325162999093e-06 - 6.748487797069182e-06 - 6.621525126924672e-06 - 6.496418573295794e-06 - 6.373149617974847e-06 - 6.251699810845691e-06 - 6.132050767139283e-06 - 6.014184168887862e-06 - 5.898081770597224e-06 - 5.783725394973654e-06 - 5.671096936050662e-06 - 5.560178365641361e-06 - 5.450951726966341e-06 - 5.343399138917566e-06 - 5.237502802602254e-06 - 5.133244993336976e-06 - 5.030608065950253e-06 - 4.929574461382145e-06 - 4.830126698086031e-06 - 4.732247378331277e-06 - 4.635919192753656e-06 - 4.541124912789582e-06 - 4.447847398958468e-06 - 4.356069602328335e-06 - 4.265774557056776e-06 - 4.176945389932598e-06 - 4.089565320281935e-06 - 4.003617653697645e-06 - 3.919085793399028e-06 - 3.835953236362346e-06 - 3.754203567594348e-06 - 3.673820472678765e-06 - 3.594787733829004e-06 - 3.517089224074456e-06 - 3.440708918621393e-06 - 3.365630891050476e-06 - 3.291839308866544e-06 - 3.219318444550688e-06 - 3.148052669614368e-06 - 3.078026451876596e-06 - 3.009224366838337e-06 - 2.941631088840265e-06 - 2.875231390541817e-06 - 2.810010156134118e-06 - 2.745952369256776e-06 - 2.683043113446972e-06 - 2.621267584374269e-06 - 2.560611078236376e-06 - 2.501058994098514e-06 - 2.442596843868032e-06 - 2.385210240033010e-06 - 2.328884899906223e-06 - 2.273606655048426e-06 - 2.219361438179688e-06 - 2.166135288678882e-06 - 2.113914360085187e-06 - 2.062684907096663e-06 - 2.012433292648363e-06 - 1.963145994708785e-06 - 1.914809593193956e-06 - 1.867410777738679e-06 - 1.820936351687259e-06 - 1.775373220609589e-06 - 1.730708401732302e-06 - 1.686929024947410e-06 - 1.644022323067757e-06 - 1.601975642837270e-06 - 1.560776441656341e-06 - 1.520412279298016e-06 - 1.480870830315665e-06 - 1.442139880698395e-06 - 1.404207319625165e-06 - 1.367061149777226e-06 - 1.330689483155573e-06 - 1.295080535963615e-06 - 1.260222640873472e-06 - 1.226104237141460e-06 - 1.192713867093549e-06 - 1.160040189500492e-06 - 1.128071969424555e-06 - 1.096798076008267e-06 - 1.066207493417804e-06 - 1.036289310659725e-06 - 1.007032721493895e-06 - 9.784270338592895e-07 - 9.504616588874799e-07 - 9.231261128777845e-07 - 8.964100256766087e-07 - 8.703031286825232e-07 - 8.447952585150839e-07 - 8.198763641874936e-07 - 7.955364948286083e-07 - 7.717658049346632e-07 - 7.485545598914059e-07 - 7.258931238786546e-07 - 7.037719665410901e-07 - 6.821816664988581e-07 - 6.611128998791421e-07 - 6.405564483055948e-07 - 6.205032003278225e-07 - 6.009441408121614e-07 - 5.818703600152187e-07 - 5.632730528626383e-07 - 5.451435094097432e-07 - 5.274731247677268e-07 - 5.102533965000488e-07 - 4.934759162480692e-07 - 4.771323800991179e-07 - 4.612145841662162e-07 - 4.457144176881476e-07 - 4.306238737382497e-07 - 4.159350428538716e-07 - 4.016401077051372e-07 - 3.877313539402903e-07 - 3.742011622647174e-07 - 3.610420046499709e-07 - 3.482464547968944e-07 - 3.358071790150475e-07 - 3.237169340794661e-07 - 3.119685770955318e-07 - 3.005550554375413e-07 - 2.894694062090586e-07 - 2.787047650882795e-07 - 2.682543557659438e-07 - 2.581114909968296e-07 - 2.482695801165890e-07 - 2.387221182727572e-07 - 2.294626890008751e-07 - 2.204849703818711e-07 - 2.117827241548630e-07 - 2.033497996067267e-07 - 1.951801384624956e-07 - 1.872677641420447e-07 - 1.796067867093452e-07 - 1.721914062527642e-07 - 1.650159027896018e-07 - 1.580746421942365e-07 - 1.513620776690125e-07 - 1.448727406655565e-07 - 1.386012477684331e-07 - 1.325423000867771e-07 - 1.266906752868051e-07 - 1.210412352836648e-07 - 1.155889239131470e-07 - 1.103287600176973e-07 - 1.052558455547364e-07 - 1.003653617115032e-07 - 9.565256321109978e-08 - 9.111278671292873e-08 - 8.674144556415159e-08 - 8.253402527034383e-08 - 7.848609177536523e-08 - 7.459328520671134e-08 - 7.085131661573615e-08 - 6.725597593242166e-08 - 6.380312478868793e-08 - 6.048869454868003e-08 - 5.730869376312298e-08 - 5.425920030057914e-08 - 5.133636064443935e-08 - 4.853639660958214e-08 - 4.585559704969457e-08 - 4.329031836991616e-08 - 4.083699031045398e-08 - 3.849210751108346e-08 - 3.625223113812888e-08 - 3.411399355038575e-08 - 3.207408998824199e-08 - 3.012928121511996e-08 - 2.827639696078167e-08 - 2.651232793166280e-08 - 2.483402934338396e-08 - 2.323852311474514e-08 - 2.172289034680298e-08 - 2.028427559044146e-08 - 1.891988778877689e-08 - 1.762699339728036e-08 - 1.640292125402531e-08 - 1.524506224991720e-08 - 1.415086320949184e-08 - 1.311783222446413e-08 - 1.214353712508316e-08 - 1.122560019257377e-08 - 1.036170378687137e-08 - 9.549587722603005e-09 - 8.787044877843281e-09 - 8.071926961605364e-09 - 7.402140903161946e-09 - 6.775645388472587e-09 - 6.190456604129221e-09 - 5.644643792323680e-09 - 5.136326726146161e-09 - 4.663681262833891e-09 - 4.224934232596794e-09 - 3.818361845837701e-09 - 3.442294891302550e-09 - 3.095113141246544e-09 - 2.775244665814773e-09 - 2.481170514027403e-09 - 2.211418834557044e-09 - 1.964565051498559e-09 - 1.739235878927056e-09 - 1.534103359980556e-09 - 1.347885831336700e-09 - 1.179351163642234e-09 - 1.027310894648576e-09 - 8.906218977827446e-10 - 7.681887799049897e-10 - 6.589582548472836e-10 - 5.619214238374888e-10 - 4.761152985830568e-10 - 4.006175343477256e-10 - 3.345492227248809e-10 - 2.770755362128679e-10 - 2.274009179016229e-10 - 1.847722840116674e-10 - 1.484788129161787e-10 - 1.178476648704315e-10 - 9.224748788184573e-11 - 7.108739902161543e-11 - 5.381328706422649e-11 - 3.991151299277479e-11 - 2.890715266694438e-11 - 2.036091648096713e-11 - 1.387293445657948e-11 - 9.080348320515963e-12 - 5.654863833225597e-12 - 3.306507674167889e-12 - 1.780689492983021e-12 - 8.563646514161430e-13 - 3.496037276049943e-13 - 1.104943293034196e-13 - 2.161027650041889e-14 - 5.028049336448720e-16 - 0.000000000000000e+00 - 0.000000000000000e+00 - 7.485272593961791e+04 - 1.493519318697679e+05 - 2.234970831294996e+05 - 2.972876533345640e+05 - 3.707231243774131e+05 - 4.438029864272003e+05 - 5.165267379297798e+05 - 5.888938856077072e+05 - 6.609039444602393e+05 - 7.325564377633340e+05 - 8.038508970696502e+05 - 8.747868622085482e+05 - 9.453638812860892e+05 - 1.015581510685036e+06 - 1.085439315064852e+06 - 1.154936867361703e+06 - 1.224073748788454e+06 - 1.292849548834672e+06 - 1.361263865266626e+06 - 1.429316304127287e+06 - 1.497006479736322e+06 - 1.564334014690106e+06 - 1.631298539861710e+06 - 1.697899694400910e+06 - 1.764137125734180e+06 - 1.830010489564698e+06 - 1.895519449872339e+06 - 1.960663678913685e+06 - 2.025442857222013e+06 - 2.089856673607306e+06 - 2.153904825156247e+06 - 2.217587017232217e+06 - 2.280902963475303e+06 - 2.343852385802290e+06 - 2.406435014406665e+06 - 2.468650587758616e+06 - 2.530498852605031e+06 - 2.591979563969503e+06 - 2.653092485152322e+06 - 2.713837387730482e+06 - 2.774214051557675e+06 - 2.834222264764299e+06 - 2.893861823757447e+06 - 2.953132533220919e+06 - 3.012034206115212e+06 - 3.070566663677527e+06 - 3.128729735421764e+06 - 3.186523259138526e+06 - 3.243947080895115e+06 - 3.301001055035538e+06 - 3.357685044180497e+06 - 3.413998919227402e+06 - 3.469942559350358e+06 - 3.525515852000176e+06 - 3.580718692904367e+06 - 3.635550986067140e+06 - 3.690012643769410e+06 - 3.744103586568788e+06 - 3.797823743299592e+06 - 3.851173051072835e+06 - 3.904151455276238e+06 - 3.956758909574216e+06 - 4.008995375907890e+06 - 4.060860824495079e+06 - 4.112355233830309e+06 - 4.163478590684799e+06 - 4.214230890106475e+06 - 4.264612135419963e+06 - 4.314622338226588e+06 - 4.364261518404378e+06 - 4.413529704108060e+06 - 4.462426931769069e+06 - 4.510953246095533e+06 - 4.559108700072286e+06 - 4.606893354960858e+06 - 4.654307280299488e+06 - 4.701350553903108e+06 - 4.748023261863358e+06 - 4.794325498548575e+06 - 4.840257366603798e+06 - 4.885818976950768e+06 - 4.931010448787929e+06 - 4.975831909590418e+06 - 5.020283495110085e+06 - 5.064365349375471e+06 - 5.108077624691823e+06 - 5.151420481641092e+06 - 5.194394089081923e+06 - 5.236998624149668e+06 - 5.279234272256376e+06 - 5.321101227090800e+06 - 5.362599690618395e+06 - 5.403729873081312e+06 - 5.444491992998408e+06 - 5.484886277165242e+06 - 5.524912960654069e+06 - 5.564572286813851e+06 - 5.603864507270245e+06 - 5.642789881925615e+06 - 5.681348678959022e+06 - 5.719541174826232e+06 - 5.757367654259708e+06 - 5.794828410268617e+06 - 5.831923744138825e+06 - 5.868653965432902e+06 - 5.905019391990117e+06 - 5.941020349926441e+06 - 5.976657173634544e+06 - 6.011930205783804e+06 - 6.046839797320290e+06 - 6.081386307466779e+06 - 6.115570103722748e+06 - 6.149391561864376e+06 - 6.182851065944540e+06 - 6.215949008292822e+06 - 6.248685789515501e+06 - 6.281061818495561e+06 - 6.313077512392686e+06 - 6.344733296643257e+06 - 6.376029604960365e+06 - 6.406966879333793e+06 - 6.437545570030033e+06 - 6.467766135592271e+06 - 6.497629042840399e+06 - 6.527134766871008e+06 - 6.556283791057392e+06 - 6.585076607049545e+06 - 6.613513714774162e+06 - 6.641595622434638e+06 - 6.669322846511072e+06 - 6.696695911760264e+06 - 6.723715351215711e+06 - 6.750381706187615e+06 - 6.776695526262878e+06 - 6.802657369305105e+06 - 6.828267801454599e+06 - 6.853527397128366e+06 - 6.878436739020114e+06 - 6.902996418100249e+06 - 6.927207033615881e+06 - 6.951069193090819e+06 - 6.974583512325577e+06 - 6.997750615397365e+06 - 7.020571134660101e+06 - 7.043045710744397e+06 - 7.065174992557568e+06 - 7.086959637283633e+06 - 7.108400310383311e+06 - 7.129497685594021e+06 - 7.150252444929884e+06 - 7.170665278681723e+06 - 7.190736885417059e+06 - 7.210467971980117e+06 - 7.229859253491821e+06 - 7.248911453349800e+06 - 7.267625303228384e+06 - 7.286001543078595e+06 - 7.304040921128170e+06 - 7.321744193881537e+06 - 7.339112126119829e+06 - 7.356145490900878e+06 - 7.372845069559221e+06 - 7.389211651706094e+06 - 7.405246035229432e+06 - 7.420949026293878e+06 - 7.436321439340766e+06 - 7.451364097088138e+06 - 7.466077830530737e+06 - 7.480463478940005e+06 - 7.494521889864086e+06 - 7.508253919127826e+06 - 7.521660430832772e+06 - 7.534742297357169e+06 - 7.547500399355968e+06 - 7.559935625760819e+06 - 7.572048873780073e+06 - 7.583841048898782e+06 - 7.595313064878696e+06 - 7.606465843758276e+06 - 7.617300315852673e+06 - 7.627817419753745e+06 - 7.638018102330050e+06 - 7.647903318726848e+06 - 7.657474032366097e+06 - 7.666731214946462e+06 - 7.675675846443305e+06 - 7.684308915108687e+06 - 7.692631417471377e+06 - 7.700644358336839e+06 - 7.708348750787240e+06 - 7.715745616181449e+06 - 7.722835984155037e+06 - 7.729620892620270e+06 - 7.736101387766127e+06 - 7.742278524058277e+06 - 7.748153364239094e+06 - 7.753726979327655e+06 - 7.759000448619737e+06 - 7.763974859687817e+06 - 7.768651308381077e+06 - 7.773030898825390e+06 - 7.777114743423343e+06 - 7.780903962854218e+06 - 7.784399686073998e+06 - 7.787603050315368e+06 - 7.790515201087713e+06 - 7.793137292177119e+06 - 7.795470485646380e+06 - 7.797515951834979e+06 - 7.799274869359110e+06 - 7.800748425111664e+06 - 7.801937814262233e+06 - 7.802844240257111e+06 - 7.803468914819297e+06 - 7.803813057948484e+06 - 7.803877897921070e+06 - 7.803664671290156e+06 - 7.803174622885538e+06 - 7.802409005813722e+06 - 7.801369081457905e+06 - 7.800056119477995e+06 - 7.798471397810592e+06 - 7.796616202669007e+06 - 7.794491828543244e+06 - 7.792099578200010e+06 - 7.789440762682715e+06 - 7.786516701311473e+06 - 7.783328721683091e+06 - 7.779878159671083e+06 - 7.776166359425665e+06 - 7.772194673373749e+06 - 7.767964462218953e+06 - 7.763477094941595e+06 - 7.758733948798692e+06 - 7.753736409323964e+06 - 7.748485870327833e+06 - 7.742983733897421e+06 - 7.737231410396548e+06 - 7.731230318465743e+06 - 7.724981885022229e+06 - 7.718487545259933e+06 - 7.711748742649483e+06 - 7.704766928938209e+06 - 7.697543564150140e+06 - 7.690080116586007e+06 - 7.682378062823243e+06 - 7.674438887715982e+06 - 7.666264084395060e+06 - 7.657855154268012e+06 - 7.649213607019073e+06 - 7.640340960609185e+06 - 7.631238741275986e+06 - 7.621908483533815e+06 - 7.612351730173716e+06 - 7.602570032263434e+06 - 7.592564949147409e+06 - 7.582338048446788e+06 - 7.571890906059416e+06 - 7.561225106159844e+06 - 7.550342241199316e+06 - 7.539243911905785e+06 - 7.527931727283904e+06 - 7.516407304615024e+06 - 7.504672269457198e+06 - 7.492728241314434e+06 - 7.480576638153253e+06 - 7.468218723741564e+06 - 7.455655760425863e+06 - 7.442889013018662e+06 - 7.429919748798485e+06 - 7.416749237509867e+06 - 7.403378751363355e+06 - 7.389809565035504e+06 - 7.376042955668893e+06 - 7.362080202872100e+06 - 7.347922588719724e+06 - 7.333571397752370e+06 - 7.319027916976659e+06 - 7.304293435865226e+06 - 7.289369246356713e+06 - 7.274256642855777e+06 - 7.258956922233087e+06 - 7.243471383825325e+06 - 7.227801329435183e+06 - 7.211948063331366e+06 - 7.195912892248592e+06 - 7.179697125387593e+06 - 7.163302074415106e+06 - 7.146729053463890e+06 - 7.129979379132709e+06 - 7.113054370486340e+06 - 7.095955349055575e+06 - 7.078683638837219e+06 - 7.061240566294081e+06 - 7.043627460354994e+06 - 7.025845652414794e+06 - 7.007896476334333e+06 - 6.989781268440476e+06 - 6.971501367526096e+06 - 6.953058114850082e+06 - 6.934452854137335e+06 - 6.915686931578767e+06 - 6.896761695831302e+06 - 6.877678498017876e+06 - 6.858438691727439e+06 - 6.839043633014950e+06 - 6.819494680401385e+06 - 6.799793194873727e+06 - 6.779940539884974e+06 - 6.759938081354136e+06 - 6.739787187666233e+06 - 6.719489229672301e+06 - 6.699045580689385e+06 - 6.678457616500544e+06 - 6.657726715354848e+06 - 6.636854257967380e+06 - 6.615841627519235e+06 - 6.594690209657516e+06 - 6.573401392495350e+06 - 6.551976566611862e+06 - 6.530417125052197e+06 - 6.508724463327511e+06 - 6.486899979414972e+06 - 6.464945073757762e+06 - 6.442861149265066e+06 - 6.420649611312096e+06 - 6.398311867740063e+06 - 6.375849328856199e+06 - 6.353263407433745e+06 - 6.330555518711952e+06 - 6.307727080396090e+06 - 6.284779512657427e+06 - 6.261714238133261e+06 - 6.238532681926889e+06 - 6.215236271607627e+06 - 6.191826437210800e+06 - 6.168304611237747e+06 - 6.144672228655818e+06 - 6.120930726898375e+06 - 6.097081545864792e+06 - 6.073126127920459e+06 - 6.049065917896771e+06 - 6.024902363091142e+06 - 6.000636913266994e+06 - 5.976271020653763e+06 - 5.951806139946896e+06 - 5.927243728307854e+06 - 5.902585245364108e+06 - 5.877832153209144e+06 - 5.852985916402456e+06 - 5.828048001969552e+06 - 5.803019879401957e+06 - 5.777903020657199e+06 - 5.752698900158828e+06 - 5.727408994796395e+06 - 5.702034783925475e+06 - 5.676577749367647e+06 - 5.651039375410506e+06 - 5.625421148807654e+06 - 5.599724558778713e+06 - 5.573951097009313e+06 - 5.548102257651095e+06 - 5.522179537321717e+06 - 5.496184435104840e+06 - 5.470118452550147e+06 - 5.443983093673326e+06 - 5.417779864956085e+06 - 5.391510275346133e+06 - 5.365175836257203e+06 - 5.338778061569033e+06 - 5.312318467627374e+06 - 5.285798573243992e+06 - 5.259219899696662e+06 - 5.232583970729172e+06 - 5.205892312551324e+06 - 5.179146453838928e+06 - 5.152347925733812e+06 - 5.125498261843814e+06 - 5.098598998242779e+06 - 5.071651673470572e+06 - 5.044657828533064e+06 - 5.017619006902143e+06 - 4.990536754515706e+06 - 4.963412619777663e+06 - 4.936248153557934e+06 - 4.909044909192459e+06 - 4.881804442483181e+06 - 4.854528311698059e+06 - 4.827218077571064e+06 - 4.799875303302180e+06 - 4.772501554557402e+06 - 4.745098399468737e+06 - 4.717667408634203e+06 - 4.690210155117837e+06 - 4.662728214449679e+06 - 4.635223164625784e+06 - 4.607696586108224e+06 - 4.580150061825077e+06 - 4.552585177170437e+06 - 4.525003520004408e+06 - 4.497406680653105e+06 - 4.469796251908661e+06 - 4.442173829029216e+06 - 4.414541009738924e+06 - 4.386899394227949e+06 - 4.359250585152469e+06 - 4.331596187634676e+06 - 4.303937809262771e+06 - 4.276277060090966e+06 - 4.248615552639492e+06 - 4.220954901894585e+06 - 4.193296725308497e+06 - 4.165642642799490e+06 - 4.137994276751838e+06 - 4.110353252015833e+06 - 4.082721195907769e+06 - 4.055099738209962e+06 - 4.027490511170732e+06 - 3.999895149504419e+06 - 3.972315290391369e+06 - 3.944752573477943e+06 - 3.917208640876513e+06 - 3.889685137165464e+06 - 3.862183709389194e+06 - 3.834706007058111e+06 - 3.807253682148634e+06 - 3.779828389103201e+06 - 3.752431784830255e+06 - 3.725065528704253e+06 - 3.697731282565667e+06 - 3.670430710720977e+06 - 3.643165479942679e+06 - 3.615937259469279e+06 - 3.588747721005293e+06 - 3.561598538721256e+06 - 3.534491389253709e+06 - 3.507427951705208e+06 - 3.480409907644318e+06 - 3.453438941105620e+06 - 3.426516738589706e+06 - 3.399644989063177e+06 - 3.372825383958653e+06 - 3.346070405300663e+06 - 3.319465764034668e+06 - 3.293075510459727e+06 - 3.266878224028187e+06 - 3.240869303162930e+06 - 3.215052515525467e+06 - 3.189425288821125e+06 - 3.163986116962672e+06 - 3.138734196986282e+06 - 3.113668261011591e+06 - 3.088787111422079e+06 - 3.064089610843659e+06 - 3.039574592322599e+06 - 3.015240898358055e+06 - 2.991087379108502e+06 - 2.967112887579310e+06 - 2.943316282301805e+06 - 2.919696425519270e+06 - 2.896252185185970e+06 - 2.872982434032476e+06 - 2.849886048305633e+06 - 2.826961910405915e+06 - 2.804208907130155e+06 - 2.781625929123051e+06 - 2.759211873644148e+06 - 2.736965641930875e+06 - 2.714886139213983e+06 - 2.692972277509980e+06 - 2.671222972611625e+06 - 2.649637144535781e+06 - 2.628213719738566e+06 - 2.606951628696007e+06 - 2.585849806893141e+06 - 2.564907195391811e+06 - 2.544122739173453e+06 - 2.523495389008342e+06 - 2.503024101022326e+06 - 2.482707834844927e+06 - 2.462545556054412e+06 - 2.442536236120740e+06 - 2.422678849863131e+06 - 2.402972377820649e+06 - 2.383415806334849e+06 - 2.364008125120872e+06 - 2.344748329835404e+06 - 2.325635421794777e+06 - 2.306668405813749e+06 - 2.287846292982958e+06 - 2.269168099757709e+06 - 2.250632846050586e+06 - 2.232239558087812e+06 - 2.213987266957964e+06 - 2.195875007435864e+06 - 2.177901821473463e+06 - 2.160066755143500e+06 - 2.142368857948063e+06 - 2.124807187017495e+06 - 2.107380803567688e+06 - 2.090088772295509e+06 - 2.072930165358991e+06 - 2.055904058912681e+06 - 2.039009532618940e+06 - 2.022245673041180e+06 - 2.005611571515091e+06 - 1.989106323649552e+06 - 1.972729030298793e+06 - 1.956478797095825e+06 - 1.940354734917566e+06 - 1.924355960016194e+06 - 1.908481592593613e+06 - 1.892730757829583e+06 - 1.877102587255698e+06 - 1.861596215902473e+06 - 1.846210783186639e+06 - 1.830945435012332e+06 - 1.815799321323061e+06 - 1.800771597138300e+06 - 1.785861422681660e+06 - 1.771067961851037e+06 - 1.756390384114008e+06 - 1.741827864373811e+06 - 1.727379581118251e+06 - 1.713044718232857e+06 - 1.698822464839031e+06 - 1.684712013805151e+06 - 1.670712563808684e+06 - 1.656823318006428e+06 - 1.643043483055245e+06 - 1.629372271790869e+06 - 1.615808901794204e+06 - 1.602352594044968e+06 - 1.589002574975609e+06 - 1.575758076322615e+06 - 1.562618333634041e+06 - 1.549582587186907e+06 - 1.536650081999105e+06 - 1.523820067124634e+06 - 1.511091797064626e+06 - 1.498464530780005e+06 - 1.485937531189585e+06 - 1.473510066471004e+06 - 1.461181408848471e+06 - 1.448950834625962e+06 - 1.436817625926470e+06 - 1.424781068397768e+06 - 1.412840451407005e+06 - 1.400995070309470e+06 - 1.389244224245752e+06 - 1.377587216393601e+06 - 1.366023355231714e+06 - 1.354551952598923e+06 - 1.343172324427429e+06 - 1.331883792566280e+06 - 1.320685682335073e+06 - 1.309577322956444e+06 - 1.298558048406515e+06 - 1.287627196362487e+06 - 1.276784109496439e+06 - 1.266028134784103e+06 - 1.255358622320226e+06 - 1.244774926866806e+06 - 1.234276408467881e+06 - 1.223862430240984e+06 - 1.213532358913532e+06 - 1.203285566621101e+06 - 1.193121428991948e+06 - 1.183039325468658e+06 - 1.173038640304339e+06 - 1.163118761212139e+06 - 1.153279079987504e+06 - 1.143518992564451e+06 - 1.133837898317260e+06 - 1.124235201394960e+06 - 1.114710310121780e+06 - 1.105262636013577e+06 - 1.095891594215875e+06 - 1.086596604396163e+06 - 1.077377090233802e+06 - 1.068232479242110e+06 - 1.059162202266971e+06 - 1.050165693700918e+06 - 1.041242393088349e+06 - 1.032391743039430e+06 - 1.023613189178869e+06 - 1.014906181731556e+06 - 1.006270174355871e+06 - 9.977046244036794e+05 - 9.892089935677024e+05 - 9.807827465832273e+05 - 9.724253516436865e+05 - 9.641362810046984e+05 - 9.559150102252770e+05 - 9.477610188719215e+05 - 9.396737899139688e+05 - 9.316528091743080e+05 - 9.236975665277143e+05 - 9.158075561735997e+05 - 9.079822751134991e+05 - 9.002212236533747e+05 - 8.925239057014534e+05 - 8.848898281604102e+05 - 8.773185021612709e+05 - 8.698094424648809e+05 - 8.623621663528095e+05 - 8.549761944053203e+05 - 8.476510510446843e+05 - 8.403862637513808e+05 - 8.331813638606276e+05 - 8.260358860837971e+05 - 8.189493675787508e+05 - 8.119213484350282e+05 - 8.049513730504208e+05 - 7.980389891667470e+05 - 7.911837471192866e+05 - 7.843852003599521e+05 - 7.776429053419405e+05 - 7.709564221446526e+05 - 7.643253140173181e+05 - 7.577491471803443e+05 - 7.512274911598503e+05 - 7.447599180231568e+05 - 7.383460026539576e+05 - 7.319853241781880e+05 - 7.256774641850799e+05 - 7.194220067146936e+05 - 7.132185395309449e+05 - 7.070666529520636e+05 - 7.009659400728574e+05 - 6.949159975085063e+05 - 6.889164244086053e+05 - 6.829668228095188e+05 - 6.770667979456050e+05 - 6.712159574726904e+05 - 6.654139120281750e+05 - 6.596602754201142e+05 - 6.539546638052445e+05 - 6.482966962660485e+05 - 6.426859949531512e+05 - 6.371221843431445e+05 - 6.316048918617199e+05 - 6.261337478197705e+05 - 6.207083848228143e+05 - 6.153284385055641e+05 - 6.099935472682050e+05 - 6.047033517354903e+05 - 5.994574954765684e+05 - 5.942556247644721e+05 - 5.890973881315375e+05 - 5.839824370501742e+05 - 5.789104255366600e+05 - 5.738810098259439e+05 - 5.688938490610282e+05 - 5.639486048510919e+05 - 5.590449410545636e+05 - 5.541825244030216e+05 - 5.493610239467514e+05 - 5.445801109611018e+05 - 5.398394595653637e+05 - 5.351387461239359e+05 - 5.304776492529869e+05 - 5.258558503354813e+05 - 5.212730328842620e+05 - 5.167288826663374e+05 - 5.122230881980868e+05 - 5.077553400369428e+05 - 5.033253309731948e+05 - 4.989327564601310e+05 - 4.945773139811803e+05 - 4.902587033143605e+05 - 4.859766266490913e+05 - 4.817307881770549e+05 - 4.775208945372272e+05 - 4.733466546121029e+05 - 4.692077791818720e+05 - 4.651039814988278e+05 - 4.610349770333872e+05 - 4.570004830895544e+05 - 4.530002193970305e+05 - 4.490339078641191e+05 - 4.451012721716975e+05 - 4.412020383482487e+05 - 4.373359346346440e+05 - 4.335026910461138e+05 - 4.297020398291695e+05 - 4.259337153289251e+05 - 4.221974536699117e+05 - 4.184929932504728e+05 - 4.148200744355357e+05 - 4.111784393468680e+05 - 4.075678324287459e+05 - 4.039879999559653e+05 - 4.004386899065928e+05 - 3.969196525836200e+05 - 3.934306400492930e+05 - 3.899714060581240e+05 - 3.865417066557175e+05 - 3.831412995849459e+05 - 3.797699442729113e+05 - 3.764274023566474e+05 - 3.731134371233769e+05 - 3.698278135622827e+05 - 3.665702987827645e+05 - 3.633406615280775e+05 - 3.601386722825769e+05 - 3.569641034535824e+05 - 3.538167290782596e+05 - 3.506963250581825e+05 - 3.476026690576235e+05 - 3.445355402744773e+05 - 3.414947198014101e+05 - 3.384799905288533e+05 - 3.354911367821696e+05 - 3.325279446663284e+05 - 3.295902021531574e+05 - 3.266776986085196e+05 - 3.237902250531212e+05 - 3.209275743946921e+05 - 3.180895409646722e+05 - 3.152759207164211e+05 - 3.124865112943467e+05 - 3.097211117598721e+05 - 3.069795229448014e+05 - 3.042615472339510e+05 - 3.015669883675390e+05 - 2.988956518738279e+05 - 2.962473447339852e+05 - 2.936218752484120e+05 - 2.910190535228683e+05 - 2.884386911235514e+05 - 2.858806009067059e+05 - 2.833445973150213e+05 - 2.808304963224871e+05 - 2.783381153152796e+05 - 2.758672731341289e+05 - 2.734177900017136e+05 - 2.709894875428715e+05 - 2.685821889451269e+05 - 2.661957187314447e+05 - 2.638299027837526e+05 - 2.614845683836235e+05 - 2.591595441417535e+05 - 2.568546601323142e+05 - 2.545697477628685e+05 - 2.523046396706559e+05 - 2.500591699434964e+05 - 2.478331740644226e+05 - 2.456264886409644e+05 - 2.434389516128850e+05 - 2.412704023657298e+05 - 2.391206814330098e+05 - 2.369896306904384e+05 - 2.348770933197599e+05 - 2.327829136173563e+05 - 2.307069372775990e+05 - 2.286490111745211e+05 - 2.266089832623643e+05 - 2.245867029748616e+05 - 2.225820209237310e+05 - 2.205947887183862e+05 - 2.186248592921233e+05 - 2.166720868039439e+05 - 2.147363264605261e+05 - 2.128174347706827e+05 - 2.109152693889452e+05 - 2.090296889843596e+05 - 2.071605535077064e+05 - 2.053077240108720e+05 - 2.034710625599661e+05 - 2.016504325007521e+05 - 1.998456982030229e+05 - 1.980567250370223e+05 - 1.962833797138016e+05 - 1.945255298870997e+05 - 1.927830441323482e+05 - 1.910557922964590e+05 - 1.893436452442803e+05 - 1.876464748512476e+05 - 1.859641540986015e+05 - 1.842965568967865e+05 - 1.826435581738182e+05 - 1.810050340354470e+05 - 1.793808614993985e+05 - 1.777709185575675e+05 - 1.761750842223128e+05 - 1.745932384546507e+05 - 1.730252623268235e+05 - 1.714710377603550e+05 - 1.699304475698536e+05 - 1.684033757560533e+05 - 1.668897071565261e+05 - 1.653893274220018e+05 - 1.639021233234161e+05 - 1.624279825159149e+05 - 1.609667934564489e+05 - 1.595184456811041e+05 - 1.580828296015031e+05 - 1.566598363968120e+05 - 1.552493582649543e+05 - 1.538512882702573e+05 - 1.524655202573447e+05 - 1.510919491064028e+05 - 1.497304705096718e+05 - 1.483809809029638e+05 - 1.470433777326744e+05 - 1.457175592117312e+05 - 1.444034242942686e+05 - 1.431008729933990e+05 - 1.418098060421684e+05 - 1.405301248671864e+05 - 1.392617319094920e+05 - 1.380045303259556e+05 - 1.367584239714278e+05 - 1.355233176631985e+05 - 1.342991169575939e+05 - 1.330857281367400e+05 - 1.318830583220329e+05 - 1.306910153813551e+05 - 1.295095079605118e+05 - 1.283384454277201e+05 - 1.271777378619642e+05 - 1.260272961737778e+05 - 1.248870320778846e+05 - 1.237568578844075e+05 - 1.226366865814357e+05 - 1.215264320654815e+05 - 1.204260088572700e+05 - 1.193353321256488e+05 - 1.182543179024696e+05 - 1.171828828329888e+05 - 1.161209441971572e+05 - 1.150684200368906e+05 - 1.140252290172446e+05 - 1.129912905290012e+05 - 1.119665246989244e+05 - 1.109508522377596e+05 - 1.099441945145749e+05 - 1.089464735474612e+05 - 1.079576119759672e+05 - 1.069775332658437e+05 - 1.060061613940063e+05 - 1.050434208615313e+05 - 1.040892370245828e+05 - 1.031435357647047e+05 - 1.022062434696232e+05 - 1.012772873208916e+05 - 1.003565950684523e+05 - 9.944409498683986e+04 - 9.853971604124359e+04 - 9.764338777276211e+04 - 9.675504027159151e+04 - 9.587460425195689e+04 - 9.500201099602232e+04 - 9.413719236230559e+04 - 9.328008081668093e+04 - 9.243060935253548e+04 - 9.158871152497102e+04 - 9.075432150057999e+04 - 8.992737394814150e+04 - 8.910780408381460e+04 - 8.829554772812854e+04 - 8.749054118346877e+04 - 8.669272128864085e+04 - 8.590202548133289e+04 - 8.511839166524833e+04 - 8.434175826486869e+04 - 8.357206428147563e+04 - 8.280924917713979e+04 - 8.205325293940101e+04 - 8.130401609766987e+04 - 8.056147962909786e+04 - 7.982558503959214e+04 - 7.909627435336930e+04 - 7.837349003289423e+04 - 7.765717506702039e+04 - 7.694727293156023e+04 - 7.624372753229675e+04 - 7.554648331079309e+04 - 7.485548516457589e+04 - 7.417067840840557e+04 - 7.349200889763620e+04 - 7.281942291879337e+04 - 7.215286716185752e+04 - 7.149228885123666e+04 - 7.083763563584826e+04 - 7.018885556144921e+04 - 6.954589717270633e+04 - 6.890870943981725e+04 - 6.827724174191867e+04 - 6.765144392787226e+04 - 6.703126624692857e+04 - 6.641665935636370e+04 - 6.580757439267423e+04 - 6.520396286738058e+04 - 6.460577668030654e+04 - 6.401296820028803e+04 - 6.342549017134596e+04 - 6.284329573351656e+04 - 6.226633845994343e+04 - 6.169457228450359e+04 - 6.112795154311772e+04 - 6.056643099463883e+04 - 6.000996574136701e+04 - 5.945851127624574e+04 - 5.891202351267684e+04 - 5.837045869755570e+04 - 5.783377345558033e+04 - 5.730192482224794e+04 - 5.677487016169035e+04 - 5.625256720967715e+04 - 5.573497408983271e+04 - 5.522204924870504e+04 - 5.471375150828325e+04 - 5.421004006036229e+04 - 5.371087441354901e+04 - 5.321621444975662e+04 - 5.272602039469258e+04 - 5.224025278120609e+04 - 5.175887251825204e+04 - 5.128184085536604e+04 - 5.080911934597862e+04 - 5.034066989608183e+04 - 4.987645473684455e+04 - 4.941643640415772e+04 - 4.896057778639881e+04 - 4.850884207769758e+04 - 4.806119277190277e+04 - 4.761759372195903e+04 - 4.717800906318111e+04 - 4.674240321587012e+04 - 4.631074096205200e+04 - 4.588298735942246e+04 - 4.545910774537743e+04 - 4.503906779825089e+04 - 4.462283347373459e+04 - 4.421037101686000e+04 - 4.380164697651120e+04 - 4.339662816996042e+04 - 4.299528171729217e+04 - 4.259757504220949e+04 - 4.220347581706527e+04 - 4.181295199605238e+04 - 4.142597183433527e+04 - 4.104250383855765e+04 - 4.066251680332360e+04 - 4.028597979815155e+04 - 3.991286213370509e+04 - 3.954313341370015e+04 - 3.917676350485435e+04 - 3.881372250661203e+04 - 3.845398080843414e+04 - 3.809750905736740e+04 - 3.774427812448402e+04 - 3.739425915595785e+04 - 3.704742356207799e+04 - 3.670374297805164e+04 - 3.636318929176292e+04 - 3.602573463927982e+04 - 3.569135138416072e+04 - 3.536001215672983e+04 - 3.503168981923036e+04 - 3.470635744840465e+04 - 3.438398837321134e+04 - 3.406455615393208e+04 - 3.374803457309094e+04 - 3.343439765983423e+04 - 3.312361965186892e+04 - 3.281567499925836e+04 - 3.251053841177231e+04 - 3.220818480242078e+04 - 3.190858928930939e+04 - 3.161172723179306e+04 - 3.131757418548949e+04 - 3.102610591483113e+04 - 3.073729842710719e+04 - 3.045112791454117e+04 - 3.016757076691534e+04 - 2.988660361584138e+04 - 2.960820327321778e+04 - 2.933234674204399e+04 - 2.905901125674980e+04 - 2.878817423326317e+04 - 2.851981328372868e+04 - 2.825390622682930e+04 - 2.799043106146120e+04 - 2.772936599846356e+04 - 2.747068942978120e+04 - 2.721437991599866e+04 - 2.696041623625263e+04 - 2.670877735469368e+04 - 2.645944239579323e+04 - 2.621239068106394e+04 - 2.596760172331024e+04 - 2.572505519859007e+04 - 2.548473096648493e+04 - 2.524660907253227e+04 - 2.501066972455740e+04 - 2.477689330466365e+04 - 2.454526037995217e+04 - 2.431575168300119e+04 - 2.408834810912627e+04 - 2.386303072521571e+04 - 2.363978076395976e+04 - 2.341857962988761e+04 - 2.319940888531031e+04 - 2.298225025100848e+04 - 2.276708562349589e+04 - 2.255389704384009e+04 - 2.234266670372097e+04 - 2.213337697918792e+04 - 2.192601038403303e+04 - 2.172054957464747e+04 - 2.151697738916041e+04 - 2.131527680276242e+04 - 2.111543093252480e+04 - 2.091742306098243e+04 - 2.072123660422193e+04 - 2.052685512482519e+04 - 2.033426234716574e+04 - 2.014344212098682e+04 - 1.995437843426629e+04 - 1.976705544479930e+04 - 1.958145743480243e+04 - 1.939756881213320e+04 - 1.921537413684756e+04 - 1.903485810052154e+04 - 1.885600554387774e+04 - 1.867880143037429e+04 - 1.850323084111479e+04 - 1.832927901452323e+04 - 1.815693131178678e+04 - 1.798617320994377e+04 - 1.781699034075772e+04 - 1.764936845332217e+04 - 1.748329340510924e+04 - 1.731875119617678e+04 - 1.715572795110660e+04 - 1.699420990919751e+04 - 1.683418344358223e+04 - 1.667563503873475e+04 - 1.651855128954979e+04 - 1.636291893365341e+04 - 1.620872481606836e+04 - 1.605595588699932e+04 - 1.590459923143625e+04 - 1.575464203906202e+04 - 1.560607160533683e+04 - 1.545887535681969e+04 - 1.531304082443131e+04 - 1.516855564487381e+04 - 1.502540756956110e+04 - 1.488358445432479e+04 - 1.474307426938193e+04 - 1.460386509288249e+04 - 1.446594509814283e+04 - 1.432930256776952e+04 - 1.419392589719183e+04 - 1.405980357729324e+04 - 1.392692420658459e+04 - 1.379527648729671e+04 - 1.366484921045415e+04 - 1.353563127160237e+04 - 1.340761167272577e+04 - 1.328077950662285e+04 - 1.315512397004589e+04 - 1.303063434970357e+04 - 1.290730001970431e+04 - 1.278511047006237e+04 - 1.266405528001385e+04 - 1.254412410683634e+04 - 1.242530670538782e+04 - 1.230759293022181e+04 - 1.219097272173875e+04 - 1.207543611008671e+04 - 1.196097321598039e+04 - 1.184757424417080e+04 - 1.173522949287449e+04 - 1.162392934478714e+04 - 1.151366426384512e+04 - 1.140442480834694e+04 - 1.129620161634352e+04 - 1.118898540470730e+04 - 1.108276698378667e+04 - 1.097753724013271e+04 - 1.087328713748510e+04 - 1.077000773143687e+04 - 1.066769015148828e+04 - 1.056632560317495e+04 - 1.046590537899618e+04 - 1.036642084361778e+04 - 1.026786343864257e+04 - 1.017022468912003e+04 - 1.007349618928313e+04 - 9.977669609110566e+03 - 9.882736699245763e+03 - 9.788689277747368e+03 - 9.695519238085319e+03 - 9.603218551128393e+03 - 9.511779252802526e+03 - 9.421193453258842e+03 - 9.331453338088948e+03 - 9.242551155902798e+03 - 9.154479227014926e+03 - 9.067229945268125e+03 - 8.980795767109534e+03 - 8.895169220035050e+03 - 8.810342900070031e+03 - 8.726309463870590e+03 - 8.643061639313548e+03 - 8.560592220958239e+03 - 8.478894062727115e+03 - 8.397960086705119e+03 - 8.317783279679375e+03 - 8.238356687487571e+03 - 8.159673421912185e+03 - 8.081726656780256e+03 - 8.004509624589081e+03 - 7.928015622553179e+03 - 7.852238006535134e+03 - 7.777170190090504e+03 - 7.702805651284038e+03 - 7.629137923269694e+03 - 7.556160595291118e+03 - 7.483867321684783e+03 - 7.412251809739373e+03 - 7.341307820993124e+03 - 7.271029178292266e+03 - 7.201409756944273e+03 - 7.132443488123264e+03 - 7.064124361053455e+03 - 6.996446414793790e+03 - 6.929403743407001e+03 - 6.862990497342477e+03 - 6.797200875139910e+03 - 6.732029129721631e+03 - 6.667469570161823e+03 - 6.603516551523545e+03 - 6.540164480186692e+03 - 6.477407817185619e+03 - 6.415241069687017e+03 - 6.353658796883785e+03 - 6.292655608307650e+03 - 6.232226157518487e+03 - 6.172365149982773e+03 - 6.113067340658933e+03 - 6.054327527853383e+03 - 5.996140560115221e+03 - 5.938501333076975e+03 - 5.881404784939355e+03 - 5.824845903828315e+03 - 5.768819722461626e+03 - 5.713321315085574e+03 - 5.658345805472132e+03 - 5.603888359764917e+03 - 5.549944184846402e+03 - 5.496508537213697e+03 - 5.443576713947663e+03 - 5.391144051368102e+03 - 5.339205932358427e+03 - 5.287757780134069e+03 - 5.236795058291703e+03 - 5.186313275265001e+03 - 5.136307977685731e+03 - 5.086774751617681e+03 - 5.037709226449485e+03 - 4.989107068721900e+03 - 4.940963984504954e+03 - 4.893275721702213e+03 - 4.846038063285039e+03 - 4.799246830729600e+03 - 4.752897888312231e+03 - 4.706987133608333e+03 - 4.661510499922751e+03 - 4.616463963202395e+03 - 4.571843532909213e+03 - 4.527645253893021e+03 - 4.483865209302220e+03 - 4.440499515324517e+03 - 4.397544325863069e+03 - 4.354995830474305e+03 - 4.312850249817291e+03 - 4.271103841242844e+03 - 4.229752898292512e+03 - 4.188793745275323e+03 - 4.148222740634546e+03 - 4.108036277499050e+03 - 4.068230779797937e+03 - 4.028802705831530e+03 - 3.989748546349355e+03 - 3.951064821861195e+03 - 3.912748086813885e+03 - 3.874794926585441e+03 - 3.837201956255947e+03 - 3.799965825835211e+03 - 3.763083213042953e+03 - 3.726550823283946e+03 - 3.690365398229224e+03 - 3.654523706502605e+03 - 3.619022543185401e+03 - 3.583858737044133e+03 - 3.549029144619817e+03 - 3.514530650270483e+03 - 3.480360168271582e+03 - 3.446514639490202e+03 - 3.412991033253400e+03 - 3.379786348393921e+03 - 3.346897609451590e+03 - 3.314321868815865e+03 - 3.282056205761040e+03 - 3.250097724763853e+03 - 3.218443559530467e+03 - 3.187090870156345e+03 - 3.156036839918450e+03 - 3.125278679259401e+03 - 3.094813626126841e+03 - 3.064638941053712e+03 - 3.034751909739014e+03 - 3.005149845581890e+03 - 2.975830084543172e+03 - 2.946789986568892e+03 - 2.918026936797055e+03 - 2.889538343339952e+03 - 2.861321641252218e+03 - 2.833374286700636e+03 - 2.805693756659566e+03 - 2.778277556469224e+03 - 2.751123212016022e+03 - 2.724228269242043e+03 - 2.697590301914011e+03 - 2.671206904109025e+03 - 2.645075688971241e+03 - 2.619194294405700e+03 - 2.593560380141823e+03 - 2.568171626715687e+03 - 2.543025737542386e+03 - 2.518120435211838e+03 - 2.493453462030127e+03 - 2.469022585172818e+03 - 2.444825590018873e+03 - 2.420860280374604e+03 - 2.397124484732366e+03 - 2.373616049394018e+03 - 2.350332838436762e+03 - 2.327272738609171e+03 - 2.304433655218562e+03 - 2.281813512846715e+03 - 2.259410255601743e+03 - 2.237221844685107e+03 - 2.215246260811306e+03 - 2.193481506123082e+03 - 2.171925598942706e+03 - 2.150576574458654e+03 - 2.129432488764117e+03 - 2.108491414442484e+03 - 2.087751441300839e+03 - 2.067210678851041e+03 - 2.046867252353801e+03 - 2.026719303565292e+03 - 2.006764993817073e+03 - 1.987002500493615e+03 - 1.967430017215378e+03 - 1.948045754608514e+03 - 1.928847939062915e+03 - 1.909834815497017e+03 - 1.891004644375446e+03 - 1.872355700452609e+03 - 1.853886275802303e+03 - 1.835594678424827e+03 - 1.817479231062563e+03 - 1.799538272810955e+03 - 1.781770158220284e+03 - 1.764173256646331e+03 - 1.746745953278825e+03 - 1.729486647489427e+03 - 1.712393752933919e+03 - 1.695465699568615e+03 - 1.678700930817119e+03 - 1.662097903850073e+03 - 1.645655091966725e+03 - 1.629370981458450e+03 - 1.613244072202941e+03 - 1.597272880432907e+03 - 1.581455933682248e+03 - 1.565791771294578e+03 - 1.550278951289465e+03 - 1.534916043199639e+03 - 1.519701626827566e+03 - 1.504634298568118e+03 - 1.489712666891078e+03 - 1.474935351996483e+03 - 1.460300988758884e+03 - 1.445808223853118e+03 - 1.431455716350942e+03 - 1.417242138357507e+03 - 1.403166173386480e+03 - 1.389226518010158e+03 - 1.375421881007569e+03 - 1.361750982089843e+03 - 1.348212553926219e+03 - 1.334805341072190e+03 - 1.321528098720046e+03 - 1.308379594477261e+03 - 1.295358607457036e+03 - 1.282463927300085e+03 - 1.269694355823267e+03 - 1.257048705895313e+03 - 1.244525800699936e+03 - 1.232124475203576e+03 - 1.219843575042076e+03 - 1.207681956049559e+03 - 1.195638485404256e+03 - 1.183712040621380e+03 - 1.171901509388141e+03 - 1.160205790292893e+03 - 1.148623791762007e+03 - 1.137154432301071e+03 - 1.125796641257775e+03 - 1.114549357263016e+03 - 1.103411528660030e+03 - 1.092382114454342e+03 - 1.081460082700689e+03 - 1.070644411095300e+03 - 1.059934087579793e+03 - 1.049328108720195e+03 - 1.038825480494848e+03 - 1.028425218971371e+03 - 1.018126348582361e+03 - 1.007927902927668e+03 - 9.978289254104482e+02 - 9.878284675679866e+02 - 9.779255898738762e+02 - 9.681193621623704e+02 - 9.584088623012988e+02 - 9.487931771658360e+02 - 9.392714022763922e+02 - 9.298426409505287e+02 - 9.205060057185552e+02 - 9.112606172437117e+02 - 9.021056036681564e+02 - 8.930401022331439e+02 - 8.840632580637879e+02 - 8.751742235821227e+02 - 8.663721600224155e+02 - 8.576562363107178e+02 - 8.490256285516970e+02 - 8.404795212594149e+02 - 8.320171064683727e+02 - 8.236375833541338e+02 - 8.153401590664150e+02 - 8.071240480244585e+02 - 7.989884718119321e+02 - 7.909326598382663e+02 - 7.829558483527250e+02 - 7.750572805483002e+02 - 7.672362073200991e+02 - 7.594918862313154e+02 - 7.518235817392584e+02 - 7.442305655888715e+02 - 7.367121158939042e+02 - 7.292675176279554e+02 - 7.218960630476328e+02 - 7.145970504767349e+02 - 7.073697847820883e+02 - 7.002135778527235e+02 - 6.931277475695276e+02 - 6.861116184218383e+02 - 6.791645215373005e+02 - 6.722857937677298e+02 - 6.654747784472139e+02 - 6.587308253877042e+02 - 6.520532900189463e+02 - 6.454415341582659e+02 - 6.388949257382737e+02 - 6.324128381494658e+02 - 6.259946511571761e+02 - 6.196397502963263e+02 - 6.133475264197438e+02 - 6.071173768094372e+02 - 6.009487042352257e+02 - 5.948409165626937e+02 - 5.887934278801442e+02 - 5.828056577149104e+02 - 5.768770306335107e+02 - 5.710069770500405e+02 - 5.651949326339243e+02 - 5.594403381224611e+02 - 5.537426401234757e+02 - 5.481012901152631e+02 - 5.425157443662293e+02 - 5.369854648776029e+02 - 5.315099185870243e+02 - 5.260885773011631e+02 - 5.207209179649268e+02 - 5.154064223119497e+02 - 5.101445770921985e+02 - 5.049348740937783e+02 - 4.997768095346806e+02 - 4.946698844046663e+02 - 4.896136047862775e+02 - 4.846074811232588e+02 - 4.796510285618583e+02 - 4.747437670096575e+02 - 4.698852205388910e+02 - 4.650749179071526e+02 - 4.603123926691712e+02 - 4.555971823563725e+02 - 4.509288288727789e+02 - 4.463068788207030e+02 - 4.417308827523721e+02 - 4.372003955530256e+02 - 4.327149765501697e+02 - 4.282741889383891e+02 - 4.238776002586995e+02 - 4.195247821802792e+02 - 4.152153101301976e+02 - 4.109487639564401e+02 - 4.067247273397822e+02 - 4.025427875685178e+02 - 3.984025363858318e+02 - 3.943035692477232e+02 - 3.902454851077117e+02 - 3.862278871965347e+02 - 3.822503823673904e+02 - 3.783125809462488e+02 - 3.744140974100913e+02 - 3.705545496319825e+02 - 3.667335588488600e+02 - 3.629507504654170e+02 - 3.592057531920941e+02 - 3.554981990087823e+02 - 3.518277237997781e+02 - 3.481939667588409e+02 - 3.445965704231110e+02 - 3.410351808614133e+02 - 3.375094474036331e+02 - 3.340190228447264e+02 - 3.305635632260179e+02 - 3.271427276872922e+02 - 3.237561788604219e+02 - 3.204035826343936e+02 - 3.170846077594078e+02 - 3.137989262426811e+02 - 3.105462135925898e+02 - 3.073261480789523e+02 - 3.041384108878384e+02 - 3.009826866110996e+02 - 2.978586626197819e+02 - 2.947660292278245e+02 - 2.917044799774912e+02 - 2.886737110898206e+02 - 2.856734216347172e+02 - 2.827033138205502e+02 - 2.797630925185924e+02 - 2.768524653868921e+02 - 2.739711430162750e+02 - 2.711188386172004e+02 - 2.682952682417776e+02 - 2.655001507075566e+02 - 2.627332073441469e+02 - 2.599941621974095e+02 - 2.572827420191948e+02 - 2.545986760992428e+02 - 2.519416963867954e+02 - 2.493115374004747e+02 - 2.467079361520411e+02 - 2.441306322519956e+02 - 2.415793676749632e+02 - 2.390538868162835e+02 - 2.365539368283623e+02 - 2.340792670618049e+02 - 2.316296291092408e+02 - 2.292047772816256e+02 - 2.268044680583002e+02 - 2.244284601550858e+02 - 2.220765149177526e+02 - 2.197483957886078e+02 - 2.174438683808943e+02 - 2.151627007150871e+02 - 2.129046628991759e+02 - 2.106695273325222e+02 - 2.084570687245048e+02 - 2.062670637405841e+02 - 2.040992912166423e+02 - 2.019535322675416e+02 - 1.998295699356443e+02 - 1.977271893831886e+02 - 1.956461779038128e+02 - 1.935863247355415e+02 - 1.915474213798307e+02 - 1.895292611678483e+02 - 1.875316391958052e+02 - 1.855543528482985e+02 - 1.835972014670904e+02 - 1.816599861324650e+02 - 1.797425099308505e+02 - 1.778445779263947e+02 - 1.759659969484732e+02 - 1.741065756739388e+02 - 1.722661246609050e+02 - 1.704444562587039e+02 - 1.686413847511611e+02 - 1.668567261386198e+02 - 1.650902980928235e+02 - 1.633419201885993e+02 - 1.616114136777071e+02 - 1.598986014805750e+02 - 1.582033083619683e+02 - 1.565253606828442e+02 - 1.548645864376032e+02 - 1.532208154238845e+02 - 1.515938789750561e+02 - 1.499836100268175e+02 - 1.483898432531407e+02 - 1.468124148175615e+02 - 1.452511624739094e+02 - 1.437059256375598e+02 - 1.421765451600804e+02 - 1.406628634671130e+02 - 1.391647245894945e+02 - 1.376819739463268e+02 - 1.362144585029153e+02 - 1.347620267668397e+02 - 1.333245285902542e+02 - 1.319018153476916e+02 - 1.304937399101563e+02 - 1.291001564496927e+02 - 1.277209206089626e+02 - 1.263558894821456e+02 - 1.250049214462411e+02 - 1.236678763269726e+02 - 1.223446153162142e+02 - 1.210350008534558e+02 - 1.197388968258891e+02 - 1.184561684202564e+02 - 1.171866820332312e+02 - 1.159303054814129e+02 - 1.146869078350233e+02 - 1.134563593521917e+02 - 1.122385316718855e+02 - 1.110332976232454e+02 - 1.098405311979204e+02 - 1.086601077608261e+02 - 1.074919038117468e+02 - 1.063357969778381e+02 - 1.051916662270612e+02 - 1.040593916259906e+02 - 1.029388543466298e+02 - 1.018299368341955e+02 - 1.007325226151947e+02 - 9.964649633160360e+01 - 9.857174381861689e+01 - 9.750815195741964e+01 - 9.645560874783912e+01 - 9.541400332430685e+01 - 9.438322582683587e+01 - 9.336316750654088e+01 - 9.235372071959520e+01 - 9.135477878367931e+01 - 9.036623609174318e+01 - 8.938798812110527e+01 - 8.841993128541375e+01 - 8.746196304638978e+01 - 8.651398190997742e+01 - 8.557588728936869e+01 - 8.464757961904559e+01 - 8.372896034435935e+01 - 8.281993180539014e+01 - 8.192039735296085e+01 - 8.103026128111058e+01 - 8.014942874495698e+01 - 7.927780590401203e+01 - 7.841529983858037e+01 - 7.756181847617736e+01 - 7.671727071446733e+01 - 7.588156631674119e+01 - 7.505461587372024e+01 - 7.423633095310755e+01 - 7.342662394299153e+01 - 7.262540803009301e+01 - 7.183259736215271e+01 - 7.104810687905130e+01 - 7.027185230277652e+01 - 6.950375028269488e+01 - 6.874371822566854e+01 - 6.799167430460268e+01 - 6.724753760248480e+01 - 6.651122793902957e+01 - 6.578266588744034e+01 - 6.506177289160765e+01 - 6.434847109859102e+01 - 6.364268339115934e+01 - 6.294433351272004e+01 - 6.225334589309644e+01 - 6.156964567793161e+01 - 6.089315882540817e+01 - 6.022381196253272e+01 - 5.956153243192431e+01 - 5.890624835784802e+01 - 5.825788851805937e+01 - 5.761638239540161e+01 - 5.698166019812880e+01 - 5.635365277455941e+01 - 5.573229169643452e+01 - 5.511750921575248e+01 - 5.450923819422894e+01 - 5.390741220139490e+01 - 5.331196548214332e+01 - 5.272283288224639e+01 - 5.213994992103501e+01 - 5.156325275682114e+01 - 5.099267813956413e+01 - 5.042816349744366e+01 - 4.986964685712531e+01 - 4.931706681520628e+01 - 4.877036264381848e+01 - 4.822947419115650e+01 - 4.769434186145065e+01 - 4.716490671386568e+01 - 4.664111036072763e+01 - 4.612289496053356e+01 - 4.561020331071316e+01 - 4.510297873475514e+01 - 4.460116508782800e+01 - 4.410470685618211e+01 - 4.361354903662819e+01 - 4.312763714409483e+01 - 4.264691728541290e+01 - 4.217133607138089e+01 - 4.170084064118655e+01 - 4.123537869187841e+01 - 4.077489840121474e+01 - 4.031934846724150e+01 - 3.986867813088396e+01 - 3.942283710103097e+01 - 3.898177559914080e+01 - 3.854544435810492e+01 - 3.811379455962712e+01 - 3.768677789368684e+01 - 3.726434656726136e+01 - 3.684645322013298e+01 - 3.643305096011807e+01 - 3.602409338288954e+01 - 3.561953452360934e+01 - 3.521932891649128e+01 - 3.482343153306697e+01 - 3.443179775085747e+01 - 3.404438343901749e+01 - 3.366114490993698e+01 - 3.328203887889210e+01 - 3.290702252020257e+01 - 3.253605343510379e+01 - 3.216908962260722e+01 - 3.180608952699355e+01 - 3.144701200592500e+01 - 3.109181631097627e+01 - 3.074046212448961e+01 - 3.039290952642646e+01 - 3.004911898312090e+01 - 2.970905136572861e+01 - 2.937266792505025e+01 - 2.903993030352619e+01 - 2.871080057194543e+01 - 2.838524113862799e+01 - 2.806321475945346e+01 - 2.774468462701056e+01 - 2.742961427426368e+01 - 2.711796757973106e+01 - 2.680970882898042e+01 - 2.650480264209962e+01 - 2.620321398820359e+01 - 2.590490820737408e+01 - 2.560985096325826e+01 - 2.531800827674159e+01 - 2.502934653543958e+01 - 2.474383242809609e+01 - 2.446143296972707e+01 - 2.418211555345684e+01 - 2.390584787621480e+01 - 2.363259794654911e+01 - 2.336233413255323e+01 - 2.309502509558490e+01 - 2.283063979379989e+01 - 2.256914753657127e+01 - 2.231051792982671e+01 - 2.205472087402378e+01 - 2.180172658443576e+01 - 2.155150556919213e+01 - 2.130402866286656e+01 - 2.105926696778129e+01 - 2.081719185319289e+01 - 2.057777503962135e+01 - 2.034098850331043e+01 - 2.010680447006149e+01 - 1.987519550063876e+01 - 1.964613442528577e+01 - 1.941959432580914e+01 - 1.919554855827313e+01 - 1.897397075515799e+01 - 1.875483482712853e+01 - 1.853811494931854e+01 - 1.832378554313712e+01 - 1.811182128985819e+01 - 1.790219714756028e+01 - 1.769488831219516e+01 - 1.748987022919803e+01 - 1.728711861052799e+01 - 1.708660939866258e+01 - 1.688831878332332e+01 - 1.669222321036695e+01 - 1.649829934690638e+01 - 1.630652410217020e+01 - 1.611687463464447e+01 - 1.592932831698975e+01 - 1.574386275792588e+01 - 1.556045580679505e+01 - 1.537908552081595e+01 - 1.519973018767385e+01 - 1.502236832516821e+01 - 1.484697865494502e+01 - 1.467354012841447e+01 - 1.450203191274907e+01 - 1.433243337158686e+01 - 1.416472409674524e+01 - 1.399888388846149e+01 - 1.383489273805109e+01 - 1.367273085728561e+01 - 1.351237865788487e+01 - 1.335381673920349e+01 - 1.319702591751814e+01 - 1.304198719993403e+01 - 1.288868177614133e+01 - 1.273709104714046e+01 - 1.258719659672914e+01 - 1.243898018736778e+01 - 1.229242378719869e+01 - 1.214750954184370e+01 - 1.200421977308728e+01 - 1.186253699764556e+01 - 1.172244390266849e+01 - 1.158392335040491e+01 - 1.144695839482221e+01 - 1.131153225250660e+01 - 1.117762830926809e+01 - 1.104523013501555e+01 - 1.091432145806843e+01 - 1.078488617566414e+01 - 1.065690836231677e+01 - 1.053037224372639e+01 - 1.040526220941685e+01 - 1.028156282144551e+01 - 1.015925878941852e+01 - 1.003833498402321e+01 - 9.918776439618298e+00 - 9.800568334039683e+00 - 9.683696005431957e+00 - 9.568144946174611e+00 - 9.453900787919052e+00 - 9.340949322860192e+00 - 9.229276489267212e+00 - 9.118868359446189e+00 - 9.009711163642070e+00 - 8.901791273796370e+00 - 8.795095191785947e+00 - 8.689609570648638e+00 - 8.585321201853549e+00 - 8.482217005296002e+00 - 8.380284046581689e+00 - 8.279509523576925e+00 - 8.179880760330461e+00 - 8.081385224417300e+00 - 7.984010508389771e+00 - 7.887744326863491e+00 - 7.792574535206823e+00 - 7.698489109519010e+00 - 7.605476146133772e+00 - 7.513523878187234e+00 - 7.422620653280592e+00 - 7.332754935473541e+00 - 7.243915322674125e+00 - 7.156090524556396e+00 - 7.069269365741123e+00 - 6.983440797017198e+00 - 6.898593877074525e+00 - 6.814717779007339e+00 - 6.731801797516630e+00 - 6.649835331100769e+00 - 6.568807890289103e+00 - 6.488709103685009e+00 - 6.409528699865692e+00 - 6.331256515961359e+00 - 6.253882503643640e+00 - 6.177396712290002e+00 - 6.101789297547966e+00 - 6.027050522250886e+00 - 5.953170745278158e+00 - 5.880140434362498e+00 - 5.807950156612827e+00 - 5.736590570385212e+00 - 5.666052441485230e+00 - 5.596326632559173e+00 - 5.527404095182261e+00 - 5.459275884510260e+00 - 5.391933149962507e+00 - 5.325367127621260e+00 - 5.259569151260657e+00 - 5.194530647433734e+00 - 5.130243129823101e+00 - 5.066698206416531e+00 - 5.003887570881058e+00 - 4.941803001453549e+00 - 4.880436373900456e+00 - 4.819779643419130e+00 - 4.759824844738533e+00 - 4.700564110200850e+00 - 4.641989649988083e+00 - 4.584093751736625e+00 - 4.526868793565781e+00 - 4.470307230074105e+00 - 4.414401594729965e+00 - 4.359144507919768e+00 - 4.304528662004969e+00 - 4.250546825086277e+00 - 4.197191851627622e+00 - 4.144456666159979e+00 - 4.092334266478478e+00 - 4.040817732600400e+00 - 3.989900213340690e+00 - 3.939574930757155e+00 - 3.889835183170760e+00 - 3.840674335613269e+00 - 3.792085827136757e+00 - 3.744063169627271e+00 - 3.696599938809659e+00 - 3.649689781941428e+00 - 3.603326418080199e+00 - 3.557503628382808e+00 - 3.512215261374414e+00 - 3.467455236465362e+00 - 3.423217534816642e+00 - 3.379496201686086e+00 - 3.336285348654454e+00 - 3.293579148649655e+00 - 3.251371841226642e+00 - 3.209657725464606e+00 - 3.168431157939940e+00 - 3.127686563504146e+00 - 3.087418425005168e+00 - 3.047621281181530e+00 - 3.008289735457784e+00 - 2.969418446796439e+00 - 2.931002129285814e+00 - 2.893035560502260e+00 - 2.855513571053400e+00 - 2.818431044951714e+00 - 2.781782927380857e+00 - 2.745564215550934e+00 - 2.709769959926351e+00 - 2.674395268211684e+00 - 2.639435297946605e+00 - 2.604885259637663e+00 - 2.570740420206636e+00 - 2.536996093812299e+00 - 2.503647644969884e+00 - 2.470690493614489e+00 - 2.438120105903952e+00 - 2.405931997235836e+00 - 2.374121735683807e+00 - 2.342684934097179e+00 - 2.311617253784086e+00 - 2.280914406216957e+00 - 2.250572146781167e+00 - 2.220586279273893e+00 - 2.190952653478714e+00 - 2.161667162009881e+00 - 2.132725747880213e+00 - 2.104124396422602e+00 - 2.075859132902099e+00 - 2.047926031580743e+00 - 2.020321209266692e+00 - 1.993040822266800e+00 - 1.966081073072867e+00 - 1.939438205166541e+00 - 1.913108500802827e+00 - 1.887088286918805e+00 - 1.861373929947225e+00 - 1.835961834345823e+00 - 1.810848447621857e+00 - 1.786030255213551e+00 - 1.761503779943143e+00 - 1.737265586321442e+00 - 1.713312275115213e+00 - 1.689640483715834e+00 - 1.666246890168493e+00 - 1.643128207113473e+00 - 1.620281182788458e+00 - 1.597702604935450e+00 - 1.575389294699183e+00 - 1.553338108095691e+00 - 1.531545938928566e+00 - 1.510009713407906e+00 - 1.488726392261371e+00 - 1.467692971937850e+00 - 1.446906480207705e+00 - 1.426363979153670e+00 - 1.406062564959602e+00 - 1.385999363940103e+00 - 1.366171536058216e+00 - 1.346576274130787e+00 - 1.327210800124654e+00 - 1.308072368828510e+00 - 1.289158266486426e+00 - 1.270465807665891e+00 - 1.251992339187792e+00 - 1.233735237889272e+00 - 1.215691907984316e+00 - 1.197859785096899e+00 - 1.180236333919823e+00 - 1.162819045897185e+00 - 1.145605442741095e+00 - 1.128593073973588e+00 - 1.111779515284567e+00 - 1.095162371880828e+00 - 1.078739275475473e+00 - 1.062507883334588e+00 - 1.046465881646835e+00 - 1.030610981874106e+00 - 1.014940920295882e+00 - 9.994534611152829e-01 - 9.841463930086627e-01 - 9.690175291593270e-01 - 9.540647093618980e-01 - 9.392857969051628e-01 - 9.246786792729085e-01 - 9.102412696338000e-01 - 8.959715035501604e-01 - 8.818673402027871e-01 - 8.679267639726700e-01 - 8.541477806828601e-01 - 8.405284189410931e-01 - 8.270667316623297e-01 - 8.137607925445277e-01 - 8.006086976874616e-01 - 7.876085666023992e-01 - 7.747585387876328e-01 - 7.620567754307064e-01 - 7.495014602973783e-01 - 7.370907966216457e-01 - 7.248230088485250e-01 - 7.126963429559050e-01 - 7.007090638413013e-01 - 6.888594572109231e-01 - 6.771458292779966e-01 - 6.655665045807759e-01 - 6.541198279036498e-01 - 6.428041637825399e-01 - 6.316178947210964e-01 - 6.205594229105623e-01 - 6.096271692194244e-01 - 5.988195719936049e-01 - 5.881350889221284e-01 - 5.775721954595900e-01 - 5.671293841176136e-01 - 5.568051664208875e-01 - 5.465980707194322e-01 - 5.365066418737608e-01 - 5.265294432641988e-01 - 5.166650544231339e-01 - 5.069120710261563e-01 - 4.972691065208522e-01 - 4.877347899800689e-01 - 4.783077664492044e-01 - 4.689866979017357e-01 - 4.597702612073233e-01 - 4.506571489021905e-01 - 4.416460700276524e-01 - 4.327357479310139e-01 - 4.239249212044141e-01 - 4.152123442913231e-01 - 4.065967853823845e-01 - 3.980770275573000e-01 - 3.896518691214699e-01 - 3.813201217302061e-01 - 3.730806117264635e-01 - 3.649321798861945e-01 - 3.568736798624809e-01 - 3.489039797704173e-01 - 3.410219613244947e-01 - 3.332265187013593e-01 - 3.255165605086018e-01 - 3.178910083898543e-01 - 3.103487958586359e-01 - 3.028888701360887e-01 - 2.955101913786422e-01 - 2.882117315106021e-01 - 2.809924755137371e-01 - 2.738514204626846e-01 - 2.667875748867065e-01 - 2.597999604522775e-01 - 2.528876103054370e-01 - 2.460495685714950e-01 - 2.392848919788540e-01 - 2.325926484518769e-01 - 2.259719167857841e-01 - 2.194217877354759e-01 - 2.129413627175208e-01 - 2.065297538274627e-01 - 2.001860848470379e-01 - 1.939094897086202e-01 - 1.876991127051828e-01 - 1.815541094417414e-01 - 1.754736452756007e-01 - 1.694568956974621e-01 - 1.635030470498157e-01 - 1.576112950508609e-01 - 1.517808453564031e-01 - 1.460109140364644e-01 - 1.403007261766342e-01 - 1.346495165784953e-01 - 1.290565300180611e-01 - 1.235210199704221e-01 - 1.180422494287421e-01 - 1.126194909047226e-01 - 1.072520253105725e-01 - 1.019391428882170e-01 - 9.668014295417104e-02 - 9.147433293860986e-02 - 8.632102939670111e-02 - 8.121955756354367e-02 - 7.616925052308399e-02 - 7.116945022739722e-02 - 6.621950693894064e-02 - 6.131877854698166e-02 - 5.646663155698649e-02 - 5.166244039926220e-02 - 4.690558691983024e-02 - 4.219546135291571e-02 - 3.753146148005052e-02 - 3.291299228995687e-02 - 2.833946692296159e-02 - 2.381030573044091e-02 - 1.932493608562982e-02 - 1.488279323951757e-02 - 1.048331933378767e-02 - 6.125963364112487e-03 - 1.810181928441051e-03 - -2.464561780353438e-03 - -6.698797872311066e-03 - -1.089304914227914e-02 - -1.504783206514415e-02 - -1.916365656771068e-02 - -2.324102555134537e-02 - -2.728043585421590e-02 - -3.128237791440187e-02 - -3.524733543518016e-02 - -3.917578628623598e-02 - -4.306820207473552e-02 - -4.692504798332473e-02 - -5.074678357205704e-02 - -5.453386225593208e-02 - -5.828673132987599e-02 - -6.200583267980977e-02 - -6.569160218738558e-02 - -6.934446987831328e-02 - -7.296486055963237e-02 - -7.655319319650564e-02 - -8.010988114185758e-02 - -8.363533270338043e-02 - -8.712995053780122e-02 - -9.059413193193132e-02 - -9.402826926020177e-02 - -9.743274938790861e-02 - -1.008079541064505e-01 - -1.041542604608216e-01 - -1.074720401131623e-01 - -1.107616598682374e-01 - -1.140234819193764e-01 - -1.172578632830942e-01 - -1.204651563472630e-01 - -1.236457089966172e-01 - -1.267998640735528e-01 - -1.299279600346222e-01 - -1.330303309819349e-01 - -1.361073061299021e-01 - -1.391592104828469e-01 - -1.421863647988072e-01 - -1.451890851855495e-01 - -1.481676836992942e-01 - -1.511224682100277e-01 - -1.540537421399553e-01 - -1.569618050599837e-01 - -1.598469524764272e-01 - -1.627094755828420e-01 - -1.655496618778017e-01 - -1.683677949236447e-01 - -1.711641541517163e-01 - -1.739390154343296e-01 - -1.766926508045859e-01 - -1.794253283544359e-01 - -1.821373127460387e-01 - -1.848288648981078e-01 - -1.875002419786971e-01 - -1.901516978443653e-01 - -1.927834826976386e-01 - -1.953958431846420e-01 - -1.979890227559544e-01 - -2.005632612952037e-01 - -2.031187952951354e-01 - -2.056558581586019e-01 - -2.081746798356756e-01 - -2.106754870586183e-01 - -2.131585035595214e-01 - -2.156239496932611e-01 - -2.180720427808593e-01 - -2.205029972492180e-01 - -2.229170242226580e-01 - -2.253143319488933e-01 - -2.276951258807381e-01 - -2.300596082676421e-01 - -2.324079786235529e-01 - -2.347404337552020e-01 - -2.370571673694448e-01 - -2.393583705568364e-01 - -2.416442317867498e-01 - -2.439149365965413e-01 - -2.461706679522762e-01 - -2.484116061949506e-01 - -2.506379289887288e-01 - -2.528498115997045e-01 - -2.550474267213886e-01 - -2.572309443123204e-01 - -2.594005320626763e-01 - -2.615563552809436e-01 - -2.636985766193694e-01 - -2.658273564814242e-01 - -2.679428529152917e-01 - -2.700452216727706e-01 - -2.721346163277996e-01 - -2.742111879420810e-01 - -2.762750854486131e-01 - -2.783264557785196e-01 - -2.803654434689624e-01 - -2.823921908087395e-01 - -2.844068381756654e-01 - -2.864095239109061e-01 - -2.884003839950212e-01 - -2.903795524955394e-01 - -2.923471617904532e-01 - -2.943033420191942e-01 - -2.962482212763220e-01 - -2.981819256807660e-01 - -3.001045795717013e-01 - -3.020163055275332e-01 - -3.039172239885258e-01 - -3.058074538261057e-01 - -3.076871122705734e-01 - -3.095563141516905e-01 - -3.114151727559051e-01 - -3.132637999546681e-01 - -3.151023057635463e-01 - -3.169307984585886e-01 - -3.187493845723606e-01 - -3.205581689117248e-01 - -3.223572548745565e-01 - -3.241467443749414e-01 - -3.259267374142799e-01 - -3.276973325691862e-01 - -3.294586270053045e-01 - -3.312107160890871e-01 - -3.329536937962613e-01 - -3.346876527428858e-01 - -3.364126840777460e-01 - -3.381288775295205e-01 - -3.398363212268976e-01 - -3.415351019703767e-01 - -3.432253052941175e-01 - -3.449070152459444e-01 - -3.465803145779997e-01 - -3.482452848007116e-01 - -3.499020059501182e-01 - -3.515505568826250e-01 - -3.531910152859590e-01 - -3.548234573752725e-01 - -3.564479582224311e-01 - -3.580645917875246e-01 - -3.596734306319520e-01 - -3.612745463110025e-01 - -3.628680093075062e-01 - -3.644538885605036e-01 - -3.660322520458910e-01 - -3.676031668332329e-01 - -3.691666987516095e-01 - -3.707229124779602e-01 - -3.722718716670178e-01 - -3.738136390608672e-01 - -3.753482761467254e-01 - -3.768758432749062e-01 - -3.783964002465877e-01 - -3.799100056353694e-01 - -3.814167166997948e-01 - -3.829165900177774e-01 - -3.844096813827866e-01 - -3.858960456354959e-01 - -3.873757364088854e-01 - -3.888488064600710e-01 - -3.903153077375676e-01 - -3.917752913452379e-01 - -3.932288075353338e-01 - -3.946759055987133e-01 - -3.961166339473677e-01 - -3.975510402779339e-01 - -3.989791715122148e-01 - -4.004010735521537e-01 - -4.018167915706618e-01 - -4.032263700983349e-01 - -4.046298528561717e-01 - -4.060272827301947e-01 - -4.074187016384220e-01 - -4.088041511045764e-01 - -4.101836719923956e-01 - -4.115573039941210e-01 - -4.129250863351419e-01 - -4.142870577221169e-01 - -4.156432559911067e-01 - -4.169937183587125e-01 - -4.183384813924751e-01 - -4.196775807600287e-01 - -4.210110517890521e-01 - -4.223389293056927e-01 - -4.236612469859990e-01 - -4.249780381358575e-01 - -4.262893357128523e-01 - -4.275951718561576e-01 - -4.288955781548201e-01 - -4.301905856512787e-01 - -4.314802245948859e-01 - -4.327645248125306e-01 - -4.340435157401011e-01 - -4.353172261319986e-01 - -4.365856843065750e-01 - -4.378489181140523e-01 - -4.391069545111200e-01 - -4.403598201489721e-01 - -4.416075414900063e-01 - -4.428501441617211e-01 - -4.440876533447125e-01 - -4.453200938994337e-01 - -4.465474900663732e-01 - -4.477698656375739e-01 - -4.489872440132049e-01 - -4.501996482091757e-01 - -4.514071007293397e-01 - -4.526096234423685e-01 - -4.538072381973440e-01 - -4.549999664346564e-01 - -4.561878287239103e-01 - -4.573708454564815e-01 - -4.585490367840940e-01 - -4.597224223838171e-01 - -4.608910215483196e-01 - -4.620548532229073e-01 - -4.632139359470852e-01 - -4.643682878385313e-01 - -4.655179266829866e-01 - -4.666628700026897e-01 - -4.678031349656974e-01 - -4.689387384105899e-01 - -4.700696968538801e-01 - -4.711960263436956e-01 - -4.723177425902391e-01 - -4.734348612979066e-01 - -4.745473978039702e-01 - -4.756553669920032e-01 - -4.767587833133353e-01 - -4.778576611599107e-01 - -4.789520147944609e-01 - -4.800418577229591e-01 - -4.811272034289876e-01 - -4.822080654661853e-01 - -4.832844566828151e-01 - -4.843563896207272e-01 - -4.854238767122197e-01 - -4.864869303811440e-01 - -4.875455627166793e-01 - -4.885997853037442e-01 - -4.896496095260600e-01 - -4.906950466868944e-01 - -4.917361080077966e-01 - -4.927728043326091e-01 - -4.938051461993963e-01 - -4.948331438840640e-01 - -4.958568075736277e-01 - -4.968761473512240e-01 - -4.978911731225704e-01 - -4.989018945002663e-01 - -4.999083208482176e-01 - -5.009104613021941e-01 - -5.019083248972503e-01 - -5.029019205602130e-01 - -5.038912570358333e-01 - -5.048763428126108e-01 - -5.058571862004539e-01 - -5.068337954285524e-01 - -5.078061785541023e-01 - -5.087743434557772e-01 - -5.097382978215317e-01 - -5.106980492175714e-01 - -5.116536051046018e-01 - -5.126049728172039e-01 - -5.135521595357905e-01 - -5.144951722594635e-01 - -5.154340177423219e-01 - -5.163687027408718e-01 - -5.172992340140365e-01 - -5.182256180631845e-01 - -5.191478612397169e-01 - -5.200659697981208e-01 - -5.209799499565910e-01 - -5.218898077706294e-01 - -5.227955490891694e-01 - -5.236971796844924e-01 - -5.245947053253370e-01 - -5.254881317688337e-01 - -5.263774645512288e-01 - -5.272627090126604e-01 - -5.281438703531137e-01 - -5.290209539977515e-01 - -5.298939652703512e-01 - -5.307629091340913e-01 - -5.316277904778723e-01 - -5.324886142110474e-01 - -5.333453852986519e-01 - -5.341981085648844e-01 - -5.350467886587517e-01 - -5.358914300418783e-01 - -5.367320373706596e-01 - -5.375686152841432e-01 - -5.384011680734792e-01 - -5.392297001047128e-01 - -5.400542157871245e-01 - -5.408747194069761e-01 - -5.416912150785628e-01 - -5.425037068232484e-01 - -5.433121987186342e-01 - -5.441166948984431e-01 - -5.449171994793097e-01 - -5.457137163885653e-01 - -5.465062494211190e-01 - -5.472948023341125e-01 - -5.480793790518950e-01 - -5.488599834110802e-01 - -5.496366191273470e-01 - -5.504092899443518e-01 - -5.511779994928784e-01 - -5.519427513029639e-01 - -5.527035490710489e-01 - -5.534603964642170e-01 - -5.542132970155166e-01 - -5.549622540841348e-01 - -5.557072711574547e-01 - -5.564483519201564e-01 - -5.571854997347668e-01 - -5.579187179919134e-01 - -5.586480102698358e-01 - -5.593733798207278e-01 - -5.600948299343745e-01 - -5.608123641702291e-01 - -5.615259858006734e-01 - -5.622356980349319e-01 - -5.629415042452564e-01 - -5.636434078437447e-01 - -5.643414121719204e-01 - -5.650355204128609e-01 - -5.657257359067179e-01 - -5.664120620074502e-01 - -5.670945018655422e-01 - -5.677730587569899e-01 - -5.684477360210265e-01 - -5.691185368946378e-01 - -5.697854646230838e-01 - -5.704485224954847e-01 - -5.711077138615709e-01 - -5.717630418949810e-01 - -5.724145097236072e-01 - -5.730621208149326e-01 - -5.737058785857441e-01 - -5.743457862811681e-01 - -5.749818469287452e-01 - -5.756140639044424e-01 - -5.762424408221788e-01 - -5.768669806578469e-01 - -5.774876866716016e-01 - -5.781045625480883e-01 - -5.787176116189466e-01 - -5.793268371095267e-01 - -5.799322422747063e-01 - -5.805338304985933e-01 - -5.811316053198213e-01 - -5.817255703521417e-01 - -5.823157287697720e-01 - -5.829020838792335e-01 - -5.834846393919914e-01 - -5.840633987477251e-01 - -5.846383653791880e-01 - -5.852095428966003e-01 - -5.857769347455314e-01 - -5.863405444497650e-01 - -5.869003757905312e-01 - -5.874564321893059e-01 - -5.880087171065591e-01 - -5.885572344676900e-01 - -5.891019879107314e-01 - -5.896429809482692e-01 - -5.901802172691951e-01 - -5.907137006344829e-01 - -5.912434348345698e-01 - -5.917694236578408e-01 - -5.922916709366750e-01 - -5.928101804947136e-01 - -5.933249560457028e-01 - -5.938360014505492e-01 - -5.943433207019595e-01 - -5.948469177828256e-01 - -5.953467966083078e-01 - -5.958429610716830e-01 - -5.963354151930935e-01 - -5.968241629967538e-01 - -5.973092085065336e-01 - -5.977905558475627e-01 - -5.982682091919279e-01 - -5.987421727060626e-01 - -5.992124504335189e-01 - -5.996790465513929e-01 - -6.001419654039183e-01 - -6.006012111567195e-01 - -6.010567880969444e-01 - -6.015087007096906e-01 - -6.019569532209035e-01 - -6.024015499278780e-01 - -6.028424953542454e-01 - -6.032797938560218e-01 - -6.037134498528102e-01 - -6.041434679778884e-01 - -6.045698527611498e-01 - -6.049926086966888e-01 - -6.054117403213235e-01 - -6.058272522301629e-01 - -6.062391491063152e-01 - -6.066474357377917e-01 - -6.070521167750024e-01 - -6.074531969194140e-01 - -6.078506811508277e-01 - -6.082445741313003e-01 - -6.086348804777613e-01 - -6.090216052590219e-01 - -6.094047534940796e-01 - -6.097843300758768e-01 - -6.101603397998798e-01 - -6.105327877567767e-01 - -6.109016791586246e-01 - -6.112670188349342e-01 - -6.116288118244032e-01 - -6.119870634033990e-01 - -6.123417788015699e-01 - -6.126929631816058e-01 - -6.130406216857481e-01 - -6.133847595846266e-01 - -6.137253821544012e-01 - -6.140624946688724e-01 - -6.143961025253998e-01 - -6.147262111225434e-01 - -6.150528258526081e-01 - -6.153759522847098e-01 - -6.156955958775930e-01 - -6.160117619293205e-01 - -6.163244560848270e-01 - -6.166336840291214e-01 - -6.169394513190288e-01 - -6.172417635406579e-01 - -6.175406263458638e-01 - -6.178360454670117e-01 - -6.181280266570051e-01 - -6.184165756494230e-01 - -6.187016981615432e-01 - -6.189834001775048e-01 - -6.192616876391890e-01 - -6.195365661632112e-01 - -6.198080416901866e-01 - -6.200761202902517e-01 - -6.203408078682074e-01 - -6.206021103982113e-01 - -6.208600339819080e-01 - -6.211145848662764e-01 - -6.213657689929696e-01 - -6.216135922609831e-01 - -6.218580610691606e-01 - -6.220991816188346e-01 - -6.223369599996067e-01 - -6.225714026287344e-01 - -6.228025157602012e-01 - -6.230303055354752e-01 - -6.232547783843585e-01 - -6.234759406837302e-01 - -6.236937987287140e-01 - -6.239083589372102e-01 - -6.241196278170006e-01 - -6.243276119301496e-01 - -6.245323178052680e-01 - -6.247337518435782e-01 - -6.249319204108740e-01 - -6.251268303788342e-01 - -6.253184884524475e-01 - -6.255069009766967e-01 - -6.256920746682559e-01 - -6.258740163701917e-01 - -6.260527328726909e-01 - -6.262282307801417e-01 - -6.264005167589047e-01 - -6.265695976839164e-01 - -6.267354804070123e-01 - -6.268981717782514e-01 - -6.270576786775590e-01 - -6.272140080071444e-01 - -6.273671666729116e-01 - -6.275171615794166e-01 - -6.276639997579259e-01 - -6.278076882572314e-01 - -6.279482340166599e-01 - -6.280856440870369e-01 - -6.282199255881125e-01 - -6.283510856176625e-01 - -6.284791313265480e-01 - -6.286040698559974e-01 - -6.287259082244099e-01 - -6.288446536460758e-01 - -6.289603134448759e-01 - -6.290728947784819e-01 - -6.291824049507972e-01 - -6.292888513285516e-01 - -6.293922409846477e-01 - -6.294925812787570e-01 - -6.295898797737625e-01 - -6.296841435561055e-01 - -6.297753800606519e-01 - -6.298635970427606e-01 - -6.299488015475858e-01 - -6.300310009429952e-01 - -6.301102030719377e-01 - -6.301864151575183e-01 - -6.302596446383568e-01 - -6.303298993873763e-01 - -6.303971867419816e-01 - -6.304615141097702e-01 - -6.305228892569528e-01 - -6.305813198299395e-01 - -6.306368133767261e-01 - -6.306893774095105e-01 - -6.307390196514921e-01 - -6.307857478830511e-01 - -6.308295697989852e-01 - -6.308704929504492e-01 - -6.309085250312678e-01 - -6.309436740902202e-01 - -6.309759477467396e-01 - -6.310053535533821e-01 - -6.310318994644450e-01 - -6.310555933584764e-01 - -6.310764430051494e-01 - -6.310944561130111e-01 - -6.311096405770181e-01 - -6.311220043955681e-01 - -6.311315554778594e-01 - -6.311383016234806e-01 - -6.311422506666780e-01 - -6.311434107412031e-01 - -6.311417897164122e-01 - -6.311373953205278e-01 - -6.311302357049288e-01 - -6.311203189243589e-01 - -6.311076528624781e-01 - -6.310922454230109e-01 - -6.310741047155799e-01 - -6.310532389686786e-01 - -6.310296560496979e-01 - -6.310033639455465e-01 - -6.309743708604478e-01 - -6.309426848479184e-01 - -6.309083139781310e-01 - -6.308712663782245e-01 - -6.308315500367087e-01 - -6.307891730465176e-01 - -6.307441436976022e-01 - -6.306964701860184e-01 - -6.306461606431758e-01 - -6.305932231701467e-01 - -6.305376659121696e-01 - -6.304794970062023e-01 - -6.304187245700347e-01 - -6.303553569805046e-01 - -6.302894025962669e-01 - -6.302208694979176e-01 - -6.301497657748981e-01 - -6.300760996409697e-01 - -6.299998795100692e-01 - -6.299211136514613e-01 - -6.298398102240708e-01 - -6.297559773915322e-01 - -6.296696236381925e-01 - -6.295807574013027e-01 - -6.294893864698483e-01 - -6.293955192818200e-01 - -6.292991645521353e-01 - -6.292003301703828e-01 - -6.290990243894826e-01 - -6.289952557946986e-01 - -6.288890326523825e-01 - -6.287803632353285e-01 - -6.286692558944412e-01 - -6.285557190083507e-01 - -6.284397608763040e-01 - -6.283213897612988e-01 - -6.282006141317734e-01 - -6.280774423035318e-01 - -6.279518824496017e-01 - -6.278239431715447e-01 - -6.276936329659792e-01 - -6.275609600561086e-01 - -6.274259327786519e-01 - -6.272885594754783e-01 - -6.271488484695774e-01 - -6.270068083043618e-01 - -6.268624473656752e-01 - -6.267157737459064e-01 - -6.265667960682418e-01 - -6.264155229504741e-01 - -6.262619625962428e-01 - -6.261061232036680e-01 - -6.259480131935671e-01 - -6.257876413121770e-01 - -6.256250157840939e-01 - -6.254601447340036e-01 - -6.252930366972961e-01 - -6.251237002207461e-01 - -6.249521437614608e-01 - -6.247783756272571e-01 - -6.246024042025771e-01 - -6.244242378628240e-01 - -6.242438848129136e-01 - -6.240613535991787e-01 - -6.238766528797192e-01 - -6.236897908519111e-01 - -6.235007757894835e-01 - -6.233096161276966e-01 - -6.231163203935827e-01 - -6.229208970207127e-01 - -6.227233543185018e-01 - -6.225237005131427e-01 - -6.223219439896936e-01 - -6.221180932821515e-01 - -6.219121568092019e-01 - -6.217041429518334e-01 - -6.214940600654550e-01 - -6.212819164164759e-01 - -6.210677203231969e-01 - -6.208514802076882e-01 - -6.206332045396580e-01 - -6.204129016762088e-01 - -6.201905798335827e-01 - -6.199662474146647e-01 - -6.197399127976954e-01 - -6.195115842446862e-01 - -6.192812702436963e-01 - -6.190489791767655e-01 - -6.188147191241502e-01 - -6.185784984898128e-01 - -6.183403256742428e-01 - -6.181002088023494e-01 - -6.178581563548247e-01 - -6.176141767575239e-01 - -6.173682779492388e-01 - -6.171204683326561e-01 - -6.168707564823446e-01 - -6.166191506410910e-01 - -6.163656588303806e-01 - -6.161102891648960e-01 - -6.158530502595377e-01 - -6.155939503803246e-01 - -6.153329975648972e-01 - -6.150702000825419e-01 - -6.148055662334609e-01 - -6.145391042808102e-01 - -6.142708224010276e-01 - -6.140007288452335e-01 - -6.137288318637003e-01 - -6.134551394181680e-01 - -6.131796597624336e-01 - -6.129024013716257e-01 - -6.126233721919256e-01 - -6.123425803085120e-01 - -6.120600340492245e-01 - -6.117757414641359e-01 - -6.114897106263320e-01 - -6.112019497520672e-01 - -6.109124671249474e-01 - -6.106212708396386e-01 - -6.103283687668304e-01 - -6.100337690977098e-01 - -6.097374799911853e-01 - -6.094395093910078e-01 - -6.091398653642833e-01 - -6.088385561024087e-01 - -6.085355898356886e-01 - -6.082309742898534e-01 - -6.079247173286892e-01 - -6.076168274335947e-01 - -6.073073125569597e-01 - -6.069961804304546e-01 - -6.066834389911383e-01 - -6.063690964791788e-01 - -6.060531610171422e-01 - -6.057356401425160e-01 - -6.054165419100932e-01 - -6.050958745176729e-01 - -6.047736455801236e-01 - -6.044498630713394e-01 - -6.041245351487873e-01 - -6.037976695799242e-01 - -6.034692741523835e-01 - -6.031393567367498e-01 - -6.028079252312161e-01 - -6.024749874110954e-01 - -6.021405510415967e-01 - -6.018046242357692e-01 - -6.014672148046522e-01 - -6.011283302871711e-01 - -6.007879786053585e-01 - -6.004461675660895e-01 - -6.001029047914931e-01 - -5.997581981158361e-01 - -5.994120553308485e-01 - -5.990644841299763e-01 - -5.987154923482985e-01 - -5.983650876334137e-01 - -5.980132773866208e-01 - -5.976600693793478e-01 - -5.973054714798371e-01 - -5.969494914365839e-01 - -5.965921366499265e-01 - -5.962334146660923e-01 - -5.958733334161985e-01 - -5.955119002909084e-01 - -5.951491227180785e-01 - -5.947850085981863e-01 - -5.944195652847630e-01 - -5.940528001366523e-01 - -5.936847210858313e-01 - -5.933153356463837e-01 - -5.929446511281147e-01 - -5.925726749957585e-01 - -5.921994146776245e-01 - -5.918248776317639e-01 - -5.914490714685531e-01 - -5.910720036664838e-01 - -5.906936815737919e-01 - -5.903141124838686e-01 - -5.899333037986367e-01 - -5.895512629817115e-01 - -5.891679973989596e-01 - -5.887835143677140e-01 - -5.883978211708401e-01 - -5.880109250637769e-01 - -5.876228334774148e-01 - -5.872335538851382e-01 - -5.868430932520374e-01 - -5.864514587624869e-01 - -5.860586578978172e-01 - -5.856646978273519e-01 - -5.852695857497323e-01 - -5.848733289413443e-01 - -5.844759343592291e-01 - -5.840774091773326e-01 - -5.836777608879199e-01 - -5.832769964405170e-01 - -5.828751228494087e-01 - -5.824721474461222e-01 - -5.820680771414760e-01 - -5.816629188869962e-01 - -5.812566799399100e-01 - -5.808493672421570e-01 - -5.804409877894702e-01 - -5.800315488931496e-01 - -5.796210574409676e-01 - -5.792095201878247e-01 - -5.787969440874288e-01 - -5.783833362006023e-01 - -5.779687035684036e-01 - -5.775530530727403e-01 - -5.771363914738108e-01 - -5.767187255974381e-01 - -5.763000625573806e-01 - -5.758804091701334e-01 - -5.754597721176316e-01 - -5.750381583420940e-01 - -5.746155745735496e-01 - -5.741920274506414e-01 - -5.737675239291555e-01 - -5.733420708457294e-01 - -5.729156748671344e-01 - -5.724883426083383e-01 - -5.720600807791615e-01 - -5.716308961653045e-01 - -5.712007954599810e-01 - -5.707697852850102e-01 - -5.703378722272431e-01 - -5.699050629355835e-01 - -5.694713639828742e-01 - -5.690367818720566e-01 - -5.686013232951076e-01 - -5.681649948578290e-01 - -5.677278029894381e-01 - -5.672897541841998e-01 - -5.668508549514105e-01 - -5.664111117923113e-01 - -5.659705312703284e-01 - -5.655291198708162e-01 - -5.650868839171556e-01 - -5.646438297396282e-01 - -5.641999637601537e-01 - -5.637552925169101e-01 - -5.633098223391846e-01 - -5.628635595080524e-01 - -5.624165104013904e-01 - -5.619686812129524e-01 - -5.615200782186582e-01 - -5.610707080464411e-01 - -5.606205767194389e-01 - -5.601696901727680e-01 - -5.597180550627928e-01 - -5.592656777039943e-01 - -5.588125640834879e-01 - -5.583587201544192e-01 - -5.579041522213387e-01 - -5.574488666805684e-01 - -5.569928694014434e-01 - -5.565361664370690e-01 - -5.560787640439252e-01 - -5.556206683493946e-01 - -5.551618853326125e-01 - -5.547024208857518e-01 - -5.542422809960397e-01 - -5.537814718214656e-01 - -5.533199995563840e-01 - -5.528578699065892e-01 - -5.523950887012330e-01 - -5.519316620139326e-01 - -5.514675956847120e-01 - -5.510028956792654e-01 - -5.505375681122012e-01 - -5.500716185256428e-01 - -5.496050526609592e-01 - -5.491378767346244e-01 - -5.486700964364043e-01 - -5.482017173715276e-01 - -5.477327453596050e-01 - -5.472631862648399e-01 - -5.467930458019109e-01 - -5.463223294669347e-01 - -5.458510432287255e-01 - -5.453791929736209e-01 - -5.449067840000759e-01 - -5.444338218966174e-01 - -5.439603123952597e-01 - -5.434862611282417e-01 - -5.430116738240560e-01 - -5.425365561436022e-01 - -5.420609134355956e-01 - -5.415847511352451e-01 - -5.411080748136494e-01 - -5.406308901525899e-01 - -5.401532026526268e-01 - -5.396750177177082e-01 - -5.391963408895222e-01 - -5.387171774649071e-01 - -5.382375326730170e-01 - -5.377574122460893e-01 - -5.372768215524759e-01 - -5.367957656717409e-01 - -5.363142502106338e-01 - -5.358322806031541e-01 - -5.353498619928253e-01 - -5.348669995911720e-01 - -5.343836987381033e-01 - -5.338999648334884e-01 - -5.334158029976483e-01 - -5.329312184607295e-01 - -5.324462166033185e-01 - -5.319608023124877e-01 - -5.314749807283198e-01 - -5.309887574568507e-01 - -5.305021373834015e-01 - -5.300151254489873e-01 - -5.295277270550899e-01 - -5.290399471460621e-01 - -5.285517906644440e-01 - -5.280632628772480e-01 - -5.275743687930865e-01 - -5.270851133485194e-01 - -5.265955015863814e-01 - -5.261055383771222e-01 - -5.256152286457003e-01 - -5.251245776074701e-01 - -5.246335901741112e-01 - -5.241422711040373e-01 - -5.236506252667474e-01 - -5.231586574906982e-01 - -5.226663726352896e-01 - -5.221737757253558e-01 - -5.216808715970676e-01 - -5.211876649797802e-01 - -5.206941607382560e-01 - -5.202003635069621e-01 - -5.197062778404161e-01 - -5.192119087096243e-01 - -5.187172609937223e-01 - -5.182223393579939e-01 - -5.177271482807863e-01 - -5.172316923981860e-01 - -5.167359765148800e-01 - -5.162400053033168e-01 - -5.157437833544083e-01 - -5.152473152222008e-01 - -5.147506055161414e-01 - -5.142536587718484e-01 - -5.137564794429633e-01 - -5.132590721404230e-01 - -5.127614414610688e-01 - -5.122635918987255e-01 - -5.117655278912282e-01 - -5.112672538418732e-01 - -5.107687741570007e-01 - -5.102700934318621e-01 - -5.097712161511054e-01 - -5.092721464952894e-01 - -5.087728887586368e-01 - -5.082734473837237e-01 - -5.077738269224511e-01 - -5.072740315773641e-01 - -5.067740655070005e-01 - -5.062739331645890e-01 - -5.057736389339202e-01 - -5.052731870571522e-01 - -5.047725816027976e-01 - -5.042718267556677e-01 - -5.037709267723895e-01 - -5.032698858620083e-01 - -5.027687082997551e-01 - -5.022673983228978e-01 - -5.017659599138892e-01 - -5.012643972224838e-01 - -5.007627144504877e-01 - -5.002609154317549e-01 - -4.997590043686060e-01 - -4.992569856498065e-01 - -4.987548629163329e-01 - -4.982526401066572e-01 - -4.977503215591422e-01 - -4.972479113357710e-01 - -4.967454132608579e-01 - -4.962428310876830e-01 - -4.957401690448965e-01 - -4.952374311333114e-01 - -4.947346209581790e-01 - -4.942317423902789e-01 - -4.937287995168010e-01 - -4.932257964768885e-01 - -4.927227367709692e-01 - -4.922196239985463e-01 - -4.917164622446805e-01 - -4.912132554897460e-01 - -4.907100074652099e-01 - -4.902067216434476e-01 - -4.897034018910860e-01 - -4.892000521396699e-01 - -4.886966760659724e-01 - -4.881932772071136e-01 - -4.876898592264887e-01 - -4.871864261030248e-01 - -4.866829812293292e-01 - -4.861795280147214e-01 - -4.856760706607693e-01 - -4.851726126266216e-01 - -4.846691571189501e-01 - -4.841657080652781e-01 - -4.836622690168214e-01 - -4.831588433295234e-01 - -4.826554347812969e-01 - -4.821520468729375e-01 - -4.816486828820545e-01 - -4.811453462713459e-01 - -4.806420406166251e-01 - -4.801387695127853e-01 - -4.796355363816449e-01 - -4.791323444815042e-01 - -4.786291970695780e-01 - -4.781260978727254e-01 - -4.776230503252043e-01 - -4.771200574973888e-01 - -4.766171228253449e-01 - -4.761142497486388e-01 - -4.756114415594656e-01 - -4.751087014547341e-01 - -4.746060327035595e-01 - -4.741034386828772e-01 - -4.736009226286348e-01 - -4.730984877717556e-01 - -4.725961373913972e-01 - -4.720938746127822e-01 - -4.715917026117559e-01 - -4.710896247171748e-01 - -4.705876440070008e-01 - -4.700857635192827e-01 - -4.695839864443119e-01 - -4.690823160197067e-01 - -4.685807553687465e-01 - -4.680793073815264e-01 - -4.675779752270572e-01 - -4.670767621237579e-01 - -4.665756710130068e-01 - -4.660747048828000e-01 - -4.655738667469987e-01 - -4.650731595624170e-01 - -4.645725864569897e-01 - -4.640721505529091e-01 - -4.635718546060059e-01 - -4.630717014390969e-01 - -4.625716940204364e-01 - -4.620718354412200e-01 - -4.615721285948061e-01 - -4.610725762550177e-01 - -4.605731814392849e-01 - -4.600739469669758e-01 - -4.595748755034438e-01 - -4.590759700613133e-01 - -4.585772335293120e-01 - -4.580786685902926e-01 - -4.575802780165928e-01 - -4.570820645542124e-01 - -4.565840309327809e-01 - -4.560861801183225e-01 - -4.555885148408127e-01 - -4.550910375242214e-01 - -4.545937511574892e-01 - -4.540966585092119e-01 - -4.535997618400510e-01 - -4.531030641427475e-01 - -4.526065682230286e-01 - -4.521102761991050e-01 - -4.516141909960451e-01 - -4.511183155232459e-01 - -4.506226519976986e-01 - -4.501272029129367e-01 - -4.496319709853875e-01 - -4.491369589904647e-01 - -4.486421693813144e-01 - -4.481476045149588e-01 - -4.476532669406306e-01 - -4.471591591812127e-01 - -4.466652837454304e-01 - -4.461716431800687e-01 - -4.456782399407630e-01 - -4.451850764283579e-01 - -4.446921550770006e-01 - -4.441994783152980e-01 - -4.437070485743053e-01 - -4.432148683148817e-01 - -4.427229399164072e-01 - -4.422312656936392e-01 - -4.417398479943503e-01 - -4.412486891611525e-01 - -4.407577915365379e-01 - -4.402671575060104e-01 - -4.397767893532367e-01 - -4.392866892910770e-01 - -4.387968597340107e-01 - -4.383073029681190e-01 - -4.378180210879689e-01 - -4.373290163087382e-01 - -4.368402909924953e-01 - -4.363518475687816e-01 - -4.358636880897754e-01 - -4.353758146064535e-01 - -4.348882293452391e-01 - -4.344009344375495e-01 - -4.339139321041776e-01 - -4.334272247184532e-01 - -4.329408142509990e-01 - -4.324547026649819e-01 - -4.319688922210647e-01 - -4.314833850702666e-01 - -4.309981832317592e-01 - -4.305132886299618e-01 - -4.300287034407881e-01 - -4.295444298858639e-01 - -4.290604699557538e-01 - -4.285768254794737e-01 - -4.280934983815344e-01 - -4.276104909880938e-01 - -4.271278053251724e-01 - -4.266454431999359e-01 - -4.261634065006114e-01 - -4.256816972235624e-01 - -4.252003173934318e-01 - -4.247192689049444e-01 - -4.242385536499166e-01 - -4.237581735472888e-01 - -4.232781305399061e-01 - -4.227984264773803e-01 - -4.223190631457318e-01 - -4.218400424415704e-01 - -4.213613663598799e-01 - -4.208830368540804e-01 - -4.204050553934426e-01 - -4.199274237890383e-01 - -4.194501442515862e-01 - -4.189732183034799e-01 - -4.184966476302857e-01 - -4.180204343198091e-01 - -4.175445800025869e-01 - -4.170690862458790e-01 - -4.165939547960728e-01 - -4.161191875920802e-01 - -4.156447863485650e-01 - -4.151707524172177e-01 - -4.146970878143395e-01 - -4.142237944432959e-01 - -4.137508735370036e-01 - -4.132783267358912e-01 - -4.128061559031381e-01 - -4.123343628419361e-01 - -4.118629489726368e-01 - -4.113919157251955e-01 - -4.109212649651476e-01 - -4.104509983224866e-01 - -4.099811172669397e-01 - -4.095116233202941e-01 - -4.090425181490535e-01 - -4.085738034100841e-01 - -4.081054804950061e-01 - -4.076375508831032e-01 - -4.071700161671795e-01 - -4.067028779692610e-01 - -4.062361376606066e-01 - -4.057697965353959e-01 - -4.053038563335837e-01 - -4.048383186645677e-01 - -4.043731849141807e-01 - -4.039084564103662e-01 - -4.034441345521896e-01 - -4.029802208230617e-01 - -4.025167167043049e-01 - -4.020536236099443e-01 - -4.015909428779320e-01 - -4.011286758375757e-01 - -4.006668238996902e-01 - -4.002053885607212e-01 - -3.997443712200008e-01 - -3.992837731698375e-01 - -3.988235956310492e-01 - -3.983638399923307e-01 - -3.979045076012857e-01 - -3.974455996644362e-01 - -3.969871175556028e-01 - -3.965290626455606e-01 - -3.960714361699136e-01 - -3.956142393772600e-01 - -3.951574735515524e-01 - -3.947011399985758e-01 - -3.942452398354794e-01 - -3.937897742524872e-01 - -3.933347447660869e-01 - -3.928801524442024e-01 - -3.924259983101159e-01 - -3.919722839283850e-01 - -3.915190103656777e-01 - -3.910661784756895e-01 - -3.906137895655892e-01 - -3.901618450499643e-01 - -3.897103461604648e-01 - -3.892592935529919e-01 - -3.888086884121152e-01 - -3.883585322771145e-01 - -3.879088261485191e-01 - -3.874595710701922e-01 - -3.870107681556456e-01 - -3.865624182556531e-01 - -3.861145225228043e-01 - -3.856670823544472e-01 - -3.852200986473037e-01 - -3.847735723987576e-01 - -3.843275047747315e-01 - -3.838818965026468e-01 - -3.834367486164244e-01 - -3.829920625791138e-01 - -3.825478392535004e-01 - -3.821040794322394e-01 - -3.816607841213338e-01 - -3.812179544462010e-01 - -3.807755914230820e-01 - -3.803336958584798e-01 - -3.798922686597118e-01 - -3.794513108818827e-01 - -3.790108236907996e-01 - -3.785708078449803e-01 - -3.781312640889848e-01 - -3.776921934895628e-01 - -3.772535969260590e-01 - -3.768154752452403e-01 - -3.763778294637203e-01 - -3.759406605249527e-01 - -3.755039692439986e-01 - -3.750677562951532e-01 - -3.746320226741715e-01 - -3.741967693787305e-01 - -3.737619968727901e-01 - -3.733277061470673e-01 - -3.728938983949728e-01 - -3.724605741247380e-01 - -3.720277341192338e-01 - -3.715953793429491e-01 - -3.711635103186269e-01 - -3.707321278978636e-01 - -3.703012331728173e-01 - -3.698708267439747e-01 - -3.694409092657609e-01 - -3.690114815572269e-01 - -3.685825444178367e-01 - -3.681540985405766e-01 - -3.677261445488677e-01 - -3.672986832474148e-01 - -3.668717154245260e-01 - -3.664452417818624e-01 - -3.660192630178876e-01 - -3.655937798167319e-01 - -3.651687928442244e-01 - -3.647443027770453e-01 - -3.643203103057334e-01 - -3.638968161236534e-01 - -3.634738208501973e-01 - -3.630513251204181e-01 - -3.626293296340570e-01 - -3.622078349959966e-01 - -3.617868418102546e-01 - -3.613663507559756e-01 - -3.609463624258993e-01 - -3.605268773947004e-01 - -3.601078962972172e-01 - -3.596894197319259e-01 - -3.592714482724653e-01 - -3.588539824938156e-01 - -3.584370229705016e-01 - -3.580205702765974e-01 - -3.576046249835235e-01 - -3.571891876270012e-01 - -3.567742587321382e-01 - -3.563598388637925e-01 - -3.559459285557617e-01 - -3.555325283179373e-01 - -3.551196386794110e-01 - -3.547072601423791e-01 - -3.542953931967586e-01 - -3.538840383835105e-01 - -3.534731961849680e-01 - -3.530628670336623e-01 - -3.526530514374770e-01 - -3.522437498876279e-01 - -3.518349628366106e-01 - -3.514266907403692e-01 - -3.510189340474827e-01 - -3.506116931966672e-01 - -3.502049686305037e-01 - -3.497987607886671e-01 - -3.493930701015490e-01 - -3.489878969787067e-01 - -3.485832418243141e-01 - -3.481791050461803e-01 - -3.477754870557839e-01 - -3.473723882547367e-01 - -3.469698090253131e-01 - -3.465677497415546e-01 - -3.461662107762984e-01 - -3.457651925045610e-01 - -3.453646952920019e-01 - -3.449647194961470e-01 - -3.445652654674211e-01 - -3.441663335489293e-01 - -3.437679240760669e-01 - -3.433700373751777e-01 - -3.429726737709668e-01 - -3.425758335909973e-01 - -3.421795171685511e-01 - -3.417837248082679e-01 - -3.413884567949557e-01 - -3.409937134173290e-01 - -3.405994949798623e-01 - -3.402058017865278e-01 - -3.398126341027504e-01 - -3.394199921921239e-01 - -3.390278763247643e-01 - -3.386362867748747e-01 - -3.382452237948665e-01 - -3.378546876227794e-01 - -3.374646785249709e-01 - -3.370751967392704e-01 - -3.366862424749215e-01 - -3.362978159833941e-01 - -3.359099174981644e-01 - -3.355225472182573e-01 - -3.351357053498810e-01 - -3.347493921057998e-01 - -3.343636076973308e-01 - -3.339783523006465e-01 - -3.335936261089775e-01 - -3.332094293460974e-01 - -3.328257621547543e-01 - -3.324426246881435e-01 - -3.320600171619409e-01 - -3.316779397280902e-01 - -3.312963925265998e-01 - -3.309153757279716e-01 - -3.305348894653861e-01 - -3.301549338737799e-01 - -3.297755091265357e-01 - -3.293966153413448e-01 - -3.290182526215280e-01 - -3.286404211114115e-01 - -3.282631209285871e-01 - -3.278863521751846e-01 - -3.275101149642331e-01 - -3.271344093953196e-01 - -3.267592355617253e-01 - -3.263845935667566e-01 - -3.260104834866909e-01 - -3.256369053882101e-01 - -3.252638593756906e-01 - -3.248913455268053e-01 - -3.245193638907094e-01 - -3.241479145199382e-01 - -3.237769974872735e-01 - -3.234066128661293e-01 - -3.230367606622389e-01 - -3.226674409186036e-01 - -3.222986537192250e-01 - -3.219303990783447e-01 - -3.215626770146125e-01 - -3.211954875680534e-01 - -3.208288307426270e-01 - -3.204627065455645e-01 - -3.200971150001409e-01 - -3.197320561103191e-01 - -3.193675298795836e-01 - -3.190035363166080e-01 - -3.186400754009213e-01 - -3.182771471114187e-01 - -3.179147514432106e-01 - -3.175528883799994e-01 - -3.171915578921511e-01 - -3.168307599394173e-01 - -3.164704945026028e-01 - -3.161107615528752e-01 - -3.157515610223091e-01 - -3.153928928534279e-01 - -3.150347570035595e-01 - -3.146771534412893e-01 - -3.143200821026652e-01 - -3.139635429048980e-01 - -3.136075357713601e-01 - -3.132520606345795e-01 - -3.128971174301287e-01 - -3.125427060850263e-01 - -3.121888265003789e-01 - -3.118354785699559e-01 - -3.114826622209773e-01 - -3.111303773636806e-01 - -3.107786238863177e-01 - -3.104274016699458e-01 - -3.100767106006651e-01 - -3.097265505731036e-01 - -3.093769214901858e-01 - -3.090278232197667e-01 - -3.086792556057311e-01 - -3.083312185528201e-01 - -3.079837119302323e-01 - -3.076367355606988e-01 - -3.072902893338402e-01 - -3.069443731087555e-01 - -3.065989866918071e-01 - -3.062541299629242e-01 - -3.059098027895394e-01 - -3.055660049841727e-01 - -3.052227363624680e-01 - -3.048799967605036e-01 - -3.045377860349815e-01 - -3.041961039937703e-01 - -3.038549504461246e-01 - -3.035143252370935e-01 - -3.031742281687436e-01 - -3.028346590287212e-01 - -3.024956176228422e-01 - -3.021571037727226e-01 - -3.018191172891879e-01 - -3.014816579447884e-01 - -3.011447255196590e-01 - -3.008083198102758e-01 - -3.004724406299011e-01 - -3.001370877400161e-01 - -2.998022608844934e-01 - -2.994679598576119e-01 - -2.991341844426006e-01 - -2.988009344054493e-01 - -2.984682095047237e-01 - -2.981360094999961e-01 - -2.978043341494513e-01 - -2.974731831997393e-01 - -2.971425563888731e-01 - -2.968124534589884e-01 - -2.964828741880918e-01 - -2.961538183196636e-01 - -2.958252855581221e-01 - -2.954972756291568e-01 - -2.951697882690829e-01 - -2.948428232168150e-01 - -2.945163801997789e-01 - -2.941904589349781e-01 - -2.938650591314966e-01 - -2.935401805013078e-01 - -2.932158227514122e-01 - -2.928919855851135e-01 - -2.925686687341852e-01 - -2.922458719001491e-01 - -2.919235947316832e-01 - -2.916018369508684e-01 - -2.912805982685433e-01 - -2.909598783275820e-01 - -2.906396768390501e-01 - -2.903199935181080e-01 - -2.900008280188033e-01 - -2.896821799916231e-01 - -2.893640491090957e-01 - -2.890464350819901e-01 - -2.887293375718574e-01 - -2.884127562142981e-01 - -2.880966906629407e-01 - -2.877811406014185e-01 - -2.874661057081589e-01 - -2.871515856017081e-01 - -2.868375799224188e-01 - -2.865240883310016e-01 - -2.862111104788733e-01 - -2.858986460098822e-01 - -2.855866945593247e-01 - -2.852752557499685e-01 - -2.849643292069009e-01 - -2.846539145659956e-01 - -2.843440114851778e-01 - -2.840346195818731e-01 - -2.837257384382189e-01 - -2.834173676812886e-01 - -2.831095069534547e-01 - -2.828021558855677e-01 - -2.824953140398479e-01 - -2.821889810170294e-01 - -2.818831564761255e-01 - -2.815778399984394e-01 - -2.812730311718642e-01 - -2.809687296216254e-01 - -2.806649349155874e-01 - -2.803616466281044e-01 - -2.800588643758425e-01 - -2.797565877594176e-01 - -2.794548163592918e-01 - -2.791535497376408e-01 - -2.788527874670974e-01 - -2.785525291296920e-01 - -2.782527743138438e-01 - -2.779535226034689e-01 - -2.776547735631448e-01 - -2.773565267276963e-01 - -2.770587816777879e-01 - -2.767615379983304e-01 - -2.764647952191276e-01 - -2.761685529026718e-01 - -2.758728106207560e-01 - -2.755775679024411e-01 - -2.752828243050798e-01 - -2.749885793975552e-01 - -2.746948327088052e-01 - -2.744015837838452e-01 - -2.741088321749212e-01 - -2.738165773969221e-01 - -2.735248189792139e-01 - -2.732335564721672e-01 - -2.729427894286903e-01 - -2.726525173657923e-01 - -2.723627397775934e-01 - -2.720734562117226e-01 - -2.717846661993187e-01 - -2.714963692431568e-01 - -2.712085648712142e-01 - -2.709212526021956e-01 - -2.706344319386959e-01 - -2.703481024077038e-01 - -2.700622635195931e-01 - -2.697769147573882e-01 - -2.694920556414950e-01 - -2.692076856844960e-01 - -2.689238043678598e-01 - -2.686404111894522e-01 - -2.683575056539274e-01 - -2.680750872618156e-01 - -2.677931554956217e-01 - -2.675117098420171e-01 - -2.672307498062658e-01 - -2.669502748541435e-01 - -2.666702844564393e-01 - -2.663907781339158e-01 - -2.661117553567487e-01 - -2.658332155842312e-01 - -2.655551583220328e-01 - -2.652775830228958e-01 - -2.650004891310402e-01 - -2.647238761635896e-01 - -2.644477435849875e-01 - -2.641720908275026e-01 - -2.638969173638899e-01 - -2.636222226679477e-01 - -2.633480062028563e-01 - -2.630742674151484e-01 - -2.628010057675256e-01 - -2.625282207270022e-01 - -2.622559117157733e-01 - -2.619840781930577e-01 - -2.617127196438671e-01 - -2.614418354712815e-01 - -2.611714251171109e-01 - -2.609014880694051e-01 - -2.606320237300626e-01 - -2.603630315312080e-01 - -2.600945109576975e-01 - -2.598264614192900e-01 - -2.595588823272051e-01 - -2.592917731268140e-01 - -2.590251332515323e-01 - -2.587589621335352e-01 - -2.584932592080277e-01 - -2.582280238899204e-01 - -2.579632555996659e-01 - -2.576989537753064e-01 - -2.574351178135512e-01 - -2.571717471205571e-01 - -2.569088411498421e-01 - -2.566463993032694e-01 - -2.563844209736399e-01 - -2.561229055922761e-01 - -2.558618525664796e-01 - -2.556012613001373e-01 - -2.553411312228936e-01 - -2.550814617199114e-01 - -2.548222521633088e-01 - -2.545635019702024e-01 - -2.543052105636615e-01 - -2.540473773489130e-01 - -2.537900016856341e-01 - -2.535330829668063e-01 - -2.532766206092137e-01 - -2.530206140025920e-01 - -2.527650625373169e-01 - -2.525099656058339e-01 - -2.522553225882911e-01 - -2.520011328519368e-01 - -2.517473957689335e-01 - -2.514941107682424e-01 - -2.512412772287477e-01 - -2.509888944763962e-01 - -2.507369619085763e-01 - -2.504854789235316e-01 - -2.502344448942996e-01 - -2.499838591881081e-01 - -2.497337211675947e-01 - -2.494840301941274e-01 - -2.492347856449565e-01 - -2.489859868896926e-01 - -2.487376332816026e-01 - -2.484897241934407e-01 - -2.482422589923619e-01 - -2.479952370263670e-01 - -2.477486576676466e-01 - -2.475025202765806e-01 - -2.472568241776227e-01 - -2.470115687463755e-01 - -2.467667533575219e-01 - -2.465223773319763e-01 - -2.462784400223504e-01 - -2.460349407926405e-01 - -2.457918789841980e-01 - -2.455492539346369e-01 - -2.453070649885519e-01 - -2.450653115068263e-01 - -2.448239928212929e-01 - -2.445831082525867e-01 - -2.443426571517872e-01 - -2.441026388729581e-01 - -2.438630527595843e-01 - -2.436238981283992e-01 - -2.433851743000419e-01 - -2.431468806082007e-01 - -2.429090164035606e-01 - -2.426715810065056e-01 - -2.424345737214870e-01 - -2.421979939156839e-01 - -2.419618409122474e-01 - -2.417261139893861e-01 - -2.414908125047008e-01 - -2.412559357926221e-01 - -2.410214831428485e-01 - -2.407874538901436e-01 - -2.405538473594189e-01 - -2.403206628448788e-01 - -2.400878996494245e-01 - -2.398555571012901e-01 - -2.396236345489386e-01 - -2.393921312730178e-01 - -2.391610465589564e-01 - -2.389303797400675e-01 - -2.387001301206918e-01 - -2.384702970040557e-01 - -2.382408797142012e-01 - -2.380118775445049e-01 - -2.377832897784107e-01 - -2.375551157141706e-01 - -2.373273546676602e-01 - -2.371000059435911e-01 - -2.368730688080822e-01 - -2.366465425799626e-01 - -2.364204265795865e-01 - -2.361947200488833e-01 - -2.359694222928865e-01 - -2.357445326362645e-01 - -2.355200503199650e-01 - -2.352959746331166e-01 - -2.350723049000333e-01 - -2.348490404054174e-01 - -2.346261804119323e-01 - -2.344037241869703e-01 - -2.341816710532240e-01 - -2.339600202844186e-01 - -2.337387711161095e-01 - -2.335179228570654e-01 - -2.332974748051559e-01 - -2.330774262250223e-01 - -2.328577763695832e-01 - -2.326385245095027e-01 - -2.324196699339893e-01 - -2.322012119071908e-01 - -2.319831496985562e-01 - -2.317654825913850e-01 - -2.315482098501277e-01 - -2.313313307350805e-01 - -2.311148445095759e-01 - -2.308987504304352e-01 - -2.306830477605995e-01 - -2.304677357746768e-01 - -2.302528137313455e-01 - -2.300382808821649e-01 - -2.298241364802842e-01 - -2.296103797849810e-01 - -2.293970100645507e-01 - -2.291840265929282e-01 - -2.289714285853380e-01 - -2.287592152687787e-01 - -2.285473859575702e-01 - -2.283359398767679e-01 - -2.281248762354934e-01 - -2.279141943457151e-01 - -2.277038934347241e-01 - -2.274939727028900e-01 - -2.272844314557521e-01 - -2.270752689260884e-01 - -2.268664843063303e-01 - -2.266580768713468e-01 - -2.264500458690802e-01 - -2.262423905203003e-01 - -2.260351100742427e-01 - -2.258282037663114e-01 - -2.256216708189812e-01 - -2.254155104759721e-01 - -2.252097219699820e-01 - -2.250043045201664e-01 - -2.247992573593203e-01 - -2.245945797283117e-01 - -2.243902708632074e-01 - -2.241863299547213e-01 - -2.239827562297785e-01 - -2.237795489631809e-01 - -2.235767073479459e-01 - -2.233742305913306e-01 - -2.231721179508258e-01 - -2.229703686190215e-01 - -2.227689817967141e-01 - -2.225679567331226e-01 - -2.223672926389324e-01 - -2.221669887137792e-01 - -2.219670441735496e-01 - -2.217674582593449e-01 - -2.215682301863681e-01 - -2.213693591068690e-01 - -2.211708442449674e-01 - -2.209726848493868e-01 - -2.207748801280919e-01 - -2.205774292618204e-01 - -2.203803314334422e-01 - -2.201835858632719e-01 - -2.199871917828554e-01 - -2.197911484006530e-01 - -2.195954548584606e-01 - -2.194001103587555e-01 - -2.192051141421317e-01 - -2.190104654040938e-01 - -2.188161633272981e-01 - -2.186222070944807e-01 - -2.184285959003400e-01 - -2.182353289399314e-01 - -2.180424054040691e-01 - -2.178498244760091e-01 - -2.176575853577229e-01 - -2.174656872563868e-01 - -2.172741293153170e-01 - -2.170829107184905e-01 - -2.168920306960583e-01 - -2.167014883907840e-01 - -2.165112829716549e-01 - -2.163214136638050e-01 - -2.161318796380734e-01 - -2.159426800456078e-01 - -2.157538140457635e-01 - -2.155652808465100e-01 - -2.153770796378261e-01 - -2.151892095617934e-01 - -2.150016698096599e-01 - -2.148144595574814e-01 - -2.146275779264766e-01 - -2.144410241083473e-01 - -2.142547972973645e-01 - -2.140688966286696e-01 - -2.138833212713278e-01 - -2.136980704068839e-01 - -2.135131431962469e-01 - -2.133285387811797e-01 - -2.131442563097479e-01 - -2.129602949644751e-01 - -2.127766538888946e-01 - -2.125933322205115e-01 - -2.124103291538361e-01 - -2.122276438425608e-01 - -2.120452754131807e-01 - -2.118632230196053e-01 - -2.116814858091140e-01 - -2.115000629262062e-01 - -2.113189535366684e-01 - -2.111381567835468e-01 - -2.109576717897184e-01 - -2.107774976942802e-01 - -2.105976336477213e-01 - -2.104180788038142e-01 - -2.102388322993181e-01 - -2.100598932684242e-01 - -2.098812608470688e-01 - -2.097029341689293e-01 - -2.095249123662445e-01 - -2.093471945702010e-01 - -2.091697799107427e-01 - -2.089926675162990e-01 - -2.088158565139439e-01 - -2.086393460309292e-01 - -2.084631351904399e-01 - -2.082872231124364e-01 - -2.081116089361562e-01 - -2.079362917906518e-01 - -2.077612707758083e-01 - -2.075865450013143e-01 - -2.074121135936494e-01 - -2.072379756933602e-01 - -2.070641303864229e-01 - -2.068905767613353e-01 - -2.067173139701657e-01 - -2.065443411403108e-01 - -2.063716573678470e-01 - -2.061992617242399e-01 - -2.060271533191409e-01 - -2.058553312792487e-01 - -2.056837947057731e-01 - -2.055125426973447e-01 - -2.053415743575506e-01 - -2.051708887985432e-01 - -2.050004850901530e-01 - -2.048303622987561e-01 - -2.046605195888223e-01 - -2.044909560501713e-01 - -2.043216707137636e-01 - -2.041526627003059e-01 - -2.039839311053935e-01 - -2.038154749924674e-01 - -2.036472934779214e-01 - -2.034793856435669e-01 - -2.033117505334730e-01 - -2.031443872603400e-01 - -2.029772949053144e-01 - -2.028104725040109e-01 - -2.026439191805672e-01 - -2.024776340229360e-01 - -2.023116160442759e-01 - -2.021458643362796e-01 - -2.019803779931268e-01 - -2.018151560674621e-01 - -2.016501976152565e-01 - -2.014855017030598e-01 - -2.013210674074579e-01 - -2.011568937830132e-01 - -2.009929798869589e-01 - -2.008293247967324e-01 - -2.006659275530022e-01 - -2.005027871933542e-01 - -2.003399027889975e-01 - -2.001772733993469e-01 - -2.000148980648089e-01 - -1.998527758076494e-01 - -1.996909056937942e-01 - -1.995292867991256e-01 - -1.993679181495860e-01 - -1.992067987609143e-01 - -1.990459276660739e-01 - -1.988853039482369e-01 - -1.987249266385540e-01 - -1.985647947339026e-01 - -1.984049072747179e-01 - -1.982452632992336e-01 - -1.980858618372365e-01 - -1.979267019229292e-01 - -1.977677825816225e-01 - -1.976091028269504e-01 - -1.974506616652059e-01 - -1.972924581269546e-01 - -1.971344912595772e-01 - -1.969767600601777e-01 - -1.968192635197257e-01 - -1.966620006473419e-01 - -1.965049704914111e-01 - -1.963481720619957e-01 - -1.961916043159508e-01 - -1.960352662866058e-01 - -1.958791570023236e-01 - -1.957232754408347e-01 - -1.955676205736371e-01 - -1.954121914050787e-01 - -1.952569869811404e-01 - -1.951020062511957e-01 - -1.949472481743376e-01 - -1.947927118000400e-01 - -1.946383960967118e-01 - -1.944843000224015e-01 - -1.943304226010136e-01 - -1.941767627996486e-01 - -1.940233195719773e-01 - -1.938700919198527e-01 - -1.937170788011597e-01 - -1.935642791691659e-01 - -1.934116920404960e-01 - -1.932593163702813e-01 - -1.931071510855982e-01 - -1.929551951739442e-01 - -1.928034476111422e-01 - -1.926519073523142e-01 - -1.925005733427448e-01 - -1.923494445333268e-01 - -1.921985198850023e-01 - -1.920477983694047e-01 - -1.918972789099489e-01 - -1.917469604078139e-01 - -1.915968418647559e-01 - -1.914469222323946e-01 - -1.912972003977130e-01 - -1.911476753153419e-01 - -1.909983459354311e-01 - -1.908492111828614e-01 - -1.907002699990133e-01 - -1.905515213021572e-01 - -1.904029639829450e-01 - -1.902545969863778e-01 - -1.901064192518998e-01 - -1.899584296832387e-01 - -1.898106271909556e-01 - -1.896630106872466e-01 - -1.895155790805884e-01 - -1.893683312769490e-01 - -1.892212661839438e-01 - -1.890743827110565e-01 - -1.889276797429612e-01 - -1.887811561730439e-01 - -1.886348109311961e-01 - -1.884886428944042e-01 - -1.883426509295119e-01 - -1.881968339481026e-01 - -1.880511908244114e-01 - -1.879057204210790e-01 - -1.877604216379617e-01 - -1.876152933660684e-01 - -1.874703344759240e-01 - -1.873255438107255e-01 - -1.871809202288037e-01 - -1.870364626111082e-01 - -1.868921698587295e-01 - -1.867480408184902e-01 - -1.866040743068453e-01 - -1.864602692045282e-01 - -1.863166243684211e-01 - -1.861731386269271e-01 - -1.860298108368848e-01 - -1.858866398430710e-01 - -1.857436244746902e-01 - -1.856007635808946e-01 - -1.854580560069532e-01 - -1.853155005825300e-01 - -1.851730961153894e-01 - -1.850308414342497e-01 - -1.848887353926573e-01 - -1.847467767859671e-01 - -1.846049644137440e-01 - -1.844632971091011e-01 - -1.843217736893654e-01 - -1.841803929497542e-01 - -1.840391536710132e-01 - -1.838980546953601e-01 - -1.837570948428414e-01 - -1.836162728527662e-01 - -1.834755875142904e-01 - -1.833350376404768e-01 - -1.831946220322505e-01 - -1.830543394615971e-01 - -1.829141886951903e-01 - -1.827741685199023e-01 - -1.826342777082210e-01 - -1.824945150204152e-01 - -1.823548792146146e-01 - -1.822153690716325e-01 - -1.820759833652730e-01 - -1.819367208114371e-01 - -1.817975801678411e-01 - -1.816585602158104e-01 - -1.815196596908165e-01 - -1.813808773333636e-01 - -1.812422118861797e-01 - -1.811036620617022e-01 - -1.809652266051679e-01 - -1.808269042761388e-01 - -1.806886937510042e-01 - -1.805505937426575e-01 - -1.804126030135119e-01 - -1.802747202867512e-01 - -1.801369442562599e-01 - -1.799992736029428e-01 - -1.798617070428147e-01 - -1.797242432859927e-01 - -1.795868810229852e-01 - -1.794496189531687e-01 - -1.793124557648680e-01 - -1.791753901302353e-01 - -1.790384207459855e-01 - -1.789015462957270e-01 - -1.787647654308534e-01 - -1.786280768266134e-01 - -1.784914791546937e-01 - -1.783549710639760e-01 - -1.782185512276328e-01 - -1.780822183108111e-01 - -1.779459709418989e-01 - -1.778098077766785e-01 - -1.776737274641330e-01 - -1.775377286080068e-01 - -1.774018098685905e-01 - -1.772659699092733e-01 - -1.771302073149079e-01 - -1.769945207098710e-01 - -1.768589087303928e-01 - -1.767233699571559e-01 - -1.765879030229077e-01 - -1.764525065751527e-01 - -1.763171791703831e-01 - -1.761819193770276e-01 - -1.760467257991546e-01 - -1.759115970764966e-01 - -1.757765317826701e-01 - -1.756415284467932e-01 - -1.755065856823099e-01 - -1.753717020824757e-01 - -1.752368761936218e-01 - -1.751021065398607e-01 - -1.749673916979465e-01 - -1.748327302843573e-01 - -1.746981207950505e-01 - -1.745635617515470e-01 - -1.744290517410085e-01 - -1.742945892830799e-01 - -1.741601728915786e-01 - -1.740258011048612e-01 - -1.738914724532109e-01 - -1.737571854631234e-01 - -1.736229386541751e-01 - -1.734887304969607e-01 - -1.733545594900176e-01 - -1.732204242005106e-01 - -1.730863230847530e-01 - -1.729522545880760e-01 - -1.728182172369972e-01 - -1.726842095169024e-01 - -1.725502298924380e-01 - -1.724162768405715e-01 - -1.722823488297978e-01 - -1.721484443102564e-01 - -1.720145617082366e-01 - -1.718806995062888e-01 - -1.717468561876117e-01 - -1.716130301380271e-01 - -1.714792197950507e-01 - -1.713454236195253e-01 - -1.712116399980747e-01 - -1.710778673588311e-01 - -1.709441041583024e-01 - -1.708103487974718e-01 - -1.706765996579921e-01 - -1.705428551238503e-01 - -1.704091136122197e-01 - -1.702753735243250e-01 - -1.701416332337174e-01 - -1.700078910979654e-01 - -1.698741454939726e-01 - -1.697403948188084e-01 - -1.696066374424440e-01 - -1.694728717024124e-01 - -1.693390959182572e-01 - -1.692053084687103e-01 - -1.690715077127793e-01 - -1.689376919605925e-01 - -1.688038595533757e-01 - -1.686700088249354e-01 - -1.685361380772680e-01 - -1.684022456043037e-01 - -1.682683297240474e-01 - -1.681343887869522e-01 - -1.680004210524648e-01 - -1.678664247764668e-01 - -1.677323982879569e-01 - -1.675983398888628e-01 - -1.674642478421112e-01 - -1.673301203727337e-01 - -1.671959557470875e-01 - -1.670617522514179e-01 - -1.669275081523977e-01 - -1.667932216748827e-01 - -1.666588910302535e-01 - -1.665245144618999e-01 - -1.663900902261115e-01 - -1.662556165573334e-01 - -1.661210916150787e-01 - -1.659865136192500e-01 - -1.658518808205523e-01 - -1.657171913793817e-01 - -1.655824434869752e-01 - -1.654476353589082e-01 - -1.653127651402884e-01 - -1.651778310039089e-01 - -1.650428311475997e-01 - -1.649077636947325e-01 - -1.647726268054878e-01 - -1.646374186795111e-01 - -1.645021374143022e-01 - -1.643667811219276e-01 - -1.642313479645375e-01 - -1.640958360797542e-01 - -1.639602435821208e-01 - -1.638245685678920e-01 - -1.636888091342957e-01 - -1.635529633807896e-01 - -1.634170294056715e-01 - -1.632810052843662e-01 - -1.631448890987297e-01 - -1.630086789505001e-01 - -1.628723728914803e-01 - -1.627359689604526e-01 - -1.625994652175857e-01 - -1.624628597296842e-01 - -1.623261505411777e-01 - -1.621893356498993e-01 - -1.620524130844338e-01 - -1.619153808874262e-01 - -1.617782370829140e-01 - -1.616409796594323e-01 - -1.615036066042981e-01 - -1.613661159511956e-01 - -1.612285056749289e-01 - -1.610907737177844e-01 - -1.609529180644884e-01 - -1.608149367058714e-01 - -1.606768276166446e-01 - -1.605385887249777e-01 - -1.604002179666082e-01 - -1.602617132920370e-01 - -1.601230726507729e-01 - -1.599842939686116e-01 - -1.598453751511857e-01 - -1.597063141136520e-01 - -1.595671087574746e-01 - -1.594277569704320e-01 - -1.592882566576958e-01 - -1.591486057239582e-01 - -1.590088020577491e-01 - -1.588688434990599e-01 - -1.587287278927537e-01 - -1.585884531125515e-01 - -1.584480170419727e-01 - -1.583074175205078e-01 - -1.581666523320080e-01 - -1.580257193426469e-01 - -1.578846164090064e-01 - -1.577433413163997e-01 - -1.576018918624315e-01 - -1.574602658488709e-01 - -1.573184610699215e-01 - -1.571764753211041e-01 - -1.570343063929105e-01 - -1.568919520623428e-01 - -1.567494100904384e-01 - -1.566066782348808e-01 - -1.564637542612438e-01 - -1.563206358983480e-01 - -1.561773208679784e-01 - -1.560338069324230e-01 - -1.558900918260982e-01 - -1.557461732592160e-01 - -1.556020489404925e-01 - -1.554577165574562e-01 - -1.553131737930803e-01 - -1.551684183667380e-01 - -1.550234479797016e-01 - -1.548782603038531e-01 - -1.547328529851514e-01 - -1.545872236759721e-01 - -1.544413700402710e-01 - -1.542952897416497e-01 - -1.541489804232354e-01 - -1.540024397056934e-01 - -1.538556652055174e-01 - -1.537086545589509e-01 - -1.535614054107616e-01 - -1.534139153265976e-01 - -1.532661818894184e-01 - -1.531182027303390e-01 - -1.529699754364569e-01 - -1.528214975805129e-01 - -1.526727667337492e-01 - -1.525237804315604e-01 - -1.523745362382714e-01 - -1.522250317710374e-01 - -1.520752645246755e-01 - -1.519252320010430e-01 - -1.517749318043420e-01 - -1.516243614355856e-01 - -1.514735183783821e-01 - -1.513224001894709e-01 - -1.511710043669709e-01 - -1.510193283881065e-01 - -1.508673697644896e-01 - -1.507151259726486e-01 - -1.505625944726656e-01 - -1.504097727456887e-01 - -1.502566582737337e-01 - -1.501032485283334e-01 - -1.499495409558064e-01 - -1.497955329817901e-01 - -1.496412220312461e-01 - -1.494866055649385e-01 - -1.493316810218445e-01 - -1.491764458131949e-01 - -1.490208973395277e-01 - -1.488650330073115e-01 - -1.487088502321930e-01 - -1.485523464347014e-01 - -1.483955190026080e-01 - -1.482383652905619e-01 - -1.480808826638546e-01 - -1.479230685198502e-01 - -1.477649202713839e-01 - -1.476064352431592e-01 - -1.474476107543291e-01 - -1.472884441602761e-01 - -1.471289328556787e-01 - -1.469690741904771e-01 - -1.468088654425319e-01 - -1.466483039513407e-01 - -1.464873870643751e-01 - -1.463261120992439e-01 - -1.461644763685366e-01 - -1.460024771711030e-01 - -1.458401117873900e-01 - -1.456773775256328e-01 - -1.455142717039091e-01 - -1.453507916253095e-01 - -1.451869345373153e-01 - -1.450226976893540e-01 - -1.448580783981553e-01 - -1.446930739597145e-01 - -1.445276816274984e-01 - -1.443618986028185e-01 - -1.441957221635531e-01 - -1.440291496154044e-01 - -1.438621781832398e-01 - -1.436948050802729e-01 - -1.435270275400491e-01 - -1.433588428498931e-01 - -1.431902482406432e-01 - -1.430212409022274e-01 - -1.428518180756519e-01 - -1.426819769869911e-01 - -1.425117148424586e-01 - -1.423410288662751e-01 - -1.421699162875700e-01 - -1.419983743276740e-01 - -1.418264001727286e-01 - -1.416539910114460e-01 - -1.414811440470098e-01 - -1.413078564852965e-01 - -1.411341255423312e-01 - -1.409599484327010e-01 - -1.407853222965617e-01 - -1.406102443173973e-01 - -1.404347117561954e-01 - -1.402587217519092e-01 - -1.400822714659246e-01 - -1.399053581557436e-01 - -1.397279789611117e-01 - -1.395501310267636e-01 - -1.393718115937786e-01 - -1.391930178402762e-01 - -1.390137469173205e-01 - -1.388339959972602e-01 - -1.386537622953096e-01 - -1.384730430031857e-01 - -1.382918352262208e-01 - -1.381101361784074e-01 - -1.379279430940128e-01 - -1.377452530885734e-01 - -1.375620633453186e-01 - -1.373783710804598e-01 - -1.371941734475252e-01 - -1.370094676273606e-01 - -1.368242508215203e-01 - -1.366385202106050e-01 - -1.364522729969404e-01 - -1.362655063841710e-01 - -1.360782175127518e-01 - -1.358904035964053e-01 - -1.357020618930480e-01 - -1.355131895302153e-01 - -1.353237837054462e-01 - -1.351338416922692e-01 - -1.349433606493001e-01 - -1.347523377766847e-01 - -1.345607703467432e-01 - -1.343686555800670e-01 - -1.341759906744941e-01 - -1.339827728348106e-01 - -1.337889993407819e-01 - -1.335946674413715e-01 - -1.333997743261954e-01 - -1.332043172962129e-01 - -1.330082936252972e-01 - -1.328117004983506e-01 - -1.326145352418741e-01 - -1.324167951779929e-01 - -1.322184775207451e-01 - -1.320195795498869e-01 - -1.318200985870884e-01 - -1.316200319613715e-01 - -1.314193769770063e-01 - -1.312181309395709e-01 - -1.310162911860090e-01 - -1.308138550466099e-01 - -1.306108198680959e-01 - -1.304071830473609e-01 - -1.302029419358534e-01 - -1.299980938748928e-01 - -1.297926362720222e-01 - -1.295865665431496e-01 - -1.293798820977739e-01 - -1.291725803345192e-01 - -1.289646586840201e-01 - -1.287561146028010e-01 - -1.285469455426532e-01 - -1.283371489741077e-01 - -1.281267223855238e-01 - -1.279156632656401e-01 - -1.277039691180485e-01 - -1.274916374652222e-01 - -1.272786658468367e-01 - -1.270650518164191e-01 - -1.268507929437779e-01 - -1.266358868257778e-01 - -1.264203310530910e-01 - -1.262041232080785e-01 - -1.259872609212462e-01 - -1.257697418614985e-01 - -1.255515637216261e-01 - -1.253327241582721e-01 - -1.251132208452764e-01 - -1.248930515084944e-01 - -1.246722139029198e-01 - -1.244507057917270e-01 - -1.242285249387353e-01 - -1.240056691417677e-01 - -1.237821362222557e-01 - -1.235579240163024e-01 - -1.233330303641722e-01 - -1.231074531412701e-01 - -1.228811902909497e-01 - -1.226542397328350e-01 - -1.224265993926709e-01 - -1.221982672554952e-01 - -1.219692413178169e-01 - -1.217395195880366e-01 - -1.215091001037845e-01 - -1.212779809466277e-01 - -1.210461602256936e-01 - -1.208136360512357e-01 - -1.205804065871132e-01 - -1.203464700244819e-01 - -1.201118245085727e-01 - -1.198764682774020e-01 - -1.196403996473917e-01 - -1.194036168896808e-01 - -1.191661183059585e-01 - -1.189279022478277e-01 - -1.186889671039581e-01 - -1.184493112863093e-01 - -1.182089332317922e-01 - -1.179678314226111e-01 - -1.177260043675167e-01 - -1.174834505981953e-01 - -1.172401686820595e-01 - -1.169961572351099e-01 - -1.167514149230550e-01 - -1.165059404117411e-01 - -1.162597324012717e-01 - -1.160127896494247e-01 - -1.157651109471359e-01 - -1.155166951180050e-01 - -1.152675410245315e-01 - -1.150176475647009e-01 - -1.147670136740031e-01 - -1.145156383362403e-01 - -1.142635205942373e-01 - -1.140106595167702e-01 - -1.137570541746248e-01 - -1.135027037005393e-01 - -1.132476072885310e-01 - -1.129917641930528e-01 - -1.127351736954119e-01 - -1.124778350964029e-01 - -1.122197477241451e-01 - -1.119609110122396e-01 - -1.117013244465126e-01 - -1.114409874638995e-01 - -1.111798996306716e-01 - -1.109180606010562e-01 - -1.106554699641756e-01 - -1.103921273860412e-01 - -1.101280326261970e-01 - -1.098631854961093e-01 - -1.095975858385727e-01 - -1.093312335328026e-01 - -1.090641285282797e-01 - -1.087962708201439e-01 - -1.085276604456853e-01 - -1.082582975002112e-01 - -1.079881821487157e-01 - -1.077173146235393e-01 - -1.074456951780328e-01 - -1.071733241222459e-01 - -1.069002018428373e-01 - -1.066263287812705e-01 - -1.063517054311524e-01 - -1.060763323447030e-01 - -1.058002101349244e-01 - -1.055233394662503e-01 - -1.052457210591484e-01 - -1.049673557111256e-01 - -1.046882442747131e-01 - -1.044083876525769e-01 - -1.041277868396362e-01 - -1.038464428925467e-01 - -1.035643569070283e-01 - -1.032815300276830e-01 - -1.029979634724506e-01 - -1.027136585692167e-01 - -1.024286166734134e-01 - -1.021428391952729e-01 - -1.018563276648054e-01 - -1.015690836461885e-01 - -1.012811087487812e-01 - -1.009924046817547e-01 - -1.007029732152899e-01 - -1.004128161832720e-01 - -1.001219355157012e-01 - -9.983033318947014e-02 - -9.953801123789381e-02 - -9.924497181065381e-02 - -9.895121710675164e-02 - -9.865674937610269e-02 - -9.836157098451072e-02 - -9.806568435550449e-02 - -9.776909196067303e-02 - -9.747179635418697e-02 - -9.717380018935569e-02 - -9.687510621844479e-02 - -9.657571724434684e-02 - -9.627563612429342e-02 - -9.597486578738405e-02 - -9.567340928055243e-02 - -9.537126972794066e-02 - -9.506845031433311e-02 - -9.476495428226560e-02 - -9.446078497156121e-02 - -9.415594584893169e-02 - -9.385044042616277e-02 - -9.354427227181475e-02 - -9.323744504129654e-02 - -9.292996250412121e-02 - -9.262182850819620e-02 - -9.231304696021701e-02 - -9.200362185853247e-02 - -9.169355729461479e-02 - -9.138285746240042e-02 - -9.107152658866502e-02 - -9.075956898041553e-02 - -9.044698911371001e-02 - -9.013379148226228e-02 - -8.981998063663986e-02 - -8.950556130228651e-02 - -8.919053824746566e-02 - -8.887491629233073e-02 - -8.855870039130662e-02 - -8.824189556852820e-02 - -8.792450692262105e-02 - -8.760653968435946e-02 - -8.728799913331863e-02 - -8.696889060279582e-02 - -8.664921956673162e-02 - -8.632899159487925e-02 - -8.600821233560418e-02 - -8.568688750540578e-02 - -8.536502290181033e-02 - -8.504262441718942e-02 - -8.471969805751253e-02 - -8.439624991228166e-02 - -8.407228614692197e-02 - -8.374781300392073e-02 - -8.342283682562317e-02 - -8.309736406563741e-02 - -8.277140122021633e-02 - -8.244495489588025e-02 - -8.211803185128563e-02 - -8.179063884910803e-02 - -8.146278271646745e-02 - -8.113447041766966e-02 - -8.080570906396743e-02 - -8.047650581443898e-02 - -8.014686781276095e-02 - -7.981680240792462e-02 - -7.948631704884632e-02 - -7.915541916537581e-02 - -7.882411634928695e-02 - -7.849241630024972e-02 - -7.816032674199919e-02 - -7.782785552351333e-02 - -7.749501058768483e-02 - -7.716179991262426e-02 - -7.682823159405887e-02 - -7.649431382724470e-02 - -7.616005485767063e-02 - -7.582546305035900e-02 - -7.549054686796573e-02 - -7.515531479419155e-02 - -7.481977542018518e-02 - -7.448393744841550e-02 - -7.414780964186224e-02 - -7.381140084542565e-02 - -7.347471999131863e-02 - -7.313777608894645e-02 - -7.280057821330421e-02 - -7.246313551410177e-02 - -7.212545725749871e-02 - -7.178755277686714e-02 - -7.144943146088469e-02 - -7.111110278446059e-02 - -7.077257629326426e-02 - -7.043386160590276e-02 - -7.009496843792977e-02 - -6.975590657859251e-02 - -6.941668588038064e-02 - -6.907731623736572e-02 - -6.873780762436528e-02 - -6.839817013263073e-02 - -6.805841390025939e-02 - -6.771854911509186e-02 - -6.737858603607710e-02 - -6.703853501790490e-02 - -6.669840646610939e-02 - -6.635821080020089e-02 - -6.601795854049251e-02 - -6.567766029345612e-02 - -6.533732672933422e-02 - -6.499696856244534e-02 - -6.465659655384894e-02 - -6.431622152906083e-02 - -6.397585437117004e-02 - -6.363550601749234e-02 - -6.329518746487584e-02 - -6.295490977261127e-02 - -6.261468405232740e-02 - -6.227452144919842e-02 - -6.193443314782195e-02 - -6.159443038613483e-02 - -6.125452449175782e-02 - -6.091472682299209e-02 - -6.057504875634485e-02 - -6.023550170757411e-02 - -5.989609715178513e-02 - -5.955684662483948e-02 - -5.921776169220818e-02 - -5.887885392543541e-02 - -5.854013491232313e-02 - -5.820161634720029e-02 - -5.786330995026137e-02 - -5.752522743033200e-02 - -5.718738052319666e-02 - -5.684978102238282e-02 - -5.651244078415603e-02 - -5.617537160914179e-02 - -5.583858533460867e-02 - -5.550209389764803e-02 - -5.516590918758542e-02 - -5.483004310132478e-02 - -5.449450760284144e-02 - -5.415931467224975e-02 - -5.382447627285256e-02 - -5.349000433169809e-02 - -5.315591089010736e-02 - -5.282220800586091e-02 - -5.248890761304951e-02 - -5.215602173570349e-02 - -5.182356244333215e-02 - -5.149154173522678e-02 - -5.115997163165661e-02 - -5.082886416999516e-02 - -5.049823136495267e-02 - -5.016808523392447e-02 - -4.983843779429676e-02 - -4.950930104255546e-02 - -4.918068697018742e-02 - -4.885260756307724e-02 - -4.852507478656667e-02 - -4.819810059193260e-02 - -4.787169691654435e-02 - -4.754587567726797e-02 - -4.722064876717863e-02 - -4.689602805511645e-02 - -4.657202539266345e-02 - -4.624865260469157e-02 - -4.592592148337583e-02 - -4.560384379218360e-02 - -4.528243126408893e-02 - -4.496169559628109e-02 - -4.464164845065374e-02 - -4.432230145577399e-02 - -4.400366620090135e-02 - -4.368575422918912e-02 - -4.336857704568598e-02 - -4.305214611378011e-02 - -4.273647284209545e-02 - -4.242156859535529e-02 - -4.210744469338823e-02 - -4.179411239819886e-02 - -4.148158291999365e-02 - -4.116986741259326e-02 - -4.085897697584740e-02 - -4.054892265423421e-02 - -4.023971542131075e-02 - -3.993136619382251e-02 - -3.962388583123071e-02 - -3.931728511726146e-02 - -3.901157477126550e-02 - -3.870676544906659e-02 - -3.840286772630143e-02 - -3.809989211312446e-02 - -3.779784905219891e-02 - -3.749674889469364e-02 - -3.719660192057603e-02 - -3.689741833904486e-02 - -3.659920826728452e-02 - -3.630198174507707e-02 - -3.600574873447752e-02 - -3.571051910326670e-02 - -3.541630263528623e-02 - -3.512310902944081e-02 - -3.483094789226868e-02 - -3.453982873906083e-02 - -3.424976098893085e-02 - -3.396075396966352e-02 - -3.367281691959212e-02 - -3.338595897696143e-02 - -3.310018917253339e-02 - -3.281551644593574e-02 - -3.253194963945627e-02 - -3.224949747985180e-02 - -3.196816859917648e-02 - -3.168797153104005e-02 - -3.140891468854379e-02 - -3.113100638362195e-02 - -3.085425482400445e-02 - -3.057866810270934e-02 - -3.030425420554928e-02 - -3.003102099769914e-02 - -2.975897623664901e-02 - -2.948812757423692e-02 - -2.921848253324668e-02 - -2.895004852283206e-02 - -2.868283284398848e-02 - -2.841684266935389e-02 - -2.815208505554401e-02 - -2.788856694668657e-02 - -2.762629515277662e-02 - -2.736527636581735e-02 - -2.710551716378724e-02 - -2.684702399109470e-02 - -2.658980317107453e-02 - -2.633386090723251e-02 - -2.607920326420626e-02 - -2.582583618939347e-02 - -2.557376551170278e-02 - -2.532299691452088e-02 - -2.507353595904179e-02 - -2.482538808499682e-02 - -2.457855859507147e-02 - -2.433305266394129e-02 - -2.408887533435539e-02 - -2.384603151841623e-02 - -2.360452600145211e-02 - -2.336436343201402e-02 - -2.312554832609387e-02 - -2.288808507226996e-02 - -2.265197791904223e-02 - -2.241723098404469e-02 - -2.218384825955722e-02 - -2.195183359578144e-02 - -2.172119070564114e-02 - -2.149192317903017e-02 - -2.126403446983029e-02 - -2.103752788800763e-02 - -2.081240661670658e-02 - -2.058867370373213e-02 - -2.036633206151460e-02 - -2.014538447470562e-02 - -1.992583358220780e-02 - -1.970768189350454e-02 - -1.949093179354288e-02 - -1.927558551890179e-02 - -1.906164517346932e-02 - -1.884911273803516e-02 - -1.863799005561765e-02 - -1.842827883084014e-02 - -1.821998063919436e-02 - -1.801309692347624e-02 - -1.780762899421212e-02 - -1.760357803216378e-02 - -1.740094507853177e-02 - -1.719973104881908e-02 - -1.699993673354589e-02 - -1.680156278321953e-02 - -1.660460972117107e-02 - -1.640907794332531e-02 - -1.621496771146485e-02 - -1.602227916433384e-02 - -1.583101231371427e-02 - -1.564116703862817e-02 - -1.545274309883748e-02 - -1.526574012772238e-02 - -1.508015761914186e-02 - -1.489599495303444e-02 - -1.471325139301425e-02 - -1.453192606709004e-02 - -1.435201798658663e-02 - -1.417352604127694e-02 - -1.399644899327932e-02 - -1.382078549302728e-02 - -1.364653407164367e-02 - -1.347369313289915e-02 - -1.330226097046918e-02 - -1.313223576283522e-02 - -1.296361556501821e-02 - -1.279639832327015e-02 - -1.263058187022890e-02 - -1.246616392163480e-02 - -1.230314208589229e-02 - -1.214151385550256e-02 - -1.198127661271531e-02 - -1.182242763705999e-02 - -1.166496409538715e-02 - -1.150888304589847e-02 - -1.135418144553720e-02 - -1.120085614521435e-02 - -1.104890388968280e-02 - -1.089832132231912e-02 - -1.074910498405016e-02 - -1.060125131793449e-02 - -1.045475666967276e-02 - -1.030961728045836e-02 - -1.016582929759894e-02 - -1.002338877483435e-02 - -9.882291666582974e-03 - -9.742533838318660e-03 - -9.604111064390042e-03 - -9.467019020603698e-03 - -9.331253297647066e-03 - -9.196809399717920e-03 - -9.063682741005771e-03 - -8.931868652392608e-03 - -8.801362376326071e-03 - -8.672159070075210e-03 - -8.544253813557785e-03 - -8.417641603575709e-03 - -8.292317355716863e-03 - -8.168275911736944e-03 - -8.045512032694060e-03 - -7.924020397696789e-03 - -7.803795618017998e-03 - -7.684832236645861e-03 - -7.567124714929550e-03 - -7.450667444285828e-03 - -7.335454748033539e-03 - -7.221480883382279e-03 - -7.108740043647531e-03 - -6.997226348639058e-03 - -6.886933855315346e-03 - -6.777856561420043e-03 - -6.669988397445708e-03 - -6.563323236817328e-03 - -6.457854897474280e-03 - -6.353577131920331e-03 - -6.250483639666226e-03 - -6.148568068731946e-03 - -6.047824005897748e-03 - -5.948244987599076e-03 - -5.849824501347084e-03 - -5.752555978513681e-03 - -5.656432807264865e-03 - -5.561448332218353e-03 - -5.467595840626229e-03 - -5.374868578311233e-03 - -5.283259752176146e-03 - -5.192762521793490e-03 - -5.103370006626977e-03 - -5.015075286629148e-03 - -4.927871401782054e-03 - -4.841751355904269e-03 - -4.756708115524279e-03 - -4.672734611342882e-03 - -4.589823741835811e-03 - -4.507968371897898e-03 - -4.427161334111035e-03 - -4.347395432360992e-03 - -4.268663440821394e-03 - -4.190958105123732e-03 - -4.114272145237943e-03 - -4.038598254543495e-03 - -3.963929102325757e-03 - -3.890257335680627e-03 - -3.817575578228647e-03 - -3.745876433060482e-03 - -3.675152484340320e-03 - -3.605396296371936e-03 - -3.536600416225055e-03 - -3.468757375181376e-03 - -3.401859688514519e-03 - -3.335899857279008e-03 - -3.270870369624132e-03 - -3.206763701552144e-03 - -3.143572317880366e-03 - -3.081288673370167e-03 - -3.019905214426235e-03 - -2.959414379161780e-03 - -2.899808598243805e-03 - -2.841080297295089e-03 - -2.783221897187762e-03 - -2.726225814481816e-03 - -2.670084462721576e-03 - -2.614790253659214e-03 - -2.560335598217736e-03 - -2.506712907773368e-03 - -2.453914594305456e-03 - -2.401933071402304e-03 - -2.350760756079694e-03 - -2.300390068609935e-03 - -2.250813433830373e-03 - -2.202023282926124e-03 - -2.154012052729510e-03 - -2.106772187286276e-03 - -2.060296139752280e-03 - -2.014576371403607e-03 - -1.969605353508076e-03 - -1.925375568654703e-03 - -1.881879509874747e-03 - -1.839109683164610e-03 - -1.797058608044933e-03 - -1.755718816706420e-03 - -1.715082857166331e-03 - -1.675143293280333e-03 - -1.635892703443056e-03 - -1.597323683697497e-03 - -1.559428848712492e-03 - -1.522200830321536e-03 - -1.485632280183934e-03 - -1.449715870092584e-03 - -1.414444291041649e-03 - -1.379810256474448e-03 - -1.345806501791486e-03 - -1.312425783716085e-03 - -1.279660883530597e-03 - -1.247504606026809e-03 - -1.215949779407020e-03 - -1.184989258561609e-03 - -1.154615923413642e-03 - -1.124822679454977e-03 - -1.095602461024569e-03 - -1.066948228352973e-03 - -1.038852968864840e-03 - -1.011309701783447e-03 - -9.843114734261671e-04 - -9.578513585924095e-04 - -9.319224654553773e-04 - -9.065179311555053e-04 - -8.816309237062864e-04 - -8.572546450286300e-04 - -8.333823272254078e-04 - -8.100072355517002e-04 - -7.871226705798197e-04 - -7.647219641139264e-04 - -7.427984826268421e-04 - -7.213456295816899e-04 - -7.003568409622573e-04 - -6.798255887472549e-04 - -6.597453829223955e-04 - -6.401097674232178e-04 - -6.209123240167792e-04 - -6.021466729184949e-04 - -5.838064694784330e-04 - -5.658854088227745e-04 - -5.483772251938055e-04 - -5.312756891491387e-04 - -5.145746125261390e-04 - -4.982678466736966e-04 - -4.823492804447342e-04 - -4.668128456938979e-04 - -4.516525141842837e-04 - -4.368622962674093e-04 - -4.224362466667431e-04 - -4.083684605074392e-04 - -3.946530726767535e-04 - -3.812842634726816e-04 - -3.682562540846601e-04 - -3.555633067280622e-04 - -3.431997298953713e-04 - -3.311598733734528e-04 - -3.194381292167991e-04 - -3.080289365424697e-04 - -2.969267761950205e-04 - -2.861261725181284e-04 - -2.756216974519896e-04 - -2.654079650780054e-04 - -2.554796342192304e-04 - -2.458314117831762e-04 - -2.364580472261255e-04 - -2.273543358783364e-04 - -2.185151214599497e-04 - -2.099352907310207e-04 - -2.016097775283348e-04 - -1.935335642058985e-04 - -1.857016766078902e-04 - -1.781091887621722e-04 - -1.707512232636694e-04 - -1.636229467286454e-04 - -1.567195750846747e-04 - -1.500363727286114e-04 - -1.435686485603325e-04 - -1.373117617901810e-04 - -1.312611200233150e-04 - -1.254121759173047e-04 - -1.197604333131590e-04 - -1.143014443478538e-04 - -1.090308067994204e-04 - -1.039441703359566e-04 - -9.903723276260782e-05 - -9.430573818110019e-05 - -8.974548326970851e-05 - -8.535231263786576e-05 - -8.112211782233505e-05 - -7.705084341917009e-05 - -7.313448187442813e-05 - -6.936907333027644e-05 - -6.575071119249467e-05 - -6.227553658275769e-05 - -5.893973914900695e-05 - -5.573956203853484e-05 - -5.267129595161032e-05 - -4.973128084575291e-05 - -4.691591029739419e-05 - -4.422162539456759e-05 - -4.164491727590835e-05 - -3.918233061143914e-05 - -3.683045757249665e-05 - -3.458594118927672e-05 - -3.244547785270521e-05 - -3.040581149216269e-05 - -2.846373767254703e-05 - -2.661610506551807e-05 - -2.485980997915884e-05 - -2.319180110803831e-05 - -2.160907991664170e-05 - -2.010869565536285e-05 - -1.868775067119526e-05 - -1.734339969669114e-05 - -1.607284546059277e-05 - -1.487334444060605e-05 - -1.374220506933501e-05 - -1.267678404087566e-05 - -1.167449238525668e-05 - -1.073279264625808e-05 - -9.849195952118955e-06 - -9.021268250139948e-06 - -8.246626567968640e-06 - -7.522936912951058e-06 - -6.847920492700095e-06 - -6.219349168072015e-06 - -5.635044236568559e-06 - -5.092882470932048e-06 - -4.590790895044201e-06 - -4.126746487291455e-06 - -3.698781859286729e-06 - -3.304979520120749e-06 - -2.943472506918129e-06 - -2.612449510984778e-06 - -2.310148834845521e-06 - -2.034859929271865e-06 - -1.784927798002038e-06 - -1.558746837246077e-06 - -1.354763241038800e-06 - -1.171478551126456e-06 - -1.007443551831214e-06 - -8.612614901318561e-07 - -7.315906671893518e-07 - -6.171385461507109e-07 - -5.166657190198488e-07 - -4.289874671965282e-07 - -3.529682224298676e-07 - -2.875261969469119e-07 - -2.316338735426513e-07 - -1.843129441850586e-07 - -1.446395043479685e-07 - -1.117434618507405e-07 - -8.480406305106530e-08 - -6.305553831873507e-08 - -4.578544870958251e-08 - -3.233089380928512e-08 - -2.208448022054805e-08 - -1.449165750478591e-08 - -9.047683233008124e-09 - -5.303766739728543e-09 - -2.863504097386866e-09 - -1.380623394721897e-09 - -5.650641971230870e-10 - -1.790372475752245e-10 - -3.511990521548007e-11 - -8.192061809269277e-13 - 0.000000000000000e+00 diff --git a/examples/SPIN/dipole_spin/Fe_Mishin2006.eam.alloy b/examples/SPIN/dipole_spin/Fe_Mishin2006.eam.alloy new file mode 120000 index 0000000000..a93b43f72a --- /dev/null +++ b/examples/SPIN/dipole_spin/Fe_Mishin2006.eam.alloy @@ -0,0 +1 @@ +../iron/Fe_Mishin2006.eam.alloy \ No newline at end of file diff --git a/examples/SPIN/dipole_spin/in.spin.iron_ewald b/examples/SPIN/dipole_spin/in.spin.iron_dipole_ewald similarity index 100% rename from examples/SPIN/dipole_spin/in.spin.iron_ewald rename to examples/SPIN/dipole_spin/in.spin.iron_dipole_ewald diff --git a/examples/SPIN/dipole_spin/in.spin.iron_pppm b/examples/SPIN/dipole_spin/in.spin.iron_dipole_pppm similarity index 100% rename from examples/SPIN/dipole_spin/in.spin.iron_pppm rename to examples/SPIN/dipole_spin/in.spin.iron_dipole_pppm diff --git a/examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy b/examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy deleted file mode 120000 index 6a47c9eebe..0000000000 --- a/examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy +++ /dev/null @@ -1 +0,0 @@ -../cobalt_fcc/Co_PurjaPun_2012.eam.alloy \ No newline at end of file diff --git a/examples/SPIN/pppm_spin/data.2 b/examples/SPIN/pppm_spin/data.2 deleted file mode 100644 index 426e3a9cb4..0000000000 --- a/examples/SPIN/pppm_spin/data.2 +++ /dev/null @@ -1,13 +0,0 @@ -RANDOM INITIALIZATION FOR STOCKMAYER FLUID -2 atoms -1 atom types - - -3.0 3.0 xlo xhi - -3.0 3.0 ylo yhi - -3.0 3.0 zlo zhi - #30.0 30.0 0.0 xy xz yz - -Atoms - -1 1 1.73 0.0 0.0 0.0 0.0 0.0 1.0 -2 1 1.73 0.0 2.5 0.0 0.0 0.0 1.0 diff --git a/examples/SPIN/pppm_spin/exchange_fit_hcp_co/exchange_fit.py b/examples/SPIN/pppm_spin/exchange_fit_hcp_co/exchange_fit.py deleted file mode 100644 index fa7dba417e..0000000000 --- a/examples/SPIN/pppm_spin/exchange_fit_hcp_co/exchange_fit.py +++ /dev/null @@ -1,32 +0,0 @@ -#Program fitting the exchange interaction -#Model curve: Bethe-Slater function -import numpy as np, pylab, tkinter -import matplotlib.pyplot as plt -from scipy.optimize import curve_fit -from decimal import * - -print("Loop begin") - -#Definition of the Bethe-Slater function -def func(x,a,b,c): - return 4*a*((x/c)**2)*(1-b*(x/c)**2)*np.exp(-(x/c)**2) - -#Exchange coeff table (data to fit) -rdata, Jdata = np.loadtxt('exchange_hcp_co.dat', usecols=(0,1), unpack=True) -plt.plot(rdata, Jdata, 'b-', label='data') - -#Perform the fit -popt, pcov = curve_fit(func, rdata, Jdata, bounds=(0, [500.,5.,5.])) -plt.plot(rdata, func(rdata, *popt), 'r--', label='fit') - -#Print the fitted params -print("Parameters: a={:.10} (in meV), b={:.10} (adim), c={:.10} (in Ang)".format(*popt)) - -#Ploting the result -plt.xlabel('r_ij') -pylab.xlim([0,6.5]) -plt.ylabel('J_ij') -plt.legend() -plt.show() - -print("Loop end") diff --git a/examples/SPIN/pppm_spin/exchange_fit_hcp_co/exchange_hcp_co.dat b/examples/SPIN/pppm_spin/exchange_fit_hcp_co/exchange_hcp_co.dat deleted file mode 100644 index 0968fa3edb..0000000000 --- a/examples/SPIN/pppm_spin/exchange_fit_hcp_co/exchange_hcp_co.dat +++ /dev/null @@ -1,9 +0,0 @@ -2.25569176882662 73.37931034482759 -2.3817863397548162 47.99999999999999 -2.4518388791593697 34.39080459770115 -2.507880910683012 31.816091954022987 -2.5359019264448337 28.137931034482747 -2.5779334500875657 25.011494252873554 -2.6339754816112086 19.126436781609186 -2.760070052539404 13.241379310344826 -3.5446584938704033 6.068965517241367 diff --git a/examples/SPIN/pppm_spin/in.dipole.pppm_dipole b/examples/SPIN/pppm_spin/in.dipole.pppm_dipole deleted file mode 100644 index d029d0a97c..0000000000 --- a/examples/SPIN/pppm_spin/in.dipole.pppm_dipole +++ /dev/null @@ -1,56 +0,0 @@ -# 3d Lennard-Jones melt - -units lj -#atom_style charge -atom_style hybrid sphere dipole -processors * 1 1 - -lattice fcc 0.8442 -#region box block 0 10 0 10 0 10 -region box block 0 5 0 5 0 5 -create_box 3 box -create_atoms 1 box -mass * 1.0 - -region long block 3 6 0 10 0 10 -set region long type 2 -set group all dipole/random 98934 0.75 -#set type 1:2 charge 0.0 - -velocity all create 1.0 87287 - -#pair_style lj/long/coul/long long off 2.5 -#pair_coeff * * 1.0 1.0 2.5 -#pair_coeff * 2 1.0 1.0 5.0 -pair_style lj/cut/dipole/long 3.0 -pair_coeff * * 0.0 0.0 - -#kspace_style pppm/disp 1.0e-4 -#kspace_style pppm/dipole 1.0e-4 -kspace_style ewald/dipole 1.0e-4 -#kspace_modify compute yes gewald 0.1 - -neighbor 0.3 bin -neigh_modify every 2 delay 4 check yes - -group fast type 1 -group slow type 2 -fix 0 all balance 20 1.0 shift x 5 1.0 & - weight group 2 fast 1.0 slow 2.0 weight time 0.66 - -fix 1 all nve - -#dump id all atom 50 dump.melt - -#dump 2 all image 25 image.*.jpg type type & -# axes yes 0.8 0.02 view 60 -30 -#dump_modify 2 pad 3 - -#dump 3 all movie 25 movie.mpg type type & -# axes yes 0.8 0.02 view 60 -30 -#dump_modify 3 pad 3 - -#thermo 50 -thermo 1 -#run 500 -run 5 diff --git a/examples/SPIN/pppm_spin/in.spin.2 b/examples/SPIN/pppm_spin/in.spin.2 deleted file mode 100644 index 29f3203694..0000000000 --- a/examples/SPIN/pppm_spin/in.spin.2 +++ /dev/null @@ -1,75 +0,0 @@ -# two magnetic atoms in a 3d box - -clear -units metal -atom_style spin - -dimension 3 -#boundary p p p -atom_modify map array - -read_data ../examples/SPIN/pppm_spin/data.2 - - -mass 1 58.93 -#set group all spin/random 31 1.72 - -#velocity all create 100 4928459 rot yes dist gaussian - -pair_style spin/dipolar/cut 4.0 -pair_coeff * * long 2.6 -#pair_style hybrid/overlay spin/exchange 4.0 spin/dipolar/long 8.0 -#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/dipolar/long 8.0 -#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/dipolar/long/qsymp 8.0 -#pair_coeff * * eam/alloy ../examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy Co -#pair_coeff * * spin/exchange exchange 4.0 0.1 1.135028015e-05 1.064568567 -#pair_coeff * * spin/dipolar/long long 8.0 - -#neighbor 0.1 bin -#neigh_modify every 10 check yes delay 20 -neighbor 0.3 bin -neigh_modify delay 0 -#neigh_modify every 1 delay 10 check yes page 100000000 one 10000000 - -#kspace_style pppm/dipole/spin 1.0e-4 -#kspace_style ewald/dipole/spin 1.0e-4 -#kspace_modify compute yes -#kspace_modify compute yes gewald 0.1 - -fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 -fix 2 all langevin/spin 0.0 0.0 21 -#fix 3 all nve/spin lattice yes -fix 3 all nve/spin lattice no - -timestep 0.0001 - -thermo_style custom step temp pe ke etotal press -thermo_modify format float %20.16g -thermo 1 - -#compute peratom all pe/atom -#compute pe all reduce sum c_peratom -#thermo_style custom step temp pe c_pe - -#compute peratom2 all stress/atom -#compute peratom2 all stress/atom NULL -#compute p all reduce sum c_peratom2[1] c_peratom2[2] c_peratom2[3] c_peratom2[4] c_peratom2[5] c_peratom2[6] -#variable press equal -(c_p[1]+c_p[2]+c_p[3])/(3*vol) -#variable pxx equal -c_p[1]/vol -#variable pyy equal -c_p[2]/vol -#variable pzz equal -c_p[3]/vol -#variable pxy equal -c_p[4]/vol -#variable pxz equal -c_p[5]/vol -#variable pyz equal -c_p[6]/vol -#thermo_style custom step temp etotal pe c_pe press v_press pxx v_pxx pyy v_pyy pzz v_pzz pxy v_pxy pxz v_pxz pyz v_pyz -#thermo_style custom step etotal pe press v_press v_pxx v_pyy v_pzz v_pxy v_pxz v_pyz -#thermo_style custom step temp etotal press v_press - -compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 1 all custom 1 dump.equil id type x y z c_outsp[1] c_outsp[2] c_outsp[3] -#c_outsp[5] c_outsp[6] c_outsp[7] -#dump_modify 1 format line "%d %d %20.15g %20.15g %20.15g %20.15g %20.15g %20.15g" scale yes - -#pair_modify compute no - -run 1 diff --git a/examples/SPIN/pppm_spin/in.spin.cut_comp b/examples/SPIN/pppm_spin/in.spin.cut_comp deleted file mode 100644 index 373c485c94..0000000000 --- a/examples/SPIN/pppm_spin/in.spin.cut_comp +++ /dev/null @@ -1,52 +0,0 @@ -# bcc iron in a 3d periodic box - -clear -units metal -atom_style spin - -dimension 3 -boundary p p p -atom_modify map array - -lattice bcc 2.8665 -region box block 0.0 5.0 0.0 5.0 0.0 5.0 -create_box 1 box -create_atoms 1 box - -mass 1 58.93 -#set group all spin 2.2 0.0 0.0 1.0 -set group all spin/random 31 2.2 - -#pair_style spin/dipolar/cut 5.0 -#pair_coeff * * long 5.0 -pair_style spin/dipolar/long 4.0 -pair_coeff * * long 4.0 - -#neighbor 0.1 bin -#neigh_modify every 10 check yes delay 20 -neighbor 0.3 bin -neigh_modify delay 0 -#neigh_modify every 1 delay 10 check yes page 100000000 one 10000000 - -#kspace_style pppm/dipole/spin 1.0e-4 -#kspace_style ewald/dipole/spin 1.0e-4 -#kspace_modify compute yes -#kspace_modify compute yes gewald 0.1 - -fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 -fix 2 all langevin/spin 0.0 0.0 21 -#fix 3 all nve/spin lattice yes -fix 3 all nve/spin lattice no - -timestep 0.0001 - -thermo_style custom step temp pe ke etotal press -thermo_modify format float %20.16g -thermo 50 - -compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 50 all custom 1 dump.equil id type x y z c_outsp[1] c_outsp[2] c_outsp[3] -#c_outsp[5] c_outsp[6] c_outsp[7] -#dump_modify 1 format line "%d %d %20.15g %20.15g %20.15g %20.15g %20.15g %20.15g" scale yes - -run 10000 diff --git a/examples/SPIN/pppm_spin/in.spin.ewald_spin b/examples/SPIN/pppm_spin/in.spin.ewald_spin deleted file mode 100644 index 889ed086f8..0000000000 --- a/examples/SPIN/pppm_spin/in.spin.ewald_spin +++ /dev/null @@ -1,68 +0,0 @@ -# hcp cobalt in a 3d periodic box - -clear -units metal -atom_style spin - -dimension 3 -boundary p p p - -# necessary for the serial algorithm (sametag) -atom_modify map array - -lattice hcp 2.5071 -region box block 0.0 8.0 0.0 8.0 0.0 8.0 -create_box 1 box -create_atoms 1 box - -# setting mass, mag. moments, and interactions for hcp cobalt - -mass 1 58.93 - -set group all spin/random 31 1.72 -#set group all spin 1.72 0.0 0.0 1.0 -#velocity all create 100 4928459 rot yes dist gaussian - -#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/dipolar/long 8.0 -#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/long/qsymp 8.0 -#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 -#pair_coeff * * eam/alloy ../examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy Co -#pair_coeff * * spin/exchange exchange 4.0 0.3593 1.135028015e-05 1.064568567 -#pair_coeff * * spin/long/qsymp long 8.0 -pair_style spin/dipolar/long 8.0 -pair_coeff * * long 8.0 - -neighbor 0.1 bin -neigh_modify every 10 check yes delay 20 - -kspace_style ewald/dipole/spin 1.0e-4 -#kspace_modify mesh 32 32 32 - -#fix 1 all precession/spin zeeman 1.0 0.0 0.0 1.0 -fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 -fix 2 all langevin/spin 0.0 0.0 21 -#fix 3 all nve/spin lattice yes -fix 3 all nve/spin lattice no - -timestep 0.001 - - -compute out_mag all compute/spin -compute out_pe all pe -compute out_ke all ke -compute out_temp all temp - -variable magz equal c_out_mag[3] -variable magnorm equal c_out_mag[4] -variable emag equal c_out_mag[5] -variable tmag equal c_out_mag[6] - -thermo_style custom step time v_magnorm v_tmag temp v_emag ke pe etotal -#thermo_style custom step time v_magnorm v_emag temp etotal -thermo 10 - -compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 100 all custom 1 dump_cobalt_hcp.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] - -#run 20000 -run 1000 diff --git a/examples/SPIN/pppm_spin/in.spin.pppm_spin b/examples/SPIN/pppm_spin/in.spin.pppm_spin deleted file mode 100644 index 78dfbb56a0..0000000000 --- a/examples/SPIN/pppm_spin/in.spin.pppm_spin +++ /dev/null @@ -1,66 +0,0 @@ -# hcp cobalt in a 3d periodic box - -clear -units metal -atom_style spin - -dimension 3 -boundary p p p - -# necessary for the serial algorithm (sametag) -atom_modify map array - -lattice hcp 2.5071 -region box block 0.0 8.0 0.0 8.0 0.0 8.0 -create_box 1 box -create_atoms 1 box - -# setting mass, mag. moments, and interactions for hcp cobalt - -mass 1 58.93 - -set group all spin/random 31 1.72 -#set group all spin 1.72 0.0 0.0 1.0 -velocity all create 100 4928459 rot yes dist gaussian - -pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/dipolar/long 8.0 -#pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/dipolar/long/qsymp 8.0 -pair_coeff * * eam/alloy ../examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy Co -#pair_coeff * * spin/exchange exchange 4.0 0.3593 1.135028015e-05 1.064568567 -pair_coeff * * spin/exchange exchange 4.0 0.0 1.135028015e-05 1.064568567 -#pair_coeff * * spin/dipolar/long/qsymp long 8.0 -pair_coeff * * spin/dipolar/long long 8.0 - -neighbor 0.1 bin -neigh_modify every 10 check yes delay 20 - -kspace_style pppm/dipole/spin 1.0e-4 -kspace_modify compute yes - -#fix 1 all precession/spin zeeman 1.0 0.0 0.0 1.0 -fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 -fix 2 all langevin/spin 0.0 0.0 21 -fix 3 all nve/spin lattice yes - -timestep 0.0001 - - -compute out_mag all compute/spin -compute out_pe all pe -compute out_ke all ke -compute out_temp all temp - -variable magz equal c_out_mag[3] -variable magnorm equal c_out_mag[4] -variable emag equal c_out_mag[5] -variable tmag equal c_out_mag[6] - -thermo_style custom step time v_magnorm v_emag temp etotal -thermo_modify format float %20.16g -thermo 10 - -compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 100 all custom 1 dump_cobalt_hcp.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] - -run 20000 -#run 1 diff --git a/examples/SPIN/pppm_spin/in.spin.spin_dipolar_cut b/examples/SPIN/pppm_spin/in.spin.spin_dipolar_cut deleted file mode 100644 index a3ca4288fc..0000000000 --- a/examples/SPIN/pppm_spin/in.spin.spin_dipolar_cut +++ /dev/null @@ -1,64 +0,0 @@ -# hcp cobalt in a 3d periodic box - -clear -units metal -atom_style spin - -dimension 3 -boundary p p p - -# necessary for the serial algorithm (sametag) -atom_modify map array - -lattice hcp 2.5071 -region box block 0.0 8.0 0.0 8.0 0.0 8.0 -create_box 1 box -create_atoms 1 box - -# setting mass, mag. moments, and interactions for hcp cobalt - -mass 1 58.93 - -set group all spin/random 31 1.72 -#set group all spin 1.72 0.0 0.0 1.0 -velocity all create 100 4928459 rot yes dist gaussian - -pair_style hybrid/overlay eam/alloy spin/exchange 4.0 spin/dipolar/cut 8.0 -#pair_style hybrid/overlay eam/alloy spin/dipolar/cut 8.0 -pair_coeff * * eam/alloy ../examples/SPIN/pppm_spin/Co_PurjaPun_2012.eam.alloy Co -pair_coeff * * spin/exchange exchange 4.0 0.3593 1.135028015e-05 1.064568567 -pair_coeff * * spin/dipolar/cut long 8.0 -#pair_style spin/dipolar/cut 8.0 -#pair_coeff * * long 8.0 - -neighbor 0.1 bin -neigh_modify every 10 check yes delay 20 - -#fix 1 all precession/spin zeeman 1.0 0.0 0.0 1.0 -fix 1 all precession/spin zeeman 0.0 0.0 0.0 1.0 -fix 2 all langevin/spin 0.0 0.0 21 -fix 3 all nve/spin lattice yes -#fix 3 all nve/spin lattice no - -timestep 0.0001 - - -compute out_mag all compute/spin -compute out_pe all pe -compute out_ke all ke -compute out_temp all temp - -variable magz equal c_out_mag[3] -variable magnorm equal c_out_mag[4] -variable emag equal c_out_mag[5] -variable tmag equal c_out_mag[6] - -thermo_style custom step time v_magnorm v_emag temp etotal -thermo_modify format float %20.16g -thermo 10 - -compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 100 all custom 1 dump_cobalt_hcp.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] - -run 20000 -#run 10 From 82b50706bd6d72b19dffdf880c93578261b1aeac Mon Sep 17 00:00:00 2001 From: julient31 Date: Mon, 20 May 2019 22:09:59 -0600 Subject: [PATCH 177/311] Commit2 JT 052019 - some corrections in the examples - deleted an old doc files (now redundant) --- doc/src/pair_spin_long.txt | 84 --------------------------------- examples/SPIN/iron/in.spin.iron | 5 +- 2 files changed, 2 insertions(+), 87 deletions(-) delete mode 100644 doc/src/pair_spin_long.txt diff --git a/doc/src/pair_spin_long.txt b/doc/src/pair_spin_long.txt deleted file mode 100644 index c5b4a7b33e..0000000000 --- a/doc/src/pair_spin_long.txt +++ /dev/null @@ -1,84 +0,0 @@ -"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c - -:link(lws,http://lammps.sandia.gov) -:link(ld,Manual.html) -:link(lc,Commands_all.html) - -:line - -pair_style spin/long command :h3 - -[Syntax:] - -pair_style spin/long cutoff (cutoff) - -cutoff = global cutoff pair (distance in metal units) :ulb,l -:ule - -[Examples:] - -pair_style spin/long 10.0 -pair_coeff * * long 10.0 -pair_coeff 2 3 long 8.0 :pre - -[Description:] - -Style {pair/spin/long} computes interactions between pairs of particles -that each have a magnetic spin. - -:c,image(Eqs/pair_spin_long_range.jpg) - -where si and sj are two magnetic spins of two particles with Lande factors -gi and gj respectively, eij = (ri - rj)/|ri-rj| is the unit vector between -sites i and j, mu0 the vacuum permeability, muB the Bohr magneton (muB = -5.788 eV/T in metal units). - -Style {pair/spin/long} computes magnetic precession vectors: - -:c,image(Eqs/pair_spin_long_range_magforce.jpg) - -with h the Planck constant (in metal units), and a mechanical force: - -:c,image(Eqs/pair_spin_long_range_force.jpg) - - -The following coefficient must be defined for each pair of atoms -types via the "pair_coeff"_pair_coeff.html command as in the examples -above, or in the data file or restart files read by the -"read_data"_read_data.html or "read_restart"_read_restart.html -commands, or by mixing as described below: - -rc (distance units) :ul - -with rc is the radius cutoff of the short-range component of the -long-range interaction (see "(Cerda)"_#Cerda1 for more -explanation). - -:line - -[Restrictions:] - -The {pair/spin/long} style is part of the SPIN package. It is only -enabled if LAMMPS was built with that package. See the -"Making LAMMPS"_Section_start.html#start_3 section for more info. - -The {pair/spin/long} style computes the short-range component of -the dipole-dipole interaction. The functions evaluating the -long-range component are part of the KSPACE package. -They can be enabled only if LAMMPS was built with that package. - -[Related commands:] - -"atom_style spin"_atom_style.html, "pair_coeff"_pair_coeff.html, - -[Default:] none - -:line - -:link(Tranchida6) -[(Tranchida)] Tranchida, Plimpton, Thibaudeau and Thompson, -Journal of Computational Physics, (2018). - -:link(Cerda1) -[(Cerda)] Cerda, Ballenegger, Lenz, and Holm, J Chem Phys, 129(23), -234104 (2008). diff --git a/examples/SPIN/iron/in.spin.iron b/examples/SPIN/iron/in.spin.iron index c963c919cd..bb1b0e1b4d 100644 --- a/examples/SPIN/iron/in.spin.iron +++ b/examples/SPIN/iron/in.spin.iron @@ -24,8 +24,7 @@ set group all spin 2.2 0.0 0.0 1.0 velocity all create 100 4928459 rot yes dist gaussian pair_style hybrid/overlay eam/alloy spin/exchange 3.5 -#pair_coeff * * eam/alloy Fe_Mishin2006.eam.alloy Fe -pair_coeff * * eam/alloy ../examples/SPIN/iron/Fe_Mishin2006.eam.alloy Fe +pair_coeff * * eam/alloy Fe_Mishin2006.eam.alloy Fe pair_coeff * * spin/exchange exchange 3.4 0.02726 0.2171 1.841 neighbor 0.1 bin @@ -55,4 +54,4 @@ thermo 50 compute outsp all property/atom spx spy spz sp fmx fmy fmz dump 100 all custom 1 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] -run 50 +run 50000 From a0bc619550a18566c4a3079b9692508387afb098 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 21 May 2019 09:21:55 -0600 Subject: [PATCH 178/311] Need to call atomKK version of sync/modified in Kokkos atom_vec styles --- src/KOKKOS/atom_vec_angle_kokkos.cpp | 44 +++++----- src/KOKKOS/atom_vec_atomic_kokkos.cpp | 20 ++--- src/KOKKOS/atom_vec_bond_kokkos.cpp | 20 ++--- src/KOKKOS/atom_vec_charge_kokkos.cpp | 18 ++-- src/KOKKOS/atom_vec_dpd_kokkos.cpp | 78 ++++++++--------- src/KOKKOS/atom_vec_full_kokkos.cpp | 22 ++--- src/KOKKOS/atom_vec_hybrid_kokkos.cpp | 32 +++---- src/KOKKOS/atom_vec_molecular_kokkos.cpp | 44 +++++----- src/KOKKOS/atom_vec_sphere_kokkos.cpp | 106 +++++++++++------------ 9 files changed, 192 insertions(+), 192 deletions(-) diff --git a/src/KOKKOS/atom_vec_angle_kokkos.cpp b/src/KOKKOS/atom_vec_angle_kokkos.cpp index df455dd3ff..e4f27e733a 100644 --- a/src/KOKKOS/atom_vec_angle_kokkos.cpp +++ b/src/KOKKOS/atom_vec_angle_kokkos.cpp @@ -66,8 +66,8 @@ void AtomVecAngleKokkos::grow(int n) if (nmax < 0 || nmax > MAXSMALLINT) error->one(FLERR,"Per-processor system is too big"); - sync(Device,ALL_MASK); - modified(Device,ALL_MASK); + atomKK->sync(Device,ALL_MASK); + atomKK->modified(Device,ALL_MASK); memoryKK->grow_kokkos(atomKK->k_tag,atomKK->tag,nmax,"atom:tag"); memoryKK->grow_kokkos(atomKK->k_type,atomKK->type,nmax,"atom:type"); @@ -99,7 +99,7 @@ void AtomVecAngleKokkos::grow(int n) "atom:angle_atom3"); grow_reset(); - sync(Host,ALL_MASK); + atomKK->sync(Host,ALL_MASK); if (atom->nextra_grow) for (int iextra = 0; iextra < atom->nextra_grow; iextra++) @@ -283,7 +283,7 @@ int AtomVecAngleKokkos::pack_comm_kokkos(const int &n, // Choose correct forward PackComm kernel if(commKK->forward_comm_on_host) { - sync(Host,X_MASK); + atomKK->sync(Host,X_MASK); if(pbc_flag) { if(domain->triclinic) { struct AtomVecAngleKokkos_PackComm f(atomKK->k_x,buf,list,iswap, @@ -310,7 +310,7 @@ int AtomVecAngleKokkos::pack_comm_kokkos(const int &n, } } } else { - sync(Device,X_MASK); + atomKK->sync(Device,X_MASK); if(pbc_flag) { if(domain->triclinic) { struct AtomVecAngleKokkos_PackComm f(atomKK->k_x,buf,list,iswap, @@ -398,8 +398,8 @@ int AtomVecAngleKokkos::pack_comm_self(const int &n, const DAT::tdual_int_2d &li const int nfirst, const int &pbc_flag, const int* const pbc) { if(commKK->forward_comm_on_host) { - sync(Host,X_MASK); - modified(Host,X_MASK); + atomKK->sync(Host,X_MASK); + atomKK->modified(Host,X_MASK); if(pbc_flag) { if(domain->triclinic) { struct AtomVecAngleKokkos_PackCommSelf @@ -430,8 +430,8 @@ int AtomVecAngleKokkos::pack_comm_self(const int &n, const DAT::tdual_int_2d &li } } } else { - sync(Device,X_MASK); - modified(Device,X_MASK); + atomKK->sync(Device,X_MASK); + atomKK->modified(Device,X_MASK); if(pbc_flag) { if(domain->triclinic) { struct AtomVecAngleKokkos_PackCommSelf @@ -494,13 +494,13 @@ struct AtomVecAngleKokkos_UnpackComm { void AtomVecAngleKokkos::unpack_comm_kokkos(const int &n, const int &first, const DAT::tdual_xfloat_2d &buf ) { if(commKK->forward_comm_on_host) { - sync(Host,X_MASK); - modified(Host,X_MASK); + atomKK->sync(Host,X_MASK); + atomKK->modified(Host,X_MASK); struct AtomVecAngleKokkos_UnpackComm f(atomKK->k_x,buf,first); Kokkos::parallel_for(n,f); } else { - sync(Device,X_MASK); - modified(Device,X_MASK); + atomKK->sync(Device,X_MASK); + atomKK->modified(Device,X_MASK); struct AtomVecAngleKokkos_UnpackComm f(atomKK->k_x,buf,first); Kokkos::parallel_for(n,f); } @@ -643,7 +643,7 @@ void AtomVecAngleKokkos::unpack_comm_vel(int n, int first, double *buf) int AtomVecAngleKokkos::pack_reverse(int n, int first, double *buf) { if(n > 0) - sync(Host,F_MASK); + atomKK->sync(Host,F_MASK); int m = 0; const int last = first + n; @@ -660,7 +660,7 @@ int AtomVecAngleKokkos::pack_reverse(int n, int first, double *buf) void AtomVecAngleKokkos::unpack_reverse(int n, int *list, double *buf) { if(n > 0) - modified(Host,F_MASK); + atomKK->modified(Host,F_MASK); int m = 0; for (int i = 0; i < n; i++) { @@ -961,9 +961,9 @@ struct AtomVecAngleKokkos_UnpackBorder { void AtomVecAngleKokkos::unpack_border_kokkos(const int &n, const int &first, const DAT::tdual_xfloat_2d &buf, ExecutionSpace space) { - modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); + atomKK->modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); while (first+n >= nmax) grow(0); - modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); + atomKK->modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); if(space==Host) { struct AtomVecAngleKokkos_UnpackBorder f(buf.view(),h_x,h_tag,h_type,h_mask,h_molecule,first); @@ -985,7 +985,7 @@ void AtomVecAngleKokkos::unpack_border(int n, int first, double *buf) last = first + n; for (i = first; i < last; i++) { if (i == nmax) grow(0); - modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); + atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); h_x(i,0) = buf[m++]; h_x(i,1) = buf[m++]; h_x(i,2) = buf[m++]; @@ -1011,7 +1011,7 @@ void AtomVecAngleKokkos::unpack_border_vel(int n, int first, double *buf) last = first + n; for (i = first; i < last; i++) { if (i == nmax) grow(0); - modified(Host,X_MASK|V_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); + atomKK->modified(Host,X_MASK|V_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); h_x(i,0) = buf[m++]; h_x(i,1) = buf[m++]; h_x(i,2) = buf[m++]; @@ -1413,7 +1413,7 @@ int AtomVecAngleKokkos::unpack_exchange(double *buf) { int nlocal = atom->nlocal; if (nlocal == nmax) grow(0); - modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | ANGLE_MASK | SPECIAL_MASK); @@ -1488,7 +1488,7 @@ int AtomVecAngleKokkos::size_restart() int AtomVecAngleKokkos::pack_restart(int i, double *buf) { - sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | ANGLE_MASK | SPECIAL_MASK); @@ -1542,7 +1542,7 @@ int AtomVecAngleKokkos::unpack_restart(double *buf) if (atom->nextra_store) memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); } - modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | ANGLE_MASK | SPECIAL_MASK); diff --git a/src/KOKKOS/atom_vec_atomic_kokkos.cpp b/src/KOKKOS/atom_vec_atomic_kokkos.cpp index e3c1bee956..95e4ddd72b 100644 --- a/src/KOKKOS/atom_vec_atomic_kokkos.cpp +++ b/src/KOKKOS/atom_vec_atomic_kokkos.cpp @@ -62,8 +62,8 @@ void AtomVecAtomicKokkos::grow(int n) if (nmax < 0 || nmax > MAXSMALLINT) error->one(FLERR,"Per-processor system is too big"); - sync(Device,ALL_MASK); - modified(Device,ALL_MASK); + atomKK->sync(Device,ALL_MASK); + atomKK->modified(Device,ALL_MASK); memoryKK->grow_kokkos(atomKK->k_tag,atomKK->tag,nmax,"atom:tag"); memoryKK->grow_kokkos(atomKK->k_type,atomKK->type,nmax,"atom:type"); @@ -75,7 +75,7 @@ void AtomVecAtomicKokkos::grow(int n) memoryKK->grow_kokkos(atomKK->k_f,atomKK->f,nmax,3,"atom:f"); grow_reset(); - sync(Host,ALL_MASK); + atomKK->sync(Host,ALL_MASK); if (atom->nextra_grow) for (int iextra = 0; iextra < atom->nextra_grow; iextra++) @@ -394,9 +394,9 @@ struct AtomVecAtomicKokkos_UnpackBorder { void AtomVecAtomicKokkos::unpack_border_kokkos(const int &n, const int &first, const DAT::tdual_xfloat_2d &buf,ExecutionSpace space) { - modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK); + atomKK->modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK); while (first+n >= nmax) grow(0); - modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK); + atomKK->modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK); if(space==Host) { struct AtomVecAtomicKokkos_UnpackBorder f(buf.view(),h_x,h_tag,h_type,h_mask,first); Kokkos::parallel_for(n,f); @@ -416,7 +416,7 @@ void AtomVecAtomicKokkos::unpack_border(int n, int first, double *buf) last = first + n; for (i = first; i < last; i++) { if (i == nmax) grow(0); - modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK); + atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK); h_x(i,0) = buf[m++]; h_x(i,1) = buf[m++]; h_x(i,2) = buf[m++]; @@ -441,7 +441,7 @@ void AtomVecAtomicKokkos::unpack_border_vel(int n, int first, double *buf) last = first + n; for (i = first; i < last; i++) { if (i == nmax) grow(0); - modified(Host,X_MASK|V_MASK|TAG_MASK|TYPE_MASK|MASK_MASK); + atomKK->modified(Host,X_MASK|V_MASK|TAG_MASK|TYPE_MASK|MASK_MASK); h_x(i,0) = buf[m++]; h_x(i,1) = buf[m++]; h_x(i,2) = buf[m++]; @@ -669,7 +669,7 @@ int AtomVecAtomicKokkos::unpack_exchange(double *buf) { int nlocal = atom->nlocal; if (nlocal == nmax) grow(0); - modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK); int m = 1; @@ -721,7 +721,7 @@ int AtomVecAtomicKokkos::size_restart() int AtomVecAtomicKokkos::pack_restart(int i, double *buf) { - sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK ); int m = 1; @@ -756,7 +756,7 @@ int AtomVecAtomicKokkos::unpack_restart(double *buf) if (atom->nextra_store) memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); } - modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK ); int m = 1; diff --git a/src/KOKKOS/atom_vec_bond_kokkos.cpp b/src/KOKKOS/atom_vec_bond_kokkos.cpp index 21768c6009..92311d5d09 100644 --- a/src/KOKKOS/atom_vec_bond_kokkos.cpp +++ b/src/KOKKOS/atom_vec_bond_kokkos.cpp @@ -65,8 +65,8 @@ void AtomVecBondKokkos::grow(int n) if (nmax < 0 || nmax > MAXSMALLINT) error->one(FLERR,"Per-processor system is too big"); - sync(Device,ALL_MASK); - modified(Device,ALL_MASK); + atomKK->sync(Device,ALL_MASK); + atomKK->modified(Device,ALL_MASK); memoryKK->grow_kokkos(atomKK->k_tag,atomKK->tag,nmax,"atom:tag"); memoryKK->grow_kokkos(atomKK->k_type,atomKK->type,nmax,"atom:type"); @@ -85,7 +85,7 @@ void AtomVecBondKokkos::grow(int n) memoryKK->grow_kokkos(atomKK->k_bond_atom,atomKK->bond_atom,nmax,atomKK->bond_per_atom,"atom:bond_atom"); grow_reset(); - sync(Host,ALL_MASK); + atomKK->sync(Host,ALL_MASK); if (atom->nextra_grow) for (int iextra = 0; iextra < atomKK->nextra_grow; iextra++) @@ -469,9 +469,9 @@ struct AtomVecBondKokkos_UnpackBorder { void AtomVecBondKokkos::unpack_border_kokkos(const int &n, const int &first, const DAT::tdual_xfloat_2d &buf, ExecutionSpace space) { - modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); + atomKK->modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); while (first+n >= nmax) grow(0); - modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); + atomKK->modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); if(space==Host) { struct AtomVecBondKokkos_UnpackBorder f(buf.view(),h_x,h_tag,h_type,h_mask,h_molecule,first); @@ -493,7 +493,7 @@ void AtomVecBondKokkos::unpack_border(int n, int first, double *buf) last = first + n; for (i = first; i < last; i++) { if (i == nmax) grow(0); - modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); + atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); h_x(i,0) = buf[m++]; h_x(i,1) = buf[m++]; h_x(i,2) = buf[m++]; @@ -519,7 +519,7 @@ void AtomVecBondKokkos::unpack_border_vel(int n, int first, double *buf) last = first + n; for (i = first; i < last; i++) { if (i == nmax) grow(0); - modified(Host,X_MASK|V_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); + atomKK->modified(Host,X_MASK|V_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); h_x(i,0) = buf[m++]; h_x(i,1) = buf[m++]; h_x(i,2) = buf[m++]; @@ -867,7 +867,7 @@ int AtomVecBondKokkos::unpack_exchange(double *buf) { int nlocal = atom->nlocal; if (nlocal == nmax) grow(0); - modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | SPECIAL_MASK); int k; @@ -935,7 +935,7 @@ int AtomVecBondKokkos::size_restart() int AtomVecBondKokkos::pack_restart(int i, double *buf) { - sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | SPECIAL_MASK); int m = 1; buf[m++] = h_x(i,0); @@ -979,7 +979,7 @@ int AtomVecBondKokkos::unpack_restart(double *buf) if (atom->nextra_store) memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); } - modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | SPECIAL_MASK); int m = 1; h_x(nlocal,0) = buf[m++]; diff --git a/src/KOKKOS/atom_vec_charge_kokkos.cpp b/src/KOKKOS/atom_vec_charge_kokkos.cpp index 933e029aa4..31a690f521 100644 --- a/src/KOKKOS/atom_vec_charge_kokkos.cpp +++ b/src/KOKKOS/atom_vec_charge_kokkos.cpp @@ -65,8 +65,8 @@ void AtomVecChargeKokkos::grow(int n) if (nmax < 0 || nmax > MAXSMALLINT) error->one(FLERR,"Per-processor system is too big"); - sync(Device,ALL_MASK); - modified(Device,ALL_MASK); + atomKK->sync(Device,ALL_MASK); + atomKK->modified(Device,ALL_MASK); memoryKK->grow_kokkos(atomKK->k_tag,atomKK->tag,nmax,"atom:tag"); memoryKK->grow_kokkos(atomKK->k_type,atomKK->type,nmax,"atom:type"); @@ -80,7 +80,7 @@ void AtomVecChargeKokkos::grow(int n) memoryKK->grow_kokkos(atomKK->k_q,atomKK->q,nmax,"atom:q"); grow_reset(); - sync(Host,ALL_MASK); + atomKK->sync(Host,ALL_MASK); if (atom->nextra_grow) for (int iextra = 0; iextra < atom->nextra_grow; iextra++) @@ -495,7 +495,7 @@ void AtomVecChargeKokkos::unpack_border_kokkos(const int &n, const int &first, f(buf.view(),d_x,d_tag,d_type,d_mask,d_q,first); Kokkos::parallel_for(n,f); } - modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|Q_MASK); + atomKK->modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|Q_MASK); } /* ---------------------------------------------------------------------- */ @@ -511,7 +511,7 @@ void AtomVecChargeKokkos::unpack_border(int n, int first, double *buf) if (i == nmax) { grow(0); } - modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|Q_MASK); + atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|Q_MASK); h_x(i,0) = buf[m++]; h_x(i,1) = buf[m++]; h_x(i,2) = buf[m++]; @@ -537,7 +537,7 @@ void AtomVecChargeKokkos::unpack_border_vel(int n, int first, double *buf) last = first + n; for (i = first; i < last; i++) { if (i == nmax) grow(0); - modified(Host,X_MASK|V_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|Q_MASK); + atomKK->modified(Host,X_MASK|V_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|Q_MASK); h_x(i,0) = buf[m++]; h_x(i,1) = buf[m++]; h_x(i,2) = buf[m++]; @@ -798,7 +798,7 @@ int AtomVecChargeKokkos::unpack_exchange(double *buf) { int nlocal = atom->nlocal; if (nlocal == nmax) grow(0); - modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK | Q_MASK); int m = 1; @@ -851,7 +851,7 @@ int AtomVecChargeKokkos::size_restart() int AtomVecChargeKokkos::pack_restart(int i, double *buf) { - sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK | Q_MASK); int m = 1; @@ -889,7 +889,7 @@ int AtomVecChargeKokkos::unpack_restart(double *buf) memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); } - modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK | Q_MASK); int m = 1; diff --git a/src/KOKKOS/atom_vec_dpd_kokkos.cpp b/src/KOKKOS/atom_vec_dpd_kokkos.cpp index 8da89a49ca..4034efee9e 100644 --- a/src/KOKKOS/atom_vec_dpd_kokkos.cpp +++ b/src/KOKKOS/atom_vec_dpd_kokkos.cpp @@ -67,8 +67,8 @@ void AtomVecDPDKokkos::grow(int n) if (nmax < 0 || nmax > MAXSMALLINT) error->one(FLERR,"Per-processor system is too big"); - sync(Device,ALL_MASK); - modified(Device,ALL_MASK); + atomKK->sync(Device,ALL_MASK); + atomKK->modified(Device,ALL_MASK); memoryKK->grow_kokkos(atomKK->k_tag,atomKK->tag,nmax,"atom:tag"); memoryKK->grow_kokkos(atomKK->k_type,atomKK->type,nmax,"atom:type"); @@ -94,7 +94,7 @@ void AtomVecDPDKokkos::grow(int n) modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); grow_reset(); - sync(Host,ALL_MASK); + atomKK->sync(Host,ALL_MASK); } /* ---------------------------------------------------------------------- @@ -159,7 +159,7 @@ void AtomVecDPDKokkos::grow_reset() void AtomVecDPDKokkos::copy(int i, int j, int delflag) { - sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK | DPDTHETA_MASK | UCG_MASK | UCGNEW_MASK | UCOND_MASK | UMECH_MASK | UCHEM_MASK | DVECTOR_MASK); @@ -185,7 +185,7 @@ void AtomVecDPDKokkos::copy(int i, int j, int delflag) for (int iextra = 0; iextra < atom->nextra_grow; iextra++) modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); - modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK | DPDTHETA_MASK | UCG_MASK | UCGNEW_MASK | UCOND_MASK | UMECH_MASK | UCHEM_MASK | DVECTOR_MASK); @@ -269,7 +269,7 @@ int AtomVecDPDKokkos::pack_comm_kokkos(const int &n, // Choose correct forward PackComm kernel if(commKK->forward_comm_on_host) { - sync(Host,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); + atomKK->sync(Host,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); if(pbc_flag) { if(domain->triclinic) { struct AtomVecDPDKokkos_PackComm f(atomKK->k_x, @@ -304,7 +304,7 @@ int AtomVecDPDKokkos::pack_comm_kokkos(const int &n, } } } else { - sync(Device,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); + atomKK->sync(Device,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); if(pbc_flag) { if(domain->triclinic) { struct AtomVecDPDKokkos_PackComm f(atomKK->k_x, @@ -411,8 +411,8 @@ struct AtomVecDPDKokkos_PackCommSelf { int AtomVecDPDKokkos::pack_comm_self(const int &n, const DAT::tdual_int_2d &list, const int & iswap, const int nfirst, const int &pbc_flag, const int* const pbc) { if(commKK->forward_comm_on_host) { - sync(Host,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); - modified(Host,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); + atomKK->sync(Host,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); + atomKK->modified(Host,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); if(pbc_flag) { if(domain->triclinic) { struct AtomVecDPDKokkos_PackCommSelf f(atomKK->k_x, @@ -447,8 +447,8 @@ int AtomVecDPDKokkos::pack_comm_self(const int &n, const DAT::tdual_int_2d &list } } } else { - sync(Device,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); - modified(Device,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); + atomKK->sync(Device,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); + atomKK->modified(Device,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); if(pbc_flag) { if(domain->triclinic) { struct AtomVecDPDKokkos_PackCommSelf f(atomKK->k_x, @@ -529,15 +529,15 @@ struct AtomVecDPDKokkos_UnpackComm { void AtomVecDPDKokkos::unpack_comm_kokkos(const int &n, const int &first, const DAT::tdual_xfloat_2d &buf ) { if(commKK->forward_comm_on_host) { - sync(Host,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); - modified(Host,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); + atomKK->sync(Host,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); + atomKK->modified(Host,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); struct AtomVecDPDKokkos_UnpackComm f(atomKK->k_x, atomKK->k_dpdTheta,atomKK->k_uCond,atomKK->k_uMech,atomKK->k_uChem, buf,first); Kokkos::parallel_for(n,f); } else { - sync(Device,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); - modified(Device,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); + atomKK->sync(Device,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); + atomKK->modified(Device,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); struct AtomVecDPDKokkos_UnpackComm f(atomKK->k_x, atomKK->k_dpdTheta,atomKK->k_uCond,atomKK->k_uMech,atomKK->k_uChem, buf,first); @@ -553,7 +553,7 @@ int AtomVecDPDKokkos::pack_comm(int n, int *list, double *buf, int i,j,m; double dx,dy,dz; - sync(Host,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); + atomKK->sync(Host,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); m = 0; if (pbc_flag == 0) { @@ -599,7 +599,7 @@ int AtomVecDPDKokkos::pack_comm_vel(int n, int *list, double *buf, int i,j,m; double dx,dy,dz,dvx,dvy,dvz; - sync(Host,X_MASK|V_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); + atomKK->sync(Host,X_MASK|V_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); m = 0; if (pbc_flag == 0) { @@ -686,7 +686,7 @@ void AtomVecDPDKokkos::unpack_comm(int n, int first, double *buf) h_uChem[i] = buf[m++]; } - modified(Host,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); + atomKK->modified(Host,X_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); } /* ---------------------------------------------------------------------- */ @@ -710,7 +710,7 @@ void AtomVecDPDKokkos::unpack_comm_vel(int n, int first, double *buf) h_uChem[i] = buf[m++]; } - modified(Host,X_MASK|V_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); + atomKK->modified(Host,X_MASK|V_MASK|DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK); } /* ---------------------------------------------------------------------- */ @@ -718,7 +718,7 @@ void AtomVecDPDKokkos::unpack_comm_vel(int n, int first, double *buf) int AtomVecDPDKokkos::pack_reverse(int n, int first, double *buf) { if(n > 0) - sync(Host,F_MASK); + atomKK->sync(Host,F_MASK); int m = 0; const int last = first + n; @@ -735,8 +735,8 @@ int AtomVecDPDKokkos::pack_reverse(int n, int first, double *buf) void AtomVecDPDKokkos::unpack_reverse(int n, int *list, double *buf) { if(n > 0) { - sync(Host,F_MASK); - modified(Host,F_MASK); + atomKK->sync(Host,F_MASK); + atomKK->modified(Host,F_MASK); } int m = 0; @@ -820,7 +820,7 @@ int AtomVecDPDKokkos::pack_border_kokkos(int n, DAT::tdual_int_2d k_sendlist, DA { X_FLOAT dx,dy,dz; - sync(space,ALL_MASK); + atomKK->sync(space,ALL_MASK); if (pbc_flag != 0) { if (domain->triclinic == 0) { @@ -877,7 +877,7 @@ int AtomVecDPDKokkos::pack_border(int n, int *list, double *buf, int i,j,m; double dx,dy,dz; - sync(Host,ALL_MASK); + atomKK->sync(Host,ALL_MASK); m = 0; if (pbc_flag == 0) { @@ -938,7 +938,7 @@ int AtomVecDPDKokkos::pack_border_vel(int n, int *list, double *buf, int i,j,m; double dx,dy,dz,dvx,dvy,dvz; - sync(Host,ALL_MASK); + atomKK->sync(Host,ALL_MASK); m = 0; if (pbc_flag == 0) { @@ -1033,7 +1033,7 @@ int AtomVecDPDKokkos::pack_comm_hybrid(int n, int *list, double *buf) { int i,j,m; - sync(Host,DPDTHETA_MASK | UCOND_MASK | + atomKK->sync(Host,DPDTHETA_MASK | UCOND_MASK | UMECH_MASK | UCHEM_MASK); m = 0; @@ -1053,7 +1053,7 @@ int AtomVecDPDKokkos::pack_border_hybrid(int n, int *list, double *buf) { int i,j,m; - sync(Host,DPDTHETA_MASK | UCOND_MASK | + atomKK->sync(Host,DPDTHETA_MASK | UCOND_MASK | UMECH_MASK | UCHEM_MASK | UCG_MASK | UCGNEW_MASK); m = 0; @@ -1128,11 +1128,11 @@ struct AtomVecDPDKokkos_UnpackBorder { void AtomVecDPDKokkos::unpack_border_kokkos(const int &n, const int &first, const DAT::tdual_xfloat_2d &buf,ExecutionSpace space) { - modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK| + atomKK->modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK| DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK| UCG_MASK|UCGNEW_MASK); while (first+n >= nmax) grow(0); - modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK| + atomKK->modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK| DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK| UCG_MASK|UCGNEW_MASK|DVECTOR_MASK); if(space==Host) { @@ -1180,7 +1180,7 @@ void AtomVecDPDKokkos::unpack_border(int n, int first, double *buf) m += modify->fix[atom->extra_border[iextra]]-> unpack_border(n,first,&buf[m]); - modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK| + atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK| DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK| UCG_MASK|UCGNEW_MASK|DVECTOR_MASK); } @@ -1218,7 +1218,7 @@ void AtomVecDPDKokkos::unpack_border_vel(int n, int first, double *buf) m += modify->fix[atom->extra_border[iextra]]-> unpack_border(n,first,&buf[m]); - modified(Host,X_MASK|V_MASK|TAG_MASK|TYPE_MASK|MASK_MASK| + atomKK->modified(Host,X_MASK|V_MASK|TAG_MASK|TYPE_MASK|MASK_MASK| DPDTHETA_MASK|UCOND_MASK|UMECH_MASK|UCHEM_MASK| UCG_MASK|UCGNEW_MASK|DVECTOR_MASK); } @@ -1238,7 +1238,7 @@ int AtomVecDPDKokkos::unpack_comm_hybrid(int n, int first, double *buf) h_uChem(i) = buf[m++]; } - modified(Host,DPDTHETA_MASK | UCOND_MASK | + atomKK->modified(Host,DPDTHETA_MASK | UCOND_MASK | UMECH_MASK | UCHEM_MASK ); return m; @@ -1261,7 +1261,7 @@ int AtomVecDPDKokkos::unpack_border_hybrid(int n, int first, double *buf) h_uCGnew(i) = buf[m++]; } - modified(Host,DPDTHETA_MASK | UCOND_MASK | + atomKK->modified(Host,DPDTHETA_MASK | UCOND_MASK | UMECH_MASK | UCHEM_MASK | UCG_MASK | UCGNEW_MASK); return m; @@ -1385,7 +1385,7 @@ int AtomVecDPDKokkos::pack_exchange_kokkos(const int &nsend,DAT::tdual_xfloat_2d int newsize = nsend*17/k_buf.view().extent(1)+1; k_buf.resize(newsize,k_buf.view().extent(1)); } - sync(space,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->sync(space,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK| DPDTHETA_MASK | UCOND_MASK | UMECH_MASK | UCHEM_MASK | UCG_MASK | UCGNEW_MASK | DVECTOR_MASK); @@ -1403,7 +1403,7 @@ int AtomVecDPDKokkos::pack_exchange_kokkos(const int &nsend,DAT::tdual_xfloat_2d int AtomVecDPDKokkos::pack_exchange(int i, double *buf) { - sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK| DPDTHETA_MASK | UCOND_MASK | UMECH_MASK | UCHEM_MASK | UCG_MASK | UCGNEW_MASK | DVECTOR_MASK); @@ -1519,7 +1519,7 @@ int AtomVecDPDKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d &k_buf,int nre k_count.sync(); } - modified(space,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->modified(space,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK| DPDTHETA_MASK | UCOND_MASK | UMECH_MASK | UCHEM_MASK | UCG_MASK | UCGNEW_MASK | DVECTOR_MASK); @@ -1557,7 +1557,7 @@ int AtomVecDPDKokkos::unpack_exchange(double *buf) m += modify->fix[atom->extra_grow[iextra]]-> unpack_exchange(nlocal,&buf[m]); - modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK| DPDTHETA_MASK | UCOND_MASK | UMECH_MASK | UCHEM_MASK | UCG_MASK | UCGNEW_MASK | DVECTOR_MASK); @@ -1594,7 +1594,7 @@ int AtomVecDPDKokkos::size_restart() int AtomVecDPDKokkos::pack_restart(int i, double *buf) { - sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK | DPDTHETA_MASK | UCOND_MASK | UMECH_MASK | UCHEM_MASK | DVECTOR_MASK); @@ -1659,7 +1659,7 @@ int AtomVecDPDKokkos::unpack_restart(double *buf) for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; } - modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK | DPDTHETA_MASK | UCG_MASK | UCGNEW_MASK | UCOND_MASK | UMECH_MASK | UCHEM_MASK | DVECTOR_MASK); diff --git a/src/KOKKOS/atom_vec_full_kokkos.cpp b/src/KOKKOS/atom_vec_full_kokkos.cpp index c07f3e0381..034da88f73 100644 --- a/src/KOKKOS/atom_vec_full_kokkos.cpp +++ b/src/KOKKOS/atom_vec_full_kokkos.cpp @@ -65,8 +65,8 @@ void AtomVecFullKokkos::grow(int n) if (nmax < 0 || nmax > MAXSMALLINT) error->one(FLERR,"Per-processor system is too big"); - sync(Device,ALL_MASK); - modified(Device,ALL_MASK); + atomKK->sync(Device,ALL_MASK); + atomKK->modified(Device,ALL_MASK); memoryKK->grow_kokkos(atomKK->k_tag,atomKK->tag,nmax,"atom:tag"); memoryKK->grow_kokkos(atomKK->k_type,atomKK->type,nmax,"atom:type"); @@ -124,7 +124,7 @@ void AtomVecFullKokkos::grow(int n) atomKK->improper_per_atom,"atom:improper_atom4"); grow_reset(); - sync(Host,ALL_MASK); + atomKK->sync(Host,ALL_MASK); if (atom->nextra_grow) for (int iextra = 0; iextra < atom->nextra_grow; iextra++) @@ -609,9 +609,9 @@ struct AtomVecFullKokkos_UnpackBorder { void AtomVecFullKokkos::unpack_border_kokkos(const int &n, const int &first, const DAT::tdual_xfloat_2d &buf, ExecutionSpace space) { - modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|Q_MASK|MOLECULE_MASK); + atomKK->modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|Q_MASK|MOLECULE_MASK); while (first+n >= nmax) grow(0); - modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|Q_MASK|MOLECULE_MASK); + atomKK->modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|Q_MASK|MOLECULE_MASK); if(space==Host) { struct AtomVecFullKokkos_UnpackBorder f(buf.view(),h_x,h_tag,h_type,h_mask,h_q,h_molecule,first); @@ -633,7 +633,7 @@ void AtomVecFullKokkos::unpack_border(int n, int first, double *buf) last = first + n; for (i = first; i < last; i++) { if (i == nmax) grow(0); - modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|Q_MASK|MOLECULE_MASK); + atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|Q_MASK|MOLECULE_MASK); h_x(i,0) = buf[m++]; h_x(i,1) = buf[m++]; h_x(i,2) = buf[m++]; @@ -660,7 +660,7 @@ void AtomVecFullKokkos::unpack_border_vel(int n, int first, double *buf) last = first + n; for (i = first; i < last; i++) { if (i == nmax) grow(0); - modified(Host,X_MASK|V_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|Q_MASK|MOLECULE_MASK); + atomKK->modified(Host,X_MASK|V_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|Q_MASK|MOLECULE_MASK); h_x(i,0) = buf[m++]; h_x(i,1) = buf[m++]; h_x(i,2) = buf[m++]; @@ -1205,7 +1205,7 @@ int AtomVecFullKokkos::unpack_exchange(double *buf) { int nlocal = atom->nlocal; if (nlocal == nmax) grow(0); - modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK | Q_MASK | MOLECULE_MASK | BOND_MASK | ANGLE_MASK | DIHEDRAL_MASK | IMPROPER_MASK | SPECIAL_MASK); @@ -1298,7 +1298,7 @@ int AtomVecFullKokkos::size_restart() int AtomVecFullKokkos::pack_restart(int i, double *buf) { - sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK | Q_MASK | MOLECULE_MASK | BOND_MASK | ANGLE_MASK | DIHEDRAL_MASK | IMPROPER_MASK | SPECIAL_MASK); @@ -1371,10 +1371,10 @@ int AtomVecFullKokkos::unpack_restart(double *buf) if (atom->nextra_store) memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); } - sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK | Q_MASK | MOLECULE_MASK | BOND_MASK | ANGLE_MASK | DIHEDRAL_MASK | IMPROPER_MASK | SPECIAL_MASK); - modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK | Q_MASK | MOLECULE_MASK | BOND_MASK | ANGLE_MASK | DIHEDRAL_MASK | IMPROPER_MASK | SPECIAL_MASK); diff --git a/src/KOKKOS/atom_vec_hybrid_kokkos.cpp b/src/KOKKOS/atom_vec_hybrid_kokkos.cpp index ce36f59053..03cbe1ee5e 100644 --- a/src/KOKKOS/atom_vec_hybrid_kokkos.cpp +++ b/src/KOKKOS/atom_vec_hybrid_kokkos.cpp @@ -307,7 +307,7 @@ int AtomVecHybridKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d &k_buf, int int AtomVecHybridKokkos::pack_comm(int n, int *list, double *buf, int pbc_flag, int *pbc) { - sync(Host,X_MASK); + atomKK->sync(Host,X_MASK); int i,j,k,m; double dx,dy,dz; @@ -351,7 +351,7 @@ int AtomVecHybridKokkos::pack_comm(int n, int *list, double *buf, int AtomVecHybridKokkos::pack_comm_vel(int n, int *list, double *buf, int pbc_flag, int *pbc) { - sync(Host,X_MASK|V_MASK|OMEGA_MASK/*|ANGMOM_MASK*/); + atomKK->sync(Host,X_MASK|V_MASK|OMEGA_MASK/*|ANGMOM_MASK*/); int i,j,k,m; double dx,dy,dz,dvx,dvy,dvz; @@ -463,7 +463,7 @@ void AtomVecHybridKokkos::unpack_comm(int n, int first, double *buf) h_x(i,2) = buf[m++]; } - modified(Host,X_MASK); + atomKK->modified(Host,X_MASK); // unpack sub-style contributions as contiguous chunks @@ -500,7 +500,7 @@ void AtomVecHybridKokkos::unpack_comm_vel(int n, int first, double *buf) } } - modified(Host,X_MASK|V_MASK|OMEGA_MASK/*|ANGMOM_MASK*/); + atomKK->modified(Host,X_MASK|V_MASK|OMEGA_MASK/*|ANGMOM_MASK*/); // unpack sub-style contributions as contiguous chunks @@ -512,7 +512,7 @@ void AtomVecHybridKokkos::unpack_comm_vel(int n, int first, double *buf) int AtomVecHybridKokkos::pack_reverse(int n, int first, double *buf) { - sync(Host,F_MASK); + atomKK->sync(Host,F_MASK); int i,k,m,last; @@ -546,7 +546,7 @@ void AtomVecHybridKokkos::unpack_reverse(int n, int *list, double *buf) h_f(j,2) += buf[m++]; } - modified(Host,F_MASK); + atomKK->modified(Host,F_MASK); // unpack sub-style contributions as contiguous chunks @@ -559,7 +559,7 @@ void AtomVecHybridKokkos::unpack_reverse(int n, int *list, double *buf) int AtomVecHybridKokkos::pack_border(int n, int *list, double *buf, int pbc_flag, int *pbc) { - sync(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK); + atomKK->sync(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK); int i,j,k,m; double dx,dy,dz; @@ -613,7 +613,7 @@ int AtomVecHybridKokkos::pack_border(int n, int *list, double *buf, int AtomVecHybridKokkos::pack_border_vel(int n, int *list, double *buf, int pbc_flag, int *pbc) { - sync(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|V_MASK|OMEGA_MASK/*|ANGMOM_MASK*/); + atomKK->sync(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|V_MASK|OMEGA_MASK/*|ANGMOM_MASK*/); int i,j,k,m; double dx,dy,dz,dvx,dvy,dvz; int omega_flag = atom->omega_flag; @@ -741,7 +741,7 @@ void AtomVecHybridKokkos::unpack_border(int n, int first, double *buf) h_mask[i] = (int) ubuf(buf[m++]).i; } - modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK); + atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK); // unpack sub-style contributions as contiguous chunks @@ -787,7 +787,7 @@ void AtomVecHybridKokkos::unpack_border_vel(int n, int first, double *buf) } } - modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|V_MASK|OMEGA_MASK/*|ANGMOM_MASK*/); + atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|V_MASK|OMEGA_MASK/*|ANGMOM_MASK*/); // unpack sub-style contributions as contiguous chunks @@ -969,7 +969,7 @@ void AtomVecHybridKokkos::create_atom(int itype, double *coord) void AtomVecHybridKokkos::data_atom(double *coord, imageint imagetmp, char **values) { - sync(Host,X_MASK|TAG_MASK|TYPE_MASK|IMAGE_MASK|MASK_MASK|V_MASK|OMEGA_MASK/*|ANGMOM_MASK*/); + atomKK->sync(Host,X_MASK|TAG_MASK|TYPE_MASK|IMAGE_MASK|MASK_MASK|V_MASK|OMEGA_MASK/*|ANGMOM_MASK*/); int nlocal = atom->nlocal; if (nlocal == nmax) grow(0); @@ -1000,7 +1000,7 @@ void AtomVecHybridKokkos::data_atom(double *coord, imageint imagetmp, char **val h_angmom(nlocal,2) = 0.0; } - modified(Host,X_MASK|TAG_MASK|TYPE_MASK|IMAGE_MASK|MASK_MASK|V_MASK|OMEGA_MASK/*|ANGMOM_MASK*/); + atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|IMAGE_MASK|MASK_MASK|V_MASK|OMEGA_MASK/*|ANGMOM_MASK*/); // each sub-style parses sub-style specific values @@ -1017,13 +1017,13 @@ void AtomVecHybridKokkos::data_atom(double *coord, imageint imagetmp, char **val void AtomVecHybridKokkos::data_vel(int m, char **values) { - sync(Host,V_MASK); + atomKK->sync(Host,V_MASK); h_v(m,0) = atof(values[0]); h_v(m,1) = atof(values[1]); h_v(m,2) = atof(values[2]); - modified(Host,V_MASK); + atomKK->modified(Host,V_MASK); // each sub-style parses sub-style specific values @@ -1038,7 +1038,7 @@ void AtomVecHybridKokkos::data_vel(int m, char **values) void AtomVecHybridKokkos::pack_data(double **buf) { - sync(Host,TAG_MASK|TYPE_MASK|X_MASK); + atomKK->sync(Host,TAG_MASK|TYPE_MASK|X_MASK); int k,m; @@ -1089,7 +1089,7 @@ void AtomVecHybridKokkos::write_data(FILE *fp, int n, double **buf) void AtomVecHybridKokkos::pack_vel(double **buf) { - sync(Host,V_MASK); + atomKK->sync(Host,V_MASK); int k,m; diff --git a/src/KOKKOS/atom_vec_molecular_kokkos.cpp b/src/KOKKOS/atom_vec_molecular_kokkos.cpp index f832cddce2..9ac8ecd264 100644 --- a/src/KOKKOS/atom_vec_molecular_kokkos.cpp +++ b/src/KOKKOS/atom_vec_molecular_kokkos.cpp @@ -65,8 +65,8 @@ void AtomVecMolecularKokkos::grow(int n) if (nmax < 0 || nmax > MAXSMALLINT) error->one(FLERR,"Per-processor system is too big"); - sync(Device,ALL_MASK); - modified(Device,ALL_MASK); + atomKK->sync(Device,ALL_MASK); + atomKK->modified(Device,ALL_MASK); memoryKK->grow_kokkos(atomKK->k_tag,atomKK->tag,nmax,"atom:tag"); memoryKK->grow_kokkos(atomKK->k_type,atomKK->type,nmax,"atom:type"); @@ -122,7 +122,7 @@ void AtomVecMolecularKokkos::grow(int n) atomKK->improper_per_atom,"atom:improper_atom4"); grow_reset(); - sync(Host,ALL_MASK); + atomKK->sync(Host,ALL_MASK); if (atom->nextra_grow) for (int iextra = 0; iextra < atom->nextra_grow; iextra++) @@ -362,7 +362,7 @@ int AtomVecMolecularKokkos::pack_comm_kokkos(const int &n, // Choose correct forward PackComm kernel if(commKK->forward_comm_on_host) { - sync(Host,X_MASK); + atomKK->sync(Host,X_MASK); if(pbc_flag) { if(domain->triclinic) { struct AtomVecMolecularKokkos_PackComm @@ -389,7 +389,7 @@ int AtomVecMolecularKokkos::pack_comm_kokkos(const int &n, } } } else { - sync(Device,X_MASK); + atomKK->sync(Device,X_MASK); if(pbc_flag) { if(domain->triclinic) { struct AtomVecMolecularKokkos_PackComm @@ -478,8 +478,8 @@ int AtomVecMolecularKokkos::pack_comm_self(const int &n, const DAT::tdual_int_2d const int nfirst, const int &pbc_flag, const int* const pbc) { if(commKK->forward_comm_on_host) { - sync(Host,X_MASK); - modified(Host,X_MASK); + atomKK->sync(Host,X_MASK); + atomKK->modified(Host,X_MASK); if(pbc_flag) { if(domain->triclinic) { struct AtomVecMolecularKokkos_PackCommSelf @@ -506,8 +506,8 @@ int AtomVecMolecularKokkos::pack_comm_self(const int &n, const DAT::tdual_int_2d } } } else { - sync(Device,X_MASK); - modified(Device,X_MASK); + atomKK->sync(Device,X_MASK); + atomKK->modified(Device,X_MASK); if(pbc_flag) { if(domain->triclinic) { struct AtomVecMolecularKokkos_PackCommSelf @@ -566,13 +566,13 @@ struct AtomVecMolecularKokkos_UnpackComm { void AtomVecMolecularKokkos::unpack_comm_kokkos(const int &n, const int &first, const DAT::tdual_xfloat_2d &buf ) { if(commKK->forward_comm_on_host) { - sync(Host,X_MASK); - modified(Host,X_MASK); + atomKK->sync(Host,X_MASK); + atomKK->modified(Host,X_MASK); struct AtomVecMolecularKokkos_UnpackComm f(atomKK->k_x,buf,first); Kokkos::parallel_for(n,f); } else { - sync(Device,X_MASK); - modified(Device,X_MASK); + atomKK->sync(Device,X_MASK); + atomKK->modified(Device,X_MASK); struct AtomVecMolecularKokkos_UnpackComm f(atomKK->k_x,buf,first); Kokkos::parallel_for(n,f); } @@ -715,7 +715,7 @@ void AtomVecMolecularKokkos::unpack_comm_vel(int n, int first, double *buf) int AtomVecMolecularKokkos::pack_reverse(int n, int first, double *buf) { if(n > 0) - sync(Host,F_MASK); + atomKK->sync(Host,F_MASK); int m = 0; const int last = first + n; @@ -732,7 +732,7 @@ int AtomVecMolecularKokkos::pack_reverse(int n, int first, double *buf) void AtomVecMolecularKokkos::unpack_reverse(int n, int *list, double *buf) { if(n > 0) - modified(Host,F_MASK); + atomKK->modified(Host,F_MASK); int m = 0; for (int i = 0; i < n; i++) { @@ -1033,9 +1033,9 @@ struct AtomVecMolecularKokkos_UnpackBorder { void AtomVecMolecularKokkos::unpack_border_kokkos(const int &n, const int &first, const DAT::tdual_xfloat_2d &buf, ExecutionSpace space) { - modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); + atomKK->modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); while (first+n >= nmax) grow(0); - modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); + atomKK->modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); if(space==Host) { struct AtomVecMolecularKokkos_UnpackBorder f(buf.view(),h_x,h_tag,h_type,h_mask,h_molecule,first); @@ -1057,7 +1057,7 @@ void AtomVecMolecularKokkos::unpack_border(int n, int first, double *buf) last = first + n; for (i = first; i < last; i++) { if (i == nmax) grow(0); - modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); + atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); h_x(i,0) = buf[m++]; h_x(i,1) = buf[m++]; h_x(i,2) = buf[m++]; @@ -1083,7 +1083,7 @@ void AtomVecMolecularKokkos::unpack_border_vel(int n, int first, double *buf) last = first + n; for (i = first; i < last; i++) { if (i == nmax) grow(0); - modified(Host,X_MASK|V_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); + atomKK->modified(Host,X_MASK|V_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK); h_x(i,0) = buf[m++]; h_x(i,1) = buf[m++]; h_x(i,2) = buf[m++]; @@ -1616,7 +1616,7 @@ int AtomVecMolecularKokkos::unpack_exchange(double *buf) { int nlocal = atom->nlocal; if (nlocal == nmax) grow(0); - modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | ANGLE_MASK | DIHEDRAL_MASK | IMPROPER_MASK | SPECIAL_MASK); @@ -1708,7 +1708,7 @@ int AtomVecMolecularKokkos::size_restart() int AtomVecMolecularKokkos::pack_restart(int i, double *buf) { - sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | ANGLE_MASK | DIHEDRAL_MASK | IMPROPER_MASK | SPECIAL_MASK); @@ -1781,7 +1781,7 @@ int AtomVecMolecularKokkos::unpack_restart(double *buf) memory->grow(atom->extra,nmax,atom->nextra_store,"atom:extra"); } - modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK | MOLECULE_MASK | BOND_MASK | ANGLE_MASK | DIHEDRAL_MASK | IMPROPER_MASK | SPECIAL_MASK); diff --git a/src/KOKKOS/atom_vec_sphere_kokkos.cpp b/src/KOKKOS/atom_vec_sphere_kokkos.cpp index 17c2e8d804..9e8388488f 100644 --- a/src/KOKKOS/atom_vec_sphere_kokkos.cpp +++ b/src/KOKKOS/atom_vec_sphere_kokkos.cpp @@ -100,8 +100,8 @@ void AtomVecSphereKokkos::grow(int n) if (nmax < 0 || nmax > MAXSMALLINT) error->one(FLERR,"Per-processor system is too big"); - sync(Device,ALL_MASK); - modified(Device,ALL_MASK); + atomKK->sync(Device,ALL_MASK); + atomKK->modified(Device,ALL_MASK); memoryKK->grow_kokkos(atomKK->k_tag,atomKK->tag,nmax,"atom:tag"); memoryKK->grow_kokkos(atomKK->k_type,atomKK->type,nmax,"atom:type"); @@ -121,7 +121,7 @@ void AtomVecSphereKokkos::grow(int n) modify->fix[atom->extra_grow[iextra]]->grow_arrays(nmax); grow_reset(); - sync(Host,ALL_MASK); + atomKK->sync(Host,ALL_MASK); } /* ---------------------------------------------------------------------- @@ -173,7 +173,7 @@ void AtomVecSphereKokkos::grow_reset() void AtomVecSphereKokkos::copy(int i, int j, int delflag) { - sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK | RADIUS_MASK | RMASS_MASK | OMEGA_MASK); @@ -198,7 +198,7 @@ void AtomVecSphereKokkos::copy(int i, int j, int delflag) for (int iextra = 0; iextra < atom->nextra_grow; iextra++) modify->fix[atom->extra_grow[iextra]]->copy_arrays(i,j,delflag); - modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK | RADIUS_MASK | RMASS_MASK | OMEGA_MASK); } @@ -278,7 +278,7 @@ int AtomVecSphereKokkos::pack_comm_kokkos( // Check whether to always run forward communication on the host // Choose correct forward PackComm kernel if(commKK->forward_comm_on_host) { - sync(Host,X_MASK|RADIUS_MASK|RMASS_MASK); + atomKK->sync(Host,X_MASK|RADIUS_MASK|RMASS_MASK); if(pbc_flag) { if(domain->triclinic) { struct AtomVecSphereKokkos_PackComm f( @@ -317,7 +317,7 @@ int AtomVecSphereKokkos::pack_comm_kokkos( } } } else { - sync(Device,X_MASK|RADIUS_MASK|RMASS_MASK); + atomKK->sync(Device,X_MASK|RADIUS_MASK|RMASS_MASK); if(pbc_flag) { if(domain->triclinic) { struct AtomVecSphereKokkos_PackComm f( @@ -465,7 +465,7 @@ int AtomVecSphereKokkos::pack_comm_vel_kokkos( const int* const pbc) { if(commKK->forward_comm_on_host) { - sync(Host,X_MASK|RADIUS_MASK|RMASS_MASK|V_MASK|OMEGA_MASK); + atomKK->sync(Host,X_MASK|RADIUS_MASK|RMASS_MASK|V_MASK|OMEGA_MASK); if(pbc_flag) { if(deform_vremap) { if(domain->triclinic) { @@ -596,7 +596,7 @@ int AtomVecSphereKokkos::pack_comm_vel_kokkos( } } } else { - sync(Device,X_MASK|RADIUS_MASK|RMASS_MASK|V_MASK|OMEGA_MASK); + atomKK->sync(Device,X_MASK|RADIUS_MASK|RMASS_MASK|V_MASK|OMEGA_MASK); if(pbc_flag) { if(deform_vremap) { if(domain->triclinic) { @@ -796,8 +796,8 @@ int AtomVecSphereKokkos::pack_comm_self( if (radvary == 0) return AtomVecKokkos::pack_comm_self(n,list,iswap,nfirst,pbc_flag,pbc); if(commKK->forward_comm_on_host) { - sync(Host,X_MASK|RADIUS_MASK|RMASS_MASK); - modified(Host,X_MASK|RADIUS_MASK|RMASS_MASK); + atomKK->sync(Host,X_MASK|RADIUS_MASK|RMASS_MASK); + atomKK->modified(Host,X_MASK|RADIUS_MASK|RMASS_MASK); if(pbc_flag) { if(domain->triclinic) { struct AtomVecSphereKokkos_PackCommSelf f( @@ -836,8 +836,8 @@ int AtomVecSphereKokkos::pack_comm_self( } } } else { - sync(Device,X_MASK|RADIUS_MASK|RMASS_MASK); - modified(Device,X_MASK|RADIUS_MASK|RMASS_MASK); + atomKK->sync(Device,X_MASK|RADIUS_MASK|RMASS_MASK); + atomKK->modified(Device,X_MASK|RADIUS_MASK|RMASS_MASK); if(pbc_flag) { if(domain->triclinic) { struct AtomVecSphereKokkos_PackCommSelf f( @@ -927,14 +927,14 @@ void AtomVecSphereKokkos::unpack_comm_kokkos( return; } if(commKK->forward_comm_on_host) { - modified(Host,X_MASK|RADIUS_MASK|RMASS_MASK); + atomKK->modified(Host,X_MASK|RADIUS_MASK|RMASS_MASK); struct AtomVecSphereKokkos_UnpackComm f( atomKK->k_x, atomKK->k_radius,atomKK->k_rmass, buf,first); Kokkos::parallel_for(n,f); } else { - modified(Device,X_MASK|RADIUS_MASK|RMASS_MASK); + atomKK->modified(Device,X_MASK|RADIUS_MASK|RMASS_MASK); struct AtomVecSphereKokkos_UnpackComm f( atomKK->k_x, atomKK->k_radius,atomKK->k_rmass, @@ -999,7 +999,7 @@ void AtomVecSphereKokkos::unpack_comm_vel_kokkos( const int &n, const int &first, const DAT::tdual_xfloat_2d &buf ) { if(commKK->forward_comm_on_host) { - modified(Host,X_MASK|RADIUS_MASK|RMASS_MASK|V_MASK|OMEGA_MASK); + atomKK->modified(Host,X_MASK|RADIUS_MASK|RMASS_MASK|V_MASK|OMEGA_MASK); if (radvary == 0) { struct AtomVecSphereKokkos_UnpackCommVel f( atomKK->k_x, @@ -1016,7 +1016,7 @@ void AtomVecSphereKokkos::unpack_comm_vel_kokkos( Kokkos::parallel_for(n,f); } } else { - modified(Device,X_MASK|RADIUS_MASK|RMASS_MASK|V_MASK|OMEGA_MASK); + atomKK->modified(Device,X_MASK|RADIUS_MASK|RMASS_MASK|V_MASK|OMEGA_MASK); if (radvary == 0) { struct AtomVecSphereKokkos_UnpackCommVel f( atomKK->k_x, @@ -1045,7 +1045,7 @@ int AtomVecSphereKokkos::pack_comm(int n, int *list, double *buf, if (radvary == 0) { // Not sure if we need to call sync for X here - sync(Host,X_MASK); + atomKK->sync(Host,X_MASK); m = 0; if (pbc_flag == 0) { for (i = 0; i < n; i++) { @@ -1072,7 +1072,7 @@ int AtomVecSphereKokkos::pack_comm(int n, int *list, double *buf, } } } else { - sync(Host,X_MASK|RADIUS_MASK|RMASS_MASK); + atomKK->sync(Host,X_MASK|RADIUS_MASK|RMASS_MASK); m = 0; if (pbc_flag == 0) { for (i = 0; i < n; i++) { @@ -1116,7 +1116,7 @@ int AtomVecSphereKokkos::pack_comm_vel(int n, int *list, double *buf, double dx,dy,dz,dvx,dvy,dvz; if (radvary == 0) { - sync(Host,X_MASK|V_MASK|OMEGA_MASK); + atomKK->sync(Host,X_MASK|V_MASK|OMEGA_MASK); m = 0; if (pbc_flag == 0) { for (i = 0; i < n; i++) { @@ -1179,7 +1179,7 @@ int AtomVecSphereKokkos::pack_comm_vel(int n, int *list, double *buf, } } } else { - sync(Host,X_MASK|RADIUS_MASK|RMASS_MASK|V_MASK|OMEGA_MASK); + atomKK->sync(Host,X_MASK|RADIUS_MASK|RMASS_MASK|V_MASK|OMEGA_MASK); m = 0; if (pbc_flag == 0) { for (i = 0; i < n; i++) { @@ -1258,7 +1258,7 @@ int AtomVecSphereKokkos::pack_comm_hybrid(int n, int *list, double *buf) { if (radvary == 0) return 0; - sync(Host,RADIUS_MASK|RMASS_MASK); + atomKK->sync(Host,RADIUS_MASK|RMASS_MASK); int m = 0; for (int i = 0; i < n; i++) { @@ -1281,7 +1281,7 @@ void AtomVecSphereKokkos::unpack_comm(int n, int first, double *buf) h_x(i,1) = buf[m++]; h_x(i,2) = buf[m++]; } - modified(Host,X_MASK); + atomKK->modified(Host,X_MASK); } else { int m = 0; const int last = first + n; @@ -1292,7 +1292,7 @@ void AtomVecSphereKokkos::unpack_comm(int n, int first, double *buf) h_radius[i] = buf[m++]; h_rmass[i] = buf[m++]; } - modified(Host,X_MASK|RADIUS_MASK|RMASS_MASK); + atomKK->modified(Host,X_MASK|RADIUS_MASK|RMASS_MASK); } } @@ -1314,7 +1314,7 @@ void AtomVecSphereKokkos::unpack_comm_vel(int n, int first, double *buf) h_omega(i,1) = buf[m++]; h_omega(i,2) = buf[m++]; } - modified(Host,X_MASK|V_MASK|OMEGA_MASK); + atomKK->modified(Host,X_MASK|V_MASK|OMEGA_MASK); } else { int m = 0; const int last = first + n; @@ -1331,7 +1331,7 @@ void AtomVecSphereKokkos::unpack_comm_vel(int n, int first, double *buf) h_omega(i,1) = buf[m++]; h_omega(i,2) = buf[m++]; } - modified(Host,X_MASK|RADIUS_MASK|RMASS_MASK|V_MASK|OMEGA_MASK); + atomKK->modified(Host,X_MASK|RADIUS_MASK|RMASS_MASK|V_MASK|OMEGA_MASK); } } @@ -1347,7 +1347,7 @@ int AtomVecSphereKokkos::unpack_comm_hybrid(int n, int first, double *buf) h_radius[i] = buf[m++]; h_rmass[i] = buf[m++]; } - modified(Host,RADIUS_MASK|RMASS_MASK); + atomKK->modified(Host,RADIUS_MASK|RMASS_MASK); return m; } @@ -1356,7 +1356,7 @@ int AtomVecSphereKokkos::unpack_comm_hybrid(int n, int first, double *buf) int AtomVecSphereKokkos::pack_reverse(int n, int first, double *buf) { if(n > 0) - sync(Host,F_MASK|TORQUE_MASK); + atomKK->sync(Host,F_MASK|TORQUE_MASK); int m = 0; const int last = first + n; @@ -1376,7 +1376,7 @@ int AtomVecSphereKokkos::pack_reverse(int n, int first, double *buf) int AtomVecSphereKokkos::pack_reverse_hybrid(int n, int first, double *buf) { if(n > 0) - sync(Host,TORQUE_MASK); + atomKK->sync(Host,TORQUE_MASK); int m = 0; const int last = first + n; @@ -1393,7 +1393,7 @@ int AtomVecSphereKokkos::pack_reverse_hybrid(int n, int first, double *buf) void AtomVecSphereKokkos::unpack_reverse(int n, int *list, double *buf) { if(n > 0) { - modified(Host,F_MASK|TORQUE_MASK); + atomKK->modified(Host,F_MASK|TORQUE_MASK); } int m = 0; @@ -1413,7 +1413,7 @@ void AtomVecSphereKokkos::unpack_reverse(int n, int *list, double *buf) int AtomVecSphereKokkos::unpack_reverse_hybrid(int n, int *list, double *buf) { if(n > 0) { - modified(Host,TORQUE_MASK); + atomKK->modified(Host,TORQUE_MASK); } int m = 0; @@ -1493,7 +1493,7 @@ int AtomVecSphereKokkos::pack_border_kokkos( X_FLOAT dx,dy,dz; // This was in atom_vec_dpd_kokkos but doesn't appear in any other atom_vec - sync(space,ALL_MASK); + atomKK->sync(space,ALL_MASK); if (pbc_flag != 0) { if (domain->triclinic == 0) { @@ -1550,7 +1550,7 @@ int AtomVecSphereKokkos::pack_border( int i,j,m; double dx,dy,dz; - sync(Host,ALL_MASK); + atomKK->sync(Host,ALL_MASK); m = 0; if (pbc_flag == 0) { @@ -1687,7 +1687,7 @@ int AtomVecSphereKokkos::pack_border_vel_kokkos( X_FLOAT dvx=0,dvy=0,dvz=0; // This was in atom_vec_dpd_kokkos but doesn't appear in any other atom_vec - sync(space,ALL_MASK); + atomKK->sync(space,ALL_MASK); if (pbc_flag != 0) { if (domain->triclinic == 0) { @@ -1777,7 +1777,7 @@ int AtomVecSphereKokkos::pack_border_vel(int n, int *list, double *buf, int i,j,m; double dx,dy,dz,dvx,dvy,dvz; - sync(Host,ALL_MASK); + atomKK->sync(Host,ALL_MASK); m = 0; if (pbc_flag == 0) { @@ -1867,7 +1867,7 @@ int AtomVecSphereKokkos::pack_border_vel(int n, int *list, double *buf, int AtomVecSphereKokkos::pack_border_hybrid(int n, int *list, double *buf) { - sync(Host,RADIUS_MASK|RMASS_MASK); + atomKK->sync(Host,RADIUS_MASK|RMASS_MASK); int m = 0; for (int i = 0; i < n; i++) { @@ -1943,7 +1943,7 @@ void AtomVecSphereKokkos::unpack_border_kokkos(const int &n, const int &first, Kokkos::parallel_for(n,f); } - modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK| + atomKK->modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK| RADIUS_MASK|RMASS_MASK); } @@ -1970,7 +1970,7 @@ void AtomVecSphereKokkos::unpack_border(int n, int first, double *buf) m += modify->fix[atom->extra_border[iextra]]-> unpack_border(n,first,&buf[m]); - modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|RADIUS_MASK|RMASS_MASK); + atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|RADIUS_MASK|RMASS_MASK); } @@ -2053,7 +2053,7 @@ void AtomVecSphereKokkos::unpack_border_vel_kokkos( Kokkos::parallel_for(n,f); } - modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK| + atomKK->modified(space,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK| RADIUS_MASK|RMASS_MASK|V_MASK|OMEGA_MASK); } @@ -2086,7 +2086,7 @@ void AtomVecSphereKokkos::unpack_border_vel(int n, int first, double *buf) m += modify->fix[atom->extra_border[iextra]]-> unpack_border(n,first,&buf[m]); - modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|RADIUS_MASK|RMASS_MASK|V_MASK|OMEGA_MASK); + atomKK->modified(Host,X_MASK|TAG_MASK|TYPE_MASK|MASK_MASK|RADIUS_MASK|RMASS_MASK|V_MASK|OMEGA_MASK); } /* ---------------------------------------------------------------------- */ @@ -2099,7 +2099,7 @@ int AtomVecSphereKokkos::unpack_border_hybrid(int n, int first, double *buf) h_radius[i] = buf[m++]; h_rmass[i] = buf[m++]; } - modified(Host,RADIUS_MASK|RMASS_MASK); + atomKK->modified(Host,RADIUS_MASK|RMASS_MASK); return m; } @@ -2219,7 +2219,7 @@ int AtomVecSphereKokkos::pack_exchange_kokkos( int newsize = nsend*17/k_buf.view().extent(1)+1; k_buf.resize(newsize,k_buf.view().extent(1)); } - sync(space,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->sync(space,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK| RADIUS_MASK | RMASS_MASK | OMEGA_MASK); @@ -2240,7 +2240,7 @@ int AtomVecSphereKokkos::pack_exchange_kokkos( int AtomVecSphereKokkos::pack_exchange(int i, double *buf) { - sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->sync(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK| RADIUS_MASK | RMASS_MASK | OMEGA_MASK); @@ -2355,7 +2355,7 @@ int AtomVecSphereKokkos::unpack_exchange_kokkos(DAT::tdual_xfloat_2d &k_buf,int k_count.sync(); } - modified(space,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->modified(space,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK| RADIUS_MASK | RMASS_MASK | OMEGA_MASK); @@ -2392,7 +2392,7 @@ int AtomVecSphereKokkos::unpack_exchange(double *buf) m += modify->fix[atom->extra_grow[iextra]]-> unpack_exchange(nlocal,&buf[m]); - modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | + atomKK->modified(Host,X_MASK | V_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK | RADIUS_MASK | RMASS_MASK | OMEGA_MASK); @@ -2428,7 +2428,7 @@ int AtomVecSphereKokkos::size_restart() int AtomVecSphereKokkos::pack_restart(int i, double *buf) { - sync(Host,X_MASK | TAG_MASK | TYPE_MASK | + atomKK->sync(Host,X_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK | V_MASK | RADIUS_MASK | RMASS_MASK | OMEGA_MASK); @@ -2495,7 +2495,7 @@ int AtomVecSphereKokkos::unpack_restart(double *buf) for (int i = 0; i < size; i++) extra[nlocal][i] = buf[m++]; } - modified(Host,X_MASK | TAG_MASK | TYPE_MASK | + atomKK->modified(Host,X_MASK | TAG_MASK | TYPE_MASK | MASK_MASK | IMAGE_MASK | V_MASK | RADIUS_MASK | RMASS_MASK | OMEGA_MASK); @@ -2617,14 +2617,14 @@ int AtomVecSphereKokkos::data_atom_hybrid(int nlocal, char **values) void AtomVecSphereKokkos::data_vel(int m, char **values) { - sync(Host,V_MASK|OMEGA_MASK); + atomKK->sync(Host,V_MASK|OMEGA_MASK); h_v(m,0) = atof(values[0]); h_v(m,1) = atof(values[1]); h_v(m,2) = atof(values[2]); h_omega(m,0) = atof(values[3]); h_omega(m,1) = atof(values[4]); h_omega(m,2) = atof(values[5]); - modified(Host,V_MASK|OMEGA_MASK); + atomKK->modified(Host,V_MASK|OMEGA_MASK); } /* ---------------------------------------------------------------------- @@ -2633,11 +2633,11 @@ void AtomVecSphereKokkos::data_vel(int m, char **values) int AtomVecSphereKokkos::data_vel_hybrid(int m, char **values) { - sync(Host,OMEGA_MASK); + atomKK->sync(Host,OMEGA_MASK); omega[m][0] = atof(values[0]); omega[m][1] = atof(values[1]); omega[m][2] = atof(values[2]); - modified(Host,OMEGA_MASK); + atomKK->modified(Host,OMEGA_MASK); return 3; } @@ -2712,7 +2712,7 @@ int AtomVecSphereKokkos::write_data_hybrid(FILE *fp, double *buf) void AtomVecSphereKokkos::pack_vel(double **buf) { - sync(Host,TAG_MASK|V_MASK|OMEGA_MASK); + atomKK->sync(Host,TAG_MASK|V_MASK|OMEGA_MASK); int nlocal = atom->nlocal; for (int i = 0; i < nlocal; i++) { @@ -2732,7 +2732,7 @@ void AtomVecSphereKokkos::pack_vel(double **buf) int AtomVecSphereKokkos::pack_vel_hybrid(int i, double *buf) { - sync(Host,OMEGA_MASK); + atomKK->sync(Host,OMEGA_MASK); buf[0] = h_omega(i,0); buf[1] = h_omega(i,1); From 95ab0565762f1eee1a3327065fad19aa4df48d18 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 21 May 2019 10:07:41 -0600 Subject: [PATCH 179/311] Add PPPM dipole reference --- doc/src/kspace_modify.txt | 3 ++- doc/src/kspace_style.txt | 14 +++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/doc/src/kspace_modify.txt b/doc/src/kspace_modify.txt index 65b2174334..c5a2ce1b69 100644 --- a/doc/src/kspace_modify.txt +++ b/doc/src/kspace_modify.txt @@ -392,7 +392,8 @@ boundaries can be set using "boundary"_boundary.html (the slab approximation in not needed). The {slab} keyword is not currently supported by Ewald or PPPM when using a triclinic simulation cell. The slab correction has also been extended to point dipole interactions -"(Klapp)"_#Klapp in "kspace_style"_kspace_style.html {ewald/disp}. +"(Klapp)"_#Klapp in "kspace_style"_kspace_style.html {ewald/disp}, +{ewald/dipole}, and {pppm/dipole}. NOTE: If you wish to apply an electric field in the Z-direction, in conjunction with the {slab} keyword, you should do it by adding diff --git a/doc/src/kspace_style.txt b/doc/src/kspace_style.txt index 93709600df..98ec1e64e6 100644 --- a/doc/src/kspace_style.txt +++ b/doc/src/kspace_style.txt @@ -113,9 +113,11 @@ The {ewald/disp} style adds a long-range dispersion sum option for but in a more efficient manner than the {ewald} style. The 1/r^6 capability means that Lennard-Jones or Buckingham potentials can be used without a cutoff, i.e. they become full long-range potentials. +The {ewald/disp} style can also be used with point-dipoles, see +"(Toukmaji)"_#Toukmaji. The {ewald/dipole} style adds long-range standard Ewald summations -for dipole-dipole interactions. +for dipole-dipole interactions, see "(Toukmaji)"_#Toukmaji. The {ewald/dipole/spin} style adds long-range standard Ewald summations for magnetic dipole-dipole interactions between @@ -141,7 +143,7 @@ charge value which determines whether a particle is considered charged or not. Its default value is 1.0e-5. The {pppm/dipole} style invokes a particle-particle particle-mesh solver -for dipole-dipole interactions. +for dipole-dipole interactions, following the method of "(Cerda)"_#Cerda2008. The {pppm/dipole/spin} style invokes a particle-particle particle-mesh solver for magnetic dipole-dipole interactions between magnetic spins. @@ -335,7 +337,10 @@ using ideas from chapter 3 of "(Hardy)"_#Hardy2006, with equation 3.197 of particular note. When using {msm} with non-periodic boundary conditions, it is expected that the error estimation will be too pessimistic. RMS force errors for dipoles when using {ewald/disp} -are estimated using equations 33 and 46 of "(Wang)"_#Wang. +or {ewald/dipole} are estimated using equations 33 and 46 of +"(Wang)"_#Wang. The RMS force errors for {pppm/dipole} are estimated +using the equations in "(Cerda)"_#Cerda2008. + See the "kspace_modify"_kspace_modify.html command for additional options of the K-space solvers that can be set, including a {force} @@ -482,6 +487,9 @@ Illinois at Urbana-Champaign, (2006). :link(Sutmann2013) [(Sutmann)] Sutmann, Arnold, Fahrenberger, et. al., Physical review / E 88(6), 063308 (2013) +:link(Cerda2008) +[(Cerda)] Cerda, Ballenegger, Lenz, Holm, J Chem Phys 129, 234104 (2008) + :link(Who2012) [(Who)] Who, Author2, Author3, J of Long Range Solvers, 35, 164-177 (2012). From 2fbc4f504d279c9aa76e95eed2b2ea597e22be78 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 21 May 2019 10:16:13 -0600 Subject: [PATCH 180/311] Per-atom virial is not yet supported with pppm/dipole --- src/KSPACE/ewald_dipole.cpp | 3 +-- src/KSPACE/ewald_dipole_spin.cpp | 1 - src/KSPACE/pppm_dipole.cpp | 7 +++++-- src/KSPACE/pppm_dipole.h | 4 ++++ src/KSPACE/pppm_dipole_spin.cpp | 7 +++++-- src/KSPACE/pppm_dipole_spin.h | 4 ++++ 6 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/KSPACE/ewald_dipole.cpp b/src/KSPACE/ewald_dipole.cpp index 25661555fa..89ef7e39a8 100644 --- a/src/KSPACE/ewald_dipole.cpp +++ b/src/KSPACE/ewald_dipole.cpp @@ -12,8 +12,7 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing authors: Julien Tranchida (SNL) - Stan Moore (SNL) + Contributing authors: Julien Tranchida (SNL), Stan Moore (SNL) ------------------------------------------------------------------------- */ #include diff --git a/src/KSPACE/ewald_dipole_spin.cpp b/src/KSPACE/ewald_dipole_spin.cpp index 35f5daafba..dea563eb99 100644 --- a/src/KSPACE/ewald_dipole_spin.cpp +++ b/src/KSPACE/ewald_dipole_spin.cpp @@ -13,7 +13,6 @@ /* ---------------------------------------------------------------------- Contributing authors: Julien Tranchida (SNL) - Stan Moore (SNL) ------------------------------------------------------------------------- */ #include diff --git a/src/KSPACE/pppm_dipole.cpp b/src/KSPACE/pppm_dipole.cpp index 3603222def..278d3b1f9d 100644 --- a/src/KSPACE/pppm_dipole.cpp +++ b/src/KSPACE/pppm_dipole.cpp @@ -12,8 +12,7 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Stan Moore (SNL) - Julien Tranchida (SNL) + Contributing authors: Stan Moore (SNL), Julien Tranchida (SNL) ------------------------------------------------------------------------- */ #include @@ -441,6 +440,10 @@ void PPPMDipole::compute(int eflag, int vflag) else evflag = evflag_atom = eflag_global = vflag_global = eflag_atom = vflag_atom = 0; + if (vflag_atom) + error->all(FLERR,"Cannot (yet) compute per-atom virial " + "with kspace style pppm/dipole" + if (evflag_atom && !peratom_allocate_flag) { allocate_peratom(); cg_peratom_dipole->ghost_notify(); diff --git a/src/KSPACE/pppm_dipole.h b/src/KSPACE/pppm_dipole.h index 28c731b88b..d06919644b 100644 --- a/src/KSPACE/pppm_dipole.h +++ b/src/KSPACE/pppm_dipole.h @@ -160,6 +160,10 @@ E: PPPM grid stencil extends beyond nearest neighbor processor This is not allowed if the kspace_modify overlap setting is no. +E: Cannot (yet) compute per-atom virial with kspace style pppm/dipole + +This feature is not yet supported. + E: KSpace accuracy must be > 0 The kspace accuracy designated in the input must be greater than zero. diff --git a/src/KSPACE/pppm_dipole_spin.cpp b/src/KSPACE/pppm_dipole_spin.cpp index 23d7beaece..caa9ba47ab 100644 --- a/src/KSPACE/pppm_dipole_spin.cpp +++ b/src/KSPACE/pppm_dipole_spin.cpp @@ -12,8 +12,7 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Stan Moore (SNL) - Julien Tranchida (SNL) + Contributing author: Julien Tranchida (SNL) ------------------------------------------------------------------------- */ #include @@ -300,6 +299,10 @@ void PPPMDipoleSpin::compute(int eflag, int vflag) else evflag = evflag_atom = eflag_global = vflag_global = eflag_atom = vflag_atom = 0; + if (vflag_atom) + error->all(FLERR,"Cannot (yet) compute per-atom virial " + "with kspace style pppm/dipole/spin" + if (evflag_atom && !peratom_allocate_flag) { allocate_peratom(); cg_peratom_dipole->ghost_notify(); diff --git a/src/KSPACE/pppm_dipole_spin.h b/src/KSPACE/pppm_dipole_spin.h index c5a384b688..2b4a989d5c 100644 --- a/src/KSPACE/pppm_dipole_spin.h +++ b/src/KSPACE/pppm_dipole_spin.h @@ -119,6 +119,10 @@ E: PPPM grid stencil extends beyond nearest neighbor processor This is not allowed if the kspace_modify overlap setting is no. +E: Cannot (yet) compute per-atom virial with kspace style pppm/dipole/spin + +This feature is not yet supported. + E: KSpace accuracy must be > 0 The kspace accuracy designated in the input must be greater than zero. From 0ee1daa46dd668da6dbd579c94822813f3e156d2 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 21 May 2019 10:24:24 -0600 Subject: [PATCH 181/311] Add Lenz to false-positive list --- doc/utils/sphinx-config/false_positives.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 2d0575ca70..35572f1647 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -1405,6 +1405,7 @@ Lenart lennard Lennard Lenosky +Lenz Lett Leuven Leven From ed7c09ac8145218ecea252a991d2ea2efb671df8 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 21 May 2019 10:30:33 -0600 Subject: [PATCH 182/311] Add missing character --- src/KSPACE/pppm_dipole.cpp | 2 +- src/KSPACE/pppm_dipole_spin.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/KSPACE/pppm_dipole.cpp b/src/KSPACE/pppm_dipole.cpp index 278d3b1f9d..21a777dd75 100644 --- a/src/KSPACE/pppm_dipole.cpp +++ b/src/KSPACE/pppm_dipole.cpp @@ -442,7 +442,7 @@ void PPPMDipole::compute(int eflag, int vflag) if (vflag_atom) error->all(FLERR,"Cannot (yet) compute per-atom virial " - "with kspace style pppm/dipole" + "with kspace style pppm/dipole"); if (evflag_atom && !peratom_allocate_flag) { allocate_peratom(); diff --git a/src/KSPACE/pppm_dipole_spin.cpp b/src/KSPACE/pppm_dipole_spin.cpp index caa9ba47ab..cee879422c 100644 --- a/src/KSPACE/pppm_dipole_spin.cpp +++ b/src/KSPACE/pppm_dipole_spin.cpp @@ -301,7 +301,7 @@ void PPPMDipoleSpin::compute(int eflag, int vflag) if (vflag_atom) error->all(FLERR,"Cannot (yet) compute per-atom virial " - "with kspace style pppm/dipole/spin" + "with kspace style pppm/dipole/spin"); if (evflag_atom && !peratom_allocate_flag) { allocate_peratom(); From 439e7da03f7a67fb0b74788659a81d8a6a6618be Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 21 May 2019 11:47:26 -0600 Subject: [PATCH 183/311] Need auto-sync on for initialization --- src/KOKKOS/verlet_kokkos.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/KOKKOS/verlet_kokkos.cpp b/src/KOKKOS/verlet_kokkos.cpp index d75a7e491f..73ba7d3d07 100644 --- a/src/KOKKOS/verlet_kokkos.cpp +++ b/src/KOKKOS/verlet_kokkos.cpp @@ -93,7 +93,6 @@ void VerletKokkos::setup(int flag) } update->setupflag = 1; - lmp->kokkos->auto_sync = 0; // setup domain, communication and neighboring // acquire ghosts @@ -189,7 +188,6 @@ void VerletKokkos::setup(int flag) modify->setup(vflag); output->setup(flag); - lmp->kokkos->auto_sync = 1; update->setupflag = 0; } @@ -202,7 +200,6 @@ void VerletKokkos::setup(int flag) void VerletKokkos::setup_minimal(int flag) { update->setupflag = 1; - lmp->kokkos->auto_sync = 0; // setup domain, communication and neighboring // acquire ghosts @@ -294,7 +291,6 @@ void VerletKokkos::setup_minimal(int flag) if (force->newton) comm->reverse_comm(); modify->setup(vflag); - lmp->kokkos->auto_sync = 1; update->setupflag = 0; } From eea67bf3bfce2a36d4079b4741cc82d9f68421f0 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Wed, 22 May 2019 08:52:57 -0600 Subject: [PATCH 184/311] Add sync/modify for growing dvector --- src/KOKKOS/atom_kokkos.cpp | 3 +++ src/KOKKOS/fix_property_atom_kokkos.cpp | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/KOKKOS/atom_kokkos.cpp b/src/KOKKOS/atom_kokkos.cpp index b54719e852..813c5ddbf2 100644 --- a/src/KOKKOS/atom_kokkos.cpp +++ b/src/KOKKOS/atom_kokkos.cpp @@ -22,6 +22,7 @@ #include "memory_kokkos.h" #include "error.h" #include "kokkos.h" +#include "atom_masks.h" using namespace LAMMPS_NS; @@ -270,8 +271,10 @@ int AtomKokkos::add_custom(const char *name, int flag) int n = strlen(name) + 1; dname[index] = new char[n]; strcpy(dname[index],name); + this->sync(Device,DVECTOR_MASK); memoryKK->grow_kokkos(k_dvector,dvector,ndvector,nmax, "atom:dvector"); + this->modified(Device,DVECTOR_MASK); } return index; diff --git a/src/KOKKOS/fix_property_atom_kokkos.cpp b/src/KOKKOS/fix_property_atom_kokkos.cpp index 12f27f9932..6860676911 100644 --- a/src/KOKKOS/fix_property_atom_kokkos.cpp +++ b/src/KOKKOS/fix_property_atom_kokkos.cpp @@ -19,6 +19,7 @@ #include "memory_kokkos.h" #include "error.h" #include "update.h" +#include "atom_masks.h" using namespace LAMMPS_NS; using namespace FixConst; @@ -61,8 +62,10 @@ void FixPropertyAtomKokkos::grow_arrays(int nmax) size_t nbytes = (nmax-nmax_old) * sizeof(int); memset(&atom->ivector[index[m]][nmax_old],0,nbytes); } else if (style[m] == DOUBLE) { + atomKK->sync(Device,DVECTOR_MASK); memoryKK->grow_kokkos(atomKK->k_dvector,atomKK->dvector,atomKK->k_dvector.extent(0),nmax, "atom:dvector"); + atomKK->modified(Device,DVECTOR_MASK); //memory->grow(atom->dvector[index[m]],nmax,"atom:dvector"); //size_t nbytes = (nmax-nmax_old) * sizeof(double); //memset(&atom->dvector[index[m]][nmax_old],0,nbytes); From 2ee02cfadd4484833fa32c6a503c0941ce83fb98 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 24 May 2019 11:27:09 -0600 Subject: [PATCH 185/311] Don't reallocate views every time in neigh_bond_kokkos --- src/KOKKOS/neigh_bond_kokkos.cpp | 8 ++++++-- src/atom.h | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/KOKKOS/neigh_bond_kokkos.cpp b/src/KOKKOS/neigh_bond_kokkos.cpp index 05a6fd605c..34858ff1e1 100644 --- a/src/KOKKOS/neigh_bond_kokkos.cpp +++ b/src/KOKKOS/neigh_bond_kokkos.cpp @@ -200,6 +200,7 @@ void NeighBondKokkos::build_topology_kk() { atomKK->sync(execution_space, X_MASK | TAG_MASK); int nall = atom->nlocal + atom->nghost; + int nmax = atom->nmax; nlocal = atom->nlocal; x = atomKK->k_x.view(); @@ -215,7 +216,9 @@ void NeighBondKokkos::build_topology_kk() int* map_array_host = atom->get_map_array(); int map_size = atom->get_map_size(); - k_map_array = DAT::tdual_int_1d("NeighBond:map_array",map_size); + int map_maxarray = atom->get_map_maxarray(); + if (map_maxarray > k_map_array.extent(0)) + k_map_array = DAT::tdual_int_1d("NeighBond:map_array",map_maxarray); for (int i=0; i(); @@ -223,7 +226,8 @@ void NeighBondKokkos::build_topology_kk() map_array = k_map_array.view(); int* sametag_host = atomKK->sametag; - k_sametag = DAT::tdual_int_1d("NeighBond:sametag",nall); + if (nmax > k_sametag.extent(0)) + k_sametag = DAT::tdual_int_1d("NeighBond:sametag",nmax); for (int i=0; i(); diff --git a/src/atom.h b/src/atom.h index b2a657cf1a..6a26c24dfe 100644 --- a/src/atom.h +++ b/src/atom.h @@ -286,6 +286,7 @@ class Atom : protected Pointers { inline int* get_map_array() {return map_array;}; inline int get_map_size() {return map_tag_max+1;}; + inline int get_map_maxarray() {return map_maxarray+1;}; bigint memory_usage(); int memcheck(const char *); From e82e1c695a8233905fe2d35babb4b1f13e5a5fe4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 24 May 2019 19:45:48 -0400 Subject: [PATCH 186/311] correct links in package documentation --- doc/src/Packages_details.txt | 42 ++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/doc/src/Packages_details.txt b/doc/src/Packages_details.txt index 4f9bcc1910..1528adc420 100644 --- a/doc/src/Packages_details.txt +++ b/doc/src/Packages_details.txt @@ -208,7 +208,7 @@ available on your system. [Install:] This package has "specific installation -instructions"_Build_extras.html#gpu on the "Build +instructions"_Build_extras.html#compress on the "Build extras"_Build_extras.html doc page. [Supporting info:] @@ -358,7 +358,7 @@ developed the pair style. [Install:] This package has "specific installation -instructions"_Build_extras.html#gpu on the "Build +instructions"_Build_extras.html#kim on the "Build extras"_Build_extras.html doc page. [Supporting info:] @@ -404,7 +404,7 @@ lib/kokkos. [Install:] This package has "specific installation -instructions"_Build_extras.html#gpu on the "Build +instructions"_Build_extras.html#kokkos on the "Build extras"_Build_extras.html doc page. [Supporting info:] @@ -477,7 +477,7 @@ Cawkwell, Anders Niklasson, and Christian Negre. [Install:] This package has "specific installation -instructions"_Build_extras.html#gpu on the "Build +instructions"_Build_extras.html#latte on the "Build extras"_Build_extras.html doc page. [Supporting info:] @@ -654,7 +654,7 @@ University of Chicago. [Install:] This package has "specific installation -instructions"_Build_extras.html#gpu on the "Build +instructions"_Build_extras.html#mscg on the "Build extras"_Build_extras.html doc page. [Supporting info:] @@ -686,7 +686,7 @@ and Vincent Natoli (Stone Ridge Technolgy). [Install:] This package has "specific installation -instructions"_Build_extras.html#gpu on the "Build +instructions"_Build_extras.html#opt on the "Build extras"_Build_extras.html doc page. [Supporting info:] @@ -743,7 +743,7 @@ connections at hinge points. [Install:] This package has "specific installation -instructions"_Build_extras.html#gpu on the "Build +instructions"_Build_extras.html#poems on the "Build extras"_Build_extras.html doc page. [Supporting info:] @@ -775,7 +775,7 @@ lib/python/README for more details. [Install:] This package has "specific installation -instructions"_Build_extras.html#gpu on the "Build +instructions"_Build_extras.html#python on the "Build extras"_Build_extras.html doc page. [Supporting info:] @@ -965,7 +965,7 @@ and LBNL. [Install:] This package has "specific installation -instructions"_Build_extras.html#gpu on the "Build +instructions"_Build_extras.html#voronoi on the "Build extras"_Build_extras.html doc page. [Supporting info:] @@ -1017,7 +1017,7 @@ atomic information to continuum fields. [Install:] This package has "specific installation -instructions"_Build_extras.html#gpu on the "Build +instructions"_Build_extras.html#user-atc on the "Build extras"_Build_extras.html doc page. [Supporting info:] @@ -1044,7 +1044,7 @@ model. [Install:] This package has "specific installation -instructions"_Build_extras.html#gpu on the "Build +instructions"_Build_extras.html#user-awpmd on the "Build extras"_Build_extras.html doc page. [Supporting info:] @@ -1184,7 +1184,7 @@ Tribello. [Install:] This package has "specific installation -instructions"_Build_extras.html#gpu on the "Build +instructions"_Build_extras.html#user-plumed on the "Build extras"_Build_extras.html doc page. [Supporting info:] @@ -1362,7 +1362,7 @@ H5MD format. [Install:] This package has "specific installation -instructions"_Build_extras.html#gpu on the "Build +instructions"_Build_extras.html#user-h5md on the "Build extras"_Build_extras.html doc page. [Supporting info:] @@ -1400,7 +1400,7 @@ NOTE: the USER-INTEL package contains styles that require using the [Install:] This package has "specific installation -instructions"_Build_extras.html#gpu on the "Build +instructions"_Build_extras.html#user-intel on the "Build extras"_Build_extras.html doc page. [Supporting info:] @@ -1620,7 +1620,7 @@ at [Install:] This package has "specific installation -instructions"_Build_extras.html#gpu on the "Build +instructions"_Build_extras.html#user-molfile on the "Build extras"_Build_extras.html doc page. [Supporting info:] @@ -1660,7 +1660,7 @@ tools: [Install:] This package has "specific installation -instructions"_Build_extras.html#gpu on the "Build +instructions"_Build_extras.html#user-netcdf on the "Build extras"_Build_extras.html doc page. [Supporting info:] @@ -1704,7 +1704,7 @@ install/un-install the package and build LAMMPS in the usual manner: [Install:] This package has "specific installation -instructions"_Build_extras.html#gpu on the "Build +instructions"_Build_extras.html#user-omp on the "Build extras"_Build_extras.html doc page. [Supporting info:] @@ -1788,7 +1788,7 @@ without changes to LAMMPS itself. [Install:] This package has "specific installation -instructions"_Build_extras.html#gpu on the "Build +instructions"_Build_extras.html#user-qmmm on the "Build extras"_Build_extras.html doc page. [Supporting info:] @@ -1846,7 +1846,7 @@ on your system. [Install:] This package has "specific installation -instructions"_Build_extras.html#gpu on the "Build +instructions"_Build_extras.html#user-quip on the "Build extras"_Build_extras.html doc page. [Supporting info:] @@ -1964,7 +1964,7 @@ Dynamics, Ernst Mach Institute, Germany). [Install:] This package has "specific installation -instructions"_Build_extras.html#gpu on the "Build +instructions"_Build_extras.html#user-smd on the "Build extras"_Build_extras.html doc page. [Supporting info:] @@ -2090,7 +2090,7 @@ system. [Install:] This package has "specific installation -instructions"_Build_extras.html#gpu on the "Build +instructions"_Build_extras.html#user-vtk on the "Build extras"_Build_extras.html doc page. [Supporting info:] From c2a200fe85907d7c4ef85147a702f7c13fde4297 Mon Sep 17 00:00:00 2001 From: "Vishnu V. Krishnan" Date: Sun, 26 May 2019 14:00:21 +0530 Subject: [PATCH 187/311] A function logfreq3(), for logarithmical spacing Unlike logfreq(), this also allows for fractional ratios Resolves #1471 --- doc/src/variable.txt | 16 +++++++-- src/variable.cpp | 82 ++++++++++++++++++++++++++++++++++++++------ 2 files changed, 84 insertions(+), 14 deletions(-) diff --git a/doc/src/variable.txt b/doc/src/variable.txt index e90e9bd04b..7951ecfb86 100644 --- a/doc/src/variable.txt +++ b/doc/src/variable.txt @@ -52,7 +52,7 @@ style = {delete} or {index} or {loop} or {world} or {universe} or {uloop} or {st sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), atan2(y,x), random(x,y,z), normal(x,y,z), ceil(x), floor(x), round(x) ramp(x,y), stagger(x,y), logfreq(x,y,z), logfreq2(x,y,z), - stride(x,y,z), stride2(x,y,z,a,b,c), + logfreq3(x,y,z), stride(x,y,z), stride2(x,y,z,a,b,c), vdisplace(x,y), swiggle(x,y,z), cwiggle(x,y,z) group functions = count(group), mass(group), charge(group), xcm(group,dim), vcm(group,dim), fcm(group,dim), @@ -459,8 +459,8 @@ Math functions: sqrt(x), exp(x), ln(x), log(x), abs(x), \ sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), atan2(y,x), \ random(x,y,z), normal(x,y,z), ceil(x), floor(x), round(x), \ ramp(x,y), stagger(x,y), logfreq(x,y,z), logfreq2(x,y,z), \ - stride(x,y,z), stride2(x,y,z,a,b,c), vdisplace(x,y), \ - swiggle(x,y,z), cwiggle(x,y,z) + logfreq3(x,y,z), stride(x,y,z), stride2(x,y,z,a,b,c), \ + vdisplace(x,y), swiggle(x,y,z), cwiggle(x,y,z) Group functions: count(ID), mass(ID), charge(ID), xcm(ID,dim), \ vcm(ID,dim), fcm(ID,dim), bound(ID,dir), \ gyration(ID), ke(ID), angmom(ID,dim), torque(ID,dim), \ @@ -670,6 +670,16 @@ sequence of output timesteps: 100,150,200,...950,1000,1500,2000,...9500,10000,15000,etc :pre +The logfreq3(x,y,z) function generates y points between x and z (inclusive), +that are separated by a multiplicative ratio: (z/x)^(1/(y-1)). Constraints +are: x,z > 0, y > 1, z-x >= y-1. For eg., if logfreq3(10,25,1000) is used in +a variable by the "fix print"_fix_print.html command, then the interval +between 10 and 1000 is divided into 24 parts with a multiplicative +separation of ~1.21, and it will generate the following sequence of output +timesteps: + +10, 13, 15, 18, 22, 27, 32,...384, 465, 563, 682, 826, 1000 :pre + The stride(x,y,z) function uses the current timestep to generate a new timestep. X,y >= 0 and z > 0 and x <= y are required. The generated timesteps increase in increments of z, from x to y, i.e. it generates diff --git a/src/variable.cpp b/src/variable.cpp index 56b66cad0d..251abf0eff 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -63,8 +63,8 @@ enum{DONE,ADD,SUBTRACT,MULTIPLY,DIVIDE,CARAT,MODULO,UNARY, NOT,EQ,NE,LT,LE,GT,GE,AND,OR,XOR, SQRT,EXP,LN,LOG,ABS,SIN,COS,TAN,ASIN,ACOS,ATAN,ATAN2, RANDOM,NORMAL,CEIL,FLOOR,ROUND,RAMP,STAGGER,LOGFREQ,LOGFREQ2, - STRIDE,STRIDE2,VDISPLACE,SWIGGLE,CWIGGLE,GMASK,RMASK,GRMASK, - IS_ACTIVE,IS_DEFINED,IS_AVAILABLE, + LOGFREQ3,STRIDE,STRIDE2,VDISPLACE,SWIGGLE,CWIGGLE,GMASK,RMASK, + GRMASK,IS_ACTIVE,IS_DEFINED,IS_AVAILABLE, VALUE,ATOMARRAY,TYPEARRAY,INTARRAY,BIGINTARRAY,VECTORARRAY}; // customize by adding a special function @@ -2294,8 +2294,8 @@ double Variable::evaluate(char *str, Tree **tree, int ivar) sqrt(),exp(),ln(),log(),abs(),sin(),cos(),tan(),asin(),acos(),atan(), atan2(y,x),random(x,y,z),normal(x,y,z),ceil(),floor(),round(), ramp(x,y),stagger(x,y),logfreq(x,y,z),logfreq2(x,y,z), - stride(x,y,z),vdisplace(x,y),swiggle(x,y,z),cwiggle(x,y,z), - gmask(x),rmask(x),grmask(x,y) + logfreq3(x,y,z),stride(x,y,z),vdisplace(x,y),swiggle(x,y,z), + cwiggle(x,y,z),gmask(x),rmask(x),grmask(x,y) ---------------------------------------------------------------------- */ double Variable::collapse_tree(Tree *tree) @@ -2702,6 +2702,35 @@ double Variable::collapse_tree(Tree *tree) return tree->value; } + if (tree->type == LOGFREQ3) { + int ivalue1 = static_cast (collapse_tree(tree->first)); + int ivalue2 = static_cast (collapse_tree(tree->second)); + int ivalue3 = static_cast (collapse_tree(tree->extra[0])); + if (tree->first->type != VALUE || tree->second->type != VALUE || + tree->extra[0]->type != VALUE) return 0.0; + tree->type = VALUE; + if (ivalue1 <= 0 || ivalue2 <= 1 || ivalue3 <= 0 || + ivalue3-ivalue1+1 < ivalue2 ) + error->all(FLERR,"Invalid math function in variable formula"); + if (update->ntimestep < ivalue1) tree->value = ivalue1; + //else if (update->ntimestep <= ivalue3){ + else { + tree->value = ivalue1; + double logsp = ivalue1; + double factor = pow(((double)ivalue3)/ivalue1, 1.0/(ivalue2-1)); + int linsp = ivalue1; + while (update->ntimestep >= (tree->value)) { + logsp *= factor; + linsp++; + if (linsp > logsp) tree->value = linsp; + else tree->value = ceil(logsp)-(((int)ceil(logsp)-1)/ivalue3); + } + } + if (update->ntimestep > ivalue3) + error->all(FLERR,"Calls to variable exceeded limit"); + return tree->value; + } + if (tree->type == STRIDE) { int ivalue1 = static_cast (collapse_tree(tree->first)); int ivalue2 = static_cast (collapse_tree(tree->second)); @@ -2817,8 +2846,8 @@ double Variable::collapse_tree(Tree *tree) sqrt(),exp(),ln(),log(),sin(),cos(),tan(),asin(),acos(),atan(), atan2(y,x),random(x,y,z),normal(x,y,z),ceil(),floor(),round(), ramp(x,y),stagger(x,y),logfreq(x,y,z),logfreq2(x,y,z), - stride(x,y,z),stride2(x,y,z),vdisplace(x,y),swiggle(x,y,z), - cwiggle(x,y,z),gmask(x),rmask(x),grmask(x,y) + logfreq3(x,y,z),stride(x,y,z),stride2(x,y,z),vdisplace(x,y), + swiggle(x,y,z),cwiggle(x,y,z),gmask(x),rmask(x),grmask(x,y) ---------------------------------------------------------------------- */ double Variable::eval_tree(Tree *tree, int i) @@ -3297,8 +3326,8 @@ tagint Variable::int_between_brackets(char *&ptr, int varallow) sqrt(),exp(),ln(),log(),abs(),sin(),cos(),tan(),asin(),acos(),atan(), atan2(y,x),random(x,y,z),normal(x,y,z),ceil(),floor(),round(), ramp(x,y),stagger(x,y),logfreq(x,y,z),logfreq2(x,y,z), - stride(x,y,z),stride2(x,y,z,a,b,c),vdisplace(x,y),swiggle(x,y,z), - cwiggle(x,y,z) + logfreq3(x,y,z),stride(x,y,z),stride2(x,y,z,a,b,c),vdisplace(x,y), + swiggle(x,y,z),cwiggle(x,y,z) ------------------------------------------------------------------------- */ int Variable::math_function(char *word, char *contents, Tree **tree, @@ -3318,9 +3347,9 @@ int Variable::math_function(char *word, char *contents, Tree **tree, strcmp(word,"floor") && strcmp(word,"round") && strcmp(word,"ramp") && strcmp(word,"stagger") && strcmp(word,"logfreq") && strcmp(word,"logfreq2") && - strcmp(word,"stride") && strcmp(word,"stride2") && - strcmp(word,"vdisplace") && strcmp(word,"swiggle") && - strcmp(word,"cwiggle")) + strcmp(word,"logfreq3") && strcmp(word,"stride") && + strcmp(word,"stride2") && strcmp(word,"vdisplace") && + strcmp(word,"swiggle") && strcmp(word,"cwiggle")) return 0; // parse contents for comma-separated args @@ -3580,6 +3609,37 @@ int Variable::math_function(char *word, char *contents, Tree **tree, argstack[nargstack++] = ceil(value); } + } else if (strcmp(word,"logfreq3") == 0) { + if (narg != 3) + print_var_error(FLERR,"Invalid math function in variable formula",ivar); + if (tree) newtree->type = LOGFREQ3; + else { + int ivalue1 = static_cast (value1); + int ivalue2 = static_cast (value2); + int ivalue3 = static_cast (values[0]); + if (ivalue1 <= 0 || ivalue2 <= 1 || ivalue3 <= 0 || + ivalue3-ivalue1+1 < ivalue2 ) + print_var_error(FLERR,"Invalid math function in variable formula",ivar); + double value; + if (update->ntimestep < ivalue1) value = ivalue1; + //else if (update->ntimestep <= ivalue3){ + else { + value = ivalue1; + double logsp = ivalue1; + double factor = pow(((double)ivalue3)/ivalue1, 1.0/(ivalue2-1)); + int linsp = ivalue1; + while (update->ntimestep >= value) { + logsp *= factor; + linsp++; + if (linsp > logsp) value = linsp; + else value = ceil(logsp)-(((int)ceil(logsp)-1)/ivalue3); + } + } + if (update->ntimestep > ivalue3) + error->all(FLERR,"Calls to variable exceeded limit"); + argstack[nargstack++] = value; + } + } else if (strcmp(word,"stride") == 0) { if (narg != 3) print_var_error(FLERR,"Invalid math function in variable formula",ivar); From 97be57be7bafebe04fbad284665a097132631b5a Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sun, 26 May 2019 15:53:49 -0600 Subject: [PATCH 188/311] additional topology overflow check for reactions --- doc/src/fix_bond_react.txt | 7 +++++++ src/USER-MISC/fix_bond_react.cpp | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/doc/src/fix_bond_react.txt b/doc/src/fix_bond_react.txt index af443ede92..c0dfe3313a 100644 --- a/doc/src/fix_bond_react.txt +++ b/doc/src/fix_bond_react.txt @@ -203,6 +203,13 @@ new types must also be defined during the setup of a given simulation. A discussion of correctly handling this is also provided on the "molecule"_molecule.html command page. +NOTE: When a reaction includes edge atoms, it is possible that the +resulting topology/atom (e.g. special bonds, dihedrals, etc.) exceeds +both that of the reaction templates and the existing system. As when +inserting molecules, this topology overflow must be accounted for by +using the relevant "extra" keywords to the "read_data"_read_data.html +or "create_box"_create_box.html commands. + The map file is a text document with the following format: A map file has a header and a body. The header of map file the diff --git a/src/USER-MISC/fix_bond_react.cpp b/src/USER-MISC/fix_bond_react.cpp index 5d624ad7f4..4916a91b99 100644 --- a/src/USER-MISC/fix_bond_react.cpp +++ b/src/USER-MISC/fix_bond_react.cpp @@ -2322,6 +2322,8 @@ void FixBondReact::update_everything() nspecial[atom->map(update_mega_glove[jj+1][i])][1]++; nspecial[atom->map(update_mega_glove[jj+1][i])][2]++; } + if (nspecial[atom->map(update_mega_glove[jj+1][i])][2] > atom->maxspecial) + error->one(FLERR,"Bond/react special bond generation overflow"); for (int n = nspecial[atom->map(update_mega_glove[jj+1][i])][2]-1; n > insert_num; n--) { special[atom->map(update_mega_glove[jj+1][i])][n] = special[atom->map(update_mega_glove[jj+1][i])][n-1]; } @@ -2383,6 +2385,8 @@ void FixBondReact::update_everything() bond_type[atom->map(update_mega_glove[jj+1][i])][insert_num] = twomol->bond_type[j][p]; bond_atom[atom->map(update_mega_glove[jj+1][i])][insert_num] = update_mega_glove[equivalences[twomol->bond_atom[j][p]-1][1][rxnID]][i]; num_bond[atom->map(update_mega_glove[jj+1][i])]++; + if (num_bond[atom->map(update_mega_glove[jj+1][i])] > atom->bond_per_atom) + error->one(FLERR,"Bond/react bonds/atom exceed system bonds/atom"); delta_bonds++; } } @@ -2457,6 +2461,8 @@ void FixBondReact::update_everything() angle_atom2[atom->map(update_mega_glove[jj+1][i])][insert_num] = update_mega_glove[equivalences[twomol->angle_atom2[j][p]-1][1][rxnID]][i]; angle_atom3[atom->map(update_mega_glove[jj+1][i])][insert_num] = update_mega_glove[equivalences[twomol->angle_atom3[j][p]-1][1][rxnID]][i]; num_angle[atom->map(update_mega_glove[jj+1][i])]++; + if (num_angle[atom->map(update_mega_glove[jj+1][i])] > atom->angle_per_atom) + error->one(FLERR,"Bond/react angles/atom exceed system angles/atom"); delta_angle++; } } @@ -2538,6 +2544,8 @@ void FixBondReact::update_everything() dihedral_atom3[atom->map(update_mega_glove[jj+1][i])][insert_num] = update_mega_glove[equivalences[twomol->dihedral_atom3[j][p]-1][1][rxnID]][i]; dihedral_atom4[atom->map(update_mega_glove[jj+1][i])][insert_num] = update_mega_glove[equivalences[twomol->dihedral_atom4[j][p]-1][1][rxnID]][i]; num_dihedral[atom->map(update_mega_glove[jj+1][i])]++; + if (num_dihedral[atom->map(update_mega_glove[jj+1][i])] > atom->dihedral_per_atom) + error->one(FLERR,"Bond/react dihedrals/atom exceed system dihedrals/atom"); delta_dihed++; } } @@ -2619,6 +2627,8 @@ void FixBondReact::update_everything() improper_atom3[atom->map(update_mega_glove[jj+1][i])][insert_num] = update_mega_glove[equivalences[twomol->improper_atom3[j][p]-1][1][rxnID]][i]; improper_atom4[atom->map(update_mega_glove[jj+1][i])][insert_num] = update_mega_glove[equivalences[twomol->improper_atom4[j][p]-1][1][rxnID]][i]; num_improper[atom->map(update_mega_glove[jj+1][i])]++; + if (num_improper[atom->map(update_mega_glove[jj+1][i])] > atom->improper_per_atom) + error->one(FLERR,"Bond/react impropers/atom exceed system impropers/atom"); delta_imprp++; } } From e133c60ff5bfd4e7d356f7fc1af1621a7e1cd4aa Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sun, 26 May 2019 20:28:28 -0600 Subject: [PATCH 189/311] bond/react docs: better English --- doc/src/fix_bond_react.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/src/fix_bond_react.txt b/doc/src/fix_bond_react.txt index c0dfe3313a..ddebe8b611 100644 --- a/doc/src/fix_bond_react.txt +++ b/doc/src/fix_bond_react.txt @@ -205,10 +205,10 @@ A discussion of correctly handling this is also provided on the NOTE: When a reaction includes edge atoms, it is possible that the resulting topology/atom (e.g. special bonds, dihedrals, etc.) exceeds -both that of the reaction templates and the existing system. As when -inserting molecules, this topology overflow must be accounted for by -using the relevant "extra" keywords to the "read_data"_read_data.html -or "create_box"_create_box.html commands. +that of the existing system and reaction templates. As when inserting +molecules, enough space for this increased topology/atom must be +reserved by using the relevant "extra" keywords to the +"read_data"_read_data.html or "create_box"_create_box.html commands. The map file is a text document with the following format: From e44c87773862cdf42fbb3e682cb12310f4d70e64 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Tue, 28 May 2019 10:21:29 -0600 Subject: [PATCH 190/311] Add missing tag sync in fix_qeq_reax_kokkos --- src/KOKKOS/fix_qeq_reax_kokkos.cpp | 13 ++++++++++--- src/KOKKOS/verlet_kokkos.cpp | 2 ++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/KOKKOS/fix_qeq_reax_kokkos.cpp b/src/KOKKOS/fix_qeq_reax_kokkos.cpp index 9969ab7257..d007c469a9 100644 --- a/src/KOKKOS/fix_qeq_reax_kokkos.cpp +++ b/src/KOKKOS/fix_qeq_reax_kokkos.cpp @@ -58,7 +58,7 @@ FixQEqReaxKokkos(LAMMPS *lmp, int narg, char **arg) : atomKK = (AtomKokkos *) atom; execution_space = ExecutionSpaceFromDevice::space; - datamask_read = X_MASK | V_MASK | F_MASK | MASK_MASK | Q_MASK | TYPE_MASK; + datamask_read = X_MASK | V_MASK | F_MASK | MASK_MASK | Q_MASK | TYPE_MASK | TAG_MASK; datamask_modify = Q_MASK | X_MASK; nmax = nmax = m_cap = 0; @@ -164,6 +164,9 @@ void FixQEqReaxKokkos::init_shielding_k() template void FixQEqReaxKokkos::init_hist() { + k_s_hist.clear_sync_state(); + k_t_hist.clear_sync_state(); + Kokkos::deep_copy(d_s_hist,0.0); Kokkos::deep_copy(d_t_hist,0.0); @@ -189,7 +192,6 @@ void FixQEqReaxKokkos::pre_force(int vflag) if (update->ntimestep % nevery) return; atomKK->sync(execution_space,datamask_read); - atomKK->modified(execution_space,datamask_modify); x = atomKK->k_x.view(); v = atomKK->k_v.view(); @@ -273,6 +275,8 @@ void FixQEqReaxKokkos::pre_force(int vflag) // free duplicated memory if (need_dup) dup_o = decltype(dup_o)(); + + atomKK->modified(execution_space,datamask_modify); } /* ---------------------------------------------------------------------- */ @@ -1199,9 +1203,12 @@ double FixQEqReaxKokkos::memory_usage() template void FixQEqReaxKokkos::grow_arrays(int nmax) { - k_s_hist.template sync(); // force reallocation on host + k_s_hist.template sync(); k_t_hist.template sync(); + k_s_hist.template modify(); // force reallocation on host + k_t_hist.template modify(); + memoryKK->grow_kokkos(k_s_hist,s_hist,nmax,nprev,"qeq:s_hist"); memoryKK->grow_kokkos(k_t_hist,t_hist,nmax,nprev,"qeq:t_hist"); diff --git a/src/KOKKOS/verlet_kokkos.cpp b/src/KOKKOS/verlet_kokkos.cpp index 73ba7d3d07..ceacb3f8b4 100644 --- a/src/KOKKOS/verlet_kokkos.cpp +++ b/src/KOKKOS/verlet_kokkos.cpp @@ -186,7 +186,9 @@ void VerletKokkos::setup(int flag) } if (force->newton) comm->reverse_comm(); + lmp->kokkos->auto_sync = 0; modify->setup(vflag); + lmp->kokkos->auto_sync = 1; output->setup(flag); update->setupflag = 0; } From 35be1724e39ffe2877fae7ddee67bbabe17e4214 Mon Sep 17 00:00:00 2001 From: julient31 Date: Tue, 28 May 2019 15:31:03 -0600 Subject: [PATCH 191/311] Commit JT 052819 - corrected examples in examples/SPIN/dipole_spin - modified warning message in src/SPIN/pair_spin_dipole_*.cpp --- examples/SPIN/dipole_spin/in.spin.iron_dipole_cut | 2 +- examples/SPIN/dipole_spin/in.spin.iron_dipole_ewald | 2 +- examples/SPIN/dipole_spin/in.spin.iron_dipole_pppm | 5 +---- src/SPIN/pair_spin_dipole_cut.cpp | 7 ++++--- src/SPIN/pair_spin_dipole_long.cpp | 7 ++++--- 5 files changed, 11 insertions(+), 12 deletions(-) diff --git a/examples/SPIN/dipole_spin/in.spin.iron_dipole_cut b/examples/SPIN/dipole_spin/in.spin.iron_dipole_cut index 55bda10b3e..a409fe0563 100644 --- a/examples/SPIN/dipole_spin/in.spin.iron_dipole_cut +++ b/examples/SPIN/dipole_spin/in.spin.iron_dipole_cut @@ -54,6 +54,6 @@ thermo_style custom step time v_magx v_magy v_magz v_magnorm v_tmag v_emag pe thermo 50 compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 100 all custom 1 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] +dump 1 all custom 100 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] run 2000 diff --git a/examples/SPIN/dipole_spin/in.spin.iron_dipole_ewald b/examples/SPIN/dipole_spin/in.spin.iron_dipole_ewald index 75e202d61c..58b44b55fe 100644 --- a/examples/SPIN/dipole_spin/in.spin.iron_dipole_ewald +++ b/examples/SPIN/dipole_spin/in.spin.iron_dipole_ewald @@ -56,6 +56,6 @@ thermo_style custom step time v_magx v_magy v_magz v_magnorm v_tmag v_emag pe thermo 50 compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 100 all custom 1 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] +dump 1 all custom 100 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] run 2000 diff --git a/examples/SPIN/dipole_spin/in.spin.iron_dipole_pppm b/examples/SPIN/dipole_spin/in.spin.iron_dipole_pppm index ea88b518f3..28d7e4a4bc 100644 --- a/examples/SPIN/dipole_spin/in.spin.iron_dipole_pppm +++ b/examples/SPIN/dipole_spin/in.spin.iron_dipole_pppm @@ -57,9 +57,6 @@ thermo_style custom step time v_magx v_magy v_magz v_magnorm v_tmag v_emag pe thermo 50 compute outsp all property/atom spx spy spz sp fmx fmy fmz -dump 100 all custom 1 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] +dump 1 all custom 100 dump_iron.lammpstrj type x y z c_outsp[1] c_outsp[2] c_outsp[3] run 2000 -# min_style spin -# min_modify alpha_damp 1.0 discrete_factor 10 -# minimize 1.0e-16 1.0e-16 10000 10000 diff --git a/src/SPIN/pair_spin_dipole_cut.cpp b/src/SPIN/pair_spin_dipole_cut.cpp index 405657ccbf..4ff198488a 100644 --- a/src/SPIN/pair_spin_dipole_cut.cpp +++ b/src/SPIN/pair_spin_dipole_cut.cpp @@ -152,15 +152,16 @@ void PairSpinDipoleCut::init_style() neighbor->requests[irequest]->half = 0; neighbor->requests[irequest]->full = 1; - // checking if nve/spin is a listed fix + // checking if nve/spin or neb/spin are a listed fix int ifix = 0; while (ifix < modify->nfix) { if (strcmp(modify->fix[ifix]->style,"nve/spin") == 0) break; + if (strcmp(modify->fix[ifix]->style,"neb/spin") == 0) break; ifix++; } - if (ifix == modify->nfix) - error->all(FLERR,"pair/spin style requires nve/spin"); + if ((ifix == modify->nfix) && (comm->me == 0)) + error->warning(FLERR,"Using pair/spin style without nve/spin or neb/spin"); // get the lattice_flag from nve/spin diff --git a/src/SPIN/pair_spin_dipole_long.cpp b/src/SPIN/pair_spin_dipole_long.cpp index bf9bdeb91b..e3575a6a07 100644 --- a/src/SPIN/pair_spin_dipole_long.cpp +++ b/src/SPIN/pair_spin_dipole_long.cpp @@ -154,15 +154,16 @@ void PairSpinDipoleLong::init_style() neighbor->requests[irequest]->half = 0; neighbor->requests[irequest]->full = 1; - // checking if nve/spin is a listed fix + // checking if nve/spin or neb/spin are a listed fix int ifix = 0; while (ifix < modify->nfix) { if (strcmp(modify->fix[ifix]->style,"nve/spin") == 0) break; + if (strcmp(modify->fix[ifix]->style,"neb/spin") == 0) break; ifix++; } - if (ifix == modify->nfix) - error->all(FLERR,"pair/spin style requires nve/spin"); + if ((ifix == modify->nfix) && (comm->me == 0)) + error->warning(FLERR,"Using pair/spin style without nve/spin or neb/spin"); // get the lattice_flag from nve/spin From e3e5a962b01c03d070f9e749b40837420d49bbd7 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Tue, 28 May 2019 21:40:01 -0600 Subject: [PATCH 192/311] bond/react memory: correctly delete internal groups internally-created groups should be deleted when unfixing bond/react groups should not be deleted when LAMMPS exits (because they already have been) --- src/USER-MISC/fix_bond_react.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/USER-MISC/fix_bond_react.cpp b/src/USER-MISC/fix_bond_react.cpp index 4916a91b99..37e9f96882 100644 --- a/src/USER-MISC/fix_bond_react.cpp +++ b/src/USER-MISC/fix_bond_react.cpp @@ -472,17 +472,19 @@ FixBondReact::~FixBondReact() delete [] guess_branch; delete [] pioneer_count; - char **newarg; - newarg = new char*[2]; - newarg[0] = master_group; - newarg[1] = (char *) "delete"; - group->assign(2,newarg); - if (stabilization_flag == 1) { - newarg[0] = exclude_group; + if (group) { + char **newarg; + newarg = new char*[2]; + newarg[0] = master_group; + newarg[1] = (char *) "delete"; group->assign(2,newarg); - delete [] exclude_group; + if (stabilization_flag == 1) { + newarg[0] = exclude_group; + group->assign(2,newarg); + delete [] exclude_group; + } + delete [] newarg; } - delete [] newarg; } /* ---------------------------------------------------------------------- */ From c8d50c04a4e977cd14eb567e9a25e1cf55c897fe Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 29 May 2019 10:12:24 -0400 Subject: [PATCH 193/311] avoid memory leak and initialize class member pointers --- src/USER-QUIP/pair_quip.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/USER-QUIP/pair_quip.cpp b/src/USER-QUIP/pair_quip.cpp index c3b03bc5e0..4795e08e33 100644 --- a/src/USER-QUIP/pair_quip.cpp +++ b/src/USER-QUIP/pair_quip.cpp @@ -44,6 +44,11 @@ PairQUIP::PairQUIP(LAMMPS *lmp) : Pair(lmp) one_coeff = 1; no_virial_fdotr_compute = 1; manybody_flag = 1; + + map = NULL; + quip_potential = NULL; + quip_file = NULL; + quip_string = NULL; } PairQUIP::~PairQUIP() @@ -52,8 +57,10 @@ PairQUIP::~PairQUIP() memory->destroy(setflag); memory->destroy(cutsq); delete [] map; - delete [] quip_potential; } + delete [] quip_potential; + delete [] quip_file; + delete [] quip_string; } void PairQUIP::compute(int eflag, int vflag) From 3b606868272b8cc3d241bbdad0793b47b22a1400 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Wed, 29 May 2019 09:43:50 -0600 Subject: [PATCH 194/311] Small tweak to verlet_kokkos --- src/KOKKOS/verlet_kokkos.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/KOKKOS/verlet_kokkos.cpp b/src/KOKKOS/verlet_kokkos.cpp index ceacb3f8b4..b80d5e0646 100644 --- a/src/KOKKOS/verlet_kokkos.cpp +++ b/src/KOKKOS/verlet_kokkos.cpp @@ -188,8 +188,8 @@ void VerletKokkos::setup(int flag) lmp->kokkos->auto_sync = 0; modify->setup(vflag); - lmp->kokkos->auto_sync = 1; output->setup(flag); + lmp->kokkos->auto_sync = 1; update->setupflag = 0; } From b88158fc3bfe46db198ba152027c1de2d66ddc4e Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Wed, 29 May 2019 11:16:38 -0600 Subject: [PATCH 195/311] Fix issue in npair_kokkos --- src/KOKKOS/npair_kokkos.cpp | 6 +++--- src/KOKKOS/npair_kokkos.h | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/KOKKOS/npair_kokkos.cpp b/src/KOKKOS/npair_kokkos.cpp index ecf4b2d5a5..4daf4b84c5 100644 --- a/src/KOKKOS/npair_kokkos.cpp +++ b/src/KOKKOS/npair_kokkos.cpp @@ -140,7 +140,7 @@ void NPairKokkos::build(NeighList *list_) k_bincount.view(), k_bins.view(), k_atom2bin.view(), - nstencil, + mbins,nstencil, k_stencil.view(), k_stencilxyz.view(), nlocal, @@ -511,7 +511,7 @@ void NeighborKokkosExecute::build_ItemCuda(typename Kokkos::TeamPoli const int ibin = dev.league_rank()*BINS_PER_TEAM+MY_BIN; - if(ibin >=c_bincount.extent(0)) return; + if(ibin >= mbins) return; X_FLOAT* other_x = sharedmem; other_x = other_x + 5*atoms_per_bin*MY_BIN; @@ -947,7 +947,7 @@ void NeighborKokkosExecute::build_ItemSizeCuda(typename Kokkos::Team const int ibin = dev.league_rank()*BINS_PER_TEAM+MY_BIN; - if(ibin >=c_bincount.extent(0)) return; + if(ibin >= mbins) return; X_FLOAT* other_x = sharedmem; other_x = other_x + 6*atoms_per_bin*MY_BIN; diff --git a/src/KOKKOS/npair_kokkos.h b/src/KOKKOS/npair_kokkos.h index edf3d2a59f..2a3994f584 100644 --- a/src/KOKKOS/npair_kokkos.h +++ b/src/KOKKOS/npair_kokkos.h @@ -173,6 +173,7 @@ class NeighborKokkosExecute // data from NBin class + const int mbins; const typename AT::t_int_1d bincount; const typename AT::t_int_1d_const c_bincount; typename AT::t_int_2d bins; @@ -226,7 +227,7 @@ class NeighborKokkosExecute const typename AT::t_int_1d &_bincount, const typename AT::t_int_2d &_bins, const typename AT::t_int_1d &_atom2bin, - const int _nstencil, + const int _mbins,const int _nstencil, const typename AT::t_int_1d &_d_stencil, const typename AT::t_int_1d_3 &_d_stencilxyz, const int _nlocal, @@ -264,7 +265,7 @@ class NeighborKokkosExecute const typename ArrayTypes::t_int_scalar _h_resize, const typename AT::t_int_scalar _new_maxneighs, const typename ArrayTypes::t_int_scalar _h_new_maxneighs): - neigh_list(_neigh_list), cutneighsq(_cutneighsq), + neigh_list(_neigh_list), cutneighsq(_cutneighsq),mbins(_mbins), bincount(_bincount),c_bincount(_bincount),bins(_bins),c_bins(_bins), atom2bin(_atom2bin),c_atom2bin(_atom2bin), nstencil(_nstencil),d_stencil(_d_stencil),d_stencilxyz(_d_stencilxyz), From cb8d89855d937140167f09cb89cad6cf1af4b675 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 29 May 2019 13:59:51 -0400 Subject: [PATCH 196/311] remove limitation to hybrid/overlay --- src/USER-QUIP/pair_quip.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/USER-QUIP/pair_quip.cpp b/src/USER-QUIP/pair_quip.cpp index 4795e08e33..e2340ab3d1 100644 --- a/src/USER-QUIP/pair_quip.cpp +++ b/src/USER-QUIP/pair_quip.cpp @@ -218,11 +218,9 @@ void PairQUIP::compute(int eflag, int vflag) global settings ------------------------------------------------------------------------- */ -void PairQUIP::settings(int narg, char **/*arg*/) +void PairQUIP::settings(int narg, char ** /* arg */) { if (narg != 0) error->all(FLERR,"Illegal pair_style command"); - if (strcmp(force->pair_style,"hybrid") == 0) - error->all(FLERR,"Pair style quip is only compatible with hybrid/overlay"); // check if linked to the correct QUIP library API version // as of 2017-07-19 this is API_VERSION 1 From 12fcf5f5ef1c7053938f54f08fa22e7e2dc89101 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 29 May 2019 14:00:33 -0400 Subject: [PATCH 197/311] properly set up pair style quip for hybrid and hybrid/overlay --- src/USER-QUIP/pair_quip.cpp | 72 +++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 31 deletions(-) diff --git a/src/USER-QUIP/pair_quip.cpp b/src/USER-QUIP/pair_quip.cpp index e2340ab3d1..55bc587094 100644 --- a/src/USER-QUIP/pair_quip.cpp +++ b/src/USER-QUIP/pair_quip.cpp @@ -244,43 +244,53 @@ void PairQUIP::allocate() void PairQUIP::coeff(int narg, char **arg) { - if (!allocated) allocate(); + if (!allocated) allocate(); - int n = atom->ntypes; + int n = atom->ntypes; + if (narg != (4+n)) { + char str[1024]; + sprintf(str,"Number of arguments %d is not correct, it should be %d", narg, 4+n); + error->all(FLERR,str); + } // ensure I,J args are * * - for (int i = 1; i <= n; i++){ - for (int j = 1; j <= n; j++) { - setflag[i][j] = 1; + if (strcmp(arg[0],"*") != 0 || strcmp(arg[1],"*") != 0) + error->all(FLERR,"Incorrect args for pair coefficients"); + + n_quip_file = strlen(arg[2]); + quip_file = new char[n_quip_file+1]; + strcpy(quip_file,arg[2]); + + n_quip_string = strlen(arg[3]); + quip_string = new char[n_quip_string+1]; + strcpy(quip_string,arg[3]); + + for (int i = 4; i < narg; i++) { + if (strcmp(arg[i],"NULL") == 0) + map[i-3] = -1; + else + map[i-3] = force->inumeric(FLERR,arg[i]); + } + + // clear setflag since coeff() called once with I,J = * * + + n = atom->ntypes; + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + setflag[i][j] = 0; + + // set setflag i,j for type pairs where both are mapped to elements + + int count = 0; + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + if (map[i] >= 0 && map[j] >= 0) { + setflag[i][j] = 1; + count++; } - } - if (narg != (4+n)) { - char str[1024]; - sprintf(str,"Number of arguments %d is not correct, it should be %d", narg, 4+n); - error->all(FLERR,str); - } - - if (strcmp(arg[0],"*") != 0 || strcmp(arg[1],"*") != 0) - error->all(FLERR,"Incorrect args for pair coefficients"); - - n_quip_file = strlen(arg[2]); - quip_file = new char[n_quip_file+1]; - strcpy(quip_file,arg[2]); - - n_quip_string = strlen(arg[3]); - quip_string = new char[n_quip_string+1]; - strcpy(quip_string,arg[3]); - - for (int i = 4; i < narg; i++) { - - if (0 == sscanf(arg[i],"%d",&map[i-4])) { - char str[1024]; - sprintf(str,"Incorrect atomic number %s at position %d",arg[i],i); - error->all(FLERR,str); - } - } + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); // Initialise potential // First call initialises potential via the fortran code in memory, and returns the necessary size From c0cfceb95c1cb8cf889cf607331bf358f36169f6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 29 May 2019 14:03:00 -0400 Subject: [PATCH 198/311] fix off-by-one errors --- src/USER-QUIP/pair_quip.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/USER-QUIP/pair_quip.cpp b/src/USER-QUIP/pair_quip.cpp index 55bc587094..c05f2d6871 100644 --- a/src/USER-QUIP/pair_quip.cpp +++ b/src/USER-QUIP/pair_quip.cpp @@ -107,14 +107,14 @@ void PairQUIP::compute(int eflag, int vflag) jnum = numneigh[i]; for (jj = 0; jj < jnum; jj++) { - quip_neigh[iquip] = (jlist[jj] & NEIGHMASK) + 1; - iquip++; + quip_neigh[iquip] = (jlist[jj] & NEIGHMASK) + 1; + iquip++; } } atomic_numbers = new int[ntotal]; for (ii = 0; ii < ntotal; ii++) - atomic_numbers[ii] = map[type[ii]-1]; + atomic_numbers[ii] = map[type[ii]]; quip_local_e = new double [ntotal]; quip_force = new double [ntotal*3]; @@ -239,7 +239,7 @@ void PairQUIP::allocate() setflag = memory->create(setflag,n+1,n+1,"pair:setflag"); cutsq = memory->create(cutsq,n+1,n+1,"pair:cutsq"); - map = new int[n]; + map = new int[n+1]; } void PairQUIP::coeff(int narg, char **arg) From fec2f8f69b565cfee12434e6d33f33f296de95b0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 29 May 2019 14:39:45 -0400 Subject: [PATCH 199/311] update docs for fully supporting hybrid styles --- doc/src/pair_quip.txt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/doc/src/pair_quip.txt b/doc/src/pair_quip.txt index 30f1d80450..e6b01b8853 100644 --- a/doc/src/pair_quip.txt +++ b/doc/src/pair_quip.txt @@ -92,10 +92,6 @@ pairs from the neighbor list. This needs to be very carefully tested, because it may remove pairs from the neighbor list that are still required. -Pair style {quip} cannot be used with pair style {hybrid}, only -with {hybrid/overlay} and only the {quip} sub-style is applied to -all atom types. - [Related commands:] "pair_coeff"_pair_coeff.html From 29d36ffec0a2309d6329623ecd4cd673f0c583ff Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 29 May 2019 14:40:09 -0400 Subject: [PATCH 200/311] error out when not using metal units with QUIP --- src/USER-QUIP/pair_quip.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/USER-QUIP/pair_quip.cpp b/src/USER-QUIP/pair_quip.cpp index c05f2d6871..89153f148c 100644 --- a/src/USER-QUIP/pair_quip.cpp +++ b/src/USER-QUIP/pair_quip.cpp @@ -227,6 +227,11 @@ void PairQUIP::settings(int narg, char ** /* arg */) if (quip_lammps_api_version() != 1) error->all(FLERR,"QUIP LAMMPS wrapper API version is not compatible " "with this version of LAMMPS"); + + // QUIP potentials are parameterized in metal units + + if (strcmp("metal",update->unit_style) != 0) + error->all(FLERR,"QUIP potentials require 'metal' units"); } /* ---------------------------------------------------------------------- From d3cbccff3554a31a9f36f714d76a6de042757d58 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 29 May 2019 14:41:33 -0400 Subject: [PATCH 201/311] whitespace cleanup --- src/USER-QUIP/pair_quip.cpp | 18 +++++++++--------- src/USER-QUIP/pair_quip.h | 8 ++++---- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/USER-QUIP/pair_quip.cpp b/src/USER-QUIP/pair_quip.cpp index 89153f148c..ffc6ac1c70 100644 --- a/src/USER-QUIP/pair_quip.cpp +++ b/src/USER-QUIP/pair_quip.cpp @@ -39,16 +39,16 @@ using namespace LAMMPS_NS; PairQUIP::PairQUIP(LAMMPS *lmp) : Pair(lmp) { - single_enable = 0; - restartinfo = 0; - one_coeff = 1; - no_virial_fdotr_compute = 1; - manybody_flag = 1; + single_enable = 0; + restartinfo = 0; + one_coeff = 1; + no_virial_fdotr_compute = 1; + manybody_flag = 1; - map = NULL; - quip_potential = NULL; - quip_file = NULL; - quip_string = NULL; + map = NULL; + quip_potential = NULL; + quip_file = NULL; + quip_string = NULL; } PairQUIP::~PairQUIP() diff --git a/src/USER-QUIP/pair_quip.h b/src/USER-QUIP/pair_quip.h index debdc2cb83..216bf0dc28 100644 --- a/src/USER-QUIP/pair_quip.h +++ b/src/USER-QUIP/pair_quip.h @@ -26,10 +26,10 @@ extern "C" { int quip_lammps_api_version(); void quip_lammps_wrapper(int*, int*, int*, int*, - int*, int*, int*, - int*, int*, double*, - int*, int*, double*, - double*, double*, double*, double*, double*); + int*, int*, int*, + int*, int*, double*, + int*, int*, double*, + double*, double*, double*, double*, double*); void quip_lammps_potential_initialise(int*, int*, double*, char*, int*, char*, int*); } From a48f1cbf00c6162770ef5d76689ef001fb4ecea2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 29 May 2019 20:07:00 -0400 Subject: [PATCH 202/311] fix spelling error --- src/lmpwindows.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lmpwindows.h b/src/lmpwindows.h index 92a248a05e..b1b8dbcaff 100644 --- a/src/lmpwindows.h +++ b/src/lmpwindows.h @@ -19,7 +19,7 @@ #define strdup _strdup // the following functions ared defined to get rid of -// 'ambiguous call to overloaded function' error in VSS for mismathched type arguments +// 'ambiguous call to overloaded function' error in VSS for mismatched type arguments #if !defined(__MINGW32__) inline double pow(int i, int j){ return pow((double)i,j); From 8dcd6fc48ce94abcc65f889c4cc3c7e8b8cfe284 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 29 May 2019 20:13:26 -0400 Subject: [PATCH 203/311] provide alternative to gettimeofday() for MSVC compilation --- src/STUBS/mpi.c | 8 ++++++++ src/USER-REAXC/reaxc_tool_box.cpp | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/src/STUBS/mpi.c b/src/STUBS/mpi.c index 09bb48ecdc..af7a489bb1 100644 --- a/src/STUBS/mpi.c +++ b/src/STUBS/mpi.c @@ -148,12 +148,20 @@ int MPI_Finalize() double MPI_Wtime() { +#if defined(_MSC_VER) + double t; + + t = GetTickCount(); + t /= 1000.0; + return t; +#else double time; struct timeval tv; gettimeofday(&tv,NULL); time = 1.0 * tv.tv_sec + 1.0e-6 * tv.tv_usec; return time; +#endif } /* ---------------------------------------------------------------------- */ diff --git a/src/USER-REAXC/reaxc_tool_box.cpp b/src/USER-REAXC/reaxc_tool_box.cpp index b6058b2516..ffe42e37bb 100644 --- a/src/USER-REAXC/reaxc_tool_box.cpp +++ b/src/USER-REAXC/reaxc_tool_box.cpp @@ -34,8 +34,16 @@ double t_end; double Get_Time( ) { +#if defined(_MSC_VER) + double t; + + t = GetTickCount(); + t /= 1000.0; + return t; +#else gettimeofday(&tim, NULL ); return( tim.tv_sec + (tim.tv_usec / 1000000.0) ); +#endif } int Tokenize( char* s, char*** tok ) From 1a5c3c6dcbdf0fc35c13b25a02096e991d19a2e0 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 30 May 2019 14:46:07 -0400 Subject: [PATCH 204/311] add check that allows only %f and %g conversions in variable format strings --- doc/src/Errors_messages.txt | 6 ++++++ src/input.cpp | 6 ++++++ src/input.h | 5 +++++ src/variable.cpp | 3 +++ src/variable.h | 4 ++++ 5 files changed, 24 insertions(+) diff --git a/doc/src/Errors_messages.txt b/doc/src/Errors_messages.txt index 4f3bbe8c24..b930dbce30 100644 --- a/doc/src/Errors_messages.txt +++ b/doc/src/Errors_messages.txt @@ -5828,6 +5828,12 @@ Must have periodic x,y dimensions and non-periodic z dimension to use Must have periodic x,y dimensions and non-periodic z dimension to use 2d slab option with pppm/disp. :dd +{Incorrect conversion in format string} :dt + +A format style variable was not using either a %f or a %g conversion. +Or an immediate variable with format suffix was not using either +a %f or a %g conversion in the format suffix. :dd + {Incorrect element names in ADP potential file} :dt The element names in the ADP file do not match those requested. :dd diff --git a/src/input.cpp b/src/input.cpp index f88c8ca0c0..029c155ee8 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -50,6 +50,7 @@ #include "accelerator_kokkos.h" #include "error.h" #include "memory.h" +#include "utils.h" #ifdef _OPENMP #include @@ -526,6 +527,11 @@ void Input::substitute(char *&str, char *&str2, int &max, int &max2, int flag) *fmtflag='\0'; } + // quick check for proper format string + + if (!utils::strmatch(fmtstr,"%[0-9 ]*\\.[0-9]+[fg]")) + error->all(FLERR,"Incorrect conversion in format string"); + snprintf(immediate,256,fmtstr,variable->compute_equal(var)); value = immediate; diff --git a/src/input.h b/src/input.h index 47ad7779f1..d62ab11234 100644 --- a/src/input.h +++ b/src/input.h @@ -173,6 +173,11 @@ E: Unbalanced quotes in input line No matching end double quote was found following a leading double quote. +E: Incorrect conversion in format string + +An immediate variable with format suffix was not using +either a %f or a %g conversion in the format suffix. + E: Input line quote not followed by white-space An end quote must be followed by white-space. diff --git a/src/variable.cpp b/src/variable.cpp index 56b66cad0d..0fe18700ee 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -38,6 +38,7 @@ #include "memory.h" #include "info.h" #include "error.h" +#include "utils.h" using namespace LAMMPS_NS; using namespace MathConst; @@ -383,6 +384,8 @@ void Variable::set(int narg, char **arg) num[nvar] = 3; which[nvar] = 0; pad[nvar] = 0; + if (!utils::strmatch(arg[2],"%[0-9 ]*\\.[0-9]+[fg]")) + error->all(FLERR,"Incorrect conversion in format string"); data[nvar] = new char*[num[nvar]]; copy(2,&arg[2],data[nvar]); data[nvar][2] = new char[VALUELENGTH]; diff --git a/src/variable.h b/src/variable.h index a37ee4cff7..a071fdb021 100644 --- a/src/variable.h +++ b/src/variable.h @@ -210,6 +210,10 @@ E: Invalid variable style with next command Variable styles {equal} and {world} cannot be used in a next command. +E: Incorrect conversion in format string + +A format style variable was not using either a %f or a %g conversion. + E: Next command must list all universe and uloop variables This is to insure they stay in sync. From 02e7dd571660b12eb79c4a2dc2878ce7ff606364 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 30 May 2019 14:52:26 -0400 Subject: [PATCH 205/311] also allow %e in format variables of suffix --- doc/src/Errors_messages.txt | 4 ++-- src/input.cpp | 2 +- src/input.h | 2 +- src/variable.cpp | 2 +- src/variable.h | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/src/Errors_messages.txt b/doc/src/Errors_messages.txt index b930dbce30..ce0356a4e7 100644 --- a/doc/src/Errors_messages.txt +++ b/doc/src/Errors_messages.txt @@ -5830,9 +5830,9 @@ Must have periodic x,y dimensions and non-periodic z dimension to use {Incorrect conversion in format string} :dt -A format style variable was not using either a %f or a %g conversion. +A format style variable was not using either a %f, a %g, or a %e conversion. Or an immediate variable with format suffix was not using either -a %f or a %g conversion in the format suffix. :dd +a %f, a %g or a %e conversion in the format suffix. :dd {Incorrect element names in ADP potential file} :dt diff --git a/src/input.cpp b/src/input.cpp index 029c155ee8..0111cb5738 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -529,7 +529,7 @@ void Input::substitute(char *&str, char *&str2, int &max, int &max2, int flag) // quick check for proper format string - if (!utils::strmatch(fmtstr,"%[0-9 ]*\\.[0-9]+[fg]")) + if (!utils::strmatch(fmtstr,"%[0-9 ]*\\.[0-9]+[efgEFG]")) error->all(FLERR,"Incorrect conversion in format string"); snprintf(immediate,256,fmtstr,variable->compute_equal(var)); diff --git a/src/input.h b/src/input.h index d62ab11234..33e83bfb06 100644 --- a/src/input.h +++ b/src/input.h @@ -176,7 +176,7 @@ quote. E: Incorrect conversion in format string An immediate variable with format suffix was not using -either a %f or a %g conversion in the format suffix. +either a %f, a %g, or a %e conversion in the format suffix. E: Input line quote not followed by white-space diff --git a/src/variable.cpp b/src/variable.cpp index 0fe18700ee..fdef9985bf 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -384,7 +384,7 @@ void Variable::set(int narg, char **arg) num[nvar] = 3; which[nvar] = 0; pad[nvar] = 0; - if (!utils::strmatch(arg[2],"%[0-9 ]*\\.[0-9]+[fg]")) + if (!utils::strmatch(arg[2],"%[0-9 ]*\\.[0-9]+[efgEFG]")) error->all(FLERR,"Incorrect conversion in format string"); data[nvar] = new char*[num[nvar]]; copy(2,&arg[2],data[nvar]); diff --git a/src/variable.h b/src/variable.h index a071fdb021..512195bd14 100644 --- a/src/variable.h +++ b/src/variable.h @@ -212,7 +212,7 @@ command. E: Incorrect conversion in format string -A format style variable was not using either a %f or a %g conversion. +A format style variable was not using either a %f, a %g, or a %e conversion. E: Next command must list all universe and uloop variables From c903a110fea048b2de3375e550a602565f00a77c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 30 May 2019 18:36:09 -0400 Subject: [PATCH 206/311] fix typo --- src/lmpwindows.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lmpwindows.h b/src/lmpwindows.h index b1b8dbcaff..5083f0cbb3 100644 --- a/src/lmpwindows.h +++ b/src/lmpwindows.h @@ -18,7 +18,7 @@ #define pclose _pclose #define strdup _strdup -// the following functions ared defined to get rid of +// the following functions are defined to get rid of // 'ambiguous call to overloaded function' error in VSS for mismatched type arguments #if !defined(__MINGW32__) inline double pow(int i, int j){ From 9d51ee17b0d8f82af96e8da6e610e1258c5d8270 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 30 May 2019 22:23:50 -0400 Subject: [PATCH 207/311] change the default for gcc 9.x and beyond to not enable OpenMP by default even if it is found to be supported this is so that using CMake by default will compile LAMMPS, since gcc 9.x expects different sharing semantics for constants than previous versions. --- cmake/CMakeLists.txt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 9721e03515..c572d6f27a 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -316,7 +316,18 @@ pkg_depends(USER-SCAFACOS MPI) include(CheckIncludeFileCXX) find_package(OpenMP QUIET) -option(BUILD_OMP "Build with OpenMP support" ${OpenMP_FOUND}) + +# TODO: this is a temporary workaround until a better solution is found. AK 2019-05-30 +# GNU GCC 9.x uses settings incompatible with our use of 'default(none)' in OpenMP pragmas +# where we assume older GCC semantics. For the time being, we disable OpenMP by default +# for GCC 9.x and beyond. People may manually turn it on, but need to run the script +# src/USER-OMP/hack_openmp_for_pgi_gcc9.sh on all sources to make it compatible with gcc 9. +if ((${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 9.0.0)) + option(BUILD_OMP "Build with OpenMP support" OFF) +else() + option(BUILD_OMP "Build with OpenMP support" ${OpenMP_FOUND}) +endif() + if(BUILD_OMP) find_package(OpenMP REQUIRED) check_include_file_cxx(omp.h HAVE_OMP_H_INCLUDE) From 4243af30d7ed4781534730adf11c417ffd9148c1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 30 May 2019 23:54:59 -0400 Subject: [PATCH 208/311] properly store 64-bit integers for next_reneighbor into double type buffers for restarts of fixes also store number of attemps and number of successes in restart and retrieve those from it --- src/MC/fix_atom_swap.cpp | 11 ++++++++--- src/MC/fix_gcmc.cpp | 24 +++++++++++++++++++++--- src/MISC/fix_deposit.cpp | 4 ++-- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/MC/fix_atom_swap.cpp b/src/MC/fix_atom_swap.cpp index 12b5d65f4a..aad8d7447f 100644 --- a/src/MC/fix_atom_swap.cpp +++ b/src/MC/fix_atom_swap.cpp @@ -771,10 +771,12 @@ double FixAtomSwap::memory_usage() void FixAtomSwap::write_restart(FILE *fp) { int n = 0; - double list[4]; + double list[6]; list[n++] = random_equal->state(); list[n++] = random_unequal->state(); - list[n++] = next_reneighbor; + list[n++] = ubuf(next_reneighbor).d; + list[n++] = nswap_attempts; + list[n++] = nswap_successes; if (comm->me == 0) { int size = n * sizeof(double); @@ -798,5 +800,8 @@ void FixAtomSwap::restart(char *buf) seed = static_cast (list[n++]); random_unequal->reset(seed); - next_reneighbor = static_cast (list[n++]); + next_reneighbor = (bigint) ubuf(list[n++]).i; + + nswap_attempts = static_cast(list[n++]); + nswap_successes = static_cast(list[n++]); } diff --git a/src/MC/fix_gcmc.cpp b/src/MC/fix_gcmc.cpp index f1664e3540..f3a11a1000 100644 --- a/src/MC/fix_gcmc.cpp +++ b/src/MC/fix_gcmc.cpp @@ -2531,10 +2531,19 @@ double FixGCMC::memory_usage() void FixGCMC::write_restart(FILE *fp) { int n = 0; - double list[4]; + double list[12]; list[n++] = random_equal->state(); list[n++] = random_unequal->state(); - list[n++] = next_reneighbor; + list[n++] = ubuf(next_reneighbor).d; + list[n++] = ntranslation_attempts; + list[n++] = ntranslation_successes; + list[n++] = nrotation_attempts; + list[n++] = nrotation_successes; + list[n++] = ndeletion_attempts; + list[n++] = ndeletion_successes; + list[n++] = ninsertion_attempts; + list[n++] = ninsertion_successes; + if (comm->me == 0) { int size = n * sizeof(double); @@ -2558,7 +2567,16 @@ void FixGCMC::restart(char *buf) seed = static_cast (list[n++]); random_unequal->reset(seed); - next_reneighbor = static_cast (list[n++]); + next_reneighbor = (bigint) ubuf(list[n++]).i; + + ntranslation_attempts = list[n++]; + ntranslation_successes = list[n++]; + nrotation_attempts = list[n++]; + nrotation_successes = list[n++]; + ndeletion_attempts = list[n++]; + ndeletion_successes = list[n++]; + ninsertion_attempts = list[n++]; + ninsertion_successes = list[n++]; } void FixGCMC::grow_molecule_arrays(int nmolatoms) { diff --git a/src/MISC/fix_deposit.cpp b/src/MISC/fix_deposit.cpp index 1428299eb7..a1d0669f32 100644 --- a/src/MISC/fix_deposit.cpp +++ b/src/MISC/fix_deposit.cpp @@ -802,7 +802,7 @@ void FixDeposit::write_restart(FILE *fp) list[n++] = random->state(); list[n++] = ninserted; list[n++] = nfirst; - list[n++] = next_reneighbor; + list[n++] = ubuf(next_reneighbor).d; if (comm->me == 0) { int size = n * sizeof(double); @@ -823,7 +823,7 @@ void FixDeposit::restart(char *buf) seed = static_cast (list[n++]); ninserted = static_cast (list[n++]); nfirst = static_cast (list[n++]); - next_reneighbor = static_cast (list[n++]); + next_reneighbor = (bigint) ubuf(list[n++]).i; random->reset(seed); } From f73c848ee404be8a704bf247e42b99b14bf8b6d2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 31 May 2019 00:31:36 -0400 Subject: [PATCH 209/311] detect and error out when timestep was reset when restarting fixes atom/swap, gcmc, or deposit --- src/MC/fix_atom_swap.cpp | 5 +++++ src/MC/fix_gcmc.cpp | 6 +++++- src/MISC/fix_deposit.cpp | 7 ++++++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/MC/fix_atom_swap.cpp b/src/MC/fix_atom_swap.cpp index aad8d7447f..7d817ffbb1 100644 --- a/src/MC/fix_atom_swap.cpp +++ b/src/MC/fix_atom_swap.cpp @@ -777,6 +777,7 @@ void FixAtomSwap::write_restart(FILE *fp) list[n++] = ubuf(next_reneighbor).d; list[n++] = nswap_attempts; list[n++] = nswap_successes; + list[n++] = ubuf(update->ntimestep).d; if (comm->me == 0) { int size = n * sizeof(double); @@ -804,4 +805,8 @@ void FixAtomSwap::restart(char *buf) nswap_attempts = static_cast(list[n++]); nswap_successes = static_cast(list[n++]); + + bigint ntimestep_restart = (bigint) ubuf(list[n++]).i; + if (ntimestep_restart != update->ntimestep) + error->all(FLERR,"Must not reset timestep when restarting fix atom/swap"); } diff --git a/src/MC/fix_gcmc.cpp b/src/MC/fix_gcmc.cpp index f3a11a1000..7ab0879335 100644 --- a/src/MC/fix_gcmc.cpp +++ b/src/MC/fix_gcmc.cpp @@ -2543,7 +2543,7 @@ void FixGCMC::write_restart(FILE *fp) list[n++] = ndeletion_successes; list[n++] = ninsertion_attempts; list[n++] = ninsertion_successes; - + list[n++] = ubuf(update->ntimestep).d; if (comm->me == 0) { int size = n * sizeof(double); @@ -2577,6 +2577,10 @@ void FixGCMC::restart(char *buf) ndeletion_successes = list[n++]; ninsertion_attempts = list[n++]; ninsertion_successes = list[n++]; + + bigint ntimestep_restart = (bigint) ubuf(list[n++]).i; + if (ntimestep_restart != update->ntimestep) + error->all(FLERR,"Must not reset timestep when restarting fix gcmc"); } void FixGCMC::grow_molecule_arrays(int nmolatoms) { diff --git a/src/MISC/fix_deposit.cpp b/src/MISC/fix_deposit.cpp index a1d0669f32..66aed34846 100644 --- a/src/MISC/fix_deposit.cpp +++ b/src/MISC/fix_deposit.cpp @@ -798,11 +798,12 @@ void FixDeposit::options(int narg, char **arg) void FixDeposit::write_restart(FILE *fp) { int n = 0; - double list[4]; + double list[5]; list[n++] = random->state(); list[n++] = ninserted; list[n++] = nfirst; list[n++] = ubuf(next_reneighbor).d; + list[n++] = ubuf(update->ntimestep).d; if (comm->me == 0) { int size = n * sizeof(double); @@ -825,6 +826,10 @@ void FixDeposit::restart(char *buf) nfirst = static_cast (list[n++]); next_reneighbor = (bigint) ubuf(list[n++]).i; + bigint ntimestep_restart = (bigint) ubuf(list[n++]).i; + if (ntimestep_restart != update->ntimestep) + error->all(FLERR,"Must not reset timestep when restarting this fix"); + random->reset(seed); } From 8b169d97f5fc063081edaec35764412cc97d12a3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 31 May 2019 00:58:10 -0400 Subject: [PATCH 210/311] update documentation for updates to fix restarting --- doc/src/fix_atom_swap.txt | 7 ++++++- doc/src/fix_deposit.txt | 4 ++++ doc/src/fix_gcmc.txt | 7 ++++++- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/doc/src/fix_atom_swap.txt b/doc/src/fix_atom_swap.txt index 22091eca00..cb6bc26aa1 100644 --- a/doc/src/fix_atom_swap.txt +++ b/doc/src/fix_atom_swap.txt @@ -141,11 +141,16 @@ specify if this should be done. This fix writes the state of the fix to "binary restart files"_restart.html. This includes information about the random -number generator seed, the next timestep for MC exchanges, etc. See +number generator seed, the next timestep for MC exchanges, the number +of exchange attempts and successes etc. See the "read_restart"_read_restart.html command for info on how to re-specify a fix in an input script that reads a restart file, so that the operation of the fix continues in an uninterrupted fashion. +NOTE: For this to work correctly, the timestep must [not] be changed +after reading the restart with "reset_timestep"_reset_timestep.html. +The fix will try to detect it and stop with an error. + None of the "fix_modify"_fix_modify.html options are relevant to this fix. diff --git a/doc/src/fix_deposit.txt b/doc/src/fix_deposit.txt index fd12d4bb45..9ab125a55f 100644 --- a/doc/src/fix_deposit.txt +++ b/doc/src/fix_deposit.txt @@ -261,6 +261,10 @@ next timestep for deposition, etc. See the a fix in an input script that reads a restart file, so that the operation of the fix continues in an uninterrupted fashion. +NOTE: For this to work correctly, the timestep must [not] be changed +after reading the restart with "reset_timestep"_reset_timestep.html. +The fix will try to detect it and stop with an error. + None of the "fix_modify"_fix_modify.html options are relevant to this fix. No global or per-atom quantities are stored by this fix for access by various "output commands"_Howto_output.html. No parameter diff --git a/doc/src/fix_gcmc.txt b/doc/src/fix_gcmc.txt index 8a66a007a3..3c0f2c2f17 100644 --- a/doc/src/fix_gcmc.txt +++ b/doc/src/fix_gcmc.txt @@ -373,11 +373,16 @@ adds all inserted atoms of the specified type to the This fix writes the state of the fix to "binary restart files"_restart.html. This includes information about the random -number generator seed, the next timestep for MC exchanges, etc. See +number generator seed, the next timestep for MC exchanges, the number +of MC step attempts and successes etc. See the "read_restart"_read_restart.html command for info on how to re-specify a fix in an input script that reads a restart file, so that the operation of the fix continues in an uninterrupted fashion. +NOTE: For this to work correctly, the timestep must [not] be changed +after reading the restart with "reset_timestep"_reset_timestep.html. +The fix will try to detect it and stop with an error. + None of the "fix_modify"_fix_modify.html options are relevant to this fix. From 80d906d44571ef3652d4735ae32ac7eca9d3a121 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Thu, 30 May 2019 23:27:23 -0600 Subject: [PATCH 211/311] bond/react: update error messages --- src/USER-MISC/fix_bond_react.cpp | 57 +++++++++++++------------- src/USER-MISC/fix_bond_react.h | 70 ++++++++++++++++++++------------ 2 files changed, 72 insertions(+), 55 deletions(-) diff --git a/src/USER-MISC/fix_bond_react.cpp b/src/USER-MISC/fix_bond_react.cpp index 37e9f96882..7e2a228992 100644 --- a/src/USER-MISC/fix_bond_react.cpp +++ b/src/USER-MISC/fix_bond_react.cpp @@ -308,8 +308,7 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : onemol->check_attributes(0); twomol->check_attributes(0); if (onemol->natoms != twomol->natoms) - error->all(FLERR,"Post-reacted template must contain the same " - "number of atoms as the pre-reacted template"); + error->all(FLERR,"Bond/react: Reaction templates must contain the same number of atoms"); get_molxspecials(); read(i); fclose(fp); @@ -324,7 +323,7 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : delete [] files; if (atom->molecular != 1) - error->all(FLERR,"Cannot use fix bond/react with non-molecular systems"); + error->all(FLERR,"Bond/react: Cannot use fix bond/react with non-molecular systems"); // check if bonding atoms are 1-2, 1-3, or 1-4 bonded neighbors // if so, we don't need non-bonded neighbor list @@ -665,7 +664,7 @@ void FixBondReact::init() // check cutoff for iatomtype,jatomtype for (int i = 0; i < nreacts; i++) { if (force->pair == NULL || cutsq[i][1] > force->pair->cutsq[iatomtype[i]][jatomtype[i]]) - error->all(FLERR,"Fix bond/react cutoff is longer than pairwise cutoff"); + error->all(FLERR,"Bond/react: Fix bond/react cutoff is longer than pairwise cutoff"); } // need a half neighbor list, built every Nevery steps @@ -1174,7 +1173,7 @@ void FixBondReact::superimpose_algorithm() // let's go ahead and catch the simplest of hangs //if (hang_catch > onemol->natoms*4) if (hang_catch > atom->nlocal*30) { - error->one(FLERR,"Excessive iteration of superimpose algorithm"); + error->one(FLERR,"Bond/react: Excessive iteration of superimpose algorithm"); } } } @@ -1287,7 +1286,7 @@ void FixBondReact::make_a_guess() for (int i = 0; i < nxspecial[atom->map(glove[pion][1])][0]; i++) { if (atom->map(xspecial[atom->map(glove[pion][1])][i]) < 0) { - error->all(FLERR,"Fix bond/react needs ghost atoms from further away1"); // parallel issues. + error->all(FLERR,"Bond/react: Fix bond/react needs ghost atoms from further away1"); // parallel issues. } if (i_limit_tags[(int)atom->map(xspecial[atom->map(glove[pion][1])][i])] != 0) { status = GUESSFAIL; @@ -1398,7 +1397,7 @@ void FixBondReact::check_a_neighbor() //another check for ghost atoms. perhaps remove the one in make_a_guess if (atom->map(glove[(int)onemol_xspecial[pion][neigh]-1][1]) < 0) { - error->all(FLERR,"Fix bond/react needs ghost atoms from further away2"); + error->all(FLERR,"Bond/react: Fix bond/react needs ghost atoms from further away2"); } for (int j = 0; j < onemol_nxspecial[onemol_xspecial[pion][neigh]-1][0]; j++) { @@ -1450,7 +1449,7 @@ void FixBondReact::check_a_neighbor() //another check for ghost atoms. perhaps remove the one in make_a_guess if (atom->map(glove[(int)onemol_xspecial[pion][neigh]-1][1]) < 0) { - error->all(FLERR,"Fix bond/react needs ghost atoms from further away3"); + error->all(FLERR,"Bond/react: Fix bond/react needs ghost atoms from further away3"); } for (int ii = 0; ii < onemol_nxspecial[onemol_xspecial[pion][neigh]-1][0]; ii++) { @@ -1492,7 +1491,7 @@ void FixBondReact::crosscheck_the_neighbor() glove[onemol_xspecial[pion][trace]-1][0] == 0) { if (avail_guesses == MAXGUESS) { - error->warning(FLERR,"Fix bond/react failed because MAXGUESS set too small. ask developer for info"); + error->warning(FLERR,"Bond/react: Fix bond/react failed because MAXGUESS set too small. ask developer for info"); status = GUESSFAIL; return; } @@ -1561,7 +1560,7 @@ void FixBondReact::inner_crosscheck_loop() //another check for ghost atoms. perhaps remove the one in make_a_guess if (atom->map(glove[(int)onemol_xspecial[pion][neigh]-1][1]) < 0) { - error->all(FLERR,"Fix bond/react needs ghost atoms from further away4"); + error->all(FLERR,"Bond/react: Fix bond/react needs ghost atoms from further away4"); } if (guess_branch[avail_guesses-1] == 0) avail_guesses--; @@ -1722,7 +1721,7 @@ void FixBondReact::find_landlocked_atoms(int myrxn) // if atoms change types, but aren't landlocked, that's bad for (int i = 0; i < twomol->natoms; i++) { if (twomol->type[i] != onemol->type[equivalences[i][1][myrxn]-1] && landlocked_atoms[i][myrxn] == 0) - error->one(FLERR,"Atom affected by reaction too close to template edge"); + error->one(FLERR,"Bond/react: Atom affected by reaction too close to template edge"); } // additionally, if a bond changes type, but neither involved atom is landlocked, bad @@ -1738,7 +1737,7 @@ void FixBondReact::find_landlocked_atoms(int myrxn) onemol_batom = onemol->bond_atom[onemol_atomi-1][m]; if (onemol_batom == equivalences[twomol_atomj-1][1][myrxn]) { if (twomol->bond_type[i][j] != onemol->bond_type[onemol_atomi-1][m]) { - error->one(FLERR,"Bond type affected by reaction too close to template edge"); + error->one(FLERR,"Bond/react: Bond type affected by reaction too close to template edge"); } } } @@ -1748,7 +1747,7 @@ void FixBondReact::find_landlocked_atoms(int myrxn) onemol_batom = onemol->bond_atom[onemol_atomj-1][m]; if (onemol_batom == equivalences[i][1][myrxn]) { if (twomol->bond_type[i][j] != onemol->bond_type[onemol_atomj-1][m]) { - error->one(FLERR,"Bond type affected by reaction too close to template edge"); + error->one(FLERR,"Bond/react: Bond type affected by reaction too close to template edge"); } } } @@ -1764,7 +1763,7 @@ void FixBondReact::find_landlocked_atoms(int myrxn) int ii = reverse_equiv[i][1][myrxn] - 1; for (int j = 0; j < twomol_nxspecial[ii][0]; j++) { if (delete_atoms[equivalences[twomol_xspecial[ii][j]-1][1][myrxn]-1][myrxn] == 0) { - error->one(FLERR,"A deleted atom cannot remain bonded to an atom that is not deleted"); + error->one(FLERR,"Bond/react: A deleted atom cannot remain bonded to an atom that is not deleted"); } } } @@ -1775,7 +1774,7 @@ void FixBondReact::find_landlocked_atoms(int myrxn) for (int i = 0; i < twomol->natoms; i++) { if (twomol_nxspecial[i][0] != onemol_nxspecial[equivalences[i][1][myrxn]-1][0] && landlocked_atoms[i][myrxn] == 0) { char str[128]; - sprintf(str,"An atom in 'react #%d' changes bond connectivity but not atom type",myrxn+1); + sprintf(str,"Bond/react: An atom in 'react #%d' changes bond connectivity but not atom type",myrxn+1); error->warning(FLERR,str); break; } @@ -2263,7 +2262,7 @@ void FixBondReact::update_everything() if (landlocked_atoms[j][rxnID] == 1) { for (int k = 0; k < nspecial[atom->map(update_mega_glove[jj+1][i])][2]; k++) { if (atom->map(special[atom->map(update_mega_glove[jj+1][i])][k]) < 0) { - error->all(FLERR,"Fix bond/react needs ghost atoms from further away - most likely too many processors"); + error->all(FLERR,"Bond/react: Fix bond/react needs ghost atoms from further away - most likely too many processors"); } } } @@ -2388,7 +2387,7 @@ void FixBondReact::update_everything() bond_atom[atom->map(update_mega_glove[jj+1][i])][insert_num] = update_mega_glove[equivalences[twomol->bond_atom[j][p]-1][1][rxnID]][i]; num_bond[atom->map(update_mega_glove[jj+1][i])]++; if (num_bond[atom->map(update_mega_glove[jj+1][i])] > atom->bond_per_atom) - error->one(FLERR,"Bond/react bonds/atom exceed system bonds/atom"); + error->one(FLERR,"Bond/react topology/atom exceed system topology/atom"); delta_bonds++; } } @@ -2464,7 +2463,7 @@ void FixBondReact::update_everything() angle_atom3[atom->map(update_mega_glove[jj+1][i])][insert_num] = update_mega_glove[equivalences[twomol->angle_atom3[j][p]-1][1][rxnID]][i]; num_angle[atom->map(update_mega_glove[jj+1][i])]++; if (num_angle[atom->map(update_mega_glove[jj+1][i])] > atom->angle_per_atom) - error->one(FLERR,"Bond/react angles/atom exceed system angles/atom"); + error->one(FLERR,"Bond/react topology/atom exceed system topology/atom"); delta_angle++; } } @@ -2547,7 +2546,7 @@ void FixBondReact::update_everything() dihedral_atom4[atom->map(update_mega_glove[jj+1][i])][insert_num] = update_mega_glove[equivalences[twomol->dihedral_atom4[j][p]-1][1][rxnID]][i]; num_dihedral[atom->map(update_mega_glove[jj+1][i])]++; if (num_dihedral[atom->map(update_mega_glove[jj+1][i])] > atom->dihedral_per_atom) - error->one(FLERR,"Bond/react dihedrals/atom exceed system dihedrals/atom"); + error->one(FLERR,"Bond/react topology/atom exceed system topology/atom"); delta_dihed++; } } @@ -2630,7 +2629,7 @@ void FixBondReact::update_everything() improper_atom4[atom->map(update_mega_glove[jj+1][i])][insert_num] = update_mega_glove[equivalences[twomol->improper_atom4[j][p]-1][1][rxnID]][i]; num_improper[atom->map(update_mega_glove[jj+1][i])]++; if (num_improper[atom->map(update_mega_glove[jj+1][i])] > atom->improper_per_atom) - error->one(FLERR,"Bond/react impropers/atom exceed system impropers/atom"); + error->one(FLERR,"Bond/react topology/atom exceed system topology/atom"); delta_imprp++; } } @@ -2728,7 +2727,7 @@ void FixBondReact::read(int myrxn) // skip 1st line of file eof = fgets(line,MAXLINE,fp); - if (eof == NULL) error->one(FLERR,"Unexpected end of superimpose file"); + if (eof == NULL) error->one(FLERR,"Bond/react: Unexpected end of superimpose file"); // read header lines // skip blank lines or lines that start with "#" @@ -2782,7 +2781,7 @@ void FixBondReact::read(int myrxn) DeleteAtoms(line, myrxn); } else if (strcmp(keyword,"Constraints") == 0) { Constraints(line, myrxn); - } else error->one(FLERR,"Unknown section in superimpose file"); + } else error->one(FLERR,"Bond/react: Unknown section in map file"); parse_keyword(1,line,keyword); @@ -2790,13 +2789,13 @@ void FixBondReact::read(int myrxn) // error check if (bondflag == 0 || equivflag == 0) - error->all(FLERR,"Superimpose file missing BondingIDs or Equivalences section\n"); + error->all(FLERR,"Bond/react: Map file missing BondingIDs or Equivalences section\n"); if (update_edges_flag[myrxn] == 2 && customedgesflag == 0) - error->all(FLERR,"Map file must have a Custom Edges section when using 'update_edges custom'\n"); + error->all(FLERR,"Bond/react: Map file must have a Custom Edges section when using 'update_edges custom'\n"); if (update_edges_flag[myrxn] != 2 && customedgesflag == 1) - error->all(FLERR,"Specify 'update_edges custom' to include Custom Edges section in map file\n"); + error->all(FLERR,"Bond/react: Specify 'update_edges custom' to include Custom Edges section in map file\n"); } void FixBondReact::EdgeIDs(char *line, int myrxn) @@ -2842,7 +2841,7 @@ void FixBondReact::CustomEdges(char *line, int myrxn) else if (strcmp(edgemode,"charges") == 0) custom_edges[tmp-1][myrxn] = 1; else - error->one(FLERR,"Illegal value in 'Custom Edges' section of map file"); + error->one(FLERR,"Bond/react: Illegal value in 'Custom Edges' section of map file"); } delete [] edgemode; } @@ -2873,7 +2872,7 @@ void FixBondReact::Constraints(char *line, int myrxn) constraints[myrxn][3] = tmp[2]*tmp[2]; // using square of distance constraints[myrxn][4] = tmp[3]*tmp[3]; } else - error->one(FLERR,"Illegal constraint type in 'Constraints' section of map file"); + error->one(FLERR,"Bond/react: Illegal constraint type in 'Constraints' section of map file"); } delete [] constraint_type; } @@ -2883,7 +2882,7 @@ void FixBondReact::open(char *file) fp = fopen(file,"r"); if (fp == NULL) { char str[128]; - snprintf(str,128,"Cannot open superimpose file %s",file); + snprintf(str,128,"Bond/react: Cannot open map file %s",file); error->one(FLERR,str); } } @@ -2896,7 +2895,7 @@ void FixBondReact::readline(char *line) else n = strlen(line) + 1; } MPI_Bcast(&n,1,MPI_INT,0,world); - if (n == 0) error->all(FLERR,"Unexpected end of superimpose file"); + if (n == 0) error->all(FLERR,"Bond/react: Unexpected end of map file"); MPI_Bcast(line,n,MPI_CHAR,0,world); } diff --git a/src/USER-MISC/fix_bond_react.h b/src/USER-MISC/fix_bond_react.h index 74d53b8f21..36fc13ae21 100644 --- a/src/USER-MISC/fix_bond_react.h +++ b/src/USER-MISC/fix_bond_react.h @@ -189,47 +189,65 @@ Self-explanatory. Check the input script syntax and compare to the documentation for the command. You can use -echo screen as a command-line option when running LAMMPS to see the offending line. -E: Invalid exclude group name +E: Bond/react: Cannot use fix bond/react with non-molecular systems -Exclude group name should not previously be defined. - -E: Cannot use fix bond/react with non-molecular systems - -Only systems with bonds that can be changed can be used. Atom_style +Only systems with bonds that can be changed can be used. Atom_style template does not qualify. -E: Fix bond/react cutoff is longer than pairwise cutoff +E: Bond/react: Rmax cutoff is longer than pairwise cutoff -This is not allowed because bond creation is done using the -pairwise neighbor list. +This is not allowed because bond creation is done using the pairwise +neighbor list. -E: Molecule template ID for fix bond/react does not exist +E: Bond/react: Molecule template ID for fix bond/react does not exist -A valid molecule template must have been created with the molecule command. +A valid molecule template must have been created with the molecule +command. -E: Superimpose file errors: +E: Bond/react: Reaction templates must contain the same number of atoms -Please ensure superimpose file is properly formatted. +There should be a one-to-one correspondence between atoms in the +pre-reacted and post-reacted templates, as specified by the map file. -E: Atom affected by reaction too close to template edge +E: Bond/react: Unknown section in map file + +Please ensure reaction map files are properly formatted. + +E: Bond/react: Atom affected by reaction too close to template edge This means an atom which changes type during the reaction is too close -to an 'edge' atom defined in the superimpose file. This could cause incorrect -assignment of bonds, angle, etc. Generally, this means you must include -more atoms in your templates, such that there are at least two atoms -between each atom involved in the reaction and an edge atom. +to an 'edge' atom defined in the superimpose file. This could cause +incorrect assignment of bonds, angle, etc. Generally, this means you +must include more atoms in your templates, such that there are at +least two atoms between each atom involved in the reaction and an edge +atom. -E: Fix bond/react needs ghost atoms from farther away +E: Bond/react: Fix bond/react needs ghost atoms from farther away This is because a processor needs to superimpose the entire unreacted -molecule template onto simulation atoms it can 'see.' The comm_modify cutoff -command can be used to extend the communication range. +molecule template onto simulation atoms it knows about. The +comm_modify cutoff command can be used to extend the communication +range. -E: Excessive iteration of superimpose algorithm +E: Bond/react: A deleted atom cannot remain bonded to an atom that is not deleted -You may have discovered a bug! But first, please double check that your -molecule template atom types, bond types, etc. are consistent with your simulation, -and that all atoms affected by a reaction are sufficently separated from edge atoms. -If this issue persists, please contact the developer. +Self-explanatory. + +W: Bond/react: An atom in 'react #%d' changes bond connectivity but not atom type + +You may want to double-check that all atom types are properly assigned +in the post-reaction template. + +E: Bond/react special bond generation overflow + +The number of special bonds per-atom created by a reaction exceeds the +system setting. See the read_data or create_box command for how to +specify this value. + +E: Bond/react topology/atom exceed system topology/atom + +The number of bonds, angles etc per-atom created by a reaction exceeds +the system setting. See the read_data or create_box command for how to +specify this value. */ From 16a254f6bd89bda076858c6116f1fd50c6cc6de0 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Thu, 30 May 2019 23:29:43 -0600 Subject: [PATCH 212/311] Update Errors_messages.txt --- doc/src/Errors_messages.txt | 56 +++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/doc/src/Errors_messages.txt b/doc/src/Errors_messages.txt index 4f3bbe8c24..ff3e62232f 100644 --- a/doc/src/Errors_messages.txt +++ b/doc/src/Errors_messages.txt @@ -610,6 +610,62 @@ This means there is something invalid about the topology definitions. :dd The data file header lists bonds but no bond types. :dd +{Bond/react: Cannot use fix bond/react with non-molecular systems} :dt + +Only systems with bonds that can be changed can be used. Atom_style +template does not qualify. :dd + +{Bond/react: Rmax cutoff is longer than pairwise cutoff} :dt + +This is not allowed because bond creation is done using the pairwise +neighbor list. :dd + +{Bond/react: Molecule template ID for fix bond/react does not exist} :dt + +A valid molecule template must have been created with the molecule +command. :dd + +{Bond/react: Reaction templates must contain the same number of atoms} :dt + +There should be a one-to-one correspondence between atoms in the +pre-reacted and post-reacted templates, as specified by the map file. :dd + +{Bond/react: Unknown section in map file} :dt + +Please ensure reaction map files are properly formatted. :dd + +{Bond/react: Atom affected by reaction too close to template edge} :dt + +This means an atom which changes type during the reaction is too close +to an 'edge' atom defined in the superimpose file. This could cause +incorrect assignment of bonds, angle, etc. Generally, this means you +must include more atoms in your templates, such that there are at +least two atoms between each atom involved in the reaction and an edge +atom. :dd + +{Bond/react: Fix bond/react needs ghost atoms from farther away} :dt + +This is because a processor needs to superimpose the entire unreacted +molecule template onto simulation atoms it knows about. The +comm_modify cutoff command can be used to extend the communication +range. :dd + +{Bond/react: A deleted atom cannot remain bonded to an atom that is not deleted} :dt + +Self-explanatory. :dd + +{Bond/react special bond generation overflow} :dt + +The number of special bonds per-atom created by a reaction exceeds the +system setting. See the read_data or create_box command for how to +specify this value. :dd + +{Bond/react topology/atom exceed system topology/atom} :dt + +The number of bonds, angles etc per-atom created by a reaction exceeds +the system setting. See the read_data or create_box command for how to +specify this value. :dd + {Both restart files must use % or neither} :dt Self-explanatory. :dd From 311aebf7ff0c5e4272357b3500a2d87fcf88ba31 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Thu, 30 May 2019 23:30:35 -0600 Subject: [PATCH 213/311] Update Errors_warnings.txt --- doc/src/Errors_warnings.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/src/Errors_warnings.txt b/doc/src/Errors_warnings.txt index 47dd597af8..164a29e21d 100644 --- a/doc/src/Errors_warnings.txt +++ b/doc/src/Errors_warnings.txt @@ -82,6 +82,11 @@ bond/angle/dihedral. LAMMPS computes this by taking the maximum bond length, multiplying by the number of bonds in the interaction (e.g. 3 for a dihedral) and adding a small amount of stretch. :dd +{Bond/react: An atom in 'react #%d' changes bond connectivity but not atom type} :dt + +You may want to double-check that all atom types are properly assigned +in the post-reaction template. :dd + {Both groups in compute group/group have a net charge; the Kspace boundary correction to energy will be non-zero} :dt Self-explanatory. :dd From 972a7a5c4dced1f697ddaecae90e13102f58210f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 31 May 2019 05:44:07 -0400 Subject: [PATCH 214/311] add false positive for spell checking --- doc/utils/sphinx-config/false_positives.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/utils/sphinx-config/false_positives.txt b/doc/utils/sphinx-config/false_positives.txt index 867d3028c6..7b7c4d11b2 100644 --- a/doc/utils/sphinx-config/false_positives.txt +++ b/doc/utils/sphinx-config/false_positives.txt @@ -2844,6 +2844,7 @@ unoptimized unpadded unphysical unphysically +unreacted unscaled unsets unsmoothed From 76900b83252c35d4a55acd87def9b8d280b15f50 Mon Sep 17 00:00:00 2001 From: Adrian Diaz Date: Fri, 31 May 2019 11:53:58 -0600 Subject: [PATCH 215/311] avoids the possibility of undefined behavior with memcpy having the same source and destination arrays; this is not every instance of this issue in the source code --- src/math_extra.cpp | 4 ++-- src/rcb.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/math_extra.cpp b/src/math_extra.cpp index 0bba2ad401..f7e5bb646b 100644 --- a/src/math_extra.cpp +++ b/src/math_extra.cpp @@ -56,7 +56,7 @@ int mldivide3(const double m[3][3], const double *v, double *ans) if (fabs(aug[j][i]) > fabs(aug[i][i])) { double tempv[4]; memcpy(tempv,aug[i],4*sizeof(double)); - memcpy(aug[i],aug[j],4*sizeof(double)); + memmove(aug[i],aug[j],4*sizeof(double)); memcpy(aug[j],tempv,4*sizeof(double)); } } @@ -68,7 +68,7 @@ int mldivide3(const double m[3][3], const double *v, double *ans) if (p != i) { double tempv[4]; memcpy(tempv,aug[i],4*sizeof(double)); - memcpy(aug[i],aug[p],4*sizeof(double)); + memmove(aug[i],aug[p],4*sizeof(double)); memcpy(aug[p],tempv,4*sizeof(double)); } diff --git a/src/rcb.cpp b/src/rcb.cpp index 630cef309a..83cdccdf80 100644 --- a/src/rcb.cpp +++ b/src/rcb.cpp @@ -537,7 +537,7 @@ void RCB::compute(int dimension, int n, double **x, double *wt, if (dotmark[i] == markactive) memcpy(&buf[outgoing++],&dots[i],sizeof(Dot)); else - memcpy(&dots[keep++],&dots[i],sizeof(Dot)); + memmove(&dots[keep++],&dots[i],sizeof(Dot)); } // post receives for dots @@ -1029,7 +1029,7 @@ void RCB::compute_old(int dimension, int n, double **x, double *wt, if (dotmark[i] == markactive) memcpy(&buf[outgoing++],&dots[i],sizeof(Dot)); else - memcpy(&dots[keep++],&dots[i],sizeof(Dot)); + memmove(&dots[keep++],&dots[i],sizeof(Dot)); } // post receives for dots From 5f657b91842de2b649c3097828085e717ea7198d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 29 May 2019 15:42:28 -0400 Subject: [PATCH 216/311] step version string for next release --- doc/lammps.1 | 2 +- doc/src/Manual.txt | 4 ++-- src/version.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/lammps.1 b/doc/lammps.1 index ac23e7abf8..8517abcdd5 100644 --- a/doc/lammps.1 +++ b/doc/lammps.1 @@ -1,4 +1,4 @@ -.TH LAMMPS "15 May 2019" "2019-05-15" +.TH LAMMPS "31 May 2019" "2019-05-31" .SH NAME .B LAMMPS \- Molecular Dynamics Simulator. diff --git a/doc/src/Manual.txt b/doc/src/Manual.txt index 396155cc45..0fb707746c 100644 --- a/doc/src/Manual.txt +++ b/doc/src/Manual.txt @@ -1,7 +1,7 @@ LAMMPS Users Manual - + @@ -21,7 +21,7 @@ :line LAMMPS Documentation :c,h1 -15 May 2019 version :c,h2 +31 May 2019 version :c,h2 "What is a LAMMPS version?"_Manual_version.html diff --git a/src/version.h b/src/version.h index 0377cb9b35..312c87bd0c 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "15 May 2019" +#define LAMMPS_VERSION "31 May 2019" From 68d69955d0bebbf8c6a93501aadbaf0d59dcee20 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 31 May 2019 14:38:12 -0400 Subject: [PATCH 217/311] fix off-by-one error --- src/variable.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/variable.cpp b/src/variable.cpp index fdef9985bf..376cc8045a 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -384,7 +384,7 @@ void Variable::set(int narg, char **arg) num[nvar] = 3; which[nvar] = 0; pad[nvar] = 0; - if (!utils::strmatch(arg[2],"%[0-9 ]*\\.[0-9]+[efgEFG]")) + if (!utils::strmatch(arg[3],"%[0-9 ]*\\.[0-9]+[efgEFG]")) error->all(FLERR,"Incorrect conversion in format string"); data[nvar] = new char*[num[nvar]]; copy(2,&arg[2],data[nvar]); From 6175f2dce8937d7155a21b39886d9a1540430e2b Mon Sep 17 00:00:00 2001 From: Steven Strong Date: Fri, 31 May 2019 15:03:04 -0500 Subject: [PATCH 218/311] Fix error in E3B documentation --- doc/src/pair_e3b.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/pair_e3b.txt b/doc/src/pair_e3b.txt index fe4349a57d..6d1f992ca1 100644 --- a/doc/src/pair_e3b.txt +++ b/doc/src/pair_e3b.txt @@ -99,7 +99,7 @@ This pair style does not support the "pair_modify"_pair_modify.html shift, table, and tail options. This pair style does not write its information to "binary restart -files"_restart.html, since it is stored in potential files. Thus, you +files"_restart.html. Thus, you need to re-specify the pair_style and pair_coeff commands in an input script that reads a restart file. From 68eab23cf8e37bd949fa5d05860cf479931afd57 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sat, 1 Jun 2019 16:24:37 -0600 Subject: [PATCH 219/311] bond/react: doc clarification --- doc/src/fix_bond_react.txt | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/doc/src/fix_bond_react.txt b/doc/src/fix_bond_react.txt index ddebe8b611..80c3c8c2c7 100644 --- a/doc/src/fix_bond_react.txt +++ b/doc/src/fix_bond_react.txt @@ -136,10 +136,12 @@ words, can be customized for each reaction, or reaction step): A check for possible new reaction sites is performed every {Nevery} timesteps. -Two conditions must be met for a reaction to occur. First a bonding -atom pair must be identified. Second, the topology surrounding the -bonding atom pair must match the topology of the pre-reaction -template. If both these conditions are met, the reaction site is +Three physical conditions must be met for a reaction to occur. First, +a bonding atom pair must be identified within the reaction distance +cutoffs. Second, the topology surrounding the bonding atom pair must +match the topology of the pre-reaction template. Finally, any reaction +constraints listed in the map file (see below) must be satisfied. If +all of these conditions are met, the reaction site is eligible to be modified to match the post-reaction template. A bonding atom pair will be identified if several conditions are met. From 2e63280f87fab9367b056148d97834d163c7bd06 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sun, 2 Jun 2019 11:54:31 -0600 Subject: [PATCH 220/311] Update fix_bond_react.txt --- doc/src/fix_bond_react.txt | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/doc/src/fix_bond_react.txt b/doc/src/fix_bond_react.txt index 80c3c8c2c7..dc0a1fa20b 100644 --- a/doc/src/fix_bond_react.txt +++ b/doc/src/fix_bond_react.txt @@ -216,10 +216,13 @@ The map file is a text document with the following format: A map file has a header and a body. The header of map file the contains one mandatory keyword and three optional keywords. The -mandatory keyword is 'equivalences' and the optional keywords are -'edgeIDs' and 'deleteIDs' and 'customIDs': +mandatory keyword is 'equivalences': + +N {equivalences} = # of atoms N in the reaction molecule templates :pre + +The optional keywords are 'edgeIDs', 'deleteIDs', 'customIDs' and +'constraints': -N {equivalences} = # of atoms N in the reaction molecule templates N {edgeIDs} = # of edge atoms N in the pre-reacted molecule template N {deleteIDs} = # of atoms N that are specified for deletion N {customIDs} = # of atoms N that are specified for a custom update @@ -253,8 +256,8 @@ A sample map file is given below: # this is a map file :pre -2 edgeIDs -7 equivalences :pre +7 equivalences +2 edgeIDs :pre BondingIDs :pre From 0ba38aa072b556e19d5c772ea8c3999e08b78bbb Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sun, 2 Jun 2019 12:05:01 -0600 Subject: [PATCH 221/311] bond/react doc tweak --- doc/src/fix_bond_react.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/fix_bond_react.txt b/doc/src/fix_bond_react.txt index dc0a1fa20b..2ff1821804 100644 --- a/doc/src/fix_bond_react.txt +++ b/doc/src/fix_bond_react.txt @@ -215,7 +215,7 @@ reserved by using the relevant "extra" keywords to the The map file is a text document with the following format: A map file has a header and a body. The header of map file the -contains one mandatory keyword and three optional keywords. The +contains one mandatory keyword and four optional keywords. The mandatory keyword is 'equivalences': N {equivalences} = # of atoms N in the reaction molecule templates :pre From 58a88dff950e668328e5587b7951b7a61483aa10 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sun, 2 Jun 2019 12:10:43 -0600 Subject: [PATCH 222/311] bond/react doc correction --- doc/src/fix_bond_react.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/src/fix_bond_react.txt b/doc/src/fix_bond_react.txt index 2ff1821804..08b0caf282 100644 --- a/doc/src/fix_bond_react.txt +++ b/doc/src/fix_bond_react.txt @@ -205,9 +205,9 @@ new types must also be defined during the setup of a given simulation. A discussion of correctly handling this is also provided on the "molecule"_molecule.html command page. -NOTE: When a reaction includes edge atoms, it is possible that the -resulting topology/atom (e.g. special bonds, dihedrals, etc.) exceeds -that of the existing system and reaction templates. As when inserting +NOTE: When a reaction occurs, it is possible that the resulting +topology/atom (e.g. special bonds, dihedrals, etc.) exceeds that of +the existing system and reaction templates. As when inserting molecules, enough space for this increased topology/atom must be reserved by using the relevant "extra" keywords to the "read_data"_read_data.html or "create_box"_create_box.html commands. From 983f3adbb4fe56a55a6f454899286547feb5b338 Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sun, 2 Jun 2019 12:35:38 -0600 Subject: [PATCH 223/311] bond/react doc final touches --- doc/src/fix_bond_react.txt | 39 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/doc/src/fix_bond_react.txt b/doc/src/fix_bond_react.txt index 08b0caf282..34f0e6daf7 100644 --- a/doc/src/fix_bond_react.txt +++ b/doc/src/fix_bond_react.txt @@ -18,8 +18,8 @@ fix ID group-ID bond/react common_keyword values ... ID, group-ID are documented in "fix"_fix.html command. Group-ID is ignored. :ulb,l bond/react = style name of this fix command :l -zero or more common keyword/value pairs may be appended directly after 'bond/react' :l -these apply to all reaction specifications (below) :l +the common keyword/values may be appended directly after 'bond/react' :l +this applies to all reaction specifications (below) :l common_keyword = {stabilization} :l {stabilization} values = {no} or {yes} {group-ID} {xmax} {no} = no reaction site stabilization @@ -309,26 +309,25 @@ can allow for the possibility of one or more reverse reactions. The optional keywords deal with the probability of a given reaction occurring as well as the stable equilibration of each reaction site as -it occurs. +it occurs: -The {prob} keyword can affect whether an eligible reaction actually -occurs. The fraction setting must be a value between 0.0 and 1.0. A -uniform random number between 0.0 and 1.0 is generated and the +The {prob} keyword can affect whether or not an eligible reaction +actually occurs. The fraction setting must be a value between 0.0 and +1.0. A uniform random number between 0.0 and 1.0 is generated and the eligible reaction only occurs if the random number is less than the fraction. Up to N reactions are permitted to occur, as optionally specified by the {max_rxn} keyword. The {stabilize_steps} keyword allows for the specification of how many timesteps a reaction site is stabilized before being returned to the -overall system thermostat. - -In order to produce the most physical behavior, this 'reaction site -equilibration time' should be tuned to be as small as possible while -retaining stability for a given system or reaction step. After a -limited number of case studies, this number has been set to a default -of 60 timesteps. Ideally, it should be individually tuned for each fix -reaction step. Note that in some situations, decreasing rather than -increasing this parameter will result in an increase in stability. +overall system thermostat. In order to produce the most physical +behavior, this 'reaction site equilibration time' should be tuned to +be as small as possible while retaining stability for a given system +or reaction step. After a limited number of case studies, this number +has been set to a default of 60 timesteps. Ideally, it should be +individually tuned for each fix reaction step. Note that in some +situations, decreasing rather than increasing this parameter will +result in an increase in stability. The {update_edges} keyword can increase the number of atoms whose atomic charges are updated, when the pre-reaction template contains @@ -336,11 +335,11 @@ edge atoms. When the value is set to 'charges,' all atoms' atomic charges are updated to those specified by the post-reaction template, including atoms near the edge of reaction templates. When the value is set to 'custom,' an additional section must be included in the map -file that specifies whether to update charges, on a per-atom basis. -The format of this section is detailed above. Listing a pre-reaction -atom ID with a value of 'charges' will force the update of the atom's -charge, even if it is near a template edge. Atoms not near a template -edge are unaffected by this setting. +file that specifies whether or not to update charges, on a per-atom +basis. The format of this section is detailed above. Listing a +pre-reaction atom ID with a value of 'charges' will force the update +of the atom's charge, even if it is near a template edge. Atoms not +near a template edge are unaffected by this setting. A few other considerations: From d0286b3de1126aaad678c3c9780e28c88c1884d2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 2 Jun 2019 20:19:17 -0400 Subject: [PATCH 224/311] remove mention of USER-CUDA package and fix typo --- doc/src/variable.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/variable.txt b/doc/src/variable.txt index e90e9bd04b..d75391d354 100644 --- a/doc/src/variable.txt +++ b/doc/src/variable.txt @@ -865,7 +865,7 @@ The {is_active()} function allows to query for active settings which are grouped by categories. Currently supported categories and arguments are: -{package} (argument = {cuda} or {gpu} or {intel} or {kokkos} or {omp}) +{package} (argument = {gpu} or {intel} or {kokkos} or {omp}) {newton} (argument = {pair} or {bond} or {any}) {pair} (argument = {single} or {respa} or {manybody} or {tail} or {shift}) {comm_style} (argument = {brick} or {tiled}) @@ -894,7 +894,7 @@ kspace_style pppm :pre Example 2: use r-RESPA with inner/outer cutoff, if supported by pair style, otherwise fall back to using pair and reducing the outer time step -timestep $(2.0*(1.0+*is_active(pair,respa)) +timestep $(2.0*(1.0+2.0*is_active(pair,respa)) if $(is_active(pair,respa)) then "run_style respa 4 3 2 2 improper 1 inner 2 5.5 7.0 outer 3 kspace 4" else "run_style respa 3 3 2 improper 1 pair 2 kspace 3" :pre The {is_defined()} function allows to query categories like {compute}, From 674e3975a8e3227ce60ac1d5894a727e0483199d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 2 Jun 2019 21:41:28 -0400 Subject: [PATCH 225/311] add section to the Commands chapter listing and explaining removed packages and styles --- doc/src/Commands.txt | 7 +++++ doc/src/Commands_removed.txt | 55 ++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 doc/src/Commands_removed.txt diff --git a/doc/src/Commands.txt b/doc/src/Commands.txt index bb3fab3683..bcbbe524a8 100644 --- a/doc/src/Commands.txt +++ b/doc/src/Commands.txt @@ -33,6 +33,11 @@ commands in it are used to define a LAMMPS simulation. Commands_bond Commands_kspace +.. toctree:: + :maxdepth: 1 + + Commands_removed + END_RST --> @@ -49,5 +54,7 @@ END_RST --> "Bond, angle, dihedral, improper commands"_Commands_bond.html "KSpace solvers"_Commands_kspace.html :all(b) +"Removed commands and packages"_Commands_removed.html :all(b) + diff --git a/doc/src/Commands_removed.txt b/doc/src/Commands_removed.txt new file mode 100644 index 0000000000..dc41c81981 --- /dev/null +++ b/doc/src/Commands_removed.txt @@ -0,0 +1,55 @@ +"Higher level section"_Commands.html - "LAMMPS WWW Site"_lws - "LAMMPS +Documentation"_ld - "LAMMPS Commands"_lc :c + +:link(lws,http://lammps.sandia.gov) +:link(ld,Manual.html) +:link(lc,Commands.html) + +:line + +Removed commands and packages :h3 + +This page lists LAMMPS commands and packages that have been removed from +the distribution and provides suggestions for alternatives or replacements. + +Fix ave/spatial and fix ave/spatial/sphere :h4 + +The fixes ave/spatial and ave/spatial/sphere have been removed from LAMMPS +since they were superseded by the more general and extensible "chunk +infrastructure". Here the system is partitioned in one of many possible +ways through the "compute chunk/atom"_compute_chunk_atom.html command +and then averaging is done using "fix ave/chunk"_fix_ave_chunk.html. +Please refer to the "chunk HOWTO"_Howto_chunk.html section for an overview. + +MEAM package :h4 + +The MEAM package has been removed since it was superseded by the +"USER-MEAMC package"_Package_details.html#PKG-USER-MEAMC. The code in +the USER-MEAMC package is a translation of the Fortran code of MEAM into C++, +which removes several restrictions (e.g. there can be multiple instances +in hybrid pair styles) and allows for some optimizations leading +to better performance. The new pair style "meam/c"_pair_meamc.html has +the exact same syntax as the old "meam" pair style and thus pair style +"meam"_pair_meamc.html is an alias to the new style and backward +compatibility of old inputs is preserved. + +REAX package :h4 + +The REAX package has been removed since it was superseded by the +"USER-REAXC package"_Package_details.html#PKG-USER-REAXC. The USER-REAXC +package has been tested to yield equivalent results to the REAX package, +offers better performance, supports OpenMP multi-threading via USER-OMP, +and GPU and threading parallelization through KOKKOS. The new pair styles +are not syntax compatible with the removed reax pair style, so input +files will have to be adapted. + +USER-CUDA package :h4 + +The USER-CUDA package had been removed, since it had been unmaintained +for a long time and had known bugs and problems. Significant parts of +the design were transferred to the +"KOKKOS package"_Package_details.html#PKG-KOKKOS, which has similar +performance characteristics on Nvidia GPUs. Both, the KOKKOS +and the "GPU package"_Package_details.html#PKG-GPU are maintained +and allow running LAMMPS with GPU acceleration. + From 5f79a9ef805003abb21a645fbc97ad3b6396f21d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 2 Jun 2019 21:51:06 -0400 Subject: [PATCH 226/311] mention dummy commands with error messages that have been added instead of removed commands --- doc/src/Commands_removed.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/src/Commands_removed.txt b/doc/src/Commands_removed.txt index dc41c81981..934f826e0c 100644 --- a/doc/src/Commands_removed.txt +++ b/doc/src/Commands_removed.txt @@ -11,6 +11,9 @@ Removed commands and packages :h3 This page lists LAMMPS commands and packages that have been removed from the distribution and provides suggestions for alternatives or replacements. +LAMMPS has special dummy styles implemented, that will stop LAMMPS and +print a suitable error message in most cases, when a style/command is used +that has been removed. Fix ave/spatial and fix ave/spatial/sphere :h4 From a98162694811396c2a02f652056b644a51c88547 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 3 Jun 2019 09:01:22 -0400 Subject: [PATCH 227/311] mention restart2data as removed feature as well --- doc/src/Commands_removed.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/doc/src/Commands_removed.txt b/doc/src/Commands_removed.txt index 934f826e0c..1eee6e45e0 100644 --- a/doc/src/Commands_removed.txt +++ b/doc/src/Commands_removed.txt @@ -56,3 +56,11 @@ performance characteristics on Nvidia GPUs. Both, the KOKKOS and the "GPU package"_Package_details.html#PKG-GPU are maintained and allow running LAMMPS with GPU acceleration. +restart2data tool :h4 + +The functionality of the restart2data tool has been folded into the +LAMMPS executable directly instead of having a separate tool. A +combination of the commands "read_restart"_read_restart.html and +"write_data"_write_data.html can be used to the same effect. For added +convenience this conversion can also be triggered by "command line +flags"_Run_options.html From c76b79f02141f9329caeeecf0b3a5ce84ec216bf Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 3 Jun 2019 19:36:28 -0400 Subject: [PATCH 228/311] chance test for OpenMP default setting to be compatible with CMake 2.8.x --- cmake/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index c572d6f27a..8ad1011398 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -322,7 +322,7 @@ find_package(OpenMP QUIET) # where we assume older GCC semantics. For the time being, we disable OpenMP by default # for GCC 9.x and beyond. People may manually turn it on, but need to run the script # src/USER-OMP/hack_openmp_for_pgi_gcc9.sh on all sources to make it compatible with gcc 9. -if ((${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 9.0.0)) +if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 8.99.9)) option(BUILD_OMP "Build with OpenMP support" OFF) else() option(BUILD_OMP "Build with OpenMP support" ${OpenMP_FOUND}) From 5d96ecff254fff90fc9fbdb8afd0dc418e1ad99d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 3 Jun 2019 19:44:40 -0400 Subject: [PATCH 229/311] fix typo --- cmake/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 8ad1011398..99111c9d5c 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -322,7 +322,7 @@ find_package(OpenMP QUIET) # where we assume older GCC semantics. For the time being, we disable OpenMP by default # for GCC 9.x and beyond. People may manually turn it on, but need to run the script # src/USER-OMP/hack_openmp_for_pgi_gcc9.sh on all sources to make it compatible with gcc 9. -if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 8.99.9)) +if ((${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") AND (${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER 8.99.9)) option(BUILD_OMP "Build with OpenMP support" OFF) else() option(BUILD_OMP "Build with OpenMP support" ${OpenMP_FOUND}) From 021f0c1fc601549fba5c6db34d03593d4fa6becc Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 3 Jun 2019 19:50:48 -0400 Subject: [PATCH 230/311] use consistent variable evaluation in if() --- cmake/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 99111c9d5c..58f3ccad23 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -322,7 +322,7 @@ find_package(OpenMP QUIET) # where we assume older GCC semantics. For the time being, we disable OpenMP by default # for GCC 9.x and beyond. People may manually turn it on, but need to run the script # src/USER-OMP/hack_openmp_for_pgi_gcc9.sh on all sources to make it compatible with gcc 9. -if ((${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") AND (${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER 8.99.9)) +if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 8.99.9)) option(BUILD_OMP "Build with OpenMP support" OFF) else() option(BUILD_OMP "Build with OpenMP support" ${OpenMP_FOUND}) From 960a975e2a6c2125215b4945bc7abb1163a29e91 Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Mon, 3 Jun 2019 19:50:40 -0600 Subject: [PATCH 231/311] Added compact arrays, removed unused openmp stuff --- src/SNAP/compute_sna_atom.cpp | 63 +-- src/SNAP/compute_sna_atom.h | 3 +- src/SNAP/compute_snad_atom.cpp | 101 ++--- src/SNAP/compute_snad_atom.h | 3 +- src/SNAP/compute_snav_atom.cpp | 112 ++--- src/SNAP/compute_snav_atom.h | 3 +- src/SNAP/openmp_snap.h | 16 - src/SNAP/pair_snap.cpp | 783 +-------------------------------- src/SNAP/pair_snap.h | 56 +-- src/SNAP/sna.cpp | 748 ++++++++----------------------- src/SNAP/sna.h | 58 +-- 11 files changed, 332 insertions(+), 1614 deletions(-) delete mode 100644 src/SNAP/openmp_snap.h diff --git a/src/SNAP/compute_sna_atom.cpp b/src/SNAP/compute_sna_atom.cpp index 5ca63a7e85..17774143d5 100644 --- a/src/SNAP/compute_sna_atom.cpp +++ b/src/SNAP/compute_sna_atom.cpp @@ -25,7 +25,6 @@ #include "comm.h" #include "memory.h" #include "error.h" -#include "openmp_snap.h" using namespace LAMMPS_NS; @@ -115,20 +114,10 @@ ComputeSNAAtom::ComputeSNAAtom(LAMMPS *lmp, int narg, char **arg) : } else error->all(FLERR,"Illegal compute sna/atom command"); } - nthreads = comm->nthreads; - snaptr = new SNA*[nthreads]; -#if defined(_OPENMP) -#pragma omp parallel default(none) shared(lmp,rfac0,twojmax,rmin0,switchflag,bzeroflag) -#endif - { - int tid = omp_get_thread_num(); + snaptr = new SNA(lmp,rfac0,twojmax,diagonalstyle, + rmin0,switchflag,bzeroflag); - // always unset use_shared_arrays since it does not work with computes - snaptr[tid] = new SNA(lmp,rfac0,twojmax,diagonalstyle, - 0 /*use_shared_arrays*/, rmin0,switchflag,bzeroflag); - } - - ncoeff = snaptr[0]->ncoeff; + ncoeff = snaptr->ncoeff; size_peratom_cols = ncoeff; if (quadraticflag) size_peratom_cols += (ncoeff*(ncoeff+1))/2; peratom_flag = 1; @@ -136,7 +125,6 @@ ComputeSNAAtom::ComputeSNAAtom(LAMMPS *lmp, int narg, char **arg) : nmax = 0; njmax = 0; sna = NULL; - } /* ---------------------------------------------------------------------- */ @@ -147,9 +135,7 @@ ComputeSNAAtom::~ComputeSNAAtom() memory->destroy(radelem); memory->destroy(wjelem); memory->destroy(cutsq); - for (int tid = 0; tidcompute[i]->style,"sna/atom") == 0) count++; if (count > 1 && comm->me == 0) error->warning(FLERR,"More than one compute sna/atom"); -#if defined(_OPENMP) -#pragma omp parallel default(none) -#endif - { - int tid = omp_get_thread_num(); - snaptr[tid]->init(); - } + snaptr->init(); } /* ---------------------------------------------------------------------- */ @@ -223,11 +203,7 @@ void ComputeSNAAtom::compute_peratom() double** const x = atom->x; const int* const mask = atom->mask; -#if defined(_OPENMP) -#pragma omp parallel for default(none) -#endif for (int ii = 0; ii < inum; ii++) { - const int tid = omp_get_thread_num(); const int i = ilist[ii]; if (mask[i] & groupbit) { @@ -241,7 +217,7 @@ void ComputeSNAAtom::compute_peratom() // insure rij, inside, and typej are of size jnum - snaptr[tid]->grow_rij(jnum); + snaptr->grow_rij(jnum); // rij[][3] = displacements between atom I and those neighbors // inside = indices of neighbors of I within cutoff @@ -258,26 +234,26 @@ void ComputeSNAAtom::compute_peratom() const double rsq = delx*delx + dely*dely + delz*delz; int jtype = type[j]; if (rsq < cutsq[itype][jtype] && rsq>1e-20) { - snaptr[tid]->rij[ninside][0] = delx; - snaptr[tid]->rij[ninside][1] = dely; - snaptr[tid]->rij[ninside][2] = delz; - snaptr[tid]->inside[ninside] = j; - snaptr[tid]->wj[ninside] = wjelem[jtype]; - snaptr[tid]->rcutij[ninside] = (radi+radelem[jtype])*rcutfac; + snaptr->rij[ninside][0] = delx; + snaptr->rij[ninside][1] = dely; + snaptr->rij[ninside][2] = delz; + snaptr->inside[ninside] = j; + snaptr->wj[ninside] = wjelem[jtype]; + snaptr->rcutij[ninside] = (radi+radelem[jtype])*rcutfac; ninside++; } } - snaptr[tid]->compute_ui(ninside); - snaptr[tid]->compute_zi(); - snaptr[tid]->compute_bi(); - snaptr[tid]->copy_bi2bvec(); + snaptr->compute_ui(ninside); + snaptr->compute_zi(); + snaptr->compute_bi(); + snaptr->copy_bi2bvec(); for (int icoeff = 0; icoeff < ncoeff; icoeff++) - sna[i][icoeff] = snaptr[tid]->bvec[icoeff]; + sna[i][icoeff] = snaptr->bvec[icoeff]; if (quadraticflag) { int ncount = ncoeff; for (int icoeff = 0; icoeff < ncoeff; icoeff++) { - double bi = snaptr[tid]->bvec[icoeff]; + double bi = snaptr->bvec[icoeff]; // diagonal element of quadratic matrix @@ -286,7 +262,7 @@ void ComputeSNAAtom::compute_peratom() // upper-triangular elements of quadratic matrix for (int jcoeff = icoeff+1; jcoeff < ncoeff; jcoeff++) - sna[i][ncount++] = bi*snaptr[tid]->bvec[jcoeff]; + sna[i][ncount++] = bi*snaptr->bvec[jcoeff]; } } } else { @@ -305,7 +281,6 @@ double ComputeSNAAtom::memory_usage() double bytes = nmax*size_peratom_cols * sizeof(double); bytes += 3*njmax*sizeof(double); bytes += njmax*sizeof(int); - bytes += snaptr[0]->memory_usage()*comm->nthreads; return bytes; } diff --git a/src/SNAP/compute_sna_atom.h b/src/SNAP/compute_sna_atom.h index 2f6fb18996..56ffccfa7e 100644 --- a/src/SNAP/compute_sna_atom.h +++ b/src/SNAP/compute_sna_atom.h @@ -42,10 +42,9 @@ class ComputeSNAAtom : public Compute { double rcutfac; double *radelem; double *wjelem; - class SNA** snaptr; + class SNA* snaptr; double cutmax; int quadraticflag; - int nthreads; }; } diff --git a/src/SNAP/compute_snad_atom.cpp b/src/SNAP/compute_snad_atom.cpp index b0395d5317..b356d61d3d 100644 --- a/src/SNAP/compute_snad_atom.cpp +++ b/src/SNAP/compute_snad_atom.cpp @@ -25,7 +25,6 @@ #include "comm.h" #include "memory.h" #include "error.h" -#include "openmp_snap.h" using namespace LAMMPS_NS; @@ -113,20 +112,10 @@ ComputeSNADAtom::ComputeSNADAtom(LAMMPS *lmp, int narg, char **arg) : } else error->all(FLERR,"Illegal compute snad/atom command"); } - nthreads = comm->nthreads; - snaptr = new SNA*[nthreads]; -#if defined(_OPENMP) -#pragma omp parallel default(none) shared(lmp,rfac0,twojmax,rmin0,switchflag,bzeroflag) -#endif - { - int tid = omp_get_thread_num(); + snaptr = new SNA(lmp,rfac0,twojmax,diagonalstyle, + rmin0,switchflag,bzeroflag); - // always unset use_shared_arrays since it does not work with computes - snaptr[tid] = new SNA(lmp,rfac0,twojmax,diagonalstyle, - 0 /*use_shared_arrays*/, rmin0,switchflag,bzeroflag); - } - - ncoeff = snaptr[0]->ncoeff; + ncoeff = snaptr->ncoeff; nperdim = ncoeff; if (quadraticflag) nperdim += (ncoeff*(ncoeff+1))/2; yoffset = nperdim; @@ -138,7 +127,6 @@ ComputeSNADAtom::ComputeSNADAtom(LAMMPS *lmp, int narg, char **arg) : nmax = 0; njmax = 0; snad = NULL; - } /* ---------------------------------------------------------------------- */ @@ -149,9 +137,7 @@ ComputeSNADAtom::~ComputeSNADAtom() memory->destroy(radelem); memory->destroy(wjelem); memory->destroy(cutsq); - for (int tid = 0; tidcompute[i]->style,"snad/atom") == 0) count++; if (count > 1 && comm->me == 0) error->warning(FLERR,"More than one compute snad/atom"); -#if defined(_OPENMP) -#pragma omp parallel default(none) -#endif - { - int tid = omp_get_thread_num(); - snaptr[tid]->init(); - } + snaptr->init(); } /* ---------------------------------------------------------------------- */ @@ -235,11 +215,7 @@ void ComputeSNADAtom::compute_peratom() double** const x = atom->x; const int* const mask = atom->mask; -#if defined(_OPENMP) -#pragma omp parallel for default(none) -#endif for (int ii = 0; ii < inum; ii++) { - const int tid = omp_get_thread_num(); const int i = ilist[ii]; if (mask[i] & groupbit) { @@ -258,7 +234,7 @@ void ComputeSNADAtom::compute_peratom() // insure rij, inside, and typej are of size jnum - snaptr[tid]->grow_rij(jnum); + snaptr->grow_rij(jnum); // rij[][3] = displacements between atom I and those neighbors // inside = indices of neighbors of I within cutoff @@ -276,30 +252,30 @@ void ComputeSNADAtom::compute_peratom() const double rsq = delx*delx + dely*dely + delz*delz; int jtype = type[j]; if (rsq < cutsq[itype][jtype]&&rsq>1e-20) { - snaptr[tid]->rij[ninside][0] = delx; - snaptr[tid]->rij[ninside][1] = dely; - snaptr[tid]->rij[ninside][2] = delz; - snaptr[tid]->inside[ninside] = j; - snaptr[tid]->wj[ninside] = wjelem[jtype]; - snaptr[tid]->rcutij[ninside] = (radi+radelem[jtype])*rcutfac; + snaptr->rij[ninside][0] = delx; + snaptr->rij[ninside][1] = dely; + snaptr->rij[ninside][2] = delz; + snaptr->inside[ninside] = j; + snaptr->wj[ninside] = wjelem[jtype]; + snaptr->rcutij[ninside] = (radi+radelem[jtype])*rcutfac; ninside++; } } - snaptr[tid]->compute_ui(ninside); - snaptr[tid]->compute_zi(); + snaptr->compute_ui(ninside); + snaptr->compute_zi(); if (quadraticflag) { - snaptr[tid]->compute_bi(); - snaptr[tid]->copy_bi2bvec(); + snaptr->compute_bi(); + snaptr->copy_bi2bvec(); } for (int jj = 0; jj < ninside; jj++) { - const int j = snaptr[tid]->inside[jj]; - snaptr[tid]->compute_duidrj(snaptr[tid]->rij[jj], - snaptr[tid]->wj[jj], - snaptr[tid]->rcutij[jj]); - snaptr[tid]->compute_dbidrj(); - snaptr[tid]->copy_dbi2dbvec(); + const int j = snaptr->inside[jj]; + snaptr->compute_duidrj(snaptr->rij[jj], + snaptr->wj[jj], + snaptr->rcutij[jj]); + snaptr->compute_dbidrj(); + snaptr->copy_dbi2dbvec(); // Accumulate -dBi/dRi, -dBi/dRj @@ -307,12 +283,12 @@ void ComputeSNADAtom::compute_peratom() double *snadj = snad[j]+typeoffset; for (int icoeff = 0; icoeff < ncoeff; icoeff++) { - snadi[icoeff] += snaptr[tid]->dbvec[icoeff][0]; - snadi[icoeff+yoffset] += snaptr[tid]->dbvec[icoeff][1]; - snadi[icoeff+zoffset] += snaptr[tid]->dbvec[icoeff][2]; - snadj[icoeff] -= snaptr[tid]->dbvec[icoeff][0]; - snadj[icoeff+yoffset] -= snaptr[tid]->dbvec[icoeff][1]; - snadj[icoeff+zoffset] -= snaptr[tid]->dbvec[icoeff][2]; + snadi[icoeff] += snaptr->dbvec[icoeff][0]; + snadi[icoeff+yoffset] += snaptr->dbvec[icoeff][1]; + snadi[icoeff+zoffset] += snaptr->dbvec[icoeff][2]; + snadj[icoeff] -= snaptr->dbvec[icoeff][0]; + snadj[icoeff+yoffset] -= snaptr->dbvec[icoeff][1]; + snadj[icoeff+zoffset] -= snaptr->dbvec[icoeff][2]; } if (quadraticflag) { @@ -321,10 +297,10 @@ void ComputeSNADAtom::compute_peratom() snadj += quadraticoffset; int ncount = 0; for (int icoeff = 0; icoeff < ncoeff; icoeff++) { - double bi = snaptr[tid]->bvec[icoeff]; - double bix = snaptr[tid]->dbvec[icoeff][0]; - double biy = snaptr[tid]->dbvec[icoeff][1]; - double biz = snaptr[tid]->dbvec[icoeff][2]; + double bi = snaptr->bvec[icoeff]; + double bix = snaptr->dbvec[icoeff][0]; + double biy = snaptr->dbvec[icoeff][1]; + double biz = snaptr->dbvec[icoeff][2]; // diagonal elements of quadratic matrix @@ -343,12 +319,12 @@ void ComputeSNADAtom::compute_peratom() // upper-triangular elements of quadratic matrix for (int jcoeff = icoeff+1; jcoeff < ncoeff; jcoeff++) { - double dbxtmp = bi*snaptr[tid]->dbvec[jcoeff][0] - + bix*snaptr[tid]->bvec[jcoeff]; - double dbytmp = bi*snaptr[tid]->dbvec[jcoeff][1] - + biy*snaptr[tid]->bvec[jcoeff]; - double dbztmp = bi*snaptr[tid]->dbvec[jcoeff][2] - + biz*snaptr[tid]->bvec[jcoeff]; + double dbxtmp = bi*snaptr->dbvec[jcoeff][0] + + bix*snaptr->bvec[jcoeff]; + double dbytmp = bi*snaptr->dbvec[jcoeff][1] + + biy*snaptr->bvec[jcoeff]; + double dbztmp = bi*snaptr->dbvec[jcoeff][2] + + biz*snaptr->bvec[jcoeff]; snadi[ncount] += dbxtmp; snadi[ncount+yoffset] += dbytmp; @@ -408,6 +384,5 @@ double ComputeSNADAtom::memory_usage() bytes += 3*njmax*sizeof(double); bytes += njmax*sizeof(int); bytes += 3*nperdim*atom->ntypes; - bytes += snaptr[0]->memory_usage()*comm->nthreads; return bytes; } diff --git a/src/SNAP/compute_snad_atom.h b/src/SNAP/compute_snad_atom.h index 92003a9bc5..1fcf540d7c 100644 --- a/src/SNAP/compute_snad_atom.h +++ b/src/SNAP/compute_snad_atom.h @@ -44,10 +44,9 @@ class ComputeSNADAtom : public Compute { double rcutfac; double *radelem; double *wjelem; - class SNA** snaptr; + class SNA* snaptr; double cutmax; int quadraticflag; - int nthreads; }; } diff --git a/src/SNAP/compute_snav_atom.cpp b/src/SNAP/compute_snav_atom.cpp index b2d555f713..9f9ef7a67d 100644 --- a/src/SNAP/compute_snav_atom.cpp +++ b/src/SNAP/compute_snav_atom.cpp @@ -25,7 +25,6 @@ #include "comm.h" #include "memory.h" #include "error.h" -#include "openmp_snap.h" using namespace LAMMPS_NS; @@ -109,20 +108,10 @@ ComputeSNAVAtom::ComputeSNAVAtom(LAMMPS *lmp, int narg, char **arg) : } else error->all(FLERR,"Illegal compute snav/atom command"); } - nthreads = comm->nthreads; - snaptr = new SNA*[nthreads]; -#if defined(_OPENMP) -#pragma omp parallel default(none) shared(lmp,rfac0,twojmax,rmin0,switchflag,bzeroflag) -#endif - { - int tid = omp_get_thread_num(); + snaptr = new SNA(lmp,rfac0,twojmax,diagonalstyle, + rmin0,switchflag,bzeroflag); - // always unset use_shared_arrays since it does not work with computes - snaptr[tid] = new SNA(lmp,rfac0,twojmax,diagonalstyle, - 0 /*use_shared_arrays*/, rmin0,switchflag,bzeroflag); - } - - ncoeff = snaptr[0]->ncoeff; + ncoeff = snaptr->ncoeff; nperdim = ncoeff; if (quadraticflag) nperdim += (ncoeff*(ncoeff+1))/2; size_peratom_cols = 6*nperdim*atom->ntypes; @@ -144,9 +133,7 @@ ComputeSNAVAtom::~ComputeSNAVAtom() memory->destroy(wjelem); memory->destroy(cutsq); - for (int tid = 0; tidcompute[i]->style,"snav/atom") == 0) count++; if (count > 1 && comm->me == 0) error->warning(FLERR,"More than one compute snav/atom"); -#if defined(_OPENMP) -#pragma omp parallel default(none) -#endif - { - int tid = omp_get_thread_num(); - snaptr[tid]->init(); - } + snaptr->init(); } /* ---------------------------------------------------------------------- */ @@ -230,11 +211,7 @@ void ComputeSNAVAtom::compute_peratom() double** const x = atom->x; const int* const mask = atom->mask; -#if defined(_OPENMP) -#pragma omp parallel for default(none) -#endif for (int ii = 0; ii < inum; ii++) { - const int tid = omp_get_thread_num(); const int i = ilist[ii]; if (mask[i] & groupbit) { @@ -251,7 +228,7 @@ void ComputeSNAVAtom::compute_peratom() // insure rij, inside, and typej are of size jnum - snaptr[tid]->grow_rij(jnum); + snaptr->grow_rij(jnum); // rij[][3] = displacements between atom I and those neighbors // inside = indices of neighbors of I within cutoff @@ -269,31 +246,31 @@ void ComputeSNAVAtom::compute_peratom() const double rsq = delx*delx + dely*dely + delz*delz; int jtype = type[j]; if (rsq < cutsq[itype][jtype]&&rsq>1e-20) { - snaptr[tid]->rij[ninside][0] = delx; - snaptr[tid]->rij[ninside][1] = dely; - snaptr[tid]->rij[ninside][2] = delz; - snaptr[tid]->inside[ninside] = j; - snaptr[tid]->wj[ninside] = wjelem[jtype]; - snaptr[tid]->rcutij[ninside] = (radi+radelem[jtype])*rcutfac; + snaptr->rij[ninside][0] = delx; + snaptr->rij[ninside][1] = dely; + snaptr->rij[ninside][2] = delz; + snaptr->inside[ninside] = j; + snaptr->wj[ninside] = wjelem[jtype]; + snaptr->rcutij[ninside] = (radi+radelem[jtype])*rcutfac; ninside++; } } - snaptr[tid]->compute_ui(ninside); - snaptr[tid]->compute_zi(); + snaptr->compute_ui(ninside); + snaptr->compute_zi(); if (quadraticflag) { - snaptr[tid]->compute_bi(); - snaptr[tid]->copy_bi2bvec(); + snaptr->compute_bi(); + snaptr->copy_bi2bvec(); } for (int jj = 0; jj < ninside; jj++) { - const int j = snaptr[tid]->inside[jj]; + const int j = snaptr->inside[jj]; - snaptr[tid]->compute_duidrj(snaptr[tid]->rij[jj], - snaptr[tid]->wj[jj], - snaptr[tid]->rcutij[jj]); - snaptr[tid]->compute_dbidrj(); - snaptr[tid]->copy_dbi2dbvec(); + snaptr->compute_duidrj(snaptr->rij[jj], + snaptr->wj[jj], + snaptr->rcutij[jj]); + snaptr->compute_dbidrj(); + snaptr->copy_dbi2dbvec(); // Accumulate -dBi/dRi*Ri, -dBi/dRj*Rj @@ -301,18 +278,18 @@ void ComputeSNAVAtom::compute_peratom() double *snavj = snav[j]+typeoffset; for (int icoeff = 0; icoeff < ncoeff; icoeff++) { - snavi[icoeff] += snaptr[tid]->dbvec[icoeff][0]*xtmp; - snavi[icoeff+nperdim] += snaptr[tid]->dbvec[icoeff][1]*ytmp; - snavi[icoeff+2*nperdim] += snaptr[tid]->dbvec[icoeff][2]*ztmp; - snavi[icoeff+3*nperdim] += snaptr[tid]->dbvec[icoeff][1]*ztmp; - snavi[icoeff+4*nperdim] += snaptr[tid]->dbvec[icoeff][0]*ztmp; - snavi[icoeff+5*nperdim] += snaptr[tid]->dbvec[icoeff][0]*ytmp; - snavj[icoeff] -= snaptr[tid]->dbvec[icoeff][0]*x[j][0]; - snavj[icoeff+nperdim] -= snaptr[tid]->dbvec[icoeff][1]*x[j][1]; - snavj[icoeff+2*nperdim] -= snaptr[tid]->dbvec[icoeff][2]*x[j][2]; - snavj[icoeff+3*nperdim] -= snaptr[tid]->dbvec[icoeff][1]*x[j][2]; - snavj[icoeff+4*nperdim] -= snaptr[tid]->dbvec[icoeff][0]*x[j][2]; - snavj[icoeff+5*nperdim] -= snaptr[tid]->dbvec[icoeff][0]*x[j][1]; + snavi[icoeff] += snaptr->dbvec[icoeff][0]*xtmp; + snavi[icoeff+nperdim] += snaptr->dbvec[icoeff][1]*ytmp; + snavi[icoeff+2*nperdim] += snaptr->dbvec[icoeff][2]*ztmp; + snavi[icoeff+3*nperdim] += snaptr->dbvec[icoeff][1]*ztmp; + snavi[icoeff+4*nperdim] += snaptr->dbvec[icoeff][0]*ztmp; + snavi[icoeff+5*nperdim] += snaptr->dbvec[icoeff][0]*ytmp; + snavj[icoeff] -= snaptr->dbvec[icoeff][0]*x[j][0]; + snavj[icoeff+nperdim] -= snaptr->dbvec[icoeff][1]*x[j][1]; + snavj[icoeff+2*nperdim] -= snaptr->dbvec[icoeff][2]*x[j][2]; + snavj[icoeff+3*nperdim] -= snaptr->dbvec[icoeff][1]*x[j][2]; + snavj[icoeff+4*nperdim] -= snaptr->dbvec[icoeff][0]*x[j][2]; + snavj[icoeff+5*nperdim] -= snaptr->dbvec[icoeff][0]*x[j][1]; } if (quadraticflag) { @@ -321,10 +298,10 @@ void ComputeSNAVAtom::compute_peratom() snavj += quadraticoffset; int ncount = 0; for (int icoeff = 0; icoeff < ncoeff; icoeff++) { - double bi = snaptr[tid]->bvec[icoeff]; - double bix = snaptr[tid]->dbvec[icoeff][0]; - double biy = snaptr[tid]->dbvec[icoeff][1]; - double biz = snaptr[tid]->dbvec[icoeff][2]; + double bi = snaptr->bvec[icoeff]; + double bix = snaptr->dbvec[icoeff][0]; + double biy = snaptr->dbvec[icoeff][1]; + double biz = snaptr->dbvec[icoeff][2]; // diagonal element of quadratic matrix @@ -348,12 +325,12 @@ void ComputeSNAVAtom::compute_peratom() // upper-triangular elements of quadratic matrix for (int jcoeff = icoeff+1; jcoeff < ncoeff; jcoeff++) { - double dbxtmp = bi*snaptr[tid]->dbvec[jcoeff][0] - + bix*snaptr[tid]->bvec[jcoeff]; - double dbytmp = bi*snaptr[tid]->dbvec[jcoeff][1] - + biy*snaptr[tid]->bvec[jcoeff]; - double dbztmp = bi*snaptr[tid]->dbvec[jcoeff][2] - + biz*snaptr[tid]->bvec[jcoeff]; + double dbxtmp = bi*snaptr->dbvec[jcoeff][0] + + bix*snaptr->bvec[jcoeff]; + double dbytmp = bi*snaptr->dbvec[jcoeff][1] + + biy*snaptr->bvec[jcoeff]; + double dbztmp = bi*snaptr->dbvec[jcoeff][2] + + biz*snaptr->bvec[jcoeff]; snavi[ncount] += dbxtmp*xtmp; snavi[ncount+nperdim] += dbytmp*ytmp; snavi[ncount+2*nperdim] += dbztmp*ztmp; @@ -419,6 +396,5 @@ double ComputeSNAVAtom::memory_usage() bytes += njmax*sizeof(int); bytes += 6*nperdim*atom->ntypes; if (quadraticflag) bytes += 6*nperdim*atom->ntypes; - bytes += snaptr[0]->memory_usage()*comm->nthreads; return bytes; } diff --git a/src/SNAP/compute_snav_atom.h b/src/SNAP/compute_snav_atom.h index 9be5e1d389..6bcce346e0 100644 --- a/src/SNAP/compute_snav_atom.h +++ b/src/SNAP/compute_snav_atom.h @@ -44,9 +44,8 @@ class ComputeSNAVAtom : public Compute { double rcutfac; double *radelem; double *wjelem; - class SNA** snaptr; + class SNA* snaptr; int quadraticflag; - int nthreads; }; } diff --git a/src/SNAP/openmp_snap.h b/src/SNAP/openmp_snap.h deleted file mode 100644 index 60a3138c9c..0000000000 --- a/src/SNAP/openmp_snap.h +++ /dev/null @@ -1,16 +0,0 @@ - -#ifndef LMP_OPENMP_SNAP_H -#define LMP_OPENMP_SNAP_H - -#if defined(_OPENMP) -#include -#else -enum omp_sched_t {omp_sched_static, omp_sched_dynamic, omp_sched_guided, omp_sched_auto}; -inline int omp_get_thread_num() { return 0;} -inline int omp_set_num_threads(int num_threads) {return 1;} -/* inline int __sync_fetch_and_add(int* ptr, int value) {int tmp = *ptr; ptr[0]+=value; return tmp;} */ -inline void omp_set_schedule(omp_sched_t schedule,int modifier=1) {} -inline int omp_in_parallel() {return 0;} -#endif - -#endif diff --git a/src/SNAP/pair_snap.cpp b/src/SNAP/pair_snap.cpp index 86e709ba03..ae542e81b4 100644 --- a/src/SNAP/pair_snap.cpp +++ b/src/SNAP/pair_snap.cpp @@ -23,7 +23,6 @@ #include "neigh_list.h" #include "neigh_request.h" #include "sna.h" -#include "openmp_snap.h" #include "domain.h" #include "memory.h" #include "error.h" @@ -55,51 +54,6 @@ PairSNAP::PairSNAP(LAMMPS *lmp) : Pair(lmp) coeffelem = NULL; nmax = 0; - nthreads = 1; - - schedule_user = 0; - schedule_time_guided = -1; - schedule_time_dynamic = -1; - ncalls_neigh =-1; - - ilistmask_max = 0; - ilistmask = NULL; - ghostinum = 0; - ghostilist_max = 0; - ghostilist = NULL; - ghostnumneigh_max = 0; - ghostnumneigh = NULL; - ghostneighs = NULL; - ghostfirstneigh = NULL; - ghostneighs_total = 0; - ghostneighs_max = 0; - - i_max = 0; - i_neighmax = 0; - i_numpairs = 0; - i_rij = NULL; - i_inside = NULL; - i_wj = NULL; - i_rcutij = NULL; - i_ninside = NULL; - i_pairs = NULL; - i_uarraytot_r = NULL; - i_uarraytot_i = NULL; - i_zarray_r = NULL; - i_zarray_i = NULL; - - use_shared_arrays = 0; - -#ifdef TIMING_INFO - timers[0] = 0; - timers[1] = 0; - timers[2] = 0; - timers[3] = 0; -#endif - - // Need to set this because restart not handled by PairHybrid - - sna = NULL; beta_max = 0; beta = NULL; @@ -123,35 +77,7 @@ PairSNAP::~PairSNAP() memory->destroy(beta); memory->destroy(bispectrum); - // Need to set this because restart not handled by PairHybrid - - if (sna) { - -#ifdef TIMING_INFO - double time[5]; - double timeave[5]; - double timeave_mpi[5]; - double timemax_mpi[5]; - - for (int i = 0; i < 5; i++) { - time[i] = 0; - timeave[i] = 0; - for (int tid = 0; tidtimers[i]>time[i]) - time[i] = sna[tid]->timers[i]; - timeave[i] += sna[tid]->timers[i]; - } - timeave[i] /= nthreads; - } - MPI_Reduce(timeave, timeave_mpi, 5, MPI_DOUBLE, MPI_SUM, 0, world); - MPI_Reduce(time, timemax_mpi, 5, MPI_DOUBLE, MPI_MAX, 0, world); -#endif - - for (int tid = 0; tiddestroy(setflag); @@ -161,22 +87,11 @@ PairSNAP::~PairSNAP() } -void PairSNAP::compute(int eflag, int vflag) -{ -// if (use_optimized) -// compute_optimized(eflag, vflag); -// else - -// hard-code compute_regular() - - compute_regular(eflag, vflag); -} - /* ---------------------------------------------------------------------- This version is a straightforward implementation ---------------------------------------------------------------------- */ -void PairSNAP::compute_regular(int eflag, int vflag) +void PairSNAP::compute(int eflag, int vflag) { int i,j,jnum,ninside; double delx,dely,delz,evdwl,rsq; @@ -191,7 +106,6 @@ void PairSNAP::compute_regular(int eflag, int vflag) int *type = atom->type; int nlocal = atom->nlocal; int newton_pair = force->newton_pair; - class SNA* snaptr = sna[0]; if (beta_max < list->inum) { memory->grow(beta,list->inum,ncoeff,"PairSNAP:beta"); @@ -315,573 +229,6 @@ void PairSNAP::compute_regular(int eflag, int vflag) if (vflag_fdotr) virial_fdotr_compute(); } -inline int PairSNAP::equal(double* x,double* y) -{ - double dist2 = - (x[0]-y[0])*(x[0]-y[0]) + - (x[1]-y[1])*(x[1]-y[1]) + - (x[2]-y[2])*(x[2]-y[2]); - if (dist2 < 1e-20) return 1; - return 0; -} - -inline double PairSNAP::dist2(double* x,double* y) -{ - return - (x[0]-y[0])*(x[0]-y[0]) + - (x[1]-y[1])*(x[1]-y[1]) + - (x[2]-y[2])*(x[2]-y[2]); -} - -// return extra communication cutoff -// extra_cutoff = max(subdomain_length) - -double PairSNAP::extra_cutoff() -{ - double sublo[3],subhi[3]; - - if (domain->triclinic == 0) { - for (int dim = 0 ; dim < 3 ; dim++) { - sublo[dim] = domain->sublo[dim]; - subhi[dim] = domain->subhi[dim]; - } - } else { - domain->lamda2x(domain->sublo_lamda,sublo); - domain->lamda2x(domain->subhi_lamda,subhi); - } - - double sub_size[3]; - for (int dim = 0; dim < 3; dim++) - sub_size[dim] = subhi[dim] - sublo[dim]; - - double max_sub_size = 0; - for (int dim = 0; dim < 3; dim++) - max_sub_size = MAX(max_sub_size,sub_size[dim]); - - // note: for triclinic, probably need something different - // see Comm::setup() - - return max_sub_size; -} - -// micro load_balancer: each MPI process will -// check with each of its 26 neighbors, -// whether an imbalance exists in the number -// of atoms to calculate forces for. -// If it does it will set ilistmask of one of -// its local atoms to zero, and send its Tag -// to the neighbor process. The neighboring process -// will check its ghost list for the -// ghost atom with the same Tag which is closest -// to its domain center, and build a -// neighborlist for this ghost atom. For this to work, -// the communication cutoff has to be -// as large as the neighbor cutoff + -// maximum subdomain length. - -// Note that at most one atom is exchanged per processor pair. - -// Also note that the local atom assignment -// doesn't change. This load balancer will cause -// some ghost atoms to have full neighborlists -// which are unique to PairSNAP. -// They are not part of the generally accessible neighborlist. -// At the same time corresponding local atoms on -// other MPI processes will not be -// included in the force computation since -// their ilistmask is 0. This does not effect -// any other classes which might -// access the same general neighborlist. -// Reverse communication (newton on) of forces is required. - -// Currently the load balancer does two passes, -// since its exchanging atoms upstream and downstream. - -void PairSNAP::load_balance() -{ - double sublo[3],subhi[3]; - if (domain->triclinic == 0) { - double* sublotmp = domain->sublo; - double* subhitmp = domain->subhi; - for (int dim = 0 ; dim<3 ; dim++) { - sublo[dim]=sublotmp[dim]; - subhi[dim]=subhitmp[dim]; - } - } else { - double* sublotmp = domain->sublo_lamda; - double* subhitmp = domain->subhi_lamda; - domain->lamda2x(sublotmp,sublo); - domain->lamda2x(subhitmp,subhi); - } - - //if (list->inum==0) list->grow(atom->nmax); - - int nlocal = ghostinum; - for (int i=0; i < list->inum; i++) - if (ilistmask[i]) nlocal++; - int ***grid2proc = comm->grid2proc; - int* procgrid = comm->procgrid; - - int nlocal_up,nlocal_down; - MPI_Request request; - - double sub_mid[3]; - for (int dim=0; dim<3; dim++) - sub_mid[dim] = (subhi[dim] + sublo[dim])/2; - - if (comm->cutghostuser < - neighbor->cutneighmax+extra_cutoff()) - error->all(FLERR,"Communication cutoff too small for SNAP micro load balancing"); - - int nrecv = ghostinum; - int totalsend = 0; - int nsend = 0; - int depth = 1; - - for (int dx = -depth; dx < depth+1; dx++) - for (int dy = -depth; dy < depth+1; dy++) - for (int dz = -depth; dz < depth+1; dz++) { - - if (dx == dy && dy == dz && dz == 0) continue; - - int sendloc[3] = {comm->myloc[0], - comm->myloc[1], comm->myloc[2] - }; - sendloc[0] += dx; - sendloc[1] += dy; - sendloc[2] += dz; - for (int dim = 0; dim < 3; dim++) - if (sendloc[dim] >= procgrid[dim]) - sendloc[dim] = sendloc[dim] - procgrid[dim]; - for (int dim = 0; dim < 3; dim++) - if (sendloc[dim] < 0) - sendloc[dim] = procgrid[dim] + sendloc[dim]; - int recvloc[3] = {comm->myloc[0], - comm->myloc[1], comm->myloc[2] - }; - recvloc[0] -= dx; - recvloc[1] -= dy; - recvloc[2] -= dz; - for (int dim = 0; dim < 3; dim++) - if (recvloc[dim] < 0) - recvloc[dim] = procgrid[dim] + recvloc[dim]; - for (int dim = 0; dim < 3; dim++) - if (recvloc[dim] >= procgrid[dim]) - recvloc[dim] = recvloc[dim] - procgrid[dim]; - - int sendproc = grid2proc[sendloc[0]][sendloc[1]][sendloc[2]]; - int recvproc = grid2proc[recvloc[0]][recvloc[1]][recvloc[2]]; - - // two stage process, first upstream movement, then downstream - - MPI_Sendrecv(&nlocal,1,MPI_INT,sendproc,0, - &nlocal_up,1,MPI_INT,recvproc,0,world,MPI_STATUS_IGNORE); - MPI_Sendrecv(&nlocal,1,MPI_INT,recvproc,0, - &nlocal_down,1,MPI_INT,sendproc,0,world,MPI_STATUS_IGNORE); - nsend = 0; - - // send upstream - - if (nlocal > nlocal_up+1) { - - int i = totalsend++; - while(i < list->inum && ilistmask[i] == 0) - i = totalsend++; - - if (i < list->inum) - MPI_Isend(&atom->tag[i],1,MPI_INT,recvproc,0,world,&request); - else { - int j = -1; - MPI_Isend(&j,1,MPI_INT,recvproc,0,world,&request); - } - - if (i < list->inum) { - for (int j = 0; j < list->inum; j++) - if (list->ilist[j] == i) - ilistmask[j] = 0; - nsend = 1; - } - } - - // recv downstream - - if (nlocal < nlocal_down-1) { - nlocal++; - int get_tag = -1; - MPI_Recv(&get_tag,1,MPI_INT,sendproc,0,world,MPI_STATUS_IGNORE); - - // if get_tag -1 the other process didnt have local atoms to send - - if (get_tag >= 0) { - if (ghostinum >= ghostilist_max) { - memory->grow(ghostilist,ghostinum+10, - "PairSnap::ghostilist"); - ghostilist_max = ghostinum+10; - } - if (atom->nlocal + atom->nghost >= ghostnumneigh_max) { - ghostnumneigh_max = atom->nlocal+atom->nghost+100; - memory->grow(ghostnumneigh,ghostnumneigh_max, - "PairSnap::ghostnumneigh"); - memory->grow(ghostfirstneigh,ghostnumneigh_max, - "PairSnap::ghostfirstneigh"); - } - - // find closest ghost image of the transfered particle - - double mindist = 1e200; - int closestghost = -1; - for (int j = 0; j < atom->nlocal + atom->nghost; j++) - if (atom->tag[j] == get_tag) - if (dist2(sub_mid, atom->x[j]) < mindist) { - closestghost = j; - mindist = dist2(sub_mid, atom->x[j]); - } - - // build neighborlist for this particular - // ghost atom, and add it to list->ilist - - if (ghostneighs_max - ghostneighs_total < - neighbor->oneatom) { - memory->grow(ghostneighs, - ghostneighs_total + neighbor->oneatom, - "PairSnap::ghostneighs"); - ghostneighs_max = ghostneighs_total + neighbor->oneatom; - } - - int j = closestghost; - - ghostilist[ghostinum] = j; - ghostnumneigh[j] = 0; - ghostfirstneigh[j] = ghostneighs_total; - - ghostinum++; - int* jlist = ghostneighs + ghostfirstneigh[j]; - - // find all neighbors by looping - // over all local and ghost atoms - - for (int k = 0; k < atom->nlocal + atom->nghost; k++) - if (dist2(atom->x[j],atom->x[k]) < - neighbor->cutneighmax*neighbor->cutneighmax) { - jlist[ghostnumneigh[j]] = k; - ghostnumneigh[j]++; - ghostneighs_total++; - } - } - - if (get_tag >= 0) nrecv++; - } - - // decrease nlocal later, so that it is the - // initial number both for receiving and sending - - if (nsend) nlocal--; - - // second pass through the grid - - MPI_Sendrecv(&nlocal,1,MPI_INT,sendproc,0, - &nlocal_up,1,MPI_INT,recvproc,0,world,MPI_STATUS_IGNORE); - MPI_Sendrecv(&nlocal,1,MPI_INT,recvproc,0, - &nlocal_down,1,MPI_INT,sendproc,0,world,MPI_STATUS_IGNORE); - - // send downstream - - nsend=0; - if (nlocal > nlocal_down+1) { - int i = totalsend++; - while(i < list->inum && ilistmask[i]==0) i = totalsend++; - - if (i < list->inum) - MPI_Isend(&atom->tag[i],1,MPI_INT,sendproc,0,world,&request); - else { - int j =- 1; - MPI_Isend(&j,1,MPI_INT,sendproc,0,world,&request); - } - - if (i < list->inum) { - for (int j=0; jinum; j++) - if (list->ilist[j] == i) ilistmask[j] = 0; - nsend = 1; - } - } - - // receive upstream - - if (nlocal < nlocal_up-1) { - nlocal++; - int get_tag = -1; - - MPI_Recv(&get_tag,1,MPI_INT,recvproc,0,world,MPI_STATUS_IGNORE); - - if (get_tag >= 0) { - if (ghostinum >= ghostilist_max) { - memory->grow(ghostilist,ghostinum+10, - "PairSnap::ghostilist"); - ghostilist_max = ghostinum+10; - } - if (atom->nlocal + atom->nghost >= ghostnumneigh_max) { - ghostnumneigh_max = atom->nlocal + atom->nghost + 100; - memory->grow(ghostnumneigh,ghostnumneigh_max, - "PairSnap::ghostnumneigh"); - memory->grow(ghostfirstneigh,ghostnumneigh_max, - "PairSnap::ghostfirstneigh"); - } - - // find closest ghost image of the transfered particle - - double mindist = 1e200; - int closestghost = -1; - for (int j = 0; j < atom->nlocal + atom->nghost; j++) - if (atom->tag[j] == get_tag) - if (dist2(sub_mid,atom->x[j])x[j]); - } - - // build neighborlist for this particular ghost atom - - if (ghostneighs_max-ghostneighs_total < neighbor->oneatom) { - memory->grow(ghostneighs,ghostneighs_total + neighbor->oneatom, - "PairSnap::ghostneighs"); - ghostneighs_max = ghostneighs_total + neighbor->oneatom; - } - - int j = closestghost; - - ghostilist[ghostinum] = j; - ghostnumneigh[j] = 0; - ghostfirstneigh[j] = ghostneighs_total; - - ghostinum++; - int* jlist = ghostneighs + ghostfirstneigh[j]; - - for (int k = 0; k < atom->nlocal + atom->nghost; k++) - if (dist2(atom->x[j],atom->x[k]) < - neighbor->cutneighmax*neighbor->cutneighmax) { - jlist[ghostnumneigh[j]] = k; - ghostnumneigh[j]++; - ghostneighs_total++; - } - } - - if (get_tag >= 0) nrecv++; - } - if (nsend) nlocal--; - } -} - -void PairSNAP::set_sna_to_shared(int snaid,int i) -{ - sna[snaid]->rij = i_rij[i]; - sna[snaid]->inside = i_inside[i]; - sna[snaid]->wj = i_wj[i]; - sna[snaid]->rcutij = i_rcutij[i]; - sna[snaid]->zarray_r = i_zarray_r[i]; - sna[snaid]->zarray_i = i_zarray_i[i]; - sna[snaid]->uarraytot_r = i_uarraytot_r[i]; - sna[snaid]->uarraytot_i = i_uarraytot_i[i]; -} - -void PairSNAP::build_per_atom_arrays() -{ - -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME,&starttime); -#endif - - int count = 0; - int neighmax = 0; - for (int ii = 0; ii < list->inum; ii++) - if ((do_load_balance <= 0) || ilistmask[ii]) { - neighmax=MAX(neighmax,list->numneigh[list->ilist[ii]]); - ++count; - } - for (int ii = 0; ii < ghostinum; ii++) { - neighmax=MAX(neighmax,ghostnumneigh[ghostilist[ii]]); - ++count; - } - - if (i_max < count || i_neighmax < neighmax) { - int i_maxt = MAX(count,i_max); - i_neighmax = MAX(neighmax,i_neighmax); - memory->destroy(i_rij); - memory->destroy(i_inside); - memory->destroy(i_wj); - memory->destroy(i_rcutij); - memory->destroy(i_ninside); - memory->destroy(i_pairs); - memory->create(i_rij,i_maxt,i_neighmax,3,"PairSNAP::i_rij"); - memory->create(i_inside,i_maxt,i_neighmax,"PairSNAP::i_inside"); - memory->create(i_wj,i_maxt,i_neighmax,"PairSNAP::i_wj"); - memory->create(i_rcutij,i_maxt,i_neighmax,"PairSNAP::i_rcutij"); - memory->create(i_ninside,i_maxt,"PairSNAP::i_ninside"); - memory->create(i_pairs,i_maxt*i_neighmax,4,"PairSNAP::i_pairs"); - } - - if (i_max < count) { - int jdim = sna[0]->twojmax+1; - memory->destroy(i_uarraytot_r); - memory->destroy(i_uarraytot_i); - memory->create(i_uarraytot_r,count,jdim,jdim,jdim, - "PairSNAP::i_uarraytot_r"); - memory->create(i_uarraytot_i,count,jdim,jdim,jdim, - "PairSNAP::i_uarraytot_i"); - if (i_zarray_r != NULL) - for (int i = 0; i < i_max; i++) { - memory->destroy(i_zarray_r[i]); - memory->destroy(i_zarray_i[i]); - } - - delete [] i_zarray_r; - delete [] i_zarray_i; - i_zarray_r = new double*****[count]; - i_zarray_i = new double*****[count]; - for (int i = 0; i < count; i++) { - memory->create(i_zarray_r[i],jdim,jdim,jdim,jdim,jdim, - "PairSNAP::i_zarray_r"); - memory->create(i_zarray_i[i],jdim,jdim,jdim,jdim,jdim, - "PairSNAP::i_zarray_i"); - } - } - - if (i_max < count) - i_max = count; - - count = 0; - i_numpairs = 0; - for (int ii = 0; ii < list->inum; ii++) { - if ((do_load_balance <= 0) || ilistmask[ii]) { - int i = list->ilist[ii]; - int jnum = list->numneigh[i]; - int* jlist = list->firstneigh[i]; - const double xtmp = atom->x[i][0]; - const double ytmp = atom->x[i][1]; - const double ztmp = atom->x[i][2]; - const int itype = atom->type[i]; - const int ielem = map[itype]; - const double radi = radelem[ielem]; - int ninside = 0; - for (int jj = 0; jj < jnum; jj++) { - int j = jlist[jj]; - j &= NEIGHMASK; - const double delx = atom->x[j][0] - xtmp; - const double dely = atom->x[j][1] - ytmp; - const double delz = atom->x[j][2] - ztmp; - const double rsq = delx*delx + dely*dely + delz*delz; - int jtype = atom->type[j]; - int jelem = map[jtype]; - - i_pairs[i_numpairs][0] = i; - i_pairs[i_numpairs][1] = jj; - i_pairs[i_numpairs][2] = -1; - i_pairs[i_numpairs][3] = count; - if (rsq < cutsq[itype][jtype]&&rsq>1e-20) { - i_rij[count][ninside][0] = delx; - i_rij[count][ninside][1] = dely; - i_rij[count][ninside][2] = delz; - i_inside[count][ninside] = j; - i_wj[count][ninside] = wjelem[jelem]; - i_rcutij[count][ninside] = (radi + radelem[jelem])*rcutfac; - - // update index list with inside index - i_pairs[i_numpairs][2] = ninside++; - } - i_numpairs++; - } - i_ninside[count] = ninside; - count++; - } - } - - for (int ii = 0; ii < ghostinum; ii++) { - int i = ghostilist[ii]; - int jnum = ghostnumneigh[i]; - int* jlist = ghostneighs+ghostfirstneigh[i]; - const double xtmp = atom->x[i][0]; - const double ytmp = atom->x[i][1]; - const double ztmp = atom->x[i][2]; - const int itype = atom->type[i]; - const int ielem = map[itype]; - const double radi = radelem[ielem]; - int ninside = 0; - - for (int jj = 0; jj < jnum; jj++) { - int j = jlist[jj]; - j &= NEIGHMASK; - const double delx = atom->x[j][0] - xtmp; - const double dely = atom->x[j][1] - ytmp; - const double delz = atom->x[j][2] - ztmp; - const double rsq = delx*delx + dely*dely + delz*delz; - int jtype = atom->type[j]; - int jelem = map[jtype]; - - i_pairs[i_numpairs][0] = i; - i_pairs[i_numpairs][1] = jj; - i_pairs[i_numpairs][2] = -1; - i_pairs[i_numpairs][3] = count; - if (rsq < cutsq[itype][jtype]&&rsq>1e-20) { - i_rij[count][ninside][0] = delx; - i_rij[count][ninside][1] = dely; - i_rij[count][ninside][2] = delz; - i_inside[count][ninside] = j; - i_wj[count][ninside] = wjelem[jelem]; - i_rcutij[count][ninside] = (radi + radelem[jelem])*rcutfac; - // update index list with inside index - i_pairs[i_numpairs][2] = ninside++; - } - i_numpairs++; - } - i_ninside[count] = ninside; - count++; - } -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME,&endtime); - timers[0]+=(endtime.tv_sec-starttime.tv_sec+1.0* - (endtime.tv_nsec-starttime.tv_nsec)/1000000000); -#endif -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME,&starttime); -#endif - -#if defined(_OPENMP) -#pragma omp parallel for shared(count) default(none) -#endif - for (int ii=0; ii < count; ii++) { - int tid = omp_get_thread_num(); - set_sna_to_shared(tid,ii); - //sna[tid]->compute_ui(i_ninside[ii]); -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME,&starttime); -#endif - sna[tid]->compute_ui_omp(i_ninside[ii],MAX(int(nthreads/count),1)); -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME,&endtime); - sna[tid]->timers[0]+=(endtime.tv_sec-starttime.tv_sec+1.0* - (endtime.tv_nsec-starttime.tv_nsec)/1000000000); -#endif - } - -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME,&starttime); -#endif - for (int ii=0; ii < count; ii++) { - int tid = 0;//omp_get_thread_num(); - set_sna_to_shared(tid,ii); - sna[tid]->compute_zi_omp(MAX(int(nthreads/count),1)); - } -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME,&endtime); - sna[0]->timers[1]+=(endtime.tv_sec-starttime.tv_sec+1.0* - (endtime.tv_nsec-starttime.tv_nsec)/1000000000); -#endif - -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME,&endtime); - timers[1]+=(endtime.tv_sec-starttime.tv_sec+1.0* - (endtime.tv_nsec-starttime.tv_nsec)/1000000000); -#endif -} - /* ---------------------------------------------------------------------- compute beta ------------------------------------------------------------------------- */ @@ -914,7 +261,6 @@ void PairSNAP::compute_bispectrum() double **x = atom->x; int *type = atom->type; - class SNA* snaptr = sna[0]; for (int ii = 0; ii < list->inum; ii++) { i = list->ilist[ii]; @@ -991,96 +337,8 @@ void PairSNAP::allocate() void PairSNAP::settings(int narg, char **arg) { - - // set default values for optional arguments - - nthreads = -1; - use_shared_arrays=-1; - do_load_balance = 0; - use_optimized = 1; - - // optional arguments - - for (int i=0; i < narg; i++) { - if (i+2>narg) error->all(FLERR,"Illegal pair_style command"); - if (strcmp(arg[i],"nthreads")==0) { - nthreads=force->inumeric(FLERR,arg[++i]); -#if defined(LMP_USER_OMP) - error->all(FLERR,"Must set number of threads via package omp command"); -#else - omp_set_num_threads(nthreads); - comm->nthreads=nthreads; -#endif - continue; - } - if (strcmp(arg[i],"optimized")==0) { - use_optimized=force->inumeric(FLERR,arg[++i]); - continue; - } - if (strcmp(arg[i],"shared")==0) { - use_shared_arrays=force->inumeric(FLERR,arg[++i]); - continue; - } - if (strcmp(arg[i],"loadbalance")==0) { - do_load_balance = force->inumeric(FLERR,arg[++i]); - if (do_load_balance) { - double mincutoff = extra_cutoff() + - rcutmax + neighbor->skin; - if (comm->cutghostuser < mincutoff) { - char buffer[255]; - - //apparently mincutoff is 0 after sprintf command ????? - - double tmp = mincutoff + 0.1; - sprintf(buffer, "Communication cutoff is too small " - "for SNAP micro load balancing, increased to %lf", - mincutoff+0.1); - if (comm->me==0) - error->warning(FLERR,buffer); - - comm->cutghostuser = tmp; - - } - } - continue; - } - if (strcmp(arg[i],"schedule")==0) { - i++; - if (strcmp(arg[i],"static")==0) - schedule_user = 1; - if (strcmp(arg[i],"dynamic")==0) - schedule_user = 2; - if (strcmp(arg[i],"guided")==0) - schedule_user = 3; - if (strcmp(arg[i],"auto")==0) - schedule_user = 4; - if (strcmp(arg[i],"determine")==0) - schedule_user = 5; - if (schedule_user == 0) - error->all(FLERR,"Illegal pair_style command"); - continue; - } + for (int i=0; i < narg; i++) error->all(FLERR,"Illegal pair_style command"); - } - - if (nthreads < 0) - nthreads = comm->nthreads; - - if (use_shared_arrays < 0) { - if (nthreads > 1 && atom->nlocal <= 2*nthreads) - use_shared_arrays = 1; - else use_shared_arrays = 0; - } - - // check if running non-optimized code with - // optimization flags set - - if (!use_optimized) - if (nthreads > 1 || - use_shared_arrays || - do_load_balance || - schedule_user) - error->all(FLERR,"Illegal pair_style command"); } /* ---------------------------------------------------------------------- @@ -1170,26 +428,14 @@ void PairSNAP::coeff(int narg, char **arg) if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); - sna = new SNA*[nthreads]; + snaptr = new SNA(lmp,rfac0,twojmax, + diagonalstyle, + rmin0,switchflag,bzeroflag); + snaptr->grow_rij(nmax); - // allocate memory for per OpenMP thread data which - // is wrapped into the sna class - -#if defined(_OPENMP) -#pragma omp parallel default(none) -#endif - { - int tid = omp_get_thread_num(); - sna[tid] = new SNA(lmp,rfac0,twojmax, - diagonalstyle,use_shared_arrays, - rmin0,switchflag,bzeroflag); - if (!use_shared_arrays) - sna[tid]->grow_rij(nmax); - } - - if (ncoeff != sna[0]->ncoeff) { + if (ncoeff != snaptr->ncoeff) { if (comm->me == 0) - printf("ncoeff = %d snancoeff = %d \n",ncoeff,sna[0]->ncoeff); + printf("ncoeff = %d snancoeff = %d \n",ncoeff,snaptr->ncoeff); error->all(FLERR,"Incorrect SNAP parameter file"); } @@ -1216,13 +462,7 @@ void PairSNAP::init_style() neighbor->requests[irequest]->half = 0; neighbor->requests[irequest]->full = 1; -#if defined(_OPENMP) -#pragma omp parallel default(none) -#endif - { - int tid = omp_get_thread_num(); - sna[tid]->init(); - } + snaptr->init(); } @@ -1370,6 +610,8 @@ void PairSNAP::read_files(char *coefffilename, char *paramfilename) } } + if (comm->me == 0) fclose(fpcoeff); + // set flags for required keywords rcutfacflag = 0; @@ -1471,7 +713,6 @@ double PairSNAP::memory_usage() bytes += nmax*sizeof(int); bytes += (2*ncoeffall)*sizeof(double); bytes += (ncoeff*3)*sizeof(double); - bytes += sna[0]->memory_usage()*nthreads; return bytes; } diff --git a/src/SNAP/pair_snap.h b/src/SNAP/pair_snap.h index 1453076b23..b5871c1527 100644 --- a/src/SNAP/pair_snap.h +++ b/src/SNAP/pair_snap.h @@ -29,8 +29,6 @@ public: PairSNAP(class LAMMPS *); ~PairSNAP(); virtual void compute(int, int); - void compute_regular(int, int); - void compute_optimized(int, int); void settings(int, char **); virtual void coeff(int, char **); virtual void init_style(); @@ -43,59 +41,16 @@ public: protected: int ncoeffq, ncoeffall; double **bvec, ***dbvec; - class SNA** sna; + class SNA* snaptr; int nmax; - int nthreads; virtual void allocate(); void read_files(char *, char *); inline int equal(double* x,double* y); inline double dist2(double* x,double* y); - double extra_cutoff(); - void load_balance(); - void set_sna_to_shared(int snaid,int i); - void build_per_atom_arrays(); void compute_beta(); void compute_bispectrum(); - int schedule_user; - double schedule_time_guided; - double schedule_time_dynamic; - - int ncalls_neigh; - int do_load_balance; - int ilistmask_max; - int* ilistmask; - int ghostinum; - int ghostilist_max; - int* ghostilist; - int ghostnumneigh_max; - int* ghostnumneigh; - int* ghostneighs; - int* ghostfirstneigh; - int ghostneighs_total; - int ghostneighs_max; - - int use_optimized; - int use_shared_arrays; - - int i_max; - int i_neighmax; - int i_numpairs; - int **i_pairs; - double ***i_rij; - int **i_inside; - double **i_wj; - double **i_rcutij; - int *i_ninside; - double ****i_uarraytot_r, ****i_uarraytot_i; - double ******i_zarray_r, ******i_zarray_i; - -#ifdef TIMING_INFO - // timespec starttime, endtime; - double timers[4]; -#endif - double rcutmax; // max cutoff for all elements int nelements; // # of unique elements char **elements; // names of unique elements @@ -130,15 +85,6 @@ Self-explanatory. Check the input script syntax and compare to the documentation for the command. You can use -echo screen as a command-line option when running LAMMPS to see the offending line. -E: Must set number of threads via package omp command - -Because you are using the USER-OMP package, set the number of threads -via its settings, not by the pair_style snap nthreads setting. - -W: Communication cutoff is too small for SNAP micro load balancing, increased to %lf - -Self-explanatory. - E: Incorrect args for pair coefficients Self-explanatory. Check the input script or data file. diff --git a/src/SNAP/sna.cpp b/src/SNAP/sna.cpp index b729e4d0d6..b388136caf 100644 --- a/src/SNAP/sna.cpp +++ b/src/SNAP/sna.cpp @@ -21,7 +21,6 @@ #include "math_extra.h" #include #include -#include "openmp_snap.h" #include "memory.h" #include "error.h" @@ -114,12 +113,11 @@ using namespace MathConst; ------------------------------------------------------------------------- */ SNA::SNA(LAMMPS* lmp, double rfac0_in, - int twojmax_in, int diagonalstyle_in, int use_shared_arrays_in, + int twojmax_in, int diagonalstyle_in, double rmin0_in, int switch_flag_in, int bzero_flag_in) : Pointers(lmp) { wself = 1.0; - use_shared_arrays = use_shared_arrays_in; rfac0 = rfac0_in; rmin0 = rmin0_in; switch_flag = switch_flag_in; @@ -141,7 +139,8 @@ SNA::SNA(LAMMPS* lmp, double rfac0_in, wj = NULL; rcutij = NULL; nmax = 0; - idxj = NULL; + idxz = NULL; + idxb= NULL; if (bzero_flag) { double www = wself*wself*wself; @@ -149,133 +148,178 @@ SNA::SNA(LAMMPS* lmp, double rfac0_in, bzero[j] = www*(j+1); } -#ifdef TIMING_INFO - timers = new double[20]; - for(int i = 0; i < 20; i++) timers[i] = 0; - print = 0; - counter = 0; -#endif - build_indexlist(); - - } /* ---------------------------------------------------------------------- */ SNA::~SNA() { - if(!use_shared_arrays) { - destroy_twojmax_arrays(); - memory->destroy(rij); - memory->destroy(inside); - memory->destroy(wj); - memory->destroy(rcutij); - memory->destroy(bvec); - memory->destroy(dbvec); - } - delete[] idxj; + destroy_twojmax_arrays(); + memory->destroy(rij); + memory->destroy(inside); + memory->destroy(wj); + memory->destroy(rcutij); + memory->destroy(bvec); + memory->destroy(dbvec); + delete[] idxz; + delete[] idxb; } void SNA::build_indexlist() { - if(diagonalstyle == 0) { - int idxj_count = 0; + if(diagonalstyle != 3) + error->all(FLERR, "diagonal_style must be 3\n"); - for(int j1 = 0; j1 <= twojmax; j1++) - for(int j2 = 0; j2 <= j1; j2++) - for(int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) - idxj_count++; + // index list for cglist - // indexList can be changed here + int jdim = twojmax + 1; + memory->create(idxcg_block, jdim, jdim, jdim, + "sna:idxcg_block"); - idxj = new SNA_LOOPINDICES[idxj_count]; - idxj_max = idxj_count; + int idxcg_count = 0; + for(int j1 = 0; j1 <= twojmax; j1++) + for(int j2 = 0; j2 <= j1; j2++) + for(int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) { + idxcg_block[j1][j2][j] = idxcg_count; + for (int m1 = 0; m1 <= j1; m1++) + for (int m2 = 0; m2 <= j2; m2++) + idxcg_count++; + } + idxcg_max = idxcg_count; - idxj_count = 0; + // index list for uarray + // need to include both halves - for(int j1 = 0; j1 <= twojmax; j1++) - for(int j2 = 0; j2 <= j1; j2++) - for(int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) { - idxj[idxj_count].j1 = j1; - idxj[idxj_count].j2 = j2; - idxj[idxj_count].j = j; - idxj_count++; + memory->create(idxu_block, jdim, + "sna:idxu_block"); + + int idxu_count = 0; + + for(int j = 0; j <= twojmax; j++) { + idxu_block[j] = idxu_count; + for(int mb = 0; mb <= j; mb++) + for(int ma = 0; ma <= j; ma++) + idxu_count++; + } + idxu_max = idxu_count; + + // index list for beta and B + + int idxb_count = 0; + for(int j1 = 0; j1 <= twojmax; j1++) + for(int j2 = 0; j2 <= j1; j2++) + for(int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) + if (j >= j1) idxb_count++; + + idxb_max = idxb_count; + idxb = new SNA_BINDICES[idxb_max]; + + idxb_count = 0; + for(int j1 = 0; j1 <= twojmax; j1++) + for(int j2 = 0; j2 <= j1; j2++) + for(int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) + if (j >= j1) { + idxb[idxb_count].j1 = j1; + idxb[idxb_count].j2 = j2; + idxb[idxb_count].j = j; + idxb_count++; } - } - if(diagonalstyle == 1) { - int idxj_count = 0; + // reverse index list for beta and b - for(int j1 = 0; j1 <= twojmax; j1++) - for(int j = 0; j <= MIN(twojmax, 2 * j1); j += 2) { - idxj_count++; + memory->create(idxb_block, jdim, jdim, jdim, + "sna:idxb_block"); + idxb_count = 0; + for(int j1 = 0; j1 <= twojmax; j1++) + for(int j2 = 0; j2 <= j1; j2++) + for(int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) { + if (j < j1) continue; + idxb_block[j1][j2][j] = idxb_count; + idxb_count++; } - // indexList can be changed here + // index list for zlist - idxj = new SNA_LOOPINDICES[idxj_count]; - idxj_max = idxj_count; + int idxz_count = 0; - idxj_count = 0; + for(int j1 = 0; j1 <= twojmax; j1++) + for(int j2 = 0; j2 <= j1; j2++) + for(int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) + for (int mb = 0; 2*mb <= j; mb++) + for (int ma = 0; ma <= j; ma++) + idxz_count++; + + idxz_max = idxz_count; + idxz = new SNA_ZINDICES[idxz_max]; + + memory->create(idxz_block, jdim, jdim, jdim, + "sna:idxz_block"); + + idxz_count = 0; + for(int j1 = 0; j1 <= twojmax; j1++) + for(int j2 = 0; j2 <= j1; j2++) + for(int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) { + idxz_block[j1][j2][j] = idxz_count; - for(int j1 = 0; j1 <= twojmax; j1++) - for(int j = 0; j <= MIN(twojmax, 2 * j1); j += 2) { - idxj[idxj_count].j1 = j1; - idxj[idxj_count].j2 = j1; - idxj[idxj_count].j = j; - idxj_count++; - } - } + // find right beta[jjb] entry + // multiply and divide by j+1 factors + // account for multiplicity of 1, 2, or 3 - if(diagonalstyle == 2) { - int idxj_count = 0; + // CODE HORROR!! Need to figure this out later + double betaj = 1.0; +// #ifdef USE_YDIRECT_ZLIST +// double betaj; +// if (j >= j1) { +// const int jjb = idxb_block[j1][j2][j]; +// if (j1 == j) { +// if (j2 == j) betaj = 3*beta[jjb]; +// else betaj = 2*beta[jjb]; +// } else betaj = beta[jjb]; +// } else if (j >= j2) { +// const int jjb = idxb_block[j][j2][j1]; +// if (j2 == j) betaj = 2*beta[jjb]*(j1+1)/(j+1.0); +// else betaj = beta[jjb]*(j1+1)/(j+1.0); +// } else { +// const int jjb = idxb_block[j2][j][j1]; +// betaj = beta[jjb]*(j1+1)/(j+1.0); +// } +// #else +// double betaj; +// if (j >= j1) { +// const int jjb = idxb_block[j1][j2][j]; +// betaj = beta[jjb]; +// } else if (j >= j2) { +// const int jjb = idxb_block[j][j2][j1]; +// betaj = beta[jjb]*(j1+1)/(j+1.0); +// } else { +// const int jjb = idxb_block[j2][j][j1]; +// betaj = beta[jjb]*(j1+1)/(j+1.0); +// } +// #endif - for(int j1 = 0; j1 <= twojmax; j1++) { - idxj_count++; - } + for (int mb = 0; 2*mb <= j; mb++) + for (int ma = 0; ma <= j; ma++) { + idxz[idxz_count].j1 = j1; + idxz[idxz_count].j2 = j2; + idxz[idxz_count].j = j; + idxz[idxz_count].ma1min = MAX(0, (2 * ma - j - j2 + j1) / 2); + idxz[idxz_count].ma2max = (2 * ma - j - (2 * idxz[idxz_count].ma1min - j1) + j2) / 2; + idxz[idxz_count].na = MIN(j1, (2 * ma - j + j2 + j1) / 2) - idxz[idxz_count].ma1min + 1; + idxz[idxz_count].mb1min = MAX(0, (2 * mb - j - j2 + j1) / 2); + idxz[idxz_count].mb2max = (2 * mb - j - (2 * idxz[idxz_count].mb1min - j1) + j2) / 2; + idxz[idxz_count].nb = MIN(j1, (2 * mb - j + j2 + j1) / 2) - idxz[idxz_count].mb1min + 1; - // indexList can be changed here + // apply to z(j1,j2,j,ma,mb) to unique element of y(j) + // find right beta[jjb] and y_list[jju] entries - idxj = new SNA_LOOPINDICES[idxj_count]; - idxj_max = idxj_count; + const int jju = idxu_block[j] + (j+1)*mb + ma; + idxz[idxz_count].jju = jju; + idxz[idxz_count].betaj = betaj; - idxj_count = 0; - - for(int j1 = 0; j1 <= twojmax; j1++) { - idxj[idxj_count].j1 = j1; - idxj[idxj_count].j2 = j1; - idxj[idxj_count].j = j1; - idxj_count++; - } - } - - if(diagonalstyle == 3) { - int idxj_count = 0; - - for(int j1 = 0; j1 <= twojmax; j1++) - for(int j2 = 0; j2 <= j1; j2++) - for(int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) - if (j >= j1) idxj_count++; - - // indexList can be changed here - - idxj = new SNA_LOOPINDICES[idxj_count]; - idxj_max = idxj_count; - - idxj_count = 0; - - for(int j1 = 0; j1 <= twojmax; j1++) - for(int j2 = 0; j2 <= j1; j2++) - for(int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) - if (j >= j1) { - idxj[idxj_count].j1 = j1; - idxj[idxj_count].j2 = j2; - idxj[idxj_count].j = j; - idxj_count++; + idxz_count++; } - } - + } } /* ---------------------------------------------------------------------- */ @@ -292,16 +336,14 @@ void SNA::grow_rij(int newnmax) nmax = newnmax; - if(!use_shared_arrays) { - memory->destroy(rij); - memory->destroy(inside); - memory->destroy(wj); - memory->destroy(rcutij); - memory->create(rij, nmax, 3, "pair:rij"); - memory->create(inside, nmax, "pair:inside"); - memory->create(wj, nmax, "pair:wj"); - memory->create(rcutij, nmax, "pair:rcutij"); - } + memory->destroy(rij); + memory->destroy(inside); + memory->destroy(wj); + memory->destroy(rcutij); + memory->create(rij, nmax, 3, "pair:rij"); + memory->create(inside, nmax, "pair:inside"); + memory->create(wj, nmax, "pair:wj"); + memory->create(rcutij, nmax, "pair:rcutij"); } /* ---------------------------------------------------------------------- compute Ui by summing over neighbors j @@ -320,10 +362,6 @@ void SNA::compute_ui(int jnum) zero_uarraytot(); addself_uarraytot(wself); -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME, &starttime); -#endif - for(int j = 0; j < jnum; j++) { x = rij[j][0]; y = rij[j][1]; @@ -339,48 +377,6 @@ void SNA::compute_ui(int jnum) add_uarraytot(r, wj[j], rcutij[j]); } -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME, &endtime); - timers[0] += (endtime.tv_sec - starttime.tv_sec + 1.0 * - (endtime.tv_nsec - starttime.tv_nsec) / 1000000000); -#endif - -} - -void SNA::compute_ui_omp(int jnum, int sub_threads) -{ - double rsq, r, x, y, z, z0, theta0; - - // utot(j,ma,mb) = 0 for all j,ma,ma - // utot(j,ma,ma) = 1 for all j,ma - // for j in neighbors of i: - // compute r0 = (x,y,z,z0) - // utot(j,ma,mb) += u(r0;j,ma,mb) for all j,ma,mb - - zero_uarraytot(); - addself_uarraytot(wself); - - for(int j = 0; j < jnum; j++) { - x = rij[j][0]; - y = rij[j][1]; - z = rij[j][2]; - rsq = x * x + y * y + z * z; - r = sqrt(rsq); - theta0 = (r - rmin0) * rfac0 * MY_PI / (rcutij[j] - rmin0); - // theta0 = (r - rmin0) * rscale0; - z0 = r / tan(theta0); - omp_set_num_threads(sub_threads); - -#if defined(_OPENMP) -#pragma omp parallel shared(x,y,z,z0,r,sub_threads) default(none) -#endif - { - compute_uarray_omp(x, y, z, z0, r, sub_threads); - } - add_uarraytot(r, wj[j], rcutij[j]); - } - - } /* ---------------------------------------------------------------------- @@ -389,24 +385,6 @@ void SNA::compute_ui_omp(int jnum, int sub_threads) void SNA::compute_zi() { - // for j1 = 0,...,twojmax - // for j2 = 0,twojmax - // for j = |j1-j2|,Min(twojmax,j1+j2),2 - // for ma = 0,...,j - // for mb = 0,...,jmid - // z(j1,j2,j,ma,mb) = 0 - // for ma1 = Max(0,ma+(j1-j2-j)/2),Min(j1,ma+(j1+j2-j)/2) - // sumb1 = 0 - // ma2 = ma-ma1+(j1+j2-j)/2; - // for mb1 = Max(0,mb+(j1-j2-j)/2),Min(j1,mb+(j1+j2-j)/2) - // mb2 = mb-mb1+(j1+j2-j)/2; - // sumb1 += cg(j1,mb1,j2,mb2,j) * - // u(j1,ma1,mb1) * u(j2,ma2,mb2) - // z(j1,j2,j,ma,mb) += sumb1*cg(j1,ma1,j2,ma2,j) - -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME, &starttime); -#endif // compute_dbidrj() requires full j1/j2/j chunk of z elements // use zarray j1/j2 symmetry @@ -449,84 +427,13 @@ void SNA::compute_zi() } // end loop over j } // end loop over j1, j2 -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME, &endtime); - timers[1] += (endtime.tv_sec - starttime.tv_sec + 1.0 * - (endtime.tv_nsec - starttime.tv_nsec) / 1000000000); -#endif -} - -void SNA::compute_zi_omp(int sub_threads) -{ - // for j1 = 0,...,twojmax - // for j2 = 0,twojmax - // for j = |j1-j2|,Min(twojmax,j1+j2),2 - // for ma = 0,...,j - // for mb = 0,...,j - // z(j1,j2,j,ma,mb) = 0 - // for ma1 = Max(0,ma+(j1-j2-j)/2),Min(j1,ma+(j1+j2-j)/2) - // sumb1 = 0 - // ma2 = ma-ma1+(j1+j2-j)/2; - // for mb1 = Max(0,mb+(j1-j2-j)/2),Min(j1,mb+(j1+j2-j)/2) - // mb2 = mb-mb1+(j1+j2-j)/2; - // sumb1 += cg(j1,mb1,j2,mb2,j) * - // u(j1,ma1,mb1) * u(j2,ma2,mb2) - // z(j1,j2,j,ma,mb) += sumb1*cg(j1,ma1,j2,ma2,j) - - if(omp_in_parallel()) - omp_set_num_threads(sub_threads); - - // compute_dbidrj() requires full j1/j2/j chunk of z elements - // use zarray j1/j2 symmetry - -#if defined(_OPENMP) -#pragma omp parallel for schedule(auto) default(none) -#endif - for(int j1 = 0; j1 <= twojmax; j1++) - for(int j2 = 0; j2 <= j1; j2++) - for(int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) { - - double sumb1_r, sumb1_i; - int ma2, mb2; - - for(int ma = 0; ma <= j; ma++) - for(int mb = 0; mb <= j; mb++) { - zarray_r[j1][j2][j][ma][mb] = 0.0; - zarray_i[j1][j2][j][ma][mb] = 0.0; - - for(int ma1 = MAX(0, (2 * ma - j - j2 + j1) / 2); - ma1 <= MIN(j1, (2 * ma - j + j2 + j1) / 2); ma1++) { - sumb1_r = 0.0; - sumb1_i = 0.0; - - ma2 = (2 * ma - j - (2 * ma1 - j1) + j2) / 2; - - for(int mb1 = MAX(0, (2 * mb - j - j2 + j1) / 2); - mb1 <= MIN(j1, (2 * mb - j + j2 + j1) / 2); mb1++) { - - mb2 = (2 * mb - j - (2 * mb1 - j1) + j2) / 2; - sumb1_r += cgarray[j1][j2][j][mb1][mb2] * - (uarraytot_r[j1][ma1][mb1] * uarraytot_r[j2][ma2][mb2] - - uarraytot_i[j1][ma1][mb1] * uarraytot_i[j2][ma2][mb2]); - sumb1_i += cgarray[j1][j2][j][mb1][mb2] * - (uarraytot_r[j1][ma1][mb1] * uarraytot_i[j2][ma2][mb2] + - uarraytot_i[j1][ma1][mb1] * uarraytot_r[j2][ma2][mb2]); - } - - zarray_r[j1][j2][j][ma][mb] += - sumb1_r * cgarray[j1][j2][j][ma1][ma2]; - zarray_i[j1][j2][j][ma][mb] += - sumb1_i * cgarray[j1][j2][j][ma1][ma2]; - } - } - } } /* ---------------------------------------------------------------------- compute Yi by summing over products of beta and Zi ------------------------------------------------------------------------- */ -void SNA::compute_yi(double* beta) +void SNA::compute_yi(const double* beta) { int j; int idxz_count; @@ -540,18 +447,18 @@ void SNA::compute_yi(double* beta) } // end loop over ma, mb } // end loop over j - for(int JJ = 0; JJ < idxj_max; JJ++) { - const int j1 = idxj[JJ].j1; - const int j2 = idxj[JJ].j2; - const int j3 = idxj[JJ].j; + for(int jjb = 0; jjb < idxb_max; jjb++) { + const int j1 = idxb[jjb].j1; + const int j2 = idxb[jjb].j2; + const int j3 = idxb[jjb].j; j = j3; jjjzarray_r = zarray_r[j1][j2][j3]; jjjzarray_i = zarray_i[j1][j2][j3]; for(int mb = 0; 2*mb <= j; mb++) for(int ma = 0; ma <= j; ma++) { - yarray_r[j][ma][mb] += beta[JJ]*jjjzarray_r[ma][mb]; - yarray_i[j][ma][mb] += beta[JJ]*jjjzarray_i[ma][mb]; + yarray_r[j][ma][mb] += beta[jjb]*jjjzarray_r[ma][mb]; + yarray_i[j][ma][mb] += beta[jjb]*jjjzarray_i[ma][mb]; } // end loop over ma, mb j = j1; @@ -560,8 +467,8 @@ void SNA::compute_yi(double* beta) double j1fac = (j3+1)/(j+1.0); for(int mb = 0; 2*mb <= j; mb++) for(int ma = 0; ma <= j; ma++) { - yarray_r[j][ma][mb] += beta[JJ]*jjjzarray_r[ma][mb]*j1fac; - yarray_i[j][ma][mb] += beta[JJ]*jjjzarray_i[ma][mb]*j1fac; + yarray_r[j][ma][mb] += beta[jjb]*jjjzarray_r[ma][mb]*j1fac; + yarray_i[j][ma][mb] += beta[jjb]*jjjzarray_i[ma][mb]*j1fac; } // end loop over ma, mb j = j2; @@ -570,8 +477,8 @@ void SNA::compute_yi(double* beta) double j2fac = (j3+1)/(j+1.0); for(int mb = 0; 2*mb <= j; mb++) for(int ma = 0; ma <= j; ma++) { - yarray_r[j][ma][mb] += beta[JJ]*jjjzarray_r[ma][mb]*j2fac; - yarray_i[j][ma][mb] += beta[JJ]*jjjzarray_i[ma][mb]*j2fac; + yarray_r[j][ma][mb] += beta[jjb]*jjjzarray_r[ma][mb]*j2fac; + yarray_i[j][ma][mb] += beta[jjb]*jjjzarray_i[ma][mb]*j2fac; } // end loop over ma, mb } // end loop over jjb @@ -655,10 +562,6 @@ void SNA::compute_bi() // b(j1,j2,j) += // 2*Conj(u(j,ma,mb))*z(j1,j2,j,ma,mb) -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME, &starttime); -#endif - for(int j1 = 0; j1 <= twojmax; j1++) for(int j2 = 0; j2 <= j1; j2++) { for(int j = abs(j1 - j2); @@ -691,12 +594,6 @@ void SNA::compute_bi() } } -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME, &endtime); - timers[2] += (endtime.tv_sec - starttime.tv_sec + 1.0 * - (endtime.tv_nsec - starttime.tv_nsec) / 1000000000); -#endif - } /* ---------------------------------------------------------------------- @@ -760,164 +657,8 @@ void SNA::compute_duidrj(double* rij, double wj, double rcut) z0 = r * cs / sn; dz0dr = z0 / r - (r*rscale0) * (rsq + z0 * z0) / rsq; -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME, &starttime); -#endif - compute_duarray(x, y, z, z0, r, dz0dr, wj, rcut); -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME, &endtime); - timers[3] += (endtime.tv_sec - starttime.tv_sec + 1.0 * - (endtime.tv_nsec - starttime.tv_nsec) / 1000000000); -#endif - -} - -/* ---------------------------------------------------------------------- - calculate derivative of Bi w.r.t. atom j - variant using indexlist for j1,j2,j - variant not using symmetry relation -------------------------------------------------------------------------- */ - -void SNA::compute_dbidrj_nonsymm() -{ - // for j1 = 0,...,twojmax - // for j2 = 0,twojmax - // for j = |j1-j2|,Min(twojmax,j1+j2),2 - // dbdr(j1,j2,j) = 0 - // for ma = 0,...,j - // for mb = 0,...,j - // dzdr = 0 - // for ma1 = Max(0,ma+(j1-j2-j)/2),Min(j1,ma+(j1+j2-j)/2) - // sumb1 = 0 - // ma2 = ma-ma1+(j1+j2-j)/2; - // for mb1 = Max(0,mb+(j1-j2-j)/2),Min(j1,mb+(j1+j2-j)/2) - // mb2 = mb-mb1+(j1+j2-j)/2; - // sumb1 += cg(j1,mb1,j2,mb2,j) * - // (dudr(j1,ma1,mb1) * u(j2,ma2,mb2) + - // u(j1,ma1,mb1) * dudr(j2,ma2,mb2)) - // dzdr += sumb1*cg(j1,ma1,j2,ma2,j) - // dbdr(j1,j2,j) += - // Conj(dudr(j,ma,mb))*z(j1,j2,j,ma,mb) + - // Conj(u(j,ma,mb))*dzdr - - double* dbdr; - double* dudr_r, *dudr_i; - double sumb1_r[3], sumb1_i[3], dzdr_r[3], dzdr_i[3]; - int ma2; - -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME, &starttime); -#endif - - for(int JJ = 0; JJ < idxj_max; JJ++) { - const int j1 = idxj[JJ].j1; - const int j2 = idxj[JJ].j2; - const int j = idxj[JJ].j; - - dbdr = dbarray[j1][j2][j]; - dbdr[0] = 0.0; - dbdr[1] = 0.0; - dbdr[2] = 0.0; - - double** *j1duarray_r = duarray_r[j1]; - double** *j2duarray_r = duarray_r[j2]; - double** *j1duarray_i = duarray_i[j1]; - double** *j2duarray_i = duarray_i[j2]; - double** j1uarraytot_r = uarraytot_r[j1]; - double** j2uarraytot_r = uarraytot_r[j2]; - double** j1uarraytot_i = uarraytot_i[j1]; - double** j2uarraytot_i = uarraytot_i[j2]; - double** j1j2jcgarray = cgarray[j1][j2][j]; - - for(int ma = 0; ma <= j; ma++) - for(int mb = 0; mb <= j; mb++) { - dzdr_r[0] = 0.0; - dzdr_r[1] = 0.0; - dzdr_r[2] = 0.0; - dzdr_i[0] = 0.0; - dzdr_i[1] = 0.0; - dzdr_i[2] = 0.0; - - const int max_mb1 = MIN(j1, (2 * mb - j + j2 + j1) / 2) + 1; - const int max_ma1 = MIN(j1, (2 * ma - j + j2 + j1) / 2) + 1; - - for(int ma1 = MAX(0, (2 * ma - j - j2 + j1) / 2); - ma1 < max_ma1; ma1++) { - - ma2 = (2 * ma - j - (2 * ma1 - j1) + j2) / 2; - sumb1_r[0] = 0.0; - sumb1_r[1] = 0.0; - sumb1_r[2] = 0.0; - sumb1_i[0] = 0.0; - sumb1_i[1] = 0.0; - sumb1_i[2] = 0.0; - - //inside loop 54 operations (mul and add) - for(int mb1 = MAX(0, (2 * mb - j - j2 + j1) / 2), - mb2 = mb + (j1 + j2 - j) / 2 - mb1; - mb1 < max_mb1; mb1++, mb2--) { - - double* dudr1_r, *dudr1_i, *dudr2_r, *dudr2_i; - - dudr1_r = j1duarray_r[ma1][mb1]; - dudr2_r = j2duarray_r[ma2][mb2]; - dudr1_i = j1duarray_i[ma1][mb1]; - dudr2_i = j2duarray_i[ma2][mb2]; - - const double cga_mb1mb2 = j1j2jcgarray[mb1][mb2]; - const double uat_r_ma2mb2 = cga_mb1mb2 * j2uarraytot_r[ma2][mb2]; - const double uat_r_ma1mb1 = cga_mb1mb2 * j1uarraytot_r[ma1][mb1]; - const double uat_i_ma2mb2 = cga_mb1mb2 * j2uarraytot_i[ma2][mb2]; - const double uat_i_ma1mb1 = cga_mb1mb2 * j1uarraytot_i[ma1][mb1]; - - for(int k = 0; k < 3; k++) { - sumb1_r[k] += dudr1_r[k] * uat_r_ma2mb2; - sumb1_r[k] -= dudr1_i[k] * uat_i_ma2mb2; - sumb1_i[k] += dudr1_r[k] * uat_i_ma2mb2; - sumb1_i[k] += dudr1_i[k] * uat_r_ma2mb2; - - sumb1_r[k] += dudr2_r[k] * uat_r_ma1mb1; - sumb1_r[k] -= dudr2_i[k] * uat_i_ma1mb1; - sumb1_i[k] += dudr2_r[k] * uat_i_ma1mb1; - sumb1_i[k] += dudr2_i[k] * uat_r_ma1mb1; - } - } // end loop over mb1,mb2 - - // dzdr += sumb1*cg(j1,ma1,j2,ma2,j) - - dzdr_r[0] += sumb1_r[0] * j1j2jcgarray[ma1][ma2]; - dzdr_r[1] += sumb1_r[1] * j1j2jcgarray[ma1][ma2]; - dzdr_r[2] += sumb1_r[2] * j1j2jcgarray[ma1][ma2]; - dzdr_i[0] += sumb1_i[0] * j1j2jcgarray[ma1][ma2]; - dzdr_i[1] += sumb1_i[1] * j1j2jcgarray[ma1][ma2]; - dzdr_i[2] += sumb1_i[2] * j1j2jcgarray[ma1][ma2]; - } // end loop over ma1,ma2 - - // dbdr(j1,j2,j) += - // Conj(dudr(j,ma,mb))*z(j1,j2,j,ma,mb) + - // Conj(u(j,ma,mb))*dzdr - - dudr_r = duarray_r[j][ma][mb]; - dudr_i = duarray_i[j][ma][mb]; - - for(int k = 0; k < 3; k++) - dbdr[k] += - (dudr_r[k] * zarray_r[j1][j2][j][ma][mb] + - dudr_i[k] * zarray_i[j1][j2][j][ma][mb]) + - (uarraytot_r[j][ma][mb] * dzdr_r[k] + - uarraytot_i[j][ma][mb] * dzdr_i[k]); - } //end loop over ma mb - - } //end loop over j1 j2 j - -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME, &endtime); - timers[4] += (endtime.tv_sec - starttime.tv_sec + 1.0 * - (endtime.tv_nsec - starttime.tv_nsec) / 1000000000); -#endif - } /* ---------------------------------------------------------------------- @@ -958,14 +699,10 @@ void SNA::compute_dbidrj() double jjjmambzarray_r; double jjjmambzarray_i; -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME, &starttime); -#endif - - for(int JJ = 0; JJ < idxj_max; JJ++) { - const int j1 = idxj[JJ].j1; - const int j2 = idxj[JJ].j2; - const int j = idxj[JJ].j; + for(int jjb = 0; jjb < idxb_max; jjb++) { + const int j1 = idxb[jjb].j1; + const int j2 = idxb[jjb].j2; + const int j = idxb[jjb].j; dbdr = dbarray[j1][j2][j]; dbdr[0] = 0.0; @@ -1149,12 +886,6 @@ void SNA::compute_dbidrj() } //end loop over j1 j2 j -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME, &endtime); - timers[4] += (endtime.tv_sec - starttime.tv_sec + 1.0 * - (endtime.tv_nsec - starttime.tv_nsec) / 1000000000); -#endif - } /* ---------------------------------------------------------------------- @@ -1251,27 +982,6 @@ void SNA::add_uarraytot(double r, double wj, double rcut) } } -void SNA::add_uarraytot_omp(double r, double wj, double rcut) -{ - double sfac; - - sfac = compute_sfac(r, rcut); - - sfac *= wj; - -#if defined(_OPENMP) -#pragma omp for -#endif - for (int j = 0; j <= twojmax; j++) - for (int ma = 0; ma <= j; ma++) - for (int mb = 0; mb <= j; mb++) { - uarraytot_r[j][ma][mb] += - sfac * uarray_r[j][ma][mb]; - uarraytot_i[j][ma][mb] += - sfac * uarray_i[j][ma][mb]; - } -} - /* ---------------------------------------------------------------------- compute Wigner U-functions for one neighbor ------------------------------------------------------------------------- */ @@ -1348,88 +1058,6 @@ void SNA::compute_uarray(double x, double y, double z, } } -void SNA::compute_uarray_omp(double x, double y, double z, - double z0, double r, int /*sub_threads*/) -{ - double r0inv; - double a_r, b_r, a_i, b_i; - double rootpq; - - // compute Cayley-Klein parameters for unit quaternion - - r0inv = 1.0 / sqrt(r * r + z0 * z0); - a_r = r0inv * z0; - a_i = -r0inv * z; - b_r = r0inv * y; - b_i = -r0inv * x; - - // VMK Section 4.8.2 - - uarray_r[0][0][0] = 1.0; - uarray_i[0][0][0] = 0.0; - - for (int j = 1; j <= twojmax; j++) { -#if defined(_OPENMP) -#pragma omp for -#endif - for (int mb = 0; mb < j; mb++) { - uarray_r[j][0][mb] = 0.0; - uarray_i[j][0][mb] = 0.0; - - for (int ma = 0; ma < j; ma++) { - rootpq = rootpqarray[j - ma][j - mb]; - uarray_r[j][ma][mb] += - rootpq * - (a_r * uarray_r[j - 1][ma][mb] + - a_i * uarray_i[j - 1][ma][mb]); - uarray_i[j][ma][mb] += - rootpq * - (a_r * uarray_i[j - 1][ma][mb] - - a_i * uarray_r[j - 1][ma][mb]); - - rootpq = rootpqarray[ma + 1][j - mb]; - uarray_r[j][ma + 1][mb] = - -rootpq * - (b_r * uarray_r[j - 1][ma][mb] + - b_i * uarray_i[j - 1][ma][mb]); - uarray_i[j][ma + 1][mb] = - -rootpq * - (b_r * uarray_i[j - 1][ma][mb] - - b_i * uarray_r[j - 1][ma][mb]); - } - } - - int mb = j; - uarray_r[j][0][mb] = 0.0; - uarray_i[j][0][mb] = 0.0; - -#if defined(_OPENMP) -#pragma omp for -#endif - for (int ma = 0; ma < j; ma++) { - rootpq = rootpqarray[j - ma][mb]; - uarray_r[j][ma][mb] += - rootpq * - (b_r * uarray_r[j - 1][ma][mb - 1] - - b_i * uarray_i[j - 1][ma][mb - 1]); - uarray_i[j][ma][mb] += - rootpq * - (b_r * uarray_i[j - 1][ma][mb - 1] + - b_i * uarray_r[j - 1][ma][mb - 1]); - - rootpq = rootpqarray[ma + 1][mb]; - uarray_r[j][ma + 1][mb] = - rootpq * - (a_r * uarray_r[j - 1][ma][mb - 1] - - a_i * uarray_i[j - 1][ma][mb - 1]); - uarray_i[j][ma + 1][mb] = - rootpq * - (a_r * uarray_i[j - 1][ma][mb - 1] + - a_i * uarray_r[j - 1][ma][mb - 1]); - } - } -} - /* ---------------------------------------------------------------------- compute derivatives of Wigner U-functions for one neighbor see comments in compute_uarray() @@ -1644,20 +1272,18 @@ void SNA::create_twojmax_arrays() bzero = NULL; - if(!use_shared_arrays) { - memory->create(uarraytot_r, jdim, jdim, jdim, - "sna:uarraytot"); - memory->create(zarray_r, jdim, jdim, jdim, jdim, jdim, - "sna:zarray"); - memory->create(uarraytot_i, jdim, jdim, jdim, - "sna:uarraytot"); - memory->create(zarray_i, jdim, jdim, jdim, jdim, jdim, - "sna:zarray"); - memory->create(yarray_r, jdim, jdim, jdim, - "sna:yarray"); - memory->create(yarray_i, jdim, jdim, jdim, - "sna:yarray"); - } + memory->create(uarraytot_r, jdim, jdim, jdim, + "sna:uarraytot"); + memory->create(zarray_r, jdim, jdim, jdim, jdim, jdim, + "sna:zarray"); + memory->create(uarraytot_i, jdim, jdim, jdim, + "sna:uarraytot"); + memory->create(zarray_i, jdim, jdim, jdim, jdim, jdim, + "sna:zarray"); + memory->create(yarray_r, jdim, jdim, jdim, + "sna:yarray"); + memory->create(yarray_i, jdim, jdim, jdim, + "sna:yarray"); } @@ -1680,14 +1306,12 @@ void SNA::destroy_twojmax_arrays() if (bzero_flag) memory->destroy(bzero); - if(!use_shared_arrays) { - memory->destroy(uarraytot_r); - memory->destroy(zarray_r); - memory->destroy(uarraytot_i); - memory->destroy(zarray_i); - memory->destroy(yarray_r); - memory->destroy(yarray_i); - } + memory->destroy(uarraytot_r); + memory->destroy(zarray_r); + memory->destroy(uarraytot_i); + memory->destroy(zarray_i); + memory->destroy(yarray_r); + memory->destroy(yarray_i); } /* ---------------------------------------------------------------------- diff --git a/src/SNAP/sna.h b/src/SNAP/sna.h index 2c90da1d30..b93b0ac7b0 100644 --- a/src/SNAP/sna.h +++ b/src/SNAP/sna.h @@ -24,14 +24,19 @@ namespace LAMMPS_NS { -struct SNA_LOOPINDICES { +struct SNA_ZINDICES { + int j1, j2, j, ma1min, ma2max, mb1min, mb2max, na, nb, jju; + double betaj; +}; + +struct SNA_BINDICES { int j1, j2, j; }; class SNA : protected Pointers { public: - SNA(LAMMPS*, double, int, int, int, double, int, int); + SNA(LAMMPS*, double, int, int, double, int, int); SNA(LAMMPS* lmp) : Pointers(lmp) {}; ~SNA(); @@ -44,10 +49,8 @@ public: // functions for bispectrum coefficients void compute_ui(int); - void compute_ui_omp(int, int); void compute_zi(); - void compute_zi_omp(int); - void compute_yi(double*); + void compute_yi(const double*); void compute_bi(); void copy_bi2bvec(); @@ -56,20 +59,10 @@ public: void compute_duidrj(double*, double, double); void compute_dbidrj(); void compute_deidrj(double*); - void compute_dbidrj_nonsymm(); void copy_dbi2dbvec(); double compute_sfac(double, double); double compute_dsfac(double, double); -#ifdef TIMING_INFO - double* timers; - timespec starttime, endtime; - int print; - int counter; -#endif - - //per sna class instance for OMP use - double* bvec, ** dbvec; double** rij; int* inside; @@ -83,16 +76,17 @@ public: double*** uarraytot_r, *** uarraytot_i; double***** zarray_r, ***** zarray_i; double*** yarray_r, *** yarray_i; - double*** uarraytot_r_b, *** uarraytot_i_b; - double***** zarray_r_b, ***** zarray_i_b; double*** uarray_r, *** uarray_i; private: double rmin0, rfac0; - //use indexlist instead of loops, constructor generates these - SNA_LOOPINDICES* idxj; - int idxj_max; + // use indexlist instead of loops, constructor generates these + + SNA_ZINDICES* idxz; + SNA_BINDICES* idxb; + int idxcg_max, idxu_max, idxz_max, idxb_max; + // data for bispectrum coefficients double***** cgarray; @@ -104,6 +98,21 @@ private: double**** duarray_r, **** duarray_i; double**** dbarray; + double* cglist; + int*** idxcg_block; + + double* ulisttot_r, * ulisttot_i; + double* ulist_r, * ulist_i; + int* idxu_block; + + double* zlist_r, * zlist_i; + int*** idxz_block; + + int*** idxb_block; + + double** dulist_r, ** dulist_i; + double* ylist_r, * ylist_i; + static const int nmaxfactorial = 167; static const double nfac_table[]; double factorial(int); @@ -118,22 +127,13 @@ private: void zero_uarraytot(); void addself_uarraytot(double); void add_uarraytot(double, double, double); - void add_uarraytot_omp(double, double, double); void compute_uarray(double, double, double, double, double); - void compute_uarray_omp(double, double, double, - double, double, int); double deltacg(int, int, int); int compute_ncoeff(); void compute_duarray(double, double, double, double, double, double, double, double); - // if number of atoms are small use per atom arrays - // for twojmax arrays, rij, inside, bvec - // this will increase the memory footprint considerably, - // but allows parallel filling and reuse of these arrays - int use_shared_arrays; - // Sets the style for the switching function // 0 = none // 1 = cosine From 0b13fbe733e853b1e79d013d5b89b4167cfa2e38 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 3 Jun 2019 22:47:44 -0400 Subject: [PATCH 232/311] step version number for stable release --- doc/lammps.1 | 2 +- doc/src/Manual.txt | 4 ++-- src/version.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/lammps.1 b/doc/lammps.1 index 8517abcdd5..f4a801779a 100644 --- a/doc/lammps.1 +++ b/doc/lammps.1 @@ -1,4 +1,4 @@ -.TH LAMMPS "31 May 2019" "2019-05-31" +.TH LAMMPS "5 June 2019" "2019-06-05" .SH NAME .B LAMMPS \- Molecular Dynamics Simulator. diff --git a/doc/src/Manual.txt b/doc/src/Manual.txt index 0fb707746c..671c608001 100644 --- a/doc/src/Manual.txt +++ b/doc/src/Manual.txt @@ -1,7 +1,7 @@ LAMMPS Users Manual - + @@ -21,7 +21,7 @@ :line LAMMPS Documentation :c,h1 -31 May 2019 version :c,h2 +5 June 2019 version :c,h2 "What is a LAMMPS version?"_Manual_version.html diff --git a/src/version.h b/src/version.h index 312c87bd0c..8880c1201c 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "31 May 2019" +#define LAMMPS_VERSION "5 June 2019" From 272c5363265dbcb890f02206ed9ab2f06228c566 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 3 Jun 2019 22:52:40 -0400 Subject: [PATCH 233/311] use 3 letters for month only --- doc/src/Manual.txt | 4 ++-- src/version.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/src/Manual.txt b/doc/src/Manual.txt index 671c608001..2fa9623f36 100644 --- a/doc/src/Manual.txt +++ b/doc/src/Manual.txt @@ -1,7 +1,7 @@ LAMMPS Users Manual - + @@ -21,7 +21,7 @@ :line LAMMPS Documentation :c,h1 -5 June 2019 version :c,h2 +5 Jun 2019 version :c,h2 "What is a LAMMPS version?"_Manual_version.html diff --git a/src/version.h b/src/version.h index 8880c1201c..06ee8ab8f4 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "5 June 2019" +#define LAMMPS_VERSION "5 Jun 2019" From 708052dc810a245c72d7c7312c12bfe712faa6fa Mon Sep 17 00:00:00 2001 From: Kamesh AK Date: Tue, 4 Jun 2019 14:22:43 -0700 Subject: [PATCH 234/311] reaxc/qeq optimization - using kokkos hierarchical parallelism --- src/KOKKOS/fix_qeq_reax_kokkos.cpp | 248 +++++++++++++++++++++++------ src/KOKKOS/fix_qeq_reax_kokkos.h | 49 ++++-- 2 files changed, 236 insertions(+), 61 deletions(-) diff --git a/src/KOKKOS/fix_qeq_reax_kokkos.cpp b/src/KOKKOS/fix_qeq_reax_kokkos.cpp index 9969ab7257..fb61898f6d 100644 --- a/src/KOKKOS/fix_qeq_reax_kokkos.cpp +++ b/src/KOKKOS/fix_qeq_reax_kokkos.cpp @@ -129,6 +129,9 @@ void FixQEqReaxKokkos::init() init_shielding_k(); init_hist(); + + k_mfill_offset = DAT::tdual_int_scalar("reax:k_mfill_offset"); + d_mfill_offset = k_mfill_offset.view(); } /* ---------------------------------------------------------------------- */ @@ -222,8 +225,31 @@ void FixQEqReaxKokkos::pre_force(int vflag) allocate_matrix(); // compute_H - FixQEqReaxKokkosComputeHFunctor computeH_functor(this); - Kokkos::parallel_scan(inum,computeH_functor); + k_mfill_offset.h_view() = 0; + k_mfill_offset.modify(); + k_mfill_offset.sync(); + + int vector_length = 32; + int atoms_per_team = 4; + int num_teams = inum/atoms_per_team + (inum%atoms_per_team?1:0); + + Kokkos::TeamPolicy policy(num_teams, atoms_per_team, vector_length); + if (neighflag == FULL){ + FixQEqReaxKokkosComputeHFunctor computeH_functor(this, + atoms_per_team, + vector_length); + Kokkos::parallel_for( policy, computeH_functor ); + }else if (neighflag == HALF){ + FixQEqReaxKokkosComputeHFunctor computeH_functor(this, + atoms_per_team, + vector_length); + Kokkos::parallel_for( policy, computeH_functor ); + }else { + FixQEqReaxKokkosComputeHFunctor computeH_functor(this, + atoms_per_team, + vector_length); + Kokkos::parallel_for( policy, computeH_functor ); + } // init_matvec k_s_hist.template sync(); @@ -372,63 +398,185 @@ void FixQEqReaxKokkos::zero_item(int ii) const /* ---------------------------------------------------------------------- */ +// Calculate Qeq matrix H where H is a sparse matrix and H[i][j] represents the electrostatic interaction coefficients on atom-i with atom-j +// d_val - contains the non-zero entries of sparse matrix H +// d_numnbrs - d_numnbrs[i] contains the # of non-zero entries in the i-th row of H (which also represents the # of neighbor atoms with electrostatic interaction coefficients with atom-i) +// d_firstnbr- d_firstnbr[i] contains the beginning index from where the H matrix entries corresponding to row-i is stored in d_val +// d_jlist - contains the column index corresponding to each entry in d_val template -KOKKOS_INLINE_FUNCTION -void FixQEqReaxKokkos::compute_h_item(int ii, int &m_fill, const bool &final) const -{ - const int i = d_ilist[ii]; - int j,jj,jtype; +template +void +FixQEqReaxKokkos::compute_h_team(const typename Kokkos::TeamPolicy ::member_type &team, + int atoms_per_team, + int vector_length) const{ - if (mask[i] & groupbit) { + // scratch space setup + Kokkos::View< int*, Kokkos::ScratchMemorySpace, Kokkos::MemoryTraits > s_ilist(team.team_shmem(), atoms_per_team); + Kokkos::View< int*, Kokkos::ScratchMemorySpace, Kokkos::MemoryTraits > s_numnbrs(team.team_shmem(), atoms_per_team); + Kokkos::View< int*, Kokkos::ScratchMemorySpace, Kokkos::MemoryTraits > s_firstnbr(team.team_shmem(), atoms_per_team); - const X_FLOAT xtmp = x(i,0); - const X_FLOAT ytmp = x(i,1); - const X_FLOAT ztmp = x(i,2); - const int itype = type(i); - const tagint itag = tag(i); - const int jnum = d_numneigh[i]; - if (final) - d_firstnbr[i] = m_fill; + Kokkos::View< int**, Kokkos::ScratchMemorySpace, Kokkos::MemoryTraits > s_jtype(team.team_shmem(), atoms_per_team, vector_length); + Kokkos::View< int**, Kokkos::ScratchMemorySpace, Kokkos::MemoryTraits > s_jlist(team.team_shmem(), atoms_per_team, vector_length); + Kokkos::View< F_FLOAT**, Kokkos::ScratchMemorySpace, Kokkos::MemoryTraits > s_r(team.team_shmem(), atoms_per_team, vector_length); - for (jj = 0; jj < jnum; jj++) { - j = d_neighbors(i,jj); - j &= NEIGHMASK; - jtype = type(j); + // team of threads work on atoms with index in [firstatom, lastatom) + int firstatom = team.league_rank() * atoms_per_team; + int lastatom = ( firstatom + atoms_per_team < inum ) ? ( firstatom + atoms_per_team ) : inum; - const X_FLOAT delx = x(j,0) - xtmp; - const X_FLOAT dely = x(j,1) - ytmp; - const X_FLOAT delz = x(j,2) - ztmp; + // kokkos-thread-0 is used to load info from global memory into scratch space + if(team.team_rank() == 0){ - if (neighflag != FULL) { - // skip half of the interactions - const tagint jtag = tag(j); - if (j >= nlocal) { - if (itag > jtag) { - if ((itag+jtag) % 2 == 0) continue; - } else if (itag < jtag) { - if ((itag+jtag) % 2 == 1) continue; - } else { - if (x(j,2) < ztmp) continue; - if (x(j,2) == ztmp && x(j,1) < ytmp) continue; - if (x(j,2) == ztmp && x(j,1) == ytmp && x(j,0) < xtmp) continue; - } - } - } + // copy atom indices from d_ilist[firstatom:lastatom] to scratch space s_ilist[0:atoms_per_team] + // copy # of neighbor atoms for all the atoms with indices in d_ilist[firstatom:lastatom] from d_numneigh to scratch space s_numneigh[0:atoms_per_team] + // calculate total number of neighbor atoms for all atoms assigned to the current team of threads (Note - Total # of neighbor atoms here provides the + // upper bound space requirement to store the H matrix values corresponding to the atoms with indices in d_ilist[firstatom:lastatom]) - const F_FLOAT rsq = delx*delx + dely*dely + delz*delz; - if (rsq > cutsq) continue; + Kokkos::parallel_scan( Kokkos::ThreadVectorRange(team, atoms_per_team), [&](const int &idx, int &totalnbrs, bool final) { + int ii = firstatom + idx; - if (final) { - const F_FLOAT r = sqrt(rsq); - d_jlist(m_fill) = j; - const F_FLOAT shldij = d_shield(itype,jtype); - d_val(m_fill) = calculate_H_k(r,shldij); - } - m_fill++; + if(ii < inum){ + const int i = d_ilist[ii]; + int jnum = d_numneigh[i]; + + if(final){ + s_ilist[idx] = i; + s_numnbrs[idx] = jnum; + s_firstnbr[idx] = totalnbrs; + } + totalnbrs += jnum; + }else{ + s_numnbrs[idx] = 0; + } + }); } - if (final) - d_numnbrs[i] = m_fill - d_firstnbr[i]; - } + + + // barrier ensures that the data moved to scratch space is visible to all the threads of the corresponding team + team.team_barrier(); + + // calculate the global memory offset from where the H matrix values to be calculated by the current team will be stored in d_val + int team_firstnbr_idx = 0; + Kokkos::single (Kokkos::PerTeam (team), [=] (int &val) { + int totalnbrs = s_firstnbr[lastatom - firstatom - 1] + s_numnbrs[lastatom - firstatom - 1]; + val = Kokkos::atomic_fetch_add(&d_mfill_offset(), totalnbrs); + }, team_firstnbr_idx); + + + // map the H matrix computation of each atom to kokkos-thread (one atom per kokkos-thread) + // neighbor computation for each atom is assigned to vector lanes of the corresponding thread + Kokkos::parallel_for( Kokkos::TeamThreadRange(team, atoms_per_team), [&] (const int &idx) { + int ii = firstatom + idx; + + if(ii < inum){ + const int i = s_ilist[idx]; + + if (mask[i] & groupbit) { + const X_FLOAT xtmp = x(i,0); + const X_FLOAT ytmp = x(i,1); + const X_FLOAT ztmp = x(i,2); + const int itype = type(i); + const tagint itag = tag(i); + const int jnum = s_numnbrs[idx]; + + // calculate the write-offset for atom-i's first neighbor + int atomi_firstnbr_idx = team_firstnbr_idx + s_firstnbr[idx]; + Kokkos::single (Kokkos::PerThread (team), [&] () { + d_firstnbr[i] = atomi_firstnbr_idx; + }); + + + // current # of neighbor atoms with non-zero electrostatic interaction coefficients with atom-i + // which represents the # of non-zero elements in row-i of H matrix + int atomi_nbrs_inH = 0; + + // calculate H matrix values corresponding to atom-i where neighbors are processed in batches and the batch size is vector_length + for(int jj_start = 0; jj_start < jnum; jj_start += vector_length){ + + int atomi_nbr_writeIdx = atomi_firstnbr_idx + atomi_nbrs_inH; + + // count the # of neighbor atoms with non-zero electrostatic interaction coefficients with atom-i in the current batch + int atomi_nbrs_curbatch = 0; + + // compute rsq, jtype, j and store in scratch space which is reused later + Kokkos::parallel_reduce( Kokkos::ThreadVectorRange(team, vector_length), [&](const int &idx, int &m_fill) { + const int jj = jj_start + idx; + + // initialize: -1 represents no interaction with atom-j where j = d_neighbors(i,jj) + s_jlist(team.team_rank(), idx) = -1; + + if(jj < jnum){ + int j = d_neighbors(i,jj); + j &= NEIGHMASK; + const int jtype = type(j); + + const X_FLOAT delx = x(j,0) - xtmp; + const X_FLOAT dely = x(j,1) - ytmp; + const X_FLOAT delz = x(j,2) - ztmp; + + // valid nbr interaction + bool valid = true; + if (NEIGHFLAG != FULL) { + // skip half of the interactions + const tagint jtag = tag(j); + if (j >= nlocal) { + if (itag > jtag) { + if ((itag+jtag) % 2 == 0) + valid = false; + } else if (itag < jtag) { + if ((itag+jtag) % 2 == 1) + valid = false; + } else { + if (x(j,2) < ztmp) + valid = false; + if (x(j,2) == ztmp && x(j,1) < ytmp) + valid = false; + if (x(j,2) == ztmp && x(j,1) == ytmp && x(j,0) < xtmp) + valid = false; + } + } + } + + const F_FLOAT rsq = delx*delx + dely*dely + delz*delz; + if (rsq > cutsq) + valid = false; + + if(valid){ + s_jlist(team.team_rank(), idx) = j; + s_jtype(team.team_rank(), idx) = jtype; + s_r(team.team_rank(), idx) = sqrt(rsq); + m_fill++; + } + } + }, atomi_nbrs_curbatch); + + // write non-zero entries of H to global memory + Kokkos::parallel_scan( Kokkos::ThreadVectorRange(team, vector_length), [&](const int &idx, int &m_fill, bool final) { + int j = s_jlist(team.team_rank(), idx); + if(final){ + if(j != -1){ + const int jtype = s_jtype(team.team_rank(), idx); + const F_FLOAT r = s_r(team.team_rank(), idx); + const F_FLOAT shldij = d_shield(itype,jtype); + + d_jlist[atomi_nbr_writeIdx + m_fill] = j; + d_val[atomi_nbr_writeIdx + m_fill] = calculate_H_k(r, shldij); + } + } + + if(j !=-1){ + m_fill++; + } + }); + atomi_nbrs_inH += atomi_nbrs_curbatch; + } + + Kokkos::single (Kokkos::PerThread (team), [&] () { + d_numnbrs[i] = atomi_nbrs_inH; + }); + } + } + }); + } /* ---------------------------------------------------------------------- */ diff --git a/src/KOKKOS/fix_qeq_reax_kokkos.h b/src/KOKKOS/fix_qeq_reax_kokkos.h index 23bb4f32ee..10b007bb4f 100644 --- a/src/KOKKOS/fix_qeq_reax_kokkos.h +++ b/src/KOKKOS/fix_qeq_reax_kokkos.h @@ -34,6 +34,9 @@ struct TagSparseMatvec2 {}; struct TagSparseMatvec3 {}; struct TagZeroQGhosts{}; +template +struct TagComputeHItem{}; + template class FixQEqReaxKokkos : public FixQEqReax { public: @@ -53,8 +56,9 @@ class FixQEqReaxKokkos : public FixQEqReax { KOKKOS_INLINE_FUNCTION void zero_item(int) const; + template KOKKOS_INLINE_FUNCTION - void compute_h_item(int, int &, const bool &) const; + void compute_h_team(const typename Kokkos::TeamPolicy ::member_type &team, int, int) const; KOKKOS_INLINE_FUNCTION void matvec_item(int) const; @@ -80,6 +84,10 @@ class FixQEqReaxKokkos : public FixQEqReax { KOKKOS_INLINE_FUNCTION void sparse33_item(int) const; + template + KOKKOS_INLINE_FUNCTION + void operator() (TagComputeHItem, const typename Kokkos::TeamPolicy > ::member_type &team) const; + typedef typename Kokkos::TeamPolicy ::member_type membertype1; KOKKOS_INLINE_FUNCTION void operator() (TagSparseMatvec1, const membertype1 &team) const; @@ -150,6 +158,9 @@ class FixQEqReaxKokkos : public FixQEqReax { int allocated_flag; int need_dup; + DAT::tdual_int_scalar k_mfill_offset; + typename AT::t_int_scalar d_mfill_offset; + typedef Kokkos::DualView tdual_int_1d; Kokkos::DualView k_params; typename Kokkos::DualView::t_dev_const params; @@ -247,17 +258,33 @@ struct FixQEqReaxKokkosMatVecFunctor { } }; -template +template struct FixQEqReaxKokkosComputeHFunctor { - typedef DeviceType device_type ; - FixQEqReaxKokkos c; - FixQEqReaxKokkosComputeHFunctor(FixQEqReaxKokkos* c_ptr):c(*c_ptr) { - c.cleanup_copy(); - }; - KOKKOS_INLINE_FUNCTION - void operator()(const int ii, int &m_fill, const bool &final) const { - c.compute_h_item(ii,m_fill,final); - } + int atoms_per_team, vector_length; + typedef Kokkos::ScratchMemorySpace scratch_space; + FixQEqReaxKokkos c; + + FixQEqReaxKokkosComputeHFunctor(FixQEqReaxKokkos* c_ptr, + int _atoms_per_team, + int _vector_length): + c(*c_ptr), atoms_per_team(_atoms_per_team), vector_length(_vector_length) { + c.cleanup_copy(); + }; + + KOKKOS_INLINE_FUNCTION + void operator()(const typename Kokkos::TeamPolicy ::member_type &team) const { + c.template compute_h_team (team, atoms_per_team, vector_length); + } + + size_t team_shmem_size( int team_size ) const { + size_t shmem_size = Kokkos::View::shmem_size(atoms_per_team) + // s_ilist + Kokkos::View::shmem_size(atoms_per_team) + // s_numnbrs + Kokkos::View::shmem_size(atoms_per_team) + // s_firstnbr + Kokkos::View::shmem_size(atoms_per_team, vector_length) + //s_jtype + Kokkos::View::shmem_size(atoms_per_team, vector_length) + //s_j + Kokkos::View::shmem_size(atoms_per_team, vector_length) ; //s_r + return shmem_size; + } }; template From 92f078cfffffc15734e86b519fb46ba7aa2dba22 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 4 Jun 2019 22:29:25 -0400 Subject: [PATCH 235/311] nicer typesetting of "none, zero, hybrid" potential styles in commands lists --- doc/src/Commands_bond.txt | 32 ++++++++++++++++++++++++-------- doc/src/Commands_pair.txt | 7 +++++-- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/doc/src/Commands_bond.txt b/doc/src/Commands_bond.txt index 3d889ac08e..40c2d0283a 100644 --- a/doc/src/Commands_bond.txt +++ b/doc/src/Commands_bond.txt @@ -28,8 +28,12 @@ OPT. "none"_bond_none.html, "zero"_bond_zero.html, -"hybrid"_bond_hybrid.html :tb(c=3,ea=c) - +"hybrid"_bond_hybrid.html, +, +, +, +, +, "class2 (ko)"_bond_class2.html, "fene (iko)"_bond_fene.html, "fene/expand (o)"_bond_fene_expand.html, @@ -56,8 +60,12 @@ OPT. "none"_angle_none.html, "zero"_angle_zero.html, -"hybrid"_angle_hybrid.html :tb(c=3,ea=c) - +"hybrid"_angle_hybrid.html, +, +, +, +, +, "charmm (iko)"_angle_charmm.html, "class2 (ko)"_angle_class2.html, "class2/p6"_angle_class2.html, @@ -89,8 +97,12 @@ OPT. "none"_dihedral_none.html, "zero"_dihedral_zero.html, -"hybrid"_dihedral_hybrid.html :tb(c=3,ea=c) - +"hybrid"_dihedral_hybrid.html, +, +, +, +, +, "charmm (iko)"_dihedral_charmm.html, "charmmfsw"_dihedral_charmm.html, "class2 (ko)"_dihedral_class2.html, @@ -117,8 +129,12 @@ OPT. "none"_improper_none.html, "zero"_improper_zero.html, -"hybrid"_improper_hybrid.html :tb(c=3,ea=c) - +"hybrid"_improper_hybrid.html, +, +, +, +, +, "class2 (ko)"_improper_class2.html, "cossq (o)"_improper_cossq.html, "cvff (io)"_improper_cvff.html, diff --git a/doc/src/Commands_pair.txt b/doc/src/Commands_pair.txt index e9925b0e0b..fea085b4ed 100644 --- a/doc/src/Commands_pair.txt +++ b/doc/src/Commands_pair.txt @@ -27,8 +27,11 @@ OPT. "none"_pair_none.html, "zero"_pair_zero.html, "hybrid (k)"_pair_hybrid.html, -"hybrid/overlay (k)"_pair_hybrid.html :tb(c=4,ea=c) - +"hybrid/overlay (k)"_pair_hybrid.html, +, +, +, +, "adp (o)"_pair_adp.html, "agni (o)"_pair_agni.html, "airebo (io)"_pair_airebo.html, From 8e43a459255acd619da4ef92d5a40a0db5c92f61 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 5 Jun 2019 01:10:44 -0400 Subject: [PATCH 236/311] Detect and error out on invalid kspace mesh settings. make coulomb and dispersion settings consistent --- doc/src/Errors_messages.txt | 12 ++++++++++++ src/kspace.cpp | 12 ++++++++++-- src/kspace.h | 12 ++++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/doc/src/Errors_messages.txt b/doc/src/Errors_messages.txt index 34a458232b..7249bfddfd 100644 --- a/doc/src/Errors_messages.txt +++ b/doc/src/Errors_messages.txt @@ -7097,6 +7097,18 @@ Self-explanatory. :dd One or more GPUs must be used when Kokkos is compiled for CUDA. :dd +{Kspace_modify mesh parameter must be all zero or all positive} :dt + +Valid kspace mesh parameters are >0. The code will try to auto-detect +suitable values when all three mesh sizes are set to zero (the default). :dd + +{Kspace_modify mesh/disp parameter must be all zero or all positive} :dt + +Valid kspace mesh/disp parameters are >0. The code will try to auto-detect +suitable values when all three mesh sizes are set to zero [and] +the required accuracy via {force/disp/real} as well as +{force/disp/kspace} is set. :dd + {Kspace style does not support compute group/group} :dt Self-explanatory. :dd diff --git a/src/kspace.cpp b/src/kspace.cpp index 0144ea59a3..64a769fa51 100644 --- a/src/kspace.cpp +++ b/src/kspace.cpp @@ -443,7 +443,11 @@ void KSpace::modify_params(int narg, char **arg) nx_pppm = nx_msm_max = force->inumeric(FLERR,arg[iarg+1]); ny_pppm = ny_msm_max = force->inumeric(FLERR,arg[iarg+2]); nz_pppm = nz_msm_max = force->inumeric(FLERR,arg[iarg+3]); - if (nx_pppm == 0 && ny_pppm == 0 && nz_pppm == 0) gridflag = 0; + if (nx_pppm == 0 && ny_pppm == 0 && nz_pppm == 0) + gridflag = 0; + else if (nx_pppm <= 0 || ny_pppm <= 0 || nz_pppm <= 0) + error->all(FLERR,"Kspace_modify mesh parameters must be all " + "zero or all positive"); else gridflag = 1; iarg += 4; } else if (strcmp(arg[iarg],"mesh/disp") == 0) { @@ -451,7 +455,11 @@ void KSpace::modify_params(int narg, char **arg) nx_pppm_6 = force->inumeric(FLERR,arg[iarg+1]); ny_pppm_6 = force->inumeric(FLERR,arg[iarg+2]); nz_pppm_6 = force->inumeric(FLERR,arg[iarg+3]); - if (nx_pppm_6 == 0 || ny_pppm_6 == 0 || nz_pppm_6 == 0) gridflag_6 = 0; + if (nx_pppm_6 == 0 && ny_pppm_6 == 0 && nz_pppm_6 == 0) + gridflag_6 = 0; + else if (nx_pppm_6 <= 0 || ny_pppm_6 <= 0 || nz_pppm_6 == 0) + error->all(FLERR,"Kspace_modify mesh/disp parameters must be all " + "zero or all positive"); else gridflag_6 = 1; iarg += 4; } else if (strcmp(arg[iarg],"order") == 0) { diff --git a/src/kspace.h b/src/kspace.h index 2345cebf24..4fd260e186 100644 --- a/src/kspace.h +++ b/src/kspace.h @@ -251,6 +251,18 @@ E: Bad kspace_modify slab parameter Kspace_modify value for the slab/volume keyword must be >= 2.0. +E: Kspace_modify mesh parameter must be all zero or all positive + +Valid kspace mesh parameters are >0. The code will try to auto-detect +suitable values when all three mesh sizes are set to zero (the default). + +E: Kspace_modify mesh/disp parameter must be all zero or all positive + +Valid kspace mesh/disp parameters are >0. The code will try to auto-detect +suitable values when all three mesh sizes are set to zero [and] +the required accuracy via {force/disp/real} as well as +{force/disp/kspace} is set. + W: Kspace_modify slab param < 2.0 may cause unphysical behavior The kspace_modify slab parameter should be larger to insure periodic From e9b4ab7363411960a199669291a88fc2d7dbb87a Mon Sep 17 00:00:00 2001 From: mkanski Date: Wed, 5 Jun 2019 16:12:24 +0200 Subject: [PATCH 237/311] Fixed potential file parsing when NULL or only some elements are used. --- src/USER-MISC/pair_extep.cpp | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/USER-MISC/pair_extep.cpp b/src/USER-MISC/pair_extep.cpp index 132b857dde..0ca775d552 100644 --- a/src/USER-MISC/pair_extep.cpp +++ b/src/USER-MISC/pair_extep.cpp @@ -653,15 +653,15 @@ void PairExTeP::read_file(char *file) // if all 3 args are in element list, then parse this line // else skip to next line - for (ielement = 0; ielement < nelements; ielement++) + for (ielement = 0; ielement < atom->ntypes; ielement++) if (strcmp(words[0],elements[ielement]) == 0) break; - if (ielement == nelements) continue; - for (jelement = 0; jelement < nelements; jelement++) + if (ielement == atom->ntypes) continue; + for (jelement = 0; jelement < atom->ntypes; jelement++) if (strcmp(words[1],elements[jelement]) == 0) break; - if (jelement == nelements) continue; - for (kelement = 0; kelement < nelements; kelement++) + if (jelement == atom->ntypes) continue; + for (kelement = 0; kelement < atom->ntypes; kelement++) if (strcmp(words[2],elements[kelement]) == 0) break; - if (kelement == nelements) continue; + if (kelement == atom->ntypes) continue; // load up parameter settings and error check their values @@ -705,7 +705,7 @@ void PairExTeP::read_file(char *file) error->all(FLERR,"Illegal ExTeP parameter"); nparams++; - if (nparams >= pow(atom->ntypes,3)) break; + if (nparams >= pow(nelements,3)) break; } // deallocate words array @@ -746,6 +746,9 @@ void PairExTeP::read_file(char *file) nwords = atom->count_words(line); if (nwords == 0) continue; + //skip a line if it is an unused single entry + if (nwords == 17) continue; + if (nwords != params_per_line) error->all(FLERR,"Incorrect format in ExTeP potential file"); @@ -761,12 +764,12 @@ void PairExTeP::read_file(char *file) // these lines set ielement and jelement to the // integers matching the strings from the input - for (ielement = 0; ielement < nelements; ielement++) + for (ielement = 0; ielement < atom->ntypes; ielement++) if (strcmp(words[0],elements[ielement]) == 0) break; - if (ielement == nelements) continue; - for (jelement = 0; jelement < nelements; jelement++) + if (ielement == atom->ntypes) continue; + for (jelement = 0; jelement < atom->ntypes; jelement++) if (strcmp(words[1],elements[jelement]) == 0) break; - if (jelement == nelements) continue; + if (jelement == atom->ntypes) continue; int Ni = atoi(words[2]); int Nj = atoi(words[3]); From 2ebc40deb3cb23a061197c1019f83d12ba5420d6 Mon Sep 17 00:00:00 2001 From: Christoph Junghans Date: Wed, 5 Jun 2019 11:13:48 -0600 Subject: [PATCH 238/311] cmake: check for immintrin.h --- cmake/CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 58f3ccad23..911b6f0f15 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1134,6 +1134,12 @@ if(PKG_OPT) endif() if(PKG_USER-INTEL) + include(CheckIncludeFile) + check_include_file(immintrin.h FOUND_IMMINTRIN) + if(NOT FOUND_IMMINTRIN) + message(FATAL_ERROR "immintrin.h header not found, Intel package won't work without it") + endif() + add_definitions(-DLMP_USER_INTEL) set(INTEL_ARCH "cpu" CACHE STRING "Architectures used by USER-INTEL (cpu or knl)") From 34dca6dc7949750692b67b85b2728c9eeaad0eb9 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 5 Jun 2019 14:32:02 -0400 Subject: [PATCH 239/311] advance warning message about collecting styles and packages info to an earlier slot in the process --- src/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile b/src/Makefile index 2e6ad9a89f..d611adc404 100644 --- a/src/Makefile +++ b/src/Makefile @@ -154,7 +154,6 @@ help: lmpinstalledpkgs.h: $(SRC) $(INC) - @echo 'Gathering installed package information (may take a little while)' @echo '#ifndef LMP_INSTALLED_PKGS_H' > ${TMPNAME}.lmpinstalled @echo '#define LMP_INSTALLED_PKGS_H' >> ${TMPNAME}.lmpinstalled @echo 'const char * LAMMPS_NS::LAMMPS::installed_packages[] = {' >> ${TMPNAME}.lmpinstalled @@ -204,6 +203,7 @@ gitversion: @test -f MAKE/Makefile.$@ -o -f MAKE/OPTIONS/Makefile.$@ -o \ -f MAKE/MACHINES/Makefile.$@ -o -f MAKE/MINE/Makefile.$@ @if [ ! -d $(objdir) ]; then mkdir $(objdir); fi + @echo 'Gathering installed package information (may take a little while)' @$(SHELL) Make.sh style @$(SHELL) Make.sh packages @$(MAKE) $(MFLAGS) lmpinstalledpkgs.h gitversion From e549f911f7b0aab04c8fb97199dd2890148e68bb Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 5 Jun 2019 14:36:08 -0400 Subject: [PATCH 240/311] turn off variable tracking through turning off optimization for GCC 4.4 and later This will avoid a difficult to interpret warning and in addition speed up compilation of this one file by avoiding to try to optimize something, that needs no optimization. --- src/lammps.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/lammps.cpp b/src/lammps.cpp index 24012c0f18..0234e7faef 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -53,6 +53,12 @@ #include "memory.h" #include "error.h" +#if defined(__GNUC__) && !defined(__clang__) && !defined(__INTEL_COMPILER) +#if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) +#pragma GCC optimize ("O0") +#endif +#endif + #include "lmpinstalledpkgs.h" #include "lmpgitversion.h" From 40a2f275c2aec8ff3585952f51e6b356fb1bc81c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 5 Jun 2019 17:11:53 -0400 Subject: [PATCH 241/311] Fix a few more issues resulting from "nelements != atom->types" this also detects in a more safely fashion, whether there is data in the second part of the input file, that is still formatted for he first part. --- src/USER-MISC/pair_extep.cpp | 46 +++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/src/USER-MISC/pair_extep.cpp b/src/USER-MISC/pair_extep.cpp index 0ca775d552..bd5da71f4a 100644 --- a/src/USER-MISC/pair_extep.cpp +++ b/src/USER-MISC/pair_extep.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include "pair_extep.h" #include "atom.h" #include "neighbor.h" @@ -653,15 +654,15 @@ void PairExTeP::read_file(char *file) // if all 3 args are in element list, then parse this line // else skip to next line - for (ielement = 0; ielement < atom->ntypes; ielement++) + for (ielement = 0; ielement < nelements; ielement++) if (strcmp(words[0],elements[ielement]) == 0) break; - if (ielement == atom->ntypes) continue; - for (jelement = 0; jelement < atom->ntypes; jelement++) + if (ielement == nelements) continue; + for (jelement = 0; jelement < nelements; jelement++) if (strcmp(words[1],elements[jelement]) == 0) break; - if (jelement == atom->ntypes) continue; - for (kelement = 0; kelement < atom->ntypes; kelement++) + if (jelement == nelements) continue; + for (kelement = 0; kelement < nelements; kelement++) if (strcmp(words[2],elements[kelement]) == 0) break; - if (kelement == atom->ntypes) continue; + if (kelement == nelements) continue; // load up parameter settings and error check their values @@ -746,17 +747,24 @@ void PairExTeP::read_file(char *file) nwords = atom->count_words(line); if (nwords == 0) continue; - //skip a line if it is an unused single entry - if (nwords == 17) continue; - - if (nwords != params_per_line) - error->all(FLERR,"Incorrect format in ExTeP potential file"); - // words = ptrs to all words in line nwords = 0; words[nwords++] = strtok(line," \t\n\r\f"); - while ((words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; + while ((nwords < params_per_line) + && (words[nwords++] = strtok(NULL," \t\n\r\f"))) continue; + + // skip line if it is a leftover from the previous section, + // which can be identified by having 3 elements (instead of 2) + // as first words. + + if (isupper(words[0][0]) && isupper(words[1][0]) && isupper(words[2][0])) + continue; + + // need to have two elements followed by a number in each line + if (!(isupper(words[0][0]) && isupper(words[1][0]) + && !isupper(words[2][0]))) + error->all(FLERR,"Incorrect format in ExTeP potential file"); // ielement,jelement = 1st args // if all 3 args are in element list, then parse this line @@ -764,12 +772,12 @@ void PairExTeP::read_file(char *file) // these lines set ielement and jelement to the // integers matching the strings from the input - for (ielement = 0; ielement < atom->ntypes; ielement++) + for (ielement = 0; ielement < nelements; ielement++) if (strcmp(words[0],elements[ielement]) == 0) break; - if (ielement == atom->ntypes) continue; - for (jelement = 0; jelement < atom->ntypes; jelement++) + if (ielement == nelements) continue; + for (jelement = 0; jelement < nelements; jelement++) if (strcmp(words[1],elements[jelement]) == 0) break; - if (jelement == atom->ntypes) continue; + if (jelement == nelements) continue; int Ni = atoi(words[2]); int Nj = atoi(words[3]); @@ -1077,8 +1085,8 @@ void PairExTeP::costheta_d(double *rij_hat, double rij, // initialize spline for F_corr (based on PairLCBOP::F_conj) void PairExTeP::spline_init() { - for ( int iel=0; ielntypes; iel++) { - for ( int jel=0; jelntypes; jel++) { + for ( int iel=0; iel Date: Thu, 6 Jun 2019 09:59:41 -0600 Subject: [PATCH 242/311] Code reformat --- src/KOKKOS/fix_qeq_reax_kokkos.cpp | 348 ++++++++++++++++------------- src/KOKKOS/fix_qeq_reax_kokkos.h | 55 +++-- 2 files changed, 219 insertions(+), 184 deletions(-) diff --git a/src/KOKKOS/fix_qeq_reax_kokkos.cpp b/src/KOKKOS/fix_qeq_reax_kokkos.cpp index fb61898f6d..c7c109d8dd 100644 --- a/src/KOKKOS/fix_qeq_reax_kokkos.cpp +++ b/src/KOKKOS/fix_qeq_reax_kokkos.cpp @@ -231,24 +231,22 @@ void FixQEqReaxKokkos::pre_force(int vflag) int vector_length = 32; int atoms_per_team = 4; - int num_teams = inum/atoms_per_team + (inum%atoms_per_team?1:0); + int num_teams = inum / atoms_per_team + (inum % atoms_per_team ? 1 : 0); - Kokkos::TeamPolicy policy(num_teams, atoms_per_team, vector_length); - if (neighflag == FULL){ - FixQEqReaxKokkosComputeHFunctor computeH_functor(this, - atoms_per_team, - vector_length); - Kokkos::parallel_for( policy, computeH_functor ); - }else if (neighflag == HALF){ - FixQEqReaxKokkosComputeHFunctor computeH_functor(this, - atoms_per_team, - vector_length); - Kokkos::parallel_for( policy, computeH_functor ); - }else { - FixQEqReaxKokkosComputeHFunctor computeH_functor(this, - atoms_per_team, - vector_length); - Kokkos::parallel_for( policy, computeH_functor ); + Kokkos::TeamPolicy policy(num_teams, atoms_per_team, + vector_length); + if (neighflag == FULL) { + FixQEqReaxKokkosComputeHFunctor computeH_functor( + this, atoms_per_team, vector_length); + Kokkos::parallel_for(policy, computeH_functor); + } else if (neighflag == HALF) { + FixQEqReaxKokkosComputeHFunctor computeH_functor( + this, atoms_per_team, vector_length); + Kokkos::parallel_for(policy, computeH_functor); + } else { + FixQEqReaxKokkosComputeHFunctor computeH_functor( + this, atoms_per_team, vector_length); + Kokkos::parallel_for(policy, computeH_functor); } // init_matvec @@ -403,180 +401,208 @@ void FixQEqReaxKokkos::zero_item(int ii) const // d_numnbrs - d_numnbrs[i] contains the # of non-zero entries in the i-th row of H (which also represents the # of neighbor atoms with electrostatic interaction coefficients with atom-i) // d_firstnbr- d_firstnbr[i] contains the beginning index from where the H matrix entries corresponding to row-i is stored in d_val // d_jlist - contains the column index corresponding to each entry in d_val -template -template -void -FixQEqReaxKokkos::compute_h_team(const typename Kokkos::TeamPolicy ::member_type &team, - int atoms_per_team, - int vector_length) const{ - // scratch space setup - Kokkos::View< int*, Kokkos::ScratchMemorySpace, Kokkos::MemoryTraits > s_ilist(team.team_shmem(), atoms_per_team); - Kokkos::View< int*, Kokkos::ScratchMemorySpace, Kokkos::MemoryTraits > s_numnbrs(team.team_shmem(), atoms_per_team); - Kokkos::View< int*, Kokkos::ScratchMemorySpace, Kokkos::MemoryTraits > s_firstnbr(team.team_shmem(), atoms_per_team); +template +template +void FixQEqReaxKokkos::compute_h_team( + const typename Kokkos::TeamPolicy::member_type &team, + int atoms_per_team, int vector_length) const { - Kokkos::View< int**, Kokkos::ScratchMemorySpace, Kokkos::MemoryTraits > s_jtype(team.team_shmem(), atoms_per_team, vector_length); - Kokkos::View< int**, Kokkos::ScratchMemorySpace, Kokkos::MemoryTraits > s_jlist(team.team_shmem(), atoms_per_team, vector_length); - Kokkos::View< F_FLOAT**, Kokkos::ScratchMemorySpace, Kokkos::MemoryTraits > s_r(team.team_shmem(), atoms_per_team, vector_length); + // scratch space setup + Kokkos::View, + Kokkos::MemoryTraits> + s_ilist(team.team_shmem(), atoms_per_team); + Kokkos::View, + Kokkos::MemoryTraits> + s_numnbrs(team.team_shmem(), atoms_per_team); + Kokkos::View, + Kokkos::MemoryTraits> + s_firstnbr(team.team_shmem(), atoms_per_team); - // team of threads work on atoms with index in [firstatom, lastatom) - int firstatom = team.league_rank() * atoms_per_team; - int lastatom = ( firstatom + atoms_per_team < inum ) ? ( firstatom + atoms_per_team ) : inum; + Kokkos::View, + Kokkos::MemoryTraits> + s_jtype(team.team_shmem(), atoms_per_team, vector_length); + Kokkos::View, + Kokkos::MemoryTraits> + s_jlist(team.team_shmem(), atoms_per_team, vector_length); + Kokkos::View, + Kokkos::MemoryTraits> + s_r(team.team_shmem(), atoms_per_team, vector_length); - // kokkos-thread-0 is used to load info from global memory into scratch space - if(team.team_rank() == 0){ + // team of threads work on atoms with index in [firstatom, lastatom) + int firstatom = team.league_rank() * atoms_per_team; + int lastatom = + (firstatom + atoms_per_team < inum) ? (firstatom + atoms_per_team) : inum; - // copy atom indices from d_ilist[firstatom:lastatom] to scratch space s_ilist[0:atoms_per_team] - // copy # of neighbor atoms for all the atoms with indices in d_ilist[firstatom:lastatom] from d_numneigh to scratch space s_numneigh[0:atoms_per_team] - // calculate total number of neighbor atoms for all atoms assigned to the current team of threads (Note - Total # of neighbor atoms here provides the - // upper bound space requirement to store the H matrix values corresponding to the atoms with indices in d_ilist[firstatom:lastatom]) + // kokkos-thread-0 is used to load info from global memory into scratch space + if (team.team_rank() == 0) { - Kokkos::parallel_scan( Kokkos::ThreadVectorRange(team, atoms_per_team), [&](const int &idx, int &totalnbrs, bool final) { - int ii = firstatom + idx; + // copy atom indices from d_ilist[firstatom:lastatom] to scratch space s_ilist[0:atoms_per_team] + // copy # of neighbor atoms for all the atoms with indices in d_ilist[firstatom:lastatom] from d_numneigh to scratch space s_numneigh[0:atoms_per_team] + // calculate total number of neighbor atoms for all atoms assigned to the current team of threads (Note - Total # of neighbor atoms here provides the + // upper bound space requirement to store the H matrix values corresponding to the atoms with indices in d_ilist[firstatom:lastatom]) - if(ii < inum){ - const int i = d_ilist[ii]; - int jnum = d_numneigh[i]; + Kokkos::parallel_scan(Kokkos::ThreadVectorRange(team, atoms_per_team), + [&](const int &idx, int &totalnbrs, bool final) { + int ii = firstatom + idx; - if(final){ - s_ilist[idx] = i; - s_numnbrs[idx] = jnum; - s_firstnbr[idx] = totalnbrs; - } - totalnbrs += jnum; - }else{ - s_numnbrs[idx] = 0; - } - }); - } + if (ii < inum) { + const int i = d_ilist[ii]; + int jnum = d_numneigh[i]; + if (final) { + s_ilist[idx] = i; + s_numnbrs[idx] = jnum; + s_firstnbr[idx] = totalnbrs; + } + totalnbrs += jnum; + } else { + s_numnbrs[idx] = 0; + } + }); + } - // barrier ensures that the data moved to scratch space is visible to all the threads of the corresponding team - team.team_barrier(); + // barrier ensures that the data moved to scratch space is visible to all the + // threads of the corresponding team + team.team_barrier(); - // calculate the global memory offset from where the H matrix values to be calculated by the current team will be stored in d_val - int team_firstnbr_idx = 0; - Kokkos::single (Kokkos::PerTeam (team), [=] (int &val) { - int totalnbrs = s_firstnbr[lastatom - firstatom - 1] + s_numnbrs[lastatom - firstatom - 1]; - val = Kokkos::atomic_fetch_add(&d_mfill_offset(), totalnbrs); - }, team_firstnbr_idx); + // calculate the global memory offset from where the H matrix values to be + // calculated by the current team will be stored in d_val + int team_firstnbr_idx = 0; + Kokkos::single(Kokkos::PerTeam(team), + [=](int &val) { + int totalnbrs = s_firstnbr[lastatom - firstatom - 1] + + s_numnbrs[lastatom - firstatom - 1]; + val = Kokkos::atomic_fetch_add(&d_mfill_offset(), totalnbrs); + }, + team_firstnbr_idx); + // map the H matrix computation of each atom to kokkos-thread (one atom per + // kokkos-thread) neighbor computation for each atom is assigned to vector + // lanes of the corresponding thread + Kokkos::parallel_for( + Kokkos::TeamThreadRange(team, atoms_per_team), [&](const int &idx) { + int ii = firstatom + idx; - // map the H matrix computation of each atom to kokkos-thread (one atom per kokkos-thread) - // neighbor computation for each atom is assigned to vector lanes of the corresponding thread - Kokkos::parallel_for( Kokkos::TeamThreadRange(team, atoms_per_team), [&] (const int &idx) { - int ii = firstatom + idx; + if (ii < inum) { + const int i = s_ilist[idx]; - if(ii < inum){ - const int i = s_ilist[idx]; + if (mask[i] & groupbit) { + const X_FLOAT xtmp = x(i, 0); + const X_FLOAT ytmp = x(i, 1); + const X_FLOAT ztmp = x(i, 2); + const int itype = type(i); + const tagint itag = tag(i); + const int jnum = s_numnbrs[idx]; - if (mask[i] & groupbit) { - const X_FLOAT xtmp = x(i,0); - const X_FLOAT ytmp = x(i,1); - const X_FLOAT ztmp = x(i,2); - const int itype = type(i); - const tagint itag = tag(i); - const int jnum = s_numnbrs[idx]; + // calculate the write-offset for atom-i's first neighbor + int atomi_firstnbr_idx = team_firstnbr_idx + s_firstnbr[idx]; + Kokkos::single(Kokkos::PerThread(team), + [&]() { d_firstnbr[i] = atomi_firstnbr_idx; }); - // calculate the write-offset for atom-i's first neighbor - int atomi_firstnbr_idx = team_firstnbr_idx + s_firstnbr[idx]; - Kokkos::single (Kokkos::PerThread (team), [&] () { - d_firstnbr[i] = atomi_firstnbr_idx; - }); + // current # of neighbor atoms with non-zero electrostatic + // interaction coefficients with atom-i which represents the # of + // non-zero elements in row-i of H matrix + int atomi_nbrs_inH = 0; + // calculate H matrix values corresponding to atom-i where neighbors + // are processed in batches and the batch size is vector_length + for (int jj_start = 0; jj_start < jnum; jj_start += vector_length) { - // current # of neighbor atoms with non-zero electrostatic interaction coefficients with atom-i - // which represents the # of non-zero elements in row-i of H matrix - int atomi_nbrs_inH = 0; + int atomi_nbr_writeIdx = atomi_firstnbr_idx + atomi_nbrs_inH; - // calculate H matrix values corresponding to atom-i where neighbors are processed in batches and the batch size is vector_length - for(int jj_start = 0; jj_start < jnum; jj_start += vector_length){ + // count the # of neighbor atoms with non-zero electrostatic + // interaction coefficients with atom-i in the current batch + int atomi_nbrs_curbatch = 0; - int atomi_nbr_writeIdx = atomi_firstnbr_idx + atomi_nbrs_inH; + // compute rsq, jtype, j and store in scratch space which is + // reused later + Kokkos::parallel_reduce( + Kokkos::ThreadVectorRange(team, vector_length), + [&](const int &idx, int &m_fill) { + const int jj = jj_start + idx; - // count the # of neighbor atoms with non-zero electrostatic interaction coefficients with atom-i in the current batch - int atomi_nbrs_curbatch = 0; + // initialize: -1 represents no interaction with atom-j + // where j = d_neighbors(i,jj) + s_jlist(team.team_rank(), idx) = -1; - // compute rsq, jtype, j and store in scratch space which is reused later - Kokkos::parallel_reduce( Kokkos::ThreadVectorRange(team, vector_length), [&](const int &idx, int &m_fill) { - const int jj = jj_start + idx; + if (jj < jnum) { + int j = d_neighbors(i, jj); + j &= NEIGHMASK; + const int jtype = type(j); - // initialize: -1 represents no interaction with atom-j where j = d_neighbors(i,jj) - s_jlist(team.team_rank(), idx) = -1; + const X_FLOAT delx = x(j, 0) - xtmp; + const X_FLOAT dely = x(j, 1) - ytmp; + const X_FLOAT delz = x(j, 2) - ztmp; - if(jj < jnum){ - int j = d_neighbors(i,jj); - j &= NEIGHMASK; - const int jtype = type(j); + // valid nbr interaction + bool valid = true; + if (NEIGHFLAG != FULL) { + // skip half of the interactions + const tagint jtag = tag(j); + if (j >= nlocal) { + if (itag > jtag) { + if ((itag + jtag) % 2 == 0) + valid = false; + } else if (itag < jtag) { + if ((itag + jtag) % 2 == 1) + valid = false; + } else { + if (x(j, 2) < ztmp) + valid = false; + if (x(j, 2) == ztmp && x(j, 1) < ytmp) + valid = false; + if (x(j, 2) == ztmp && x(j, 1) == ytmp && + x(j, 0) < xtmp) + valid = false; + } + } + } - const X_FLOAT delx = x(j,0) - xtmp; - const X_FLOAT dely = x(j,1) - ytmp; - const X_FLOAT delz = x(j,2) - ztmp; + const F_FLOAT rsq = + delx * delx + dely * dely + delz * delz; + if (rsq > cutsq) + valid = false; - // valid nbr interaction - bool valid = true; - if (NEIGHFLAG != FULL) { - // skip half of the interactions - const tagint jtag = tag(j); - if (j >= nlocal) { - if (itag > jtag) { - if ((itag+jtag) % 2 == 0) - valid = false; - } else if (itag < jtag) { - if ((itag+jtag) % 2 == 1) - valid = false; - } else { - if (x(j,2) < ztmp) - valid = false; - if (x(j,2) == ztmp && x(j,1) < ytmp) - valid = false; - if (x(j,2) == ztmp && x(j,1) == ytmp && x(j,0) < xtmp) - valid = false; - } - } - } + if (valid) { + s_jlist(team.team_rank(), idx) = j; + s_jtype(team.team_rank(), idx) = jtype; + s_r(team.team_rank(), idx) = sqrt(rsq); + m_fill++; + } + } + }, + atomi_nbrs_curbatch); - const F_FLOAT rsq = delx*delx + dely*dely + delz*delz; - if (rsq > cutsq) - valid = false; + // write non-zero entries of H to global memory + Kokkos::parallel_scan( + Kokkos::ThreadVectorRange(team, vector_length), + [&](const int &idx, int &m_fill, bool final) { + int j = s_jlist(team.team_rank(), idx); + if (final) { + if (j != -1) { + const int jtype = s_jtype(team.team_rank(), idx); + const F_FLOAT r = s_r(team.team_rank(), idx); + const F_FLOAT shldij = d_shield(itype, jtype); - if(valid){ - s_jlist(team.team_rank(), idx) = j; - s_jtype(team.team_rank(), idx) = jtype; - s_r(team.team_rank(), idx) = sqrt(rsq); - m_fill++; - } - } - }, atomi_nbrs_curbatch); + d_jlist[atomi_nbr_writeIdx + m_fill] = j; + d_val[atomi_nbr_writeIdx + m_fill] = + calculate_H_k(r, shldij); + } + } - // write non-zero entries of H to global memory - Kokkos::parallel_scan( Kokkos::ThreadVectorRange(team, vector_length), [&](const int &idx, int &m_fill, bool final) { - int j = s_jlist(team.team_rank(), idx); - if(final){ - if(j != -1){ - const int jtype = s_jtype(team.team_rank(), idx); - const F_FLOAT r = s_r(team.team_rank(), idx); - const F_FLOAT shldij = d_shield(itype,jtype); - - d_jlist[atomi_nbr_writeIdx + m_fill] = j; - d_val[atomi_nbr_writeIdx + m_fill] = calculate_H_k(r, shldij); - } - } - - if(j !=-1){ - m_fill++; - } - }); - atomi_nbrs_inH += atomi_nbrs_curbatch; - } - - Kokkos::single (Kokkos::PerThread (team), [&] () { - d_numnbrs[i] = atomi_nbrs_inH; - }); - } - } - }); + if (j != -1) { + m_fill++; + } + }); + atomi_nbrs_inH += atomi_nbrs_curbatch; + } + Kokkos::single(Kokkos::PerThread(team), + [&]() { d_numnbrs[i] = atomi_nbrs_inH; }); + } + } + }); } /* ---------------------------------------------------------------------- */ diff --git a/src/KOKKOS/fix_qeq_reax_kokkos.h b/src/KOKKOS/fix_qeq_reax_kokkos.h index 10b007bb4f..d17ed350a9 100644 --- a/src/KOKKOS/fix_qeq_reax_kokkos.h +++ b/src/KOKKOS/fix_qeq_reax_kokkos.h @@ -259,32 +259,41 @@ struct FixQEqReaxKokkosMatVecFunctor { }; template -struct FixQEqReaxKokkosComputeHFunctor { - int atoms_per_team, vector_length; - typedef Kokkos::ScratchMemorySpace scratch_space; - FixQEqReaxKokkos c; +struct FixQEqReaxKokkosComputeHFunctor { + int atoms_per_team, vector_length; + typedef Kokkos::ScratchMemorySpace scratch_space; + FixQEqReaxKokkos c; - FixQEqReaxKokkosComputeHFunctor(FixQEqReaxKokkos* c_ptr, - int _atoms_per_team, - int _vector_length): - c(*c_ptr), atoms_per_team(_atoms_per_team), vector_length(_vector_length) { - c.cleanup_copy(); - }; + FixQEqReaxKokkosComputeHFunctor(FixQEqReaxKokkos *c_ptr, + int _atoms_per_team, int _vector_length) + : c(*c_ptr), atoms_per_team(_atoms_per_team), + vector_length(_vector_length) { + c.cleanup_copy(); + }; - KOKKOS_INLINE_FUNCTION - void operator()(const typename Kokkos::TeamPolicy ::member_type &team) const { - c.template compute_h_team (team, atoms_per_team, vector_length); - } + KOKKOS_INLINE_FUNCTION + void operator()( + const typename Kokkos::TeamPolicy::member_type &team) const { + c.template compute_h_team(team, atoms_per_team, vector_length); + } - size_t team_shmem_size( int team_size ) const { - size_t shmem_size = Kokkos::View::shmem_size(atoms_per_team) + // s_ilist - Kokkos::View::shmem_size(atoms_per_team) + // s_numnbrs - Kokkos::View::shmem_size(atoms_per_team) + // s_firstnbr - Kokkos::View::shmem_size(atoms_per_team, vector_length) + //s_jtype - Kokkos::View::shmem_size(atoms_per_team, vector_length) + //s_j - Kokkos::View::shmem_size(atoms_per_team, vector_length) ; //s_r - return shmem_size; - } + size_t team_shmem_size(int team_size) const { + size_t shmem_size = + Kokkos::View::shmem_size( + atoms_per_team) + // s_ilist + Kokkos::View::shmem_size( + atoms_per_team) + // s_numnbrs + Kokkos::View::shmem_size( + atoms_per_team) + // s_firstnbr + Kokkos::View:: + shmem_size(atoms_per_team, vector_length) + // s_jtype + Kokkos::View:: + shmem_size(atoms_per_team, vector_length) + // s_j + Kokkos::View::shmem_size(atoms_per_team, + vector_length); // s_r + return shmem_size; + } }; template From e2391edce6fb2e6f79eef4466b2511bf3e9f2bab Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 6 Jun 2019 14:44:28 -0400 Subject: [PATCH 243/311] turn off only variable tracking and make people wait again --- src/lammps.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lammps.cpp b/src/lammps.cpp index 0234e7faef..c119e429e0 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -55,7 +55,7 @@ #if defined(__GNUC__) && !defined(__clang__) && !defined(__INTEL_COMPILER) #if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) -#pragma GCC optimize ("O0") +#pragma GCC optimize ("no-var-tracking") #endif #endif @@ -114,7 +114,7 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) : initclock = MPI_Wtime(); init_pkg_lists(); - + // check if -mpi is first arg // if so, then 2 apps were launched with one mpirun command // this means passed communicator (e.g. MPI_COMM_WORLD) is bigger than LAMMPS From fde7e2de3cf4399de5189f7ca45b2ec8d6da55d6 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 6 Jun 2019 15:08:26 -0400 Subject: [PATCH 244/311] switch to use alternate flag --- src/lammps.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lammps.cpp b/src/lammps.cpp index c119e429e0..780327c0d9 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -55,7 +55,7 @@ #if defined(__GNUC__) && !defined(__clang__) && !defined(__INTEL_COMPILER) #if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) -#pragma GCC optimize ("no-var-tracking") +#pragma GCC optimize ("no-var-tracking-assignments") #endif #endif From 56e3b1d1f4db4512f2edd8a3f971b5dc53b14bad Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 6 Jun 2019 20:22:08 -0400 Subject: [PATCH 245/311] remove dead code --- src/USER-FEP/pair_lj_class2_coul_long_soft.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/USER-FEP/pair_lj_class2_coul_long_soft.cpp b/src/USER-FEP/pair_lj_class2_coul_long_soft.cpp index 6410f83fa1..275486d1e2 100644 --- a/src/USER-FEP/pair_lj_class2_coul_long_soft.cpp +++ b/src/USER-FEP/pair_lj_class2_coul_long_soft.cpp @@ -74,7 +74,6 @@ void PairLJClass2CoulLongSoft::compute(int eflag, int vflag) { int i,j,ii,jj,inum,jnum,itype,jtype; double qtmp,xtmp,ytmp,ztmp,delx,dely,delz,evdwl,ecoul,fpair; - double fraction; double rsq,r,forcecoul,forcelj; double grij,expm2,prefactor,t,erfc; double factor_coul,factor_lj; @@ -490,7 +489,7 @@ double PairLJClass2CoulLongSoft::single(int i, int j, int itype, int jtype, double &fforce) { double denc,r,denlj,r4sig6,grij,expm2,t,erfc,prefactor; - double fraction,forcecoul,forcelj,phicoul,philj; + double forcecoul,forcelj,phicoul,philj; if (rsq < cut_coulsq) { r = sqrt(rsq); From b53df3dd63bf98e7e0022d9bdfac82c14fbc8306 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 6 Jun 2019 20:37:17 -0400 Subject: [PATCH 246/311] disable optimization on functions building factories for many entries this will speed up compilation and also avoid spurious warnings with gcc 4.4 and later --- src/force.cpp | 4 ++++ src/force.h | 1 + src/lammps.cpp | 12 +++--------- src/lmptype.h | 20 ++++++++++++++++++++ src/modify.cpp | 5 +++++ src/modify.h | 1 + 6 files changed, 34 insertions(+), 9 deletions(-) diff --git a/src/force.cpp b/src/force.cpp index 2691cb3fd8..ed27df1215 100644 --- a/src/force.cpp +++ b/src/force.cpp @@ -80,7 +80,11 @@ Force::Force(LAMMPS *lmp) : Pointers(lmp) strcpy(kspace_style,str); pair_restart = NULL; + create_factories(); +} +void _noopt Force::create_factories() +{ // fill pair map with pair styles listed in style_pair.h pair_map = new PairCreatorMap(); diff --git a/src/force.h b/src/force.h index 2b4298d049..227b9427c0 100644 --- a/src/force.h +++ b/src/force.h @@ -143,6 +143,7 @@ class Force : protected Pointers { bigint memory_usage(); private: + void create_factories(); template static Pair *pair_creator(LAMMPS *); template static Bond *bond_creator(LAMMPS *); template static Angle *angle_creator(LAMMPS *); diff --git a/src/lammps.cpp b/src/lammps.cpp index 780327c0d9..f8d04c9323 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -53,12 +53,6 @@ #include "memory.h" #include "error.h" -#if defined(__GNUC__) && !defined(__clang__) && !defined(__INTEL_COMPILER) -#if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) -#pragma GCC optimize ("no-var-tracking-assignments") -#endif -#endif - #include "lmpinstalledpkgs.h" #include "lmpgitversion.h" @@ -902,7 +896,7 @@ void LAMMPS::destroy() initialize lists of styles in packages ------------------------------------------------------------------------- */ -void LAMMPS::init_pkg_lists() +void _noopt LAMMPS::init_pkg_lists() { pkg_lists = new package_styles_lists; #define PACKAGE "UNKNOWN" @@ -1002,7 +996,7 @@ void LAMMPS::init_pkg_lists() #include "packages_region.h" #undef RegionStyle #undef REGION_CLASS -} +} bool LAMMPS::is_installed_pkg(const char *pkg) { @@ -1045,7 +1039,7 @@ const char *LAMMPS::match_style(const char *style, const char *name) help message for command line options and styles present in executable ------------------------------------------------------------------------- */ -void LAMMPS::help() +void _noopt LAMMPS::help() { FILE *fp = screen; const char *pager = NULL; diff --git a/src/lmptype.h b/src/lmptype.h index 4743a38837..20d29880ed 100644 --- a/src/lmptype.h +++ b/src/lmptype.h @@ -179,6 +179,9 @@ typedef int bigint; #ifdef _noalias #undef _noalias #endif +#ifdef _noopt +#undef _noopt +#endif // define stack variable alignment @@ -200,6 +203,23 @@ typedef int bigint; #define _noalias #endif +// declaration to turn off optimization for specific functions +// and avoid compiler warnings about variable tracking + +#if defined(__clang__) +# define _noopt __attribute__((optnone)) +#elif defined(__INTEL_COMPILER) +# define _noopt +#elif defined(__GNUC__) +# if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) +# define _noopt __attribute__((optimize("O0","no-var-tracking-assignments"))) +# else +# define _noopt __attribute__((optimize("O0"))) +# endif +#else +# define _noopt +#endif + // settings to enable LAMMPS to build under Windows #ifdef _WIN32 diff --git a/src/modify.cpp b/src/modify.cpp index 69cdb424b2..3f034bf034 100644 --- a/src/modify.cpp +++ b/src/modify.cpp @@ -81,6 +81,11 @@ Modify::Modify(LAMMPS *lmp) : Pointers(lmp) ncompute = maxcompute = 0; compute = NULL; + create_factories(); +} + +void _noopt Modify::create_factories() +{ // fill map with fixes listed in style_fix.h fix_map = new FixCreatorMap(); diff --git a/src/modify.h b/src/modify.h index 537ff81543..5ff81855fe 100644 --- a/src/modify.h +++ b/src/modify.h @@ -172,6 +172,7 @@ class Modify : protected Pointers { FixCreatorMap *fix_map; protected: + void create_factories(); template static Compute *compute_creator(LAMMPS *, int, char **); template static Fix *fix_creator(LAMMPS *, int, char **); }; From 61e9dc4c8d7c590c0498d49c2736ed1a845bb647 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 7 Jun 2019 07:14:57 -0400 Subject: [PATCH 247/311] more accurate checking for styles using utils::strmatch() instead of strcmp() or strncmp() --- src/USER-PLUMED/fix_plumed.cpp | 27 ++++++++++++++------------- src/USER-QTB/fix_qbmsst.cpp | 11 ++++++----- src/fix_adapt.cpp | 7 +++---- src/fix_nve_limit.cpp | 5 +++-- src/neighbor.cpp | 5 +++-- src/pair_coul_streitz.cpp | 6 ------ src/velocity.cpp | 2 +- 7 files changed, 30 insertions(+), 33 deletions(-) diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index 635d08c573..9921747b22 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -33,6 +33,7 @@ #include "compute.h" #include "modify.h" #include "pair.h" +#include "utils.h" #include "plumed/wrapper/Plumed.h" @@ -250,15 +251,15 @@ FixPlumed::FixPlumed(LAMMPS *lmp, int narg, char **arg) : // Avoid conflict with fixes that define internal pressure computes. // See comment in the setup method - if ((strncmp(check_style,"nph",3) == 0) || - (strncmp(check_style,"npt",3) == 0) || - (strncmp(check_style,"rigid/nph",9) == 0) || - (strncmp(check_style,"rigid/npt",9) == 0) || - (strncmp(check_style,"msst",4) == 0) || - (strncmp(check_style,"nphug",5) == 0) || - (strncmp(check_style,"ipi",3) == 0) || - (strncmp(check_style,"press/berendsen",15) == 0) || - (strncmp(check_style,"qbmsst",6) == 0)) + if (utils::strmatch(check_style,"^nph") || + utils::strmatch(check_style,"^npt") || + utils::strmatch(check_style,"^rigid/nph") || + utils::strmatch(check_style,"^rigid/npt") || + utils::strmatch(check_style,"^msst") || + utils::strmatch(check_style,"^nphug") || + utils::strmatch(check_style,"^ipi") || + utils::strmatch(check_style,"^press/berendsen") || + utils::strmatch(check_style,"^qbmsst")) error->all(FLERR,"Fix plumed must be defined before any other fixes, " "that compute pressure internally"); } @@ -289,7 +290,7 @@ int FixPlumed::setmask() void FixPlumed::init() { - if (strcmp(update->integrate_style,"respa") == 0) + if (utils::strmatch(update->integrate_style,"^respa")) nlevels_respa = ((Respa *) update->integrate)->nlevels; // This avoids nan pressure if compute_pressure is called @@ -309,12 +310,12 @@ void FixPlumed::setup(int vflag) // has to be executed first. This creates a race condition with the // setup method of fix_nh. This is why in the constructor I check if // nh fixes have already been called. - if (strcmp(update->integrate_style,"verlet") == 0) - post_force(vflag); - else { + if (utils::strmatch(update->integrate_style,"^respa")) { ((Respa *) update->integrate)->copy_flevel_f(nlevels_respa-1); post_force_respa(vflag,nlevels_respa-1,0); ((Respa *) update->integrate)->copy_f_flevel(nlevels_respa-1); + } else { + post_force(vflag); } } diff --git a/src/USER-QTB/fix_qbmsst.cpp b/src/USER-QTB/fix_qbmsst.cpp index e8a4f85eaa..b9b07664d2 100644 --- a/src/USER-QTB/fix_qbmsst.cpp +++ b/src/USER-QTB/fix_qbmsst.cpp @@ -41,6 +41,7 @@ #include "group.h" #include "kspace.h" #include "thermo.h" +#include "utils.h" using namespace LAMMPS_NS; using namespace FixConst; @@ -410,14 +411,14 @@ void FixQBMSST::init() // rfix[] = indices to each fix rigid nrigid = 0; for (int i = 0; i < modify->nfix; i++) - if (strcmp(modify->fix[i]->style,"rigid") == 0 || - strcmp(modify->fix[i]->style,"poems") == 0) nrigid++; - if (nrigid) { + if (utils::strmatch(modify->fix[i]->style,"^rigid") || + (strcmp(modify->fix[i]->style,"poems") == 0)) nrigid++; + if (nrigid > 0) { rfix = new int[nrigid]; nrigid = 0; for (int i = 0; i < modify->nfix; i++) - if (strcmp(modify->fix[i]->style,"rigid") == 0 || - strcmp(modify->fix[i]->style,"poems") == 0) rfix[nrigid++] = i; + if (utils::strmatch(modify->fix[i]->style,"^rigid") || + (strcmp(modify->fix[i]->style,"poems") == 0)) rfix[nrigid++] = i; } } diff --git a/src/fix_adapt.cpp b/src/fix_adapt.cpp index 950bc24253..9a5b528747 100644 --- a/src/fix_adapt.cpp +++ b/src/fix_adapt.cpp @@ -31,6 +31,7 @@ #include "math_const.h" #include "memory.h" #include "error.h" +#include "utils.h" using namespace LAMMPS_NS; using namespace FixConst; @@ -375,8 +376,7 @@ void FixAdapt::init() // if pair hybrid, test that ilo,ihi,jlo,jhi are valid for sub-style - if (strcmp(force->pair_style,"hybrid") == 0 || - strcmp(force->pair_style,"hybrid/overlay") == 0) { + if (utils::strmatch(force->pair_style,"^hybrid")) { PairHybrid *pair = (PairHybrid *) force->pair; for (i = ad->ilo; i <= ad->ihi; i++) for (j = MAX(ad->jlo,i); j <= ad->jhi; j++) @@ -416,8 +416,7 @@ void FixAdapt::init() if (ad->bdim == 1) ad->vector = (double *) ptr; - if (strcmp(force->bond_style,"hybrid") == 0 || - strcmp(force->bond_style,"hybrid_overlay") == 0) + if (utils::strmatch(force->bond_style,"^hybrid")) error->all(FLERR,"Fix adapt does not support bond_style hybrid"); delete [] bstyle; diff --git a/src/fix_nve_limit.cpp b/src/fix_nve_limit.cpp index b4fb43e56f..68ff0665a1 100644 --- a/src/fix_nve_limit.cpp +++ b/src/fix_nve_limit.cpp @@ -23,6 +23,7 @@ #include "modify.h" #include "comm.h" #include "error.h" +#include "utils.h" using namespace LAMMPS_NS; using namespace FixConst; @@ -72,8 +73,8 @@ void FixNVELimit::init() // warn if using fix shake, which will lead to invalid constraint forces for (int i = 0; i < modify->nfix; i++) - if ((strcmp(modify->fix[i]->style,"shake") == 0) - || (strcmp(modify->fix[i]->style,"rattle") == 0)) { + if (utils::strmatch(modify->fix[i]->style,"^shake") + || utils::strmatch(modify->fix[i]->style,"^rattle")) { if (comm->me == 0) error->warning(FLERR,"Should not use fix nve/limit with fix shake or fix rattle"); } diff --git a/src/neighbor.cpp b/src/neighbor.cpp index 2dc65541e4..0382624198 100644 --- a/src/neighbor.cpp +++ b/src/neighbor.cpp @@ -46,6 +46,7 @@ #include "citeme.h" #include "memory.h" #include "error.h" +#include "utils.h" #include @@ -1282,8 +1283,8 @@ void Neighbor::init_topology() int bond_off = 0; int angle_off = 0; for (i = 0; i < modify->nfix; i++) - if ((strcmp(modify->fix[i]->style,"shake") == 0) - || (strcmp(modify->fix[i]->style,"rattle") == 0)) + if (utils::strmatch(modify->fix[i]->style,"^shake") + || utils::strmatch(modify->fix[i]->style,"^rattle")) bond_off = angle_off = 1; if (force->bond && force->bond_match("quartic")) bond_off = 1; diff --git a/src/pair_coul_streitz.cpp b/src/pair_coul_streitz.cpp index 244dccda12..282c855249 100644 --- a/src/pair_coul_streitz.cpp +++ b/src/pair_coul_streitz.cpp @@ -219,12 +219,6 @@ void PairCoulStreitz::init_style() error->all(FLERR,"Pair style requires a KSpace style"); g_ewald = force->kspace->g_ewald; } - - // ptr to QEQ fix - //for (i = 0; i < modify->nfix; i++) - // if (strcmp(modify->fix[i]->style,"qeq") == 0) break; - //if (i < modify->nfix) fixqeq = (FixQEQ *) modify->fix[i]; - //else fixqeq = NULL; } /* ---------------------------------------------------------------------- diff --git a/src/velocity.cpp b/src/velocity.cpp index 32b08708cf..95d820cc22 100644 --- a/src/velocity.cpp +++ b/src/velocity.cpp @@ -112,7 +112,7 @@ void Velocity::command(int narg, char **arg) int initcomm = 0; if (style == ZERO && rfix >= 0 && - strcmp(modify->fix[rfix]->style,"rigid/small") == 0) initcomm = 1; + utils::strmatch(modify->fix[rfix]->style,"^rigid/small")) initcomm = 1; if ((style == CREATE || style == SET) && temperature && strcmp(temperature->style,"temp/cs") == 0) initcomm = 1; From 8fed39d7262ff79fc8086cb1dac26d359217e4b6 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Fri, 7 Jun 2019 12:16:01 -0400 Subject: [PATCH 248/311] Move CMake documentation build section into its own file --- cmake/CMakeLists.txt | 60 +------------------------------ cmake/Modules/Documentation.cmake | 59 ++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 59 deletions(-) create mode 100644 cmake/Modules/Documentation.cmake diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 911b6f0f15..9154af7674 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1544,65 +1544,7 @@ if(BUILD_EXE) endif() -############################################################################### -# Build documentation -############################################################################### -option(BUILD_DOC "Build LAMMPS documentation" OFF) -if(BUILD_DOC) - include(ProcessorCount) - ProcessorCount(NPROCS) - find_package(PythonInterp 3 REQUIRED) - - set(VIRTUALENV ${PYTHON_EXECUTABLE} -m virtualenv) - - file(GLOB DOC_SOURCES ${LAMMPS_DOC_DIR}/src/[^.]*.txt) - file(GLOB PDF_EXTRA_SOURCES ${LAMMPS_DOC_DIR}/src/lammps_commands*.txt ${LAMMPS_DOC_DIR}/src/lammps_support.txt ${LAMMPS_DOC_DIR}/src/lammps_tutorials.txt) - list(REMOVE_ITEM DOC_SOURCES ${PDF_EXTRA_SOURCES}) - - add_custom_command( - OUTPUT docenv - COMMAND ${VIRTUALENV} docenv - ) - - set(DOCENV_BINARY_DIR ${CMAKE_BINARY_DIR}/docenv/bin) - - add_custom_command( - OUTPUT requirements.txt - DEPENDS docenv - COMMAND ${CMAKE_COMMAND} -E copy ${LAMMPS_DOC_DIR}/utils/requirements.txt requirements.txt - COMMAND ${DOCENV_BINARY_DIR}/pip install -r requirements.txt --upgrade - COMMAND ${DOCENV_BINARY_DIR}/pip install --upgrade ${LAMMPS_DOC_DIR}/utils/converters - ) - - set(RST_FILES "") - set(RST_DIR ${CMAKE_BINARY_DIR}/rst) - file(MAKE_DIRECTORY ${RST_DIR}) - foreach(TXT_FILE ${DOC_SOURCES}) - get_filename_component(FILENAME ${TXT_FILE} NAME_WE) - set(RST_FILE ${RST_DIR}/${FILENAME}.rst) - list(APPEND RST_FILES ${RST_FILE}) - add_custom_command( - OUTPUT ${RST_FILE} - DEPENDS requirements.txt docenv ${TXT_FILE} - COMMAND ${DOCENV_BINARY_DIR}/txt2rst -o ${RST_DIR} ${TXT_FILE} - ) - endforeach() - - add_custom_command( - OUTPUT html - DEPENDS ${RST_FILES} - COMMAND ${CMAKE_COMMAND} -E copy_directory ${LAMMPS_DOC_DIR}/src ${RST_DIR} - COMMAND ${DOCENV_BINARY_DIR}/sphinx-build -j ${NPROCS} -b html -c ${LAMMPS_DOC_DIR}/utils/sphinx-config -d ${CMAKE_BINARY_DIR}/doctrees ${RST_DIR} html - ) - - add_custom_target( - doc ALL - DEPENDS html - SOURCES ${LAMMPS_DOC_DIR}/utils/requirements.txt ${DOC_SOURCES} - ) - - install(DIRECTORY ${CMAKE_BINARY_DIR}/html DESTINATION ${CMAKE_INSTALL_DOCDIR}) -endif() +include(Documentation) ############################################################################### # Install potential and force field files in data directory diff --git a/cmake/Modules/Documentation.cmake b/cmake/Modules/Documentation.cmake new file mode 100644 index 0000000000..99f570820a --- /dev/null +++ b/cmake/Modules/Documentation.cmake @@ -0,0 +1,59 @@ +############################################################################### +# Build documentation +############################################################################### +option(BUILD_DOC "Build LAMMPS documentation" OFF) +if(BUILD_DOC) + include(ProcessorCount) + ProcessorCount(NPROCS) + find_package(PythonInterp 3 REQUIRED) + + set(VIRTUALENV ${PYTHON_EXECUTABLE} -m virtualenv) + + file(GLOB DOC_SOURCES ${LAMMPS_DOC_DIR}/src/[^.]*.txt) + file(GLOB PDF_EXTRA_SOURCES ${LAMMPS_DOC_DIR}/src/lammps_commands*.txt ${LAMMPS_DOC_DIR}/src/lammps_support.txt ${LAMMPS_DOC_DIR}/src/lammps_tutorials.txt) + list(REMOVE_ITEM DOC_SOURCES ${PDF_EXTRA_SOURCES}) + + add_custom_command( + OUTPUT docenv + COMMAND ${VIRTUALENV} docenv + ) + + set(DOCENV_BINARY_DIR ${CMAKE_BINARY_DIR}/docenv/bin) + + add_custom_command( + OUTPUT requirements.txt + DEPENDS docenv + COMMAND ${CMAKE_COMMAND} -E copy ${LAMMPS_DOC_DIR}/utils/requirements.txt requirements.txt + COMMAND ${DOCENV_BINARY_DIR}/pip install -r requirements.txt --upgrade + COMMAND ${DOCENV_BINARY_DIR}/pip install --upgrade ${LAMMPS_DOC_DIR}/utils/converters + ) + + set(RST_FILES "") + set(RST_DIR ${CMAKE_BINARY_DIR}/rst) + file(MAKE_DIRECTORY ${RST_DIR}) + foreach(TXT_FILE ${DOC_SOURCES}) + get_filename_component(FILENAME ${TXT_FILE} NAME_WE) + set(RST_FILE ${RST_DIR}/${FILENAME}.rst) + list(APPEND RST_FILES ${RST_FILE}) + add_custom_command( + OUTPUT ${RST_FILE} + DEPENDS requirements.txt docenv ${TXT_FILE} + COMMAND ${DOCENV_BINARY_DIR}/txt2rst -o ${RST_DIR} ${TXT_FILE} + ) + endforeach() + + add_custom_command( + OUTPUT html + DEPENDS ${RST_FILES} + COMMAND ${CMAKE_COMMAND} -E copy_directory ${LAMMPS_DOC_DIR}/src ${RST_DIR} + COMMAND ${DOCENV_BINARY_DIR}/sphinx-build -j ${NPROCS} -b html -c ${LAMMPS_DOC_DIR}/utils/sphinx-config -d ${CMAKE_BINARY_DIR}/doctrees ${RST_DIR} html + ) + + add_custom_target( + doc ALL + DEPENDS html + SOURCES ${LAMMPS_DOC_DIR}/utils/requirements.txt ${DOC_SOURCES} + ) + + install(DIRECTORY ${CMAKE_BINARY_DIR}/html DESTINATION ${CMAKE_INSTALL_DOCDIR}) +endif() From a7c02e699efcda4136c65c780e4b82f0c0c10732 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Fri, 7 Jun 2019 12:18:49 -0400 Subject: [PATCH 249/311] Move CMake utilities into LAMMPSUtils.cmake --- cmake/CMakeLists.txt | 55 ++------------------------------- cmake/Modules/LAMMPSUtils.cmake | 52 +++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 52 deletions(-) create mode 100644 cmake/Modules/LAMMPSUtils.cmake diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 9154af7674..98d73e84e5 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -23,57 +23,13 @@ file(GLOB LIB_SOURCES ${LAMMPS_SOURCE_DIR}/[^.]*.cpp) file(GLOB LMP_SOURCES ${LAMMPS_SOURCE_DIR}/main.cpp) list(REMOVE_ITEM LIB_SOURCES ${LMP_SOURCES}) -# Utility functions -function(list_to_bulletpoints result) - list(REMOVE_AT ARGV 0) - set(temp "") - foreach(item ${ARGV}) - set(temp "${temp}* ${item}\n") - endforeach() - set(${result} "${temp}" PARENT_SCOPE) -endfunction(list_to_bulletpoints) +# Cmake modules/macros are in a subdirectory to keep this file cleaner +set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/Modules) -function(validate_option name values) - string(TOLOWER ${${name}} needle_lower) - string(TOUPPER ${${name}} needle_upper) - list(FIND ${values} ${needle_lower} IDX_LOWER) - list(FIND ${values} ${needle_upper} IDX_UPPER) - if(${IDX_LOWER} LESS 0 AND ${IDX_UPPER} LESS 0) - list_to_bulletpoints(POSSIBLE_VALUE_LIST ${${values}}) - message(FATAL_ERROR "\n########################################################################\n" - "Invalid value '${${name}}' for option ${name}\n" - "\n" - "Possible values are:\n" - "${POSSIBLE_VALUE_LIST}" - "########################################################################") - endif() -endfunction(validate_option) - -function(get_lammps_version version_header variable) - file(READ ${version_header} line) - set(MONTHS x Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) - string(REGEX REPLACE "#define LAMMPS_VERSION \"([0-9]+) ([A-Za-z]+) ([0-9]+)\"" "\\1" day "${line}") - string(REGEX REPLACE "#define LAMMPS_VERSION \"([0-9]+) ([A-Za-z]+) ([0-9]+)\"" "\\2" month "${line}") - string(REGEX REPLACE "#define LAMMPS_VERSION \"([0-9]+) ([A-Za-z]+) ([0-9]+)\"" "\\3" year "${line}") - string(STRIP ${day} day) - string(STRIP ${month} month) - string(STRIP ${year} year) - list(FIND MONTHS "${month}" month) - string(LENGTH ${day} day_length) - string(LENGTH ${month} month_length) - if(day_length EQUAL 1) - set(day "0${day}") - endif() - if(month_length EQUAL 1) - set(month "0${month}") - endif() - set(${variable} "${year}${month}${day}" PARENT_SCOPE) -endfunction() +include(LAMMPSUtils) get_lammps_version(${LAMMPS_SOURCE_DIR}/version.h LAMMPS_VERSION) -# Cmake modules/macros are in a subdirectory to keep this file cleaner -set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/Modules) include(PreventInSourceBuilds) @@ -300,11 +256,6 @@ if(ENABLE_TESTING AND BUILD_EXE) endif() endif() -macro(pkg_depends PKG1 PKG2) - if(PKG_${PKG1} AND NOT (PKG_${PKG2} OR BUILD_${PKG2})) - message(FATAL_ERROR "${PKG1} package needs LAMMPS to be build with ${PKG2}") - endif() -endmacro() # "hard" dependencies between packages resulting # in an error instead of skipping over files diff --git a/cmake/Modules/LAMMPSUtils.cmake b/cmake/Modules/LAMMPSUtils.cmake new file mode 100644 index 0000000000..ca9d3b72ca --- /dev/null +++ b/cmake/Modules/LAMMPSUtils.cmake @@ -0,0 +1,52 @@ +# Utility functions +function(list_to_bulletpoints result) + list(REMOVE_AT ARGV 0) + set(temp "") + foreach(item ${ARGV}) + set(temp "${temp}* ${item}\n") + endforeach() + set(${result} "${temp}" PARENT_SCOPE) +endfunction(list_to_bulletpoints) + +function(validate_option name values) + string(TOLOWER ${${name}} needle_lower) + string(TOUPPER ${${name}} needle_upper) + list(FIND ${values} ${needle_lower} IDX_LOWER) + list(FIND ${values} ${needle_upper} IDX_UPPER) + if(${IDX_LOWER} LESS 0 AND ${IDX_UPPER} LESS 0) + list_to_bulletpoints(POSSIBLE_VALUE_LIST ${${values}}) + message(FATAL_ERROR "\n########################################################################\n" + "Invalid value '${${name}}' for option ${name}\n" + "\n" + "Possible values are:\n" + "${POSSIBLE_VALUE_LIST}" + "########################################################################") + endif() +endfunction(validate_option) + +function(get_lammps_version version_header variable) + file(READ ${version_header} line) + set(MONTHS x Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) + string(REGEX REPLACE "#define LAMMPS_VERSION \"([0-9]+) ([A-Za-z]+) ([0-9]+)\"" "\\1" day "${line}") + string(REGEX REPLACE "#define LAMMPS_VERSION \"([0-9]+) ([A-Za-z]+) ([0-9]+)\"" "\\2" month "${line}") + string(REGEX REPLACE "#define LAMMPS_VERSION \"([0-9]+) ([A-Za-z]+) ([0-9]+)\"" "\\3" year "${line}") + string(STRIP ${day} day) + string(STRIP ${month} month) + string(STRIP ${year} year) + list(FIND MONTHS "${month}" month) + string(LENGTH ${day} day_length) + string(LENGTH ${month} month_length) + if(day_length EQUAL 1) + set(day "0${day}") + endif() + if(month_length EQUAL 1) + set(month "0${month}") + endif() + set(${variable} "${year}${month}${day}" PARENT_SCOPE) +endfunction() + +macro(pkg_depends PKG1 PKG2) + if(PKG_${PKG1} AND NOT (PKG_${PKG2} OR BUILD_${PKG2})) + message(FATAL_ERROR "${PKG1} package needs LAMMPS to be build with ${PKG2}") + endif() +endmacro() From afab5ef30307afc264f390473b62b9b5b4669943 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Fri, 7 Jun 2019 12:24:35 -0400 Subject: [PATCH 250/311] Move CMake part on coverage into its own file --- cmake/CMakeLists.txt | 29 +---------------------------- cmake/Modules/Testing.cmake | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 28 deletions(-) create mode 100644 cmake/Modules/Testing.cmake diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 98d73e84e5..e8cb59fca7 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1557,34 +1557,7 @@ if((BUILD_LIB AND BUILD_SHARED_LIBS) OR (PKG_PYTHON)) endif() endif() -############################################################################### -# Testing -# -# Requires latest gcovr (for GCC 8.1 support):# -# pip install git+https://github.com/gcovr/gcovr.git -############################################################################### -if(ENABLE_COVERAGE) - find_program(GCOVR_BINARY gcovr) - find_package_handle_standard_args(GCOVR DEFAULT_MSG GCOVR_BINARY) - - if(GCOVR_FOUND) - get_filename_component(ABSOLUTE_LAMMPS_SOURCE_DIR ${LAMMPS_SOURCE_DIR} ABSOLUTE) - - add_custom_target( - gen_coverage_xml - COMMAND ${GCOVR_BINARY} -s -x -r ${ABSOLUTE_LAMMPS_SOURCE_DIR} --object-directory=${CMAKE_BINARY_DIR} -o coverage.xml - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMENT "Generating XML Coverage Report..." - ) - - add_custom_target( - gen_coverage_html - COMMAND ${GCOVR_BINARY} -s --html --html-details -r ${ABSOLUTE_LAMMPS_SOURCE_DIR} --object-directory=${CMAKE_BINARY_DIR} -o coverage.html - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMENT "Generating HTML Coverage Report..." - ) - endif() -endif() +include(Testing) ############################################################################### # Print package summary diff --git a/cmake/Modules/Testing.cmake b/cmake/Modules/Testing.cmake new file mode 100644 index 0000000000..4bba4c59b7 --- /dev/null +++ b/cmake/Modules/Testing.cmake @@ -0,0 +1,28 @@ +############################################################################### +# Testing +# +# Requires latest gcovr (for GCC 8.1 support):# +# pip install git+https://github.com/gcovr/gcovr.git +############################################################################### +if(ENABLE_COVERAGE) + find_program(GCOVR_BINARY gcovr) + find_package_handle_standard_args(GCOVR DEFAULT_MSG GCOVR_BINARY) + + if(GCOVR_FOUND) + get_filename_component(ABSOLUTE_LAMMPS_SOURCE_DIR ${LAMMPS_SOURCE_DIR} ABSOLUTE) + + add_custom_target( + gen_coverage_xml + COMMAND ${GCOVR_BINARY} -s -x -r ${ABSOLUTE_LAMMPS_SOURCE_DIR} --object-directory=${CMAKE_BINARY_DIR} -o coverage.xml + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Generating XML Coverage Report..." + ) + + add_custom_target( + gen_coverage_html + COMMAND ${GCOVR_BINARY} -s --html --html-details -r ${ABSOLUTE_LAMMPS_SOURCE_DIR} --object-directory=${CMAKE_BINARY_DIR} -o coverage.html + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Generating HTML Coverage Report..." + ) + endif() +endif() From 4941f11ad4ab09748522ef6cba9d10c13600b976 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 7 Jun 2019 15:37:49 -0600 Subject: [PATCH 251/311] Remove unused tag --- src/KOKKOS/fix_qeq_reax_kokkos.h | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/KOKKOS/fix_qeq_reax_kokkos.h b/src/KOKKOS/fix_qeq_reax_kokkos.h index d17ed350a9..d4132b47d2 100644 --- a/src/KOKKOS/fix_qeq_reax_kokkos.h +++ b/src/KOKKOS/fix_qeq_reax_kokkos.h @@ -34,9 +34,6 @@ struct TagSparseMatvec2 {}; struct TagSparseMatvec3 {}; struct TagZeroQGhosts{}; -template -struct TagComputeHItem{}; - template class FixQEqReaxKokkos : public FixQEqReax { public: @@ -84,10 +81,6 @@ class FixQEqReaxKokkos : public FixQEqReax { KOKKOS_INLINE_FUNCTION void sparse33_item(int) const; - template - KOKKOS_INLINE_FUNCTION - void operator() (TagComputeHItem, const typename Kokkos::TeamPolicy > ::member_type &team) const; - typedef typename Kokkos::TeamPolicy ::member_type membertype1; KOKKOS_INLINE_FUNCTION void operator() (TagSparseMatvec1, const membertype1 &team) const; From bd237a05b815721f21516441aaed229cef4c4c37 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 7 Jun 2019 15:46:04 -0600 Subject: [PATCH 252/311] Tweak scalar view allocation --- src/KOKKOS/fix_qeq_reax_kokkos.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/KOKKOS/fix_qeq_reax_kokkos.cpp b/src/KOKKOS/fix_qeq_reax_kokkos.cpp index c7c109d8dd..4cc6d1f219 100644 --- a/src/KOKKOS/fix_qeq_reax_kokkos.cpp +++ b/src/KOKKOS/fix_qeq_reax_kokkos.cpp @@ -68,6 +68,8 @@ FixQEqReaxKokkos(LAMMPS *lmp, int narg, char **arg) : memory->destroy(s_hist); memory->destroy(t_hist); grow_arrays(atom->nmax); + + d_mfill_offset = DAT::t_int_scalar("qeq/kk:mfill_offset"); } /* ---------------------------------------------------------------------- */ @@ -129,9 +131,6 @@ void FixQEqReaxKokkos::init() init_shielding_k(); init_hist(); - - k_mfill_offset = DAT::tdual_int_scalar("reax:k_mfill_offset"); - d_mfill_offset = k_mfill_offset.view(); } /* ---------------------------------------------------------------------- */ @@ -218,16 +217,17 @@ void FixQEqReaxKokkos::pre_force(int vflag) copymode = 1; // allocate + allocate_array(); // get max number of neighbor + if (!allocated_flag || update->ntimestep == neighbor->lastcall) allocate_matrix(); // compute_H - k_mfill_offset.h_view() = 0; - k_mfill_offset.modify(); - k_mfill_offset.sync(); + + Kokkos::deep_copy(d_mfill_offset,0); int vector_length = 32; int atoms_per_team = 4; @@ -250,6 +250,7 @@ void FixQEqReaxKokkos::pre_force(int vflag) } // init_matvec + k_s_hist.template sync(); k_t_hist.template sync(); FixQEqReaxKokkosMatVecFunctor matvec_functor(this); @@ -279,12 +280,15 @@ void FixQEqReaxKokkos::pre_force(int vflag) ndup_o = Kokkos::Experimental::create_scatter_view (d_o); // 1st cg solve over b_s, s + cg_solve1(); // 2nd cg solve over b_t, t + cg_solve2(); // calculate_Q(); + calculate_q(); k_s_hist.template modify(); k_t_hist.template modify(); @@ -295,6 +299,7 @@ void FixQEqReaxKokkos::pre_force(int vflag) allocated_flag = 1; // free duplicated memory + if (need_dup) dup_o = decltype(dup_o)(); } From 73fa8d405577ed9ad3d88f5951015d1ed62864ea Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 7 Jun 2019 16:30:02 -0600 Subject: [PATCH 253/311] Rename Kokkos variables --- src/KOKKOS/kokkos.cpp | 32 ++++++++++++++-------------- src/KOKKOS/kokkos.h | 2 +- src/KOKKOS/neighbor_kokkos.cpp | 2 +- src/KOKKOS/pair_exp6_rx_kokkos.cpp | 14 ++++++------ src/KOKKOS/pair_exp6_rx_kokkos.h | 2 +- src/KOKKOS/pppm_kokkos.cpp | 2 +- src/KOKKOS/rand_pool_wrap_kokkos.cpp | 4 ++-- src/accelerator_kokkos.h | 4 ++-- src/comm.cpp | 2 +- src/finish.cpp | 6 +++--- 10 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/KOKKOS/kokkos.cpp b/src/KOKKOS/kokkos.cpp index d6a67188bb..632a64cd78 100644 --- a/src/KOKKOS/kokkos.cpp +++ b/src/KOKKOS/kokkos.cpp @@ -78,9 +78,9 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) // process any command-line args that invoke Kokkos settings - ngpu = 0; + ngpus = 0; int device = 0; - num_threads = 1; + nthreads = 1; numa = 1; int iarg = 0; @@ -96,7 +96,7 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) error->all(FLERR,"GPUs are requested but Kokkos has not been compiled for CUDA"); #endif if (iarg+2 > narg) error->all(FLERR,"Invalid Kokkos command-line args"); - ngpu = atoi(arg[iarg+1]); + ngpus = atoi(arg[iarg+1]); int skip_gpu = 9999; if (iarg+2 < narg && isdigit(arg[iarg+2][0])) { @@ -108,23 +108,23 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) char *str; if ((str = getenv("SLURM_LOCALID"))) { int local_rank = atoi(str); - device = local_rank % ngpu; + device = local_rank % ngpus; if (device >= skip_gpu) device++; } if ((str = getenv("MV2_COMM_WORLD_LOCAL_RANK"))) { int local_rank = atoi(str); - device = local_rank % ngpu; + device = local_rank % ngpus; if (device >= skip_gpu) device++; } if ((str = getenv("OMPI_COMM_WORLD_LOCAL_RANK"))) { int local_rank = atoi(str); - device = local_rank % ngpu; + device = local_rank % ngpus; if (device >= skip_gpu) device++; } } else if (strcmp(arg[iarg],"t") == 0 || strcmp(arg[iarg],"threads") == 0) { - num_threads = atoi(arg[iarg+1]); + nthreads = atoi(arg[iarg+1]); iarg += 2; } else if (strcmp(arg[iarg],"n") == 0 || @@ -138,12 +138,12 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) // initialize Kokkos if (me == 0) { - if (screen) fprintf(screen," will use up to %d GPU(s) per node\n",ngpu); - if (logfile) fprintf(logfile," will use up to %d GPU(s) per node\n",ngpu); + if (screen) fprintf(screen," will use up to %d GPU(s) per node\n",ngpus); + if (logfile) fprintf(logfile," will use up to %d GPU(s) per node\n",ngpus); } #ifdef KOKKOS_ENABLE_CUDA - if (ngpu <= 0) + if (ngpus <= 0) error->all(FLERR,"Kokkos has been compiled for CUDA but no GPUs are requested"); // check and warn about GPU-direct availability when using multiple MPI tasks @@ -167,14 +167,14 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) #endif #ifndef KOKKOS_ENABLE_SERIAL - if (num_threads == 1) + if (nthreads == 1) error->warning(FLERR,"When using a single thread, the Kokkos Serial backend " "(i.e. Makefile.kokkos_mpi_only) gives better performance " "than the OpenMP backend"); #endif Kokkos::InitArguments args; - args.num_threads = num_threads; + args.num_threads = nthreads; args.num_numa = numa; args.device_id = device; @@ -184,7 +184,7 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) binsize = 0.0; gpu_direct_flag = 1; - if (ngpu > 0) { + if (ngpus > 0) { neighflag = FULL; neighflag_qeq = FULL; neighflag_qeq_set = 0; @@ -192,7 +192,7 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) exchange_comm_classic = forward_comm_classic = reverse_comm_classic = 0; exchange_comm_on_host = forward_comm_on_host = reverse_comm_on_host = 0; } else { - if (num_threads > 1) { + if (nthreads > 1) { neighflag = HALFTHREAD; neighflag_qeq = HALFTHREAD; } else { @@ -236,7 +236,7 @@ void KokkosLMP::accelerator(int narg, char **arg) if (iarg+2 > narg) error->all(FLERR,"Illegal package kokkos command"); if (strcmp(arg[iarg+1],"full") == 0) neighflag = FULL; else if (strcmp(arg[iarg+1],"half") == 0) { - if (num_threads > 1 || ngpu > 0) + if (nthreads > 1 || ngpus > 0) neighflag = HALFTHREAD; else neighflag = HALF; @@ -248,7 +248,7 @@ void KokkosLMP::accelerator(int narg, char **arg) if (iarg+2 > narg) error->all(FLERR,"Illegal package kokkos command"); if (strcmp(arg[iarg+1],"full") == 0) neighflag_qeq = FULL; else if (strcmp(arg[iarg+1],"half") == 0) { - if (num_threads > 1 || ngpu > 0) + if (nthreads > 1 || ngpus > 0) neighflag_qeq = HALFTHREAD; else neighflag_qeq = HALF; diff --git a/src/KOKKOS/kokkos.h b/src/KOKKOS/kokkos.h index 74a10883f6..a0d0163b46 100644 --- a/src/KOKKOS/kokkos.h +++ b/src/KOKKOS/kokkos.h @@ -32,7 +32,7 @@ class KokkosLMP : protected Pointers { int exchange_comm_on_host; int forward_comm_on_host; int reverse_comm_on_host; - int num_threads,ngpu; + int nthreads,ngpus; int numa; int auto_sync; int gpu_direct_flag; diff --git a/src/KOKKOS/neighbor_kokkos.cpp b/src/KOKKOS/neighbor_kokkos.cpp index 7aaeda4b37..e912956a3f 100644 --- a/src/KOKKOS/neighbor_kokkos.cpp +++ b/src/KOKKOS/neighbor_kokkos.cpp @@ -362,7 +362,7 @@ void NeighborKokkos::modify_mol_intra_grow_kokkos(){ /* ---------------------------------------------------------------------- */ void NeighborKokkos::set_binsize_kokkos() { - if (!binsizeflag && lmp->kokkos->ngpu > 0) { + if (!binsizeflag && lmp->kokkos->ngpus > 0) { binsize_user = cutneighmax; binsizeflag = 1; } diff --git a/src/KOKKOS/pair_exp6_rx_kokkos.cpp b/src/KOKKOS/pair_exp6_rx_kokkos.cpp index 0a6372fdf8..2c21d7d6d7 100644 --- a/src/KOKKOS/pair_exp6_rx_kokkos.cpp +++ b/src/KOKKOS/pair_exp6_rx_kokkos.cpp @@ -310,12 +310,12 @@ void PairExp6rxKokkos::compute(int eflag_in, int vflag_in) #else // No atomics - num_threads = lmp->kokkos->num_threads; + nthreads = lmp->kokkos->nthreads; int nmax = f.extent(0); if (nmax > t_f.extent(1)) { - t_f = t_f_array_thread("pair_exp6_rx:t_f",num_threads,nmax); - t_uCG = t_efloat_1d_thread("pair_exp6_rx:t_uCG",num_threads,nmax); - t_uCGnew = t_efloat_1d_thread("pair_exp6_rx:t_UCGnew",num_threads,nmax); + t_f = t_f_array_thread("pair_exp6_rx:t_f",nthreads,nmax); + t_uCG = t_efloat_1d_thread("pair_exp6_rx:t_uCG",nthreads,nmax); + t_uCGnew = t_efloat_1d_thread("pair_exp6_rx:t_UCGnew",nthreads,nmax); } Kokkos::parallel_for(Kokkos::RangePolicy(0,nmax),*this); @@ -1642,7 +1642,7 @@ void PairExp6rxKokkos::operator()(TagPairExp6rxComputeNoAtomics KOKKOS_INLINE_FUNCTION void PairExp6rxKokkos::operator()(TagPairExp6rxCollapseDupViews, const int &i) const { - for (int n = 0; n < num_threads; n++) { + for (int n = 0; n < nthreads; n++) { f(i,0) += t_f(n,i,0); f(i,1) += t_f(n,i,1); f(i,2) += t_f(n,i,2); @@ -1654,7 +1654,7 @@ void PairExp6rxKokkos::operator()(TagPairExp6rxCollapseDupViews, con template KOKKOS_INLINE_FUNCTION void PairExp6rxKokkos::operator()(TagPairExp6rxZeroDupViews, const int &i) const { - for (int n = 0; n < num_threads; n++) { + for (int n = 0; n < nthreads; n++) { t_f(n,i,0) = 0.0; t_f(n,i,1) = 0.0; t_f(n,i,2) = 0.0; @@ -2105,7 +2105,7 @@ void PairExp6rxKokkos::getMixingWeights(int id,double &epsilon1,doub void partition_range( const int begin, const int end, int &thread_begin, int &thread_end, const int chunkSize = 1) { int threadId = omp_get_thread_num(); - int nThreads = omp_get_num_threads(); + int nThreads = omp_get_nthreads(); const int len = end - begin; const int nBlocks = (len + (chunkSize - 1)) / chunkSize; diff --git a/src/KOKKOS/pair_exp6_rx_kokkos.h b/src/KOKKOS/pair_exp6_rx_kokkos.h index 5e44048ae2..f3801db631 100644 --- a/src/KOKKOS/pair_exp6_rx_kokkos.h +++ b/src/KOKKOS/pair_exp6_rx_kokkos.h @@ -145,7 +145,7 @@ class PairExp6rxKokkos : public PairExp6rx { int eflag,vflag; int nlocal,newton_pair,neighflag; double special_lj[4]; - int num_threads,ntypes; + int nthreads,ntypes; typename AT::t_x_array_randomread x; typename AT::t_f_array f; diff --git a/src/KOKKOS/pppm_kokkos.cpp b/src/KOKKOS/pppm_kokkos.cpp index c233ca6264..7c01adc510 100644 --- a/src/KOKKOS/pppm_kokkos.cpp +++ b/src/KOKKOS/pppm_kokkos.cpp @@ -1656,7 +1656,7 @@ void PPPMKokkos::make_rho() iy = nyhi_out-nylo_out + 1; copymode = 1; - Kokkos::TeamPolicy config(lmp->kokkos->num_threads,1); + Kokkos::TeamPolicy config(lmp->kokkos->nthreads,1); Kokkos::parallel_for(config,*this); copymode = 0; #endif diff --git a/src/KOKKOS/rand_pool_wrap_kokkos.cpp b/src/KOKKOS/rand_pool_wrap_kokkos.cpp index 39b91f1600..51ebcb154e 100644 --- a/src/KOKKOS/rand_pool_wrap_kokkos.cpp +++ b/src/KOKKOS/rand_pool_wrap_kokkos.cpp @@ -25,7 +25,7 @@ using namespace LAMMPS_NS; RandPoolWrap::RandPoolWrap(int, LAMMPS *lmp) : Pointers(lmp) { random_thr = NULL; - nthreads = lmp->kokkos->num_threads; + nthreads = lmp->kokkos->nthreads; } /* ---------------------------------------------------------------------- */ @@ -59,7 +59,7 @@ void RandPoolWrap::init(RanMars* random, int seed) // allocate pool of RNGs // generate a random number generator instance for // all threads != 0. make sure we use unique seeds. - nthreads = lmp->kokkos->num_threads; + nthreads = lmp->kokkos->nthreads; random_thr = new RanMars*[nthreads]; for (int tid = 1; tid < nthreads; ++tid) { random_thr[tid] = new RanMars(lmp, seed + comm->me diff --git a/src/accelerator_kokkos.h b/src/accelerator_kokkos.h index e64bde24be..74bd470572 100644 --- a/src/accelerator_kokkos.h +++ b/src/accelerator_kokkos.h @@ -50,8 +50,8 @@ namespace LAMMPS_NS { class KokkosLMP { public: int kokkos_exists; - int num_threads; - int ngpu; + int nthreads; + int ngpus; int numa; KokkosLMP(class LAMMPS *, int, char **) {kokkos_exists = 0;} diff --git a/src/comm.cpp b/src/comm.cpp index 30fd7c243e..052de93793 100644 --- a/src/comm.cpp +++ b/src/comm.cpp @@ -81,7 +81,7 @@ Comm::Comm(LAMMPS *lmp) : Pointers(lmp) nthreads = 1; #ifdef _OPENMP if (lmp->kokkos) { - nthreads = lmp->kokkos->num_threads * lmp->kokkos->numa; + nthreads = lmp->kokkos->nthreads * lmp->kokkos->numa; } else if (getenv("OMP_NUM_THREADS") == NULL) { nthreads = 1; if (me == 0) diff --git a/src/finish.cpp b/src/finish.cpp index 9ad8b44927..1baa6d6fda 100644 --- a/src/finish.cpp +++ b/src/finish.cpp @@ -176,9 +176,9 @@ void Finish::end(int flag) const char fmt2[] = "%.1f%% CPU use with %d MPI tasks x %d OpenMP threads\n"; if (screen) fprintf(screen,fmt2,cpu_loop,nprocs, - lmp->kokkos->num_threads); + lmp->kokkos->nthreads); if (logfile) fprintf(logfile,fmt2,cpu_loop,nprocs, - lmp->kokkos->num_threads); + lmp->kokkos->nthreads); } else { #if defined(_OPENMP) const char fmt2[] = @@ -579,7 +579,7 @@ void Finish::end(int flag) } #endif - if (lmp->kokkos && lmp->kokkos->ngpu > 0) + if (lmp->kokkos && lmp->kokkos->ngpus > 0) if (const char* env_clb = getenv("CUDA_LAUNCH_BLOCKING")) if (!(strcmp(env_clb,"1") == 0)) { error->warning(FLERR,"Timing breakdown may not be accurate " From 85999fc4a7a8060b974e93b54486e60110ad2baa Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 7 Jun 2019 16:31:31 -0600 Subject: [PATCH 254/311] Restore original compute_h in fix_qeq_reax_kokkos --- src/KOKKOS/fix_qeq_reax_kokkos.cpp | 104 ++++++++++++++++++++++++----- src/KOKKOS/fix_qeq_reax_kokkos.h | 15 ++++- 2 files changed, 100 insertions(+), 19 deletions(-) diff --git a/src/KOKKOS/fix_qeq_reax_kokkos.cpp b/src/KOKKOS/fix_qeq_reax_kokkos.cpp index 4cc6d1f219..1351c2138d 100644 --- a/src/KOKKOS/fix_qeq_reax_kokkos.cpp +++ b/src/KOKKOS/fix_qeq_reax_kokkos.cpp @@ -227,26 +227,32 @@ void FixQEqReaxKokkos::pre_force(int vflag) // compute_H - Kokkos::deep_copy(d_mfill_offset,0); + if (lmp->kokkos->ngpus == 0) { // CPU + if (neighflag == FULL) { + FixQEqReaxKokkosComputeHFunctor computeH_functor(this); + Kokkos::parallel_scan(inum,computeH_functor); + } else { // HALF and HALFTHREAD are the same + FixQEqReaxKokkosComputeHFunctor computeH_functor(this); + Kokkos::parallel_scan(inum,computeH_functor); + } + } else { // GPU, use teams + Kokkos::deep_copy(d_mfill_offset,0); - int vector_length = 32; - int atoms_per_team = 4; - int num_teams = inum / atoms_per_team + (inum % atoms_per_team ? 1 : 0); + int vector_length = 32; + int atoms_per_team = 4; + int num_teams = inum / atoms_per_team + (inum % atoms_per_team ? 1 : 0); - Kokkos::TeamPolicy policy(num_teams, atoms_per_team, - vector_length); - if (neighflag == FULL) { - FixQEqReaxKokkosComputeHFunctor computeH_functor( - this, atoms_per_team, vector_length); - Kokkos::parallel_for(policy, computeH_functor); - } else if (neighflag == HALF) { - FixQEqReaxKokkosComputeHFunctor computeH_functor( - this, atoms_per_team, vector_length); - Kokkos::parallel_for(policy, computeH_functor); - } else { - FixQEqReaxKokkosComputeHFunctor computeH_functor( - this, atoms_per_team, vector_length); - Kokkos::parallel_for(policy, computeH_functor); + Kokkos::TeamPolicy policy(num_teams, atoms_per_team, + vector_length); + if (neighflag == FULL) { + FixQEqReaxKokkosComputeHFunctor computeH_functor( + this, atoms_per_team, vector_length); + Kokkos::parallel_for(policy, computeH_functor); + } else { // HALF and HALFTHREAD are the same + FixQEqReaxKokkosComputeHFunctor computeH_functor( + this, atoms_per_team, vector_length); + Kokkos::parallel_for(policy, computeH_functor); + } } // init_matvec @@ -401,6 +407,68 @@ void FixQEqReaxKokkos::zero_item(int ii) const /* ---------------------------------------------------------------------- */ +template +template +KOKKOS_INLINE_FUNCTION +void FixQEqReaxKokkos::compute_h_item(int ii, int &m_fill, const bool &final) const +{ + const int i = d_ilist[ii]; + int j,jj,jtype; + + if (mask[i] & groupbit) { + + const X_FLOAT xtmp = x(i,0); + const X_FLOAT ytmp = x(i,1); + const X_FLOAT ztmp = x(i,2); + const int itype = type(i); + const tagint itag = tag(i); + const int jnum = d_numneigh[i]; + if (final) + d_firstnbr[i] = m_fill; + + for (jj = 0; jj < jnum; jj++) { + j = d_neighbors(i,jj); + j &= NEIGHMASK; + jtype = type(j); + + const X_FLOAT delx = x(j,0) - xtmp; + const X_FLOAT dely = x(j,1) - ytmp; + const X_FLOAT delz = x(j,2) - ztmp; + + if (NEIGHFLAG != FULL) { + // skip half of the interactions + const tagint jtag = tag(j); + if (j >= nlocal) { + if (itag > jtag) { + if ((itag+jtag) % 2 == 0) continue; + } else if (itag < jtag) { + if ((itag+jtag) % 2 == 1) continue; + } else { + if (x(j,2) < ztmp) continue; + if (x(j,2) == ztmp && x(j,1) < ytmp) continue; + if (x(j,2) == ztmp && x(j,1) == ytmp && x(j,0) < xtmp) continue; + } + } + } + + const F_FLOAT rsq = delx*delx + dely*dely + delz*delz; + if (rsq > cutsq) continue; + + if (final) { + const F_FLOAT r = sqrt(rsq); + d_jlist(m_fill) = j; + const F_FLOAT shldij = d_shield(itype,jtype); + d_val(m_fill) = calculate_H_k(r,shldij); + } + m_fill++; + } + if (final) + d_numnbrs[i] = m_fill - d_firstnbr[i]; + } +} + +/* ---------------------------------------------------------------------- */ + // Calculate Qeq matrix H where H is a sparse matrix and H[i][j] represents the electrostatic interaction coefficients on atom-i with atom-j // d_val - contains the non-zero entries of sparse matrix H // d_numnbrs - d_numnbrs[i] contains the # of non-zero entries in the i-th row of H (which also represents the # of neighbor atoms with electrostatic interaction coefficients with atom-i) diff --git a/src/KOKKOS/fix_qeq_reax_kokkos.h b/src/KOKKOS/fix_qeq_reax_kokkos.h index d4132b47d2..cd69aa9283 100644 --- a/src/KOKKOS/fix_qeq_reax_kokkos.h +++ b/src/KOKKOS/fix_qeq_reax_kokkos.h @@ -53,6 +53,10 @@ class FixQEqReaxKokkos : public FixQEqReax { KOKKOS_INLINE_FUNCTION void zero_item(int) const; + template + KOKKOS_INLINE_FUNCTION + void compute_h_item(int, int &, const bool &) const; + template KOKKOS_INLINE_FUNCTION void compute_h_team(const typename Kokkos::TeamPolicy ::member_type &team, int, int) const; @@ -151,7 +155,6 @@ class FixQEqReaxKokkos : public FixQEqReax { int allocated_flag; int need_dup; - DAT::tdual_int_scalar k_mfill_offset; typename AT::t_int_scalar d_mfill_offset; typedef Kokkos::DualView tdual_int_1d; @@ -254,9 +257,14 @@ struct FixQEqReaxKokkosMatVecFunctor { template struct FixQEqReaxKokkosComputeHFunctor { int atoms_per_team, vector_length; + typedef int value_type; typedef Kokkos::ScratchMemorySpace scratch_space; FixQEqReaxKokkos c; + FixQEqReaxKokkosComputeHFunctor(FixQEqReaxKokkos* c_ptr):c(*c_ptr) { + c.cleanup_copy(); + }; + FixQEqReaxKokkosComputeHFunctor(FixQEqReaxKokkos *c_ptr, int _atoms_per_team, int _vector_length) : c(*c_ptr), atoms_per_team(_atoms_per_team), @@ -264,6 +272,11 @@ struct FixQEqReaxKokkosComputeHFunctor { c.cleanup_copy(); }; + KOKKOS_INLINE_FUNCTION + void operator()(const int ii, int &m_fill, const bool &final) const { + c.template compute_h_item(ii,m_fill,final); + } + KOKKOS_INLINE_FUNCTION void operator()( const typename Kokkos::TeamPolicy::member_type &team) const { From 9e3dc26599471ce9eae4a92a8207d1db540f1dd0 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 7 Jun 2019 16:40:29 -0600 Subject: [PATCH 255/311] Fix name in pair_exp6_rx_kokkos --- src/KOKKOS/pair_exp6_rx_kokkos.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/KOKKOS/pair_exp6_rx_kokkos.cpp b/src/KOKKOS/pair_exp6_rx_kokkos.cpp index 2c21d7d6d7..3a857a6485 100644 --- a/src/KOKKOS/pair_exp6_rx_kokkos.cpp +++ b/src/KOKKOS/pair_exp6_rx_kokkos.cpp @@ -2105,7 +2105,7 @@ void PairExp6rxKokkos::getMixingWeights(int id,double &epsilon1,doub void partition_range( const int begin, const int end, int &thread_begin, int &thread_end, const int chunkSize = 1) { int threadId = omp_get_thread_num(); - int nThreads = omp_get_nthreads(); + int nThreads = omp_get_num_threads(); const int len = end - begin; const int nBlocks = (len + (chunkSize - 1)) / chunkSize; From 31dc5dbb51ed84610fd38a6e7a3c4a7441eba39c Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Fri, 7 Jun 2019 17:00:05 -0600 Subject: [PATCH 256/311] Fix variable type --- src/KOKKOS/fix_qeq_reax_kokkos.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/KOKKOS/fix_qeq_reax_kokkos.cpp b/src/KOKKOS/fix_qeq_reax_kokkos.cpp index 1351c2138d..e3e3cfd5d2 100644 --- a/src/KOKKOS/fix_qeq_reax_kokkos.cpp +++ b/src/KOKKOS/fix_qeq_reax_kokkos.cpp @@ -69,7 +69,7 @@ FixQEqReaxKokkos(LAMMPS *lmp, int narg, char **arg) : memory->destroy(t_hist); grow_arrays(atom->nmax); - d_mfill_offset = DAT::t_int_scalar("qeq/kk:mfill_offset"); + d_mfill_offset = typename AT::t_int_scalar("qeq/kk:mfill_offset"); } /* ---------------------------------------------------------------------- */ From 239dfe163ccbaa8bb7c46a05b86d5e86de4d0e50 Mon Sep 17 00:00:00 2001 From: "Vishnu V. Krishnan" Date: Sat, 8 Jun 2019 17:11:20 +0530 Subject: [PATCH 257/311] Simplify vim-files Resolves #1500 --- tools/vim/README.txt | 24 +++++++++++------------- tools/vim/filetype.vim | 4 ++++ 2 files changed, 15 insertions(+), 13 deletions(-) create mode 100644 tools/vim/filetype.vim diff --git a/tools/vim/README.txt b/tools/vim/README.txt index eb040aa4cd..578ff4945e 100644 --- a/tools/vim/README.txt +++ b/tools/vim/README.txt @@ -22,24 +22,22 @@ in the syntax file (lammps.vim). You can easily add new ones. (0) Create/edit ~/.vimrc to contain: syntax on -(1) Create directories ~/.vim and ~/.vim/syntax +(1) Create directories ~/.vim/syntax and ~/.vim/ftdetect (2) Copy lammps.vim to ~/.vim/syntax/lammps.vim -(3) Create/edit ~/.vim/filetype.vim to contain - -" vim syntax highlight customizations -if exists("did_load_filetypes") - finish -endif - -augroup filetypedetect - au! BufRead,BufNewFile in.* setfiletype lammps - au! BufRead,BufNewFile *.lmp setfiletype lammps -augroup END -(4) the end +(3) Copy filetype.vim as ~/.vim/ftdetect/lammps.vim Gerolf Ziegenhain 2007 +Distribution Packaging guidelines: +================================== + +(0) Copy lammps.vim to ${VIMFILES}/syntax/lammps.vim +(1) Copy filetype.vim as ${VIMFILES}/ftdetect/lammps.vim + +${VIMFILES} is typically /usr/share/vim/vimfiles +Consult your packaging guidlines for exact location. + --------------- updated by Sam Bateman, 11/2010 diff --git a/tools/vim/filetype.vim b/tools/vim/filetype.vim new file mode 100644 index 0000000000..8bc2315144 --- /dev/null +++ b/tools/vim/filetype.vim @@ -0,0 +1,4 @@ +augroup filetypedetect + au! BufRead,BufNewFile in.* setfiletype lammps + au! BufRead,BufNewFile *.lmp setfiletype lammps +augroup END From 0908bd7aaf1a5e8142affdc40a6735352f8a3bf9 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Sun, 9 Jun 2019 03:18:20 -0400 Subject: [PATCH 258/311] Move code coverage and testing into their own files --- cmake/CMakeLists.txt | 48 +------------------------ cmake/Modules/CodeCoverage.cmake | 28 +++++++++++++++ cmake/Modules/Testing.cmake | 62 +++++++++++++++++++++----------- 3 files changed, 71 insertions(+), 67 deletions(-) create mode 100644 cmake/Modules/CodeCoverage.cmake diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index e8cb59fca7..94dd4f8015 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -208,53 +208,6 @@ endif() option(CMAKE_VERBOSE_MAKEFILE "Verbose makefile" OFF) -option(ENABLE_TESTING "Enable testing" OFF) -if(ENABLE_TESTING AND BUILD_EXE) - enable_testing() - option(LAMMPS_TESTING_SOURCE_DIR "Location of lammps-testing source directory" "") - option(LAMMPS_TESTING_GIT_TAG "Git tag of lammps-testing" "master") - mark_as_advanced(LAMMPS_TESTING_SOURCE_DIR LAMMPS_TESTING_GIT_TAG) - - if (CMAKE_VERSION VERSION_GREATER "3.10.3" AND NOT LAMMPS_TESTING_SOURCE_DIR) - include(FetchContent) - - FetchContent_Declare(lammps-testing - GIT_REPOSITORY https://github.com/lammps/lammps-testing.git - GIT_TAG ${LAMMPS_TESTING_GIT_TAG} - ) - - FetchContent_GetProperties(lammps-testing) - if(NOT lammps-testing_POPULATED) - message(STATUS "Downloading tests...") - FetchContent_Populate(lammps-testing) - endif() - - set(LAMMPS_TESTING_SOURCE_DIR ${lammps-testing_SOURCE_DIR}) - elseif(NOT LAMMPS_TESTING_SOURCE_DIR) - message(WARNING "Full test-suite requires CMake >= 3.11 or copy of\n" - "https://github.com/lammps/lammps-testing in LAMMPS_TESTING_SOURCE_DIR") - endif() - - if(EXISTS ${LAMMPS_TESTING_SOURCE_DIR}) - message(STATUS "Running test discovery...") - - file(GLOB_RECURSE TEST_SCRIPTS ${LAMMPS_TESTING_SOURCE_DIR}/tests/core/*/in.*) - foreach(script_path ${TEST_SCRIPTS}) - get_filename_component(TEST_NAME ${script_path} EXT) - get_filename_component(SCRIPT_NAME ${script_path} NAME) - get_filename_component(PARENT_DIR ${script_path} DIRECTORY) - string(SUBSTRING ${TEST_NAME} 1 -1 TEST_NAME) - string(REPLACE "-" "_" TEST_NAME ${TEST_NAME}) - string(REPLACE "+" "_" TEST_NAME ${TEST_NAME}) - set(TEST_NAME "test_core_${TEST_NAME}_serial") - add_test(${TEST_NAME} ${CMAKE_BINARY_DIR}/${LAMMPS_BINARY} -in ${SCRIPT_NAME}) - set_tests_properties(${TEST_NAME} PROPERTIES WORKING_DIRECTORY ${PARENT_DIR}) - endforeach() - list(LENGTH TEST_SCRIPTS NUM_TESTS) - - message(STATUS "Found ${NUM_TESTS} tests.") - endif() -endif() # "hard" dependencies between packages resulting @@ -1558,6 +1511,7 @@ if((BUILD_LIB AND BUILD_SHARED_LIBS) OR (PKG_PYTHON)) endif() include(Testing) +include(CodeCoverage) ############################################################################### # Print package summary diff --git a/cmake/Modules/CodeCoverage.cmake b/cmake/Modules/CodeCoverage.cmake new file mode 100644 index 0000000000..d018db43d9 --- /dev/null +++ b/cmake/Modules/CodeCoverage.cmake @@ -0,0 +1,28 @@ +############################################################################### +# Coverage +# +# Requires latest gcovr (for GCC 8.1 support):# +# pip install git+https://github.com/gcovr/gcovr.git +############################################################################### +if(ENABLE_COVERAGE) + find_program(GCOVR_BINARY gcovr) + find_package_handle_standard_args(GCOVR DEFAULT_MSG GCOVR_BINARY) + + if(GCOVR_FOUND) + get_filename_component(ABSOLUTE_LAMMPS_SOURCE_DIR ${LAMMPS_SOURCE_DIR} ABSOLUTE) + + add_custom_target( + gen_coverage_xml + COMMAND ${GCOVR_BINARY} -s -x -r ${ABSOLUTE_LAMMPS_SOURCE_DIR} --object-directory=${CMAKE_BINARY_DIR} -o coverage.xml + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Generating XML Coverage Report..." + ) + + add_custom_target( + gen_coverage_html + COMMAND ${GCOVR_BINARY} -s --html --html-details -r ${ABSOLUTE_LAMMPS_SOURCE_DIR} --object-directory=${CMAKE_BINARY_DIR} -o coverage.html + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Generating HTML Coverage Report..." + ) + endif() +endif() diff --git a/cmake/Modules/Testing.cmake b/cmake/Modules/Testing.cmake index 4bba4c59b7..cac1dd851e 100644 --- a/cmake/Modules/Testing.cmake +++ b/cmake/Modules/Testing.cmake @@ -1,28 +1,50 @@ ############################################################################### # Testing -# -# Requires latest gcovr (for GCC 8.1 support):# -# pip install git+https://github.com/gcovr/gcovr.git ############################################################################### -if(ENABLE_COVERAGE) - find_program(GCOVR_BINARY gcovr) - find_package_handle_standard_args(GCOVR DEFAULT_MSG GCOVR_BINARY) +option(ENABLE_TESTING "Enable testing" OFF) +if(ENABLE_TESTING AND BUILD_EXE) + enable_testing() + option(LAMMPS_TESTING_SOURCE_DIR "Location of lammps-testing source directory" "") + option(LAMMPS_TESTING_GIT_TAG "Git tag of lammps-testing" "master") + mark_as_advanced(LAMMPS_TESTING_SOURCE_DIR LAMMPS_TESTING_GIT_TAG) - if(GCOVR_FOUND) - get_filename_component(ABSOLUTE_LAMMPS_SOURCE_DIR ${LAMMPS_SOURCE_DIR} ABSOLUTE) + if (CMAKE_VERSION VERSION_GREATER "3.10.3" AND NOT LAMMPS_TESTING_SOURCE_DIR) + include(FetchContent) - add_custom_target( - gen_coverage_xml - COMMAND ${GCOVR_BINARY} -s -x -r ${ABSOLUTE_LAMMPS_SOURCE_DIR} --object-directory=${CMAKE_BINARY_DIR} -o coverage.xml - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMENT "Generating XML Coverage Report..." - ) + FetchContent_Declare(lammps-testing + GIT_REPOSITORY https://github.com/lammps/lammps-testing.git + GIT_TAG ${LAMMPS_TESTING_GIT_TAG} + ) - add_custom_target( - gen_coverage_html - COMMAND ${GCOVR_BINARY} -s --html --html-details -r ${ABSOLUTE_LAMMPS_SOURCE_DIR} --object-directory=${CMAKE_BINARY_DIR} -o coverage.html - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMENT "Generating HTML Coverage Report..." - ) + FetchContent_GetProperties(lammps-testing) + if(NOT lammps-testing_POPULATED) + message(STATUS "Downloading tests...") + FetchContent_Populate(lammps-testing) endif() + + set(LAMMPS_TESTING_SOURCE_DIR ${lammps-testing_SOURCE_DIR}) + elseif(NOT LAMMPS_TESTING_SOURCE_DIR) + message(WARNING "Full test-suite requires CMake >= 3.11 or copy of\n" + "https://github.com/lammps/lammps-testing in LAMMPS_TESTING_SOURCE_DIR") + endif() + + if(EXISTS ${LAMMPS_TESTING_SOURCE_DIR}) + message(STATUS "Running test discovery...") + + file(GLOB_RECURSE TEST_SCRIPTS ${LAMMPS_TESTING_SOURCE_DIR}/tests/core/*/in.*) + foreach(script_path ${TEST_SCRIPTS}) + get_filename_component(TEST_NAME ${script_path} EXT) + get_filename_component(SCRIPT_NAME ${script_path} NAME) + get_filename_component(PARENT_DIR ${script_path} DIRECTORY) + string(SUBSTRING ${TEST_NAME} 1 -1 TEST_NAME) + string(REPLACE "-" "_" TEST_NAME ${TEST_NAME}) + string(REPLACE "+" "_" TEST_NAME ${TEST_NAME}) + set(TEST_NAME "test_core_${TEST_NAME}_serial") + add_test(${TEST_NAME} ${CMAKE_BINARY_DIR}/${LAMMPS_BINARY} -in ${SCRIPT_NAME}) + set_tests_properties(${TEST_NAME} PROPERTIES WORKING_DIRECTORY ${PARENT_DIR}) + endforeach() + list(LENGTH TEST_SCRIPTS NUM_TESTS) + + message(STATUS "Found ${NUM_TESTS} tests.") + endif() endif() From ca1445788ef2cb559f65173267f64475f85b3cdd Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Sun, 9 Jun 2019 03:23:23 -0400 Subject: [PATCH 259/311] Move CMake configuration of VORONOI package into its own file --- cmake/CMakeLists.txt | 39 +--------------------------- cmake/Modules/Packages/VORONOI.cmake | 38 +++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 38 deletions(-) create mode 100644 cmake/Modules/Packages/VORONOI.cmake diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 94dd4f8015..b7a2e1d201 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -355,44 +355,7 @@ else() set(CUDA_REQUEST_PIC) endif() -if(PKG_VORONOI) - find_package(VORO) - if(VORO_FOUND) - set(DOWNLOAD_VORO_DEFAULT OFF) - else() - set(DOWNLOAD_VORO_DEFAULT ON) - endif() - option(DOWNLOAD_VORO "Download and compile the Voro++ library instead of using an already installed one" ${DOWNLOAD_VORO_DEFAULT}) - if(DOWNLOAD_VORO) - message(STATUS "Voro++ download requested - we will build our own") - include(ExternalProject) - - if(BUILD_SHARED_LIBS) - set(VORO_BUILD_CFLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS} ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}}") - else() - set(VORO_BUILD_CFLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}}") - endif() - string(APPEND VORO_BUILD_CFLAGS ${CMAKE_CXX_FLAGS}) - set(VORO_BUILD_OPTIONS CXX=${CMAKE_CXX_COMPILER} CFLAGS=${VORO_BUILD_CFLAGS}) - - ExternalProject_Add(voro_build - URL https://download.lammps.org/thirdparty/voro++-0.4.6.tar.gz - URL_MD5 2338b824c3b7b25590e18e8df5d68af9 - CONFIGURE_COMMAND "" BUILD_COMMAND make ${VORO_BUILD_OPTIONS} BUILD_IN_SOURCE 1 INSTALL_COMMAND "" - ) - ExternalProject_get_property(voro_build SOURCE_DIR) - set(VORO_LIBRARIES ${SOURCE_DIR}/src/libvoro++.a) - set(VORO_INCLUDE_DIRS ${SOURCE_DIR}/src) - list(APPEND LAMMPS_DEPS voro_build) - else() - find_package(VORO) - if(NOT VORO_FOUND) - message(FATAL_ERROR "Voro++ library not found. Help CMake to find it by setting VORO_LIBRARY and VORO_INCLUDE_DIR, or set DOWNLOAD_VORO=ON to download it") - endif() - endif() - include_directories(${VORO_INCLUDE_DIRS}) - list(APPEND LAMMPS_LINK_LIBS ${VORO_LIBRARIES}) -endif() +include(Packages/VORONOI) if(PKG_LATTE) find_package(LATTE) diff --git a/cmake/Modules/Packages/VORONOI.cmake b/cmake/Modules/Packages/VORONOI.cmake new file mode 100644 index 0000000000..df4551b6e7 --- /dev/null +++ b/cmake/Modules/Packages/VORONOI.cmake @@ -0,0 +1,38 @@ +if(PKG_VORONOI) + find_package(VORO) + if(VORO_FOUND) + set(DOWNLOAD_VORO_DEFAULT OFF) + else() + set(DOWNLOAD_VORO_DEFAULT ON) + endif() + option(DOWNLOAD_VORO "Download and compile the Voro++ library instead of using an already installed one" ${DOWNLOAD_VORO_DEFAULT}) + if(DOWNLOAD_VORO) + message(STATUS "Voro++ download requested - we will build our own") + include(ExternalProject) + + if(BUILD_SHARED_LIBS) + set(VORO_BUILD_CFLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS} ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}}") + else() + set(VORO_BUILD_CFLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${BTYPE}}") + endif() + string(APPEND VORO_BUILD_CFLAGS ${CMAKE_CXX_FLAGS}) + set(VORO_BUILD_OPTIONS CXX=${CMAKE_CXX_COMPILER} CFLAGS=${VORO_BUILD_CFLAGS}) + + ExternalProject_Add(voro_build + URL https://download.lammps.org/thirdparty/voro++-0.4.6.tar.gz + URL_MD5 2338b824c3b7b25590e18e8df5d68af9 + CONFIGURE_COMMAND "" BUILD_COMMAND make ${VORO_BUILD_OPTIONS} BUILD_IN_SOURCE 1 INSTALL_COMMAND "" + ) + ExternalProject_get_property(voro_build SOURCE_DIR) + set(VORO_LIBRARIES ${SOURCE_DIR}/src/libvoro++.a) + set(VORO_INCLUDE_DIRS ${SOURCE_DIR}/src) + list(APPEND LAMMPS_DEPS voro_build) + else() + find_package(VORO) + if(NOT VORO_FOUND) + message(FATAL_ERROR "Voro++ library not found. Help CMake to find it by setting VORO_LIBRARY and VORO_INCLUDE_DIR, or set DOWNLOAD_VORO=ON to download it") + endif() + endif() + include_directories(${VORO_INCLUDE_DIRS}) + list(APPEND LAMMPS_LINK_LIBS ${VORO_LIBRARIES}) +endif() From 99a8d3c2edba936455069189f53e22bf7ea957bb Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Sun, 9 Jun 2019 03:35:25 -0400 Subject: [PATCH 260/311] Create CMake files for several packages This remove the CMake configuration of several larger packages and places it into their own files in the Modules/Packages folder. - COMPRESS - KIM - LATTE - MESSAGE - MSCG - USER-MOLFILE - USER-NETCDF - USER-PLUMED - USER-QMMM - USER-QUIP - USER-SCAFACOS - USER-SMD - USER-VTK --- cmake/CMakeLists.txt | 366 +-------------------- cmake/Modules/Packages/COMPRESS.cmake | 5 + cmake/Modules/Packages/KIM.cmake | 39 +++ cmake/Modules/Packages/LATTE.cmake | 34 ++ cmake/Modules/Packages/MESSAGE.cmake | 29 ++ cmake/Modules/Packages/MSCG.cmake | 42 +++ cmake/Modules/Packages/USER-MOLFILE.cmake | 10 + cmake/Modules/Packages/USER-NETCDF.cmake | 6 + cmake/Modules/Packages/USER-PLUMED.cmake | 76 +++++ cmake/Modules/Packages/USER-QMMM.cmake | 6 + cmake/Modules/Packages/USER-QUIP.cmake | 4 + cmake/Modules/Packages/USER-SCAFACOS.cmake | 56 ++++ cmake/Modules/Packages/USER-SMD.cmake | 28 ++ cmake/Modules/Packages/USER-VTK.cmake | 6 + 14 files changed, 353 insertions(+), 354 deletions(-) create mode 100644 cmake/Modules/Packages/COMPRESS.cmake create mode 100644 cmake/Modules/Packages/KIM.cmake create mode 100644 cmake/Modules/Packages/LATTE.cmake create mode 100644 cmake/Modules/Packages/MESSAGE.cmake create mode 100644 cmake/Modules/Packages/MSCG.cmake create mode 100644 cmake/Modules/Packages/USER-MOLFILE.cmake create mode 100644 cmake/Modules/Packages/USER-NETCDF.cmake create mode 100644 cmake/Modules/Packages/USER-PLUMED.cmake create mode 100644 cmake/Modules/Packages/USER-QMMM.cmake create mode 100644 cmake/Modules/Packages/USER-QUIP.cmake create mode 100644 cmake/Modules/Packages/USER-SCAFACOS.cmake create mode 100644 cmake/Modules/Packages/USER-SMD.cmake create mode 100644 cmake/Modules/Packages/USER-VTK.cmake diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index b7a2e1d201..193d808c37 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -356,360 +356,18 @@ else() endif() include(Packages/VORONOI) - -if(PKG_LATTE) - find_package(LATTE) - if(LATTE_FOUND) - set(DOWNLOAD_LATTE_DEFAULT OFF) - else() - set(DOWNLOAD_LATTE_DEFAULT ON) - endif() - option(DOWNLOAD_LATTE "Download the LATTE library instead of using an already installed one" ${DOWNLOAD_LATTE_DEFAULT}) - if(DOWNLOAD_LATTE) - if (CMAKE_VERSION VERSION_LESS "3.7") # due to SOURCE_SUBDIR - message(FATAL_ERROR "For downlading LATTE you need at least cmake-3.7") - endif() - message(STATUS "LATTE download requested - we will build our own") - include(ExternalProject) - ExternalProject_Add(latte_build - URL https://github.com/lanl/LATTE/archive/v1.2.1.tar.gz - URL_MD5 85ac414fdada2d04619c8f936344df14 - SOURCE_SUBDIR cmake - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= ${CMAKE_REQUEST_PIC} - -DBLAS_LIBRARIES=${BLAS_LIBRARIES} -DLAPACK_LIBRARIES=${LAPACK_LIBRARIES} - -DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER} -DCMAKE_Fortran_FLAGS=${CMAKE_Fortran_FLAGS} - -DCMAKE_Fortran_FLAGS_${BTYPE}=${CMAKE_Fortran_FLAGS_${BTYPE}} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - ) - ExternalProject_get_property(latte_build INSTALL_DIR) - set(LATTE_LIBRARIES ${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/liblatte.a) - list(APPEND LAMMPS_DEPS latte_build) - else() - find_package(LATTE) - if(NOT LATTE_FOUND) - message(FATAL_ERROR "LATTE library not found, help CMake to find it by setting LATTE_LIBRARY, or set DOWNLOAD_LATTE=ON to download it") - endif() - endif() - list(APPEND LAMMPS_LINK_LIBS ${LATTE_LIBRARIES} ${LAPACK_LIBRARIES}) -endif() - -if(PKG_USER-SCAFACOS) - find_package(GSL REQUIRED) - find_package(PkgConfig QUIET) - set(DOWNLOAD_SCAFACOS_DEFAULT ON) - if(PKG_CONFIG_FOUND) - pkg_check_modules(SCAFACOS QUIET scafacos) - if(SCAFACOS_FOUND) - set(DOWNLOAD_SCAFACOS_DEFAULT OFF) - endif() - endif() - option(DOWNLOAD_SCAFACOS "Download ScaFaCoS library instead of using an already installed one" ${DOWNLOAD_SCAFACOS_DEFAULT}) - if(DOWNLOAD_SCAFACOS) - message(STATUS "ScaFaCoS download requested - we will build our own") - include(ExternalProject) - ExternalProject_Add(scafacos_build - URL https://github.com/scafacos/scafacos/releases/download/v1.0.1/scafacos-1.0.1.tar.gz - URL_MD5 bd46d74e3296bd8a444d731bb10c1738 - CONFIGURE_COMMAND /configure --prefix= --disable-doc - --enable-fcs-solvers=fmm,p2nfft,direct,ewald,p3m - --with-internal-fftw --with-internal-pfft - --with-internal-pnfft ${CONFIGURE_REQUEST_PIC} - FC=${CMAKE_MPI_Fortran_COMPILER} - CXX=${CMAKE_MPI_CXX_COMPILER} - CC=${CMAKE_MPI_C_COMPILER} - F77= - ) - ExternalProject_get_property(scafacos_build INSTALL_DIR) - set(SCAFACOS_BUILD_DIR ${INSTALL_DIR}) - set(SCAFACOS_INCLUDE_DIRS ${SCAFACOS_BUILD_DIR}/include) - list(APPEND LAMMPS_DEPS scafacos_build) - # list and order from pkg_config file of ScaFaCoS build - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_direct.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_ewald.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_fmm.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_p2nfft.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_p3m.a) - list(APPEND LAMMPS_LINK_LIBS ${GSL_LIBRARIES}) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_near.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_gridsort.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_resort.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_redist.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_common.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_pnfft.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_pfft.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_fftw3_mpi.a) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_fftw3.a) - list(APPEND LAMMPS_LINK_LIBS ${MPI_Fortran_LIBRARIES}) - list(APPEND LAMMPS_LINK_LIBS ${MPI_C_LIBRARIES}) - else() - find_package(PkgConfig REQUIRED) - pkg_check_modules(SCAFACOS REQUIRED scafacos) - list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_LDFLAGS}) - endif() - include_directories(${SCAFACOS_INCLUDE_DIRS}) -endif() - -if(PKG_USER-PLUMED) - find_package(GSL REQUIRED) - set(PLUMED_MODE "static" CACHE STRING "Linkage mode for Plumed2 library") - set(PLUMED_MODE_VALUES static shared runtime) - set_property(CACHE PLUMED_MODE PROPERTY STRINGS ${PLUMED_MODE_VALUES}) - validate_option(PLUMED_MODE PLUMED_MODE_VALUES) - string(TOUPPER ${PLUMED_MODE} PLUMED_MODE) - - find_package(PkgConfig QUIET) - set(DOWNLOAD_PLUMED_DEFAULT ON) - if(PKG_CONFIG_FOUND) - pkg_check_modules(PLUMED QUIET plumed) - if(PLUMED_FOUND) - set(DOWNLOAD_PLUMED_DEFAULT OFF) - endif() - endif() - - option(DOWNLOAD_PLUMED "Download Plumed package instead of using an already installed one" ${DOWNLOAD_PLUMED_DEFAULT}) - if(DOWNLOAD_PLUMED) - if(BUILD_MPI) - set(PLUMED_CONFIG_MPI "--enable-mpi") - set(PLUMED_CONFIG_CC ${CMAKE_MPI_C_COMPILER}) - set(PLUMED_CONFIG_CXX ${CMAKE_MPI_CXX_COMPILER}) - else() - set(PLUMED_CONFIG_MPI "--disable-mpi") - set(PLUMED_CONFIG_CC ${CMAKE_C_COMPILER}) - set(PLUMED_CONFIG_CXX ${CMAKE_CXX_COMPILER}) - endif() - if(BUILD_OMP) - set(PLUMED_CONFIG_OMP "--enable-openmp") - else() - set(PLUMED_CONFIG_OMP "--disable-openmp") - endif() - message(STATUS "PLUMED download requested - we will build our own") - include(ExternalProject) - ExternalProject_Add(plumed_build - URL https://github.com/plumed/plumed2/releases/download/v2.5.1/plumed-src-2.5.1.tgz - URL_MD5 c2a7b519e32197a120cdf47e0f194f81 - BUILD_IN_SOURCE 1 - CONFIGURE_COMMAND /configure --prefix= - ${CONFIGURE_REQUEST_PIC} - --enable-modules=all - ${PLUMED_CONFIG_MPI} - ${PLUMED_CONFIG_OMP} - CXX=${PLUMED_CONFIG_CXX} - CC=${PLUMED_CONFIG_CC} - ) - ExternalProject_get_property(plumed_build INSTALL_DIR) - set(PLUMED_INSTALL_DIR ${INSTALL_DIR}) - list(APPEND LAMMPS_DEPS plumed_build) - if(PLUMED_MODE STREQUAL "STATIC") - add_definitions(-D__PLUMED_WRAPPER_CXX=1) - list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/libplumed.a ${GSL_LIBRARIES} ${LAPACK_LIBRARIES} ${CMAKE_DL_LIBS}) - elseif(PLUMED_MODE STREQUAL "SHARED") - list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/libplumed.so ${PLUMED_INSTALL_DIR}/lib/libplumedKernel.so ${CMAKE_DL_LIBS}) - elseif(PLUMED_MODE STREQUAL "RUNTIME") - add_definitions(-D__PLUMED_HAS_DLOPEN=1 -D__PLUMED_DEFAULT_KERNEL=${PLUMED_INSTALL_DIR}/lib/libplumedKernel.so) - list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/libplumedWrapper.a -rdynamic ${CMAKE_DL_LIBS}) - endif() - set(PLUMED_INCLUDE_DIRS "${PLUMED_INSTALL_DIR}/include") - else() - find_package(PkgConfig REQUIRED) - pkg_check_modules(PLUMED REQUIRED plumed) - if(PLUMED_MODE STREQUAL "STATIC") - add_definitions(-D__PLUMED_WRAPPER_CXX=1) - include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.static) - elseif(PLUMED_MODE STREQUAL "SHARED") - include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.shared) - elseif(PLUMED_MODE STREQUAL "RUNTIME") - add_definitions(-D__PLUMED_HAS_DLOPEN=1 -D__PLUMED_DEFAULT_KERNEL=${PLUMED_LIBDIR}/libplumedKernel.so) - include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.runtime) - endif() - list(APPEND LAMMPS_LINK_LIBS ${PLUMED_LOAD}) - endif() - include_directories(${PLUMED_INCLUDE_DIRS}) -endif() - -if(PKG_USER-MOLFILE) - set(MOLFILE_INCLUDE_DIRS "${LAMMPS_LIB_SOURCE_DIR}/molfile" CACHE STRING "Path to VMD molfile plugin headers") - add_library(molfile INTERFACE) - target_include_directories(molfile INTERFACE ${MOLFILE_INCLUDE_DIRS}) - # no need to link with -ldl on windows - if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows") - target_link_libraries(molfile INTERFACE ${CMAKE_DL_LIBS}) - endif() - list(APPEND LAMMPS_LINK_LIBS molfile) -endif() - -if(PKG_USER-NETCDF) - find_package(NetCDF REQUIRED) - include_directories(${NETCDF_INCLUDE_DIRS}) - list(APPEND LAMMPS_LINK_LIBS ${NETCDF_LIBRARIES}) - add_definitions(-DLMP_HAS_NETCDF -DNC_64BIT_DATA=0x0020) -endif() - -if(PKG_USER-SMD) - find_package(Eigen3 NO_MODULE) - if(EIGEN3_FOUND) - set(DOWNLOAD_EIGEN3_DEFAULT OFF) - else() - set(DOWNLOAD_EIGEN3_DEFAULT ON) - endif() - option(DOWNLOAD_EIGEN3 "Download Eigen3 instead of using an already installed one)" ${DOWNLOAD_EIGEN3_DEFAULT}) - if(DOWNLOAD_EIGEN3) - message(STATUS "Eigen3 download requested - we will build our own") - include(ExternalProject) - ExternalProject_Add(Eigen3_build - URL http://bitbucket.org/eigen/eigen/get/3.3.7.tar.gz - URL_MD5 f2a417d083fe8ca4b8ed2bc613d20f07 - CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" - ) - ExternalProject_get_property(Eigen3_build SOURCE_DIR) - set(EIGEN3_INCLUDE_DIR ${SOURCE_DIR}) - list(APPEND LAMMPS_DEPS Eigen3_build) - else() - find_package(Eigen3 NO_MODULE) - mark_as_advanced(Eigen3_DIR) - if(NOT EIGEN3_FOUND) - message(FATAL_ERROR "Eigen3 not found, help CMake to find it by setting EIGEN3_INCLUDE_DIR, or set DOWNLOAD_EIGEN3=ON to download it") - endif() - endif() - include_directories(${EIGEN3_INCLUDE_DIR}) -endif() - -if(PKG_USER-QUIP) - find_package(QUIP REQUIRED) - list(APPEND LAMMPS_LINK_LIBS ${QUIP_LIBRARIES} ${LAPACK_LIBRARIES}) -endif() - -if(PKG_USER-QMMM) - message(WARNING "Building QMMM with CMake is still experimental") - find_package(QE REQUIRED) - include_directories(${QE_INCLUDE_DIRS}) - list(APPEND LAMMPS_LINK_LIBS ${QE_LIBRARIES}) -endif() - -if(PKG_USER-VTK) - find_package(VTK REQUIRED NO_MODULE) - include(${VTK_USE_FILE}) - add_definitions(-DLAMMPS_VTK) - list(APPEND LAMMPS_LINK_LIBS ${VTK_LIBRARIES}) -endif() - -if(PKG_KIM) - find_package(CURL) - if(CURL_FOUND) - include_directories(${CURL_INCLUDE_DIRS}) - list(APPEND LAMMPS_LINK_LIBS ${CURL_LIBRARIES}) - add_definitions(-DLMP_KIM_CURL) - endif() - find_package(KIM-API QUIET) - if(KIM-API_FOUND) - set(DOWNLOAD_KIM_DEFAULT OFF) - else() - set(DOWNLOAD_KIM_DEFAULT ON) - endif() - option(DOWNLOAD_KIM "Download KIM-API from OpenKIM instead of using an already installed one" ${DOWNLOAD_KIM_DEFAULT}) - if(DOWNLOAD_KIM) - message(STATUS "KIM-API download requested - we will build our own") - enable_language(C) - enable_language(Fortran) - include(ExternalProject) - ExternalProject_Add(kim_build - URL https://s3.openkim.org/kim-api/kim-api-2.0.2.txz - URL_MD5 537d9c0abd30f85b875ebb584f9143fa - BINARY_DIR build - CMAKE_ARGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER} - -DCMAKE_INSTALL_PREFIX= - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - ) - ExternalProject_get_property(kim_build INSTALL_DIR) - set(KIM-API_INCLUDE_DIRS ${INSTALL_DIR}/include/kim-api) - set(KIM-API_LDFLAGS ${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/libkim-api${CMAKE_SHARED_LIBRARY_SUFFIX}) - list(APPEND LAMMPS_DEPS kim_build) - else() - find_package(KIM-API REQUIRED) - endif() - list(APPEND LAMMPS_LINK_LIBS "${KIM-API_LDFLAGS}") - include_directories(${KIM-API_INCLUDE_DIRS}) -endif() - -if(PKG_MESSAGE) - option(MESSAGE_ZMQ "Use ZeroMQ in MESSAGE package" OFF) - file(GLOB_RECURSE cslib_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/[^.]*.F - ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/[^.]*.c - ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/[^.]*.cpp) - - add_library(cslib STATIC ${cslib_SOURCES}) - if(BUILD_MPI) - target_compile_definitions(cslib PRIVATE -DMPI_YES) - set_target_properties(cslib PROPERTIES OUTPUT_NAME "csmpi") - else() - target_compile_definitions(cslib PRIVATE -DMPI_NO) - target_include_directories(cslib PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/src/STUBS_MPI) - set_target_properties(cslib PROPERTIES OUTPUT_NAME "csnompi") - endif() - - if(MESSAGE_ZMQ) - target_compile_definitions(cslib PRIVATE -DZMQ_YES) - find_package(ZMQ REQUIRED) - target_include_directories(cslib PRIVATE ${ZMQ_INCLUDE_DIRS}) - target_link_libraries(cslib PUBLIC ${ZMQ_LIBRARIES}) - else() - target_compile_definitions(cslib PRIVATE -DZMQ_NO) - target_include_directories(cslib PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/src/STUBS_ZMQ) - endif() - - list(APPEND LAMMPS_LINK_LIBS cslib) - include_directories(${LAMMPS_LIB_SOURCE_DIR}/message/cslib/src) -endif() - -if(PKG_MSCG) - find_package(GSL REQUIRED) - find_package(MSCG QUIET) - if(MSGC_FOUND) - set(DOWNLOAD_MSCG_DEFAULT OFF) - else() - set(DOWNLOAD_MSCG_DEFAULT ON) - endif() - option(DOWNLOAD_MSCG "Download MSCG library instead of using an already installed one)" ${DOWNLOAD_MSCG_DEFAULT}) - if(DOWNLOAD_MSCG) - if (CMAKE_VERSION VERSION_LESS "3.7") # due to SOURCE_SUBDIR - message(FATAL_ERROR "For downlading MSCG you need at least cmake-3.7") - endif() - include(ExternalProject) - if(NOT LAPACK_FOUND) - set(EXTRA_MSCG_OPTS "-DLAPACK_LIBRARIES=${CMAKE_CURRENT_BINARY_DIR}/liblinalg.a") - endif() - ExternalProject_Add(mscg_build - URL https://github.com/uchicago-voth/MSCG-release/archive/1.7.3.1.tar.gz - URL_MD5 8c45e269ee13f60b303edd7823866a91 - SOURCE_SUBDIR src/CMake - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= ${CMAKE_REQUEST_PIC} ${EXTRA_MSCG_OPTS} - BUILD_COMMAND make mscg INSTALL_COMMAND "" - ) - ExternalProject_get_property(mscg_build BINARY_DIR) - set(MSCG_LIBRARIES ${BINARY_DIR}/libmscg.a) - ExternalProject_get_property(mscg_build SOURCE_DIR) - set(MSCG_INCLUDE_DIRS ${SOURCE_DIR}/src) - list(APPEND LAMMPS_DEPS mscg_build) - if(NOT LAPACK_FOUND) - file(MAKE_DIRECTORY ${MSCG_INCLUDE_DIRS}) - add_dependencies(mscg_build linalg) - endif() - else() - find_package(MSCG) - if(NOT MSCG_FOUND) - message(FATAL_ERROR "MSCG not found, help CMake to find it by setting MSCG_LIBRARY and MSCG_INCLUDE_DIRS, or set DOWNLOAD_MSCG=ON to download it") - endif() - endif() - list(APPEND LAMMPS_LINK_LIBS ${MSCG_LIBRARIES} ${GSL_LIBRARIES} ${LAPACK_LIBRARIES}) - include_directories(${MSCG_INCLUDE_DIRS}) -endif() - -if(PKG_COMPRESS) - find_package(ZLIB REQUIRED) - include_directories(${ZLIB_INCLUDE_DIRS}) - list(APPEND LAMMPS_LINK_LIBS ${ZLIB_LIBRARIES}) -endif() +include(Packages/USER-SCAFACOS) +include(Packages/USER-PLUMED) +include(Packages/USER-MOLFILE) +include(Packages/USER-NETCDF) +include(Packages/USER-SMD) +include(Packages/USER-QUIP) +include(Packages/USER-QMMM) +include(Packages/USER-VTK) +include(Packages/KIM) +include(Packages/MESSAGE) +include(Packages/MSCG) +include(Packages/COMPRESS) # the windows version of LAMMPS requires a couple extra libraries if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows") diff --git a/cmake/Modules/Packages/COMPRESS.cmake b/cmake/Modules/Packages/COMPRESS.cmake new file mode 100644 index 0000000000..864b868865 --- /dev/null +++ b/cmake/Modules/Packages/COMPRESS.cmake @@ -0,0 +1,5 @@ +if(PKG_COMPRESS) + find_package(ZLIB REQUIRED) + include_directories(${ZLIB_INCLUDE_DIRS}) + list(APPEND LAMMPS_LINK_LIBS ${ZLIB_LIBRARIES}) +endif() diff --git a/cmake/Modules/Packages/KIM.cmake b/cmake/Modules/Packages/KIM.cmake new file mode 100644 index 0000000000..21ebd0f8e0 --- /dev/null +++ b/cmake/Modules/Packages/KIM.cmake @@ -0,0 +1,39 @@ +if(PKG_KIM) + find_package(CURL) + if(CURL_FOUND) + include_directories(${CURL_INCLUDE_DIRS}) + list(APPEND LAMMPS_LINK_LIBS ${CURL_LIBRARIES}) + add_definitions(-DLMP_KIM_CURL) + endif() + find_package(KIM-API QUIET) + if(KIM-API_FOUND) + set(DOWNLOAD_KIM_DEFAULT OFF) + else() + set(DOWNLOAD_KIM_DEFAULT ON) + endif() + option(DOWNLOAD_KIM "Download KIM-API from OpenKIM instead of using an already installed one" ${DOWNLOAD_KIM_DEFAULT}) + if(DOWNLOAD_KIM) + message(STATUS "KIM-API download requested - we will build our own") + enable_language(C) + enable_language(Fortran) + include(ExternalProject) + ExternalProject_Add(kim_build + URL https://s3.openkim.org/kim-api/kim-api-2.0.2.txz + URL_MD5 537d9c0abd30f85b875ebb584f9143fa + BINARY_DIR build + CMAKE_ARGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER} + -DCMAKE_INSTALL_PREFIX= + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + ) + ExternalProject_get_property(kim_build INSTALL_DIR) + set(KIM-API_INCLUDE_DIRS ${INSTALL_DIR}/include/kim-api) + set(KIM-API_LDFLAGS ${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/libkim-api${CMAKE_SHARED_LIBRARY_SUFFIX}) + list(APPEND LAMMPS_DEPS kim_build) + else() + find_package(KIM-API REQUIRED) + endif() + list(APPEND LAMMPS_LINK_LIBS "${KIM-API_LDFLAGS}") + include_directories(${KIM-API_INCLUDE_DIRS}) +endif() diff --git a/cmake/Modules/Packages/LATTE.cmake b/cmake/Modules/Packages/LATTE.cmake new file mode 100644 index 0000000000..9aa813a6e4 --- /dev/null +++ b/cmake/Modules/Packages/LATTE.cmake @@ -0,0 +1,34 @@ +if(PKG_LATTE) + find_package(LATTE) + if(LATTE_FOUND) + set(DOWNLOAD_LATTE_DEFAULT OFF) + else() + set(DOWNLOAD_LATTE_DEFAULT ON) + endif() + option(DOWNLOAD_LATTE "Download the LATTE library instead of using an already installed one" ${DOWNLOAD_LATTE_DEFAULT}) + if(DOWNLOAD_LATTE) + if (CMAKE_VERSION VERSION_LESS "3.7") # due to SOURCE_SUBDIR + message(FATAL_ERROR "For downlading LATTE you need at least cmake-3.7") + endif() + message(STATUS "LATTE download requested - we will build our own") + include(ExternalProject) + ExternalProject_Add(latte_build + URL https://github.com/lanl/LATTE/archive/v1.2.1.tar.gz + URL_MD5 85ac414fdada2d04619c8f936344df14 + SOURCE_SUBDIR cmake + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= ${CMAKE_REQUEST_PIC} + -DBLAS_LIBRARIES=${BLAS_LIBRARIES} -DLAPACK_LIBRARIES=${LAPACK_LIBRARIES} + -DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER} -DCMAKE_Fortran_FLAGS=${CMAKE_Fortran_FLAGS} + -DCMAKE_Fortran_FLAGS_${BTYPE}=${CMAKE_Fortran_FLAGS_${BTYPE}} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + ) + ExternalProject_get_property(latte_build INSTALL_DIR) + set(LATTE_LIBRARIES ${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/liblatte.a) + list(APPEND LAMMPS_DEPS latte_build) + else() + find_package(LATTE) + if(NOT LATTE_FOUND) + message(FATAL_ERROR "LATTE library not found, help CMake to find it by setting LATTE_LIBRARY, or set DOWNLOAD_LATTE=ON to download it") + endif() + endif() + list(APPEND LAMMPS_LINK_LIBS ${LATTE_LIBRARIES} ${LAPACK_LIBRARIES}) +endif() diff --git a/cmake/Modules/Packages/MESSAGE.cmake b/cmake/Modules/Packages/MESSAGE.cmake new file mode 100644 index 0000000000..3c1bdde855 --- /dev/null +++ b/cmake/Modules/Packages/MESSAGE.cmake @@ -0,0 +1,29 @@ +if(PKG_MESSAGE) + option(MESSAGE_ZMQ "Use ZeroMQ in MESSAGE package" OFF) + file(GLOB_RECURSE cslib_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/[^.]*.F + ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/[^.]*.c + ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/[^.]*.cpp) + + add_library(cslib STATIC ${cslib_SOURCES}) + if(BUILD_MPI) + target_compile_definitions(cslib PRIVATE -DMPI_YES) + set_target_properties(cslib PROPERTIES OUTPUT_NAME "csmpi") + else() + target_compile_definitions(cslib PRIVATE -DMPI_NO) + target_include_directories(cslib PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/src/STUBS_MPI) + set_target_properties(cslib PROPERTIES OUTPUT_NAME "csnompi") + endif() + + if(MESSAGE_ZMQ) + target_compile_definitions(cslib PRIVATE -DZMQ_YES) + find_package(ZMQ REQUIRED) + target_include_directories(cslib PRIVATE ${ZMQ_INCLUDE_DIRS}) + target_link_libraries(cslib PUBLIC ${ZMQ_LIBRARIES}) + else() + target_compile_definitions(cslib PRIVATE -DZMQ_NO) + target_include_directories(cslib PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/message/cslib/src/STUBS_ZMQ) + endif() + + list(APPEND LAMMPS_LINK_LIBS cslib) + include_directories(${LAMMPS_LIB_SOURCE_DIR}/message/cslib/src) +endif() diff --git a/cmake/Modules/Packages/MSCG.cmake b/cmake/Modules/Packages/MSCG.cmake new file mode 100644 index 0000000000..e8744bc192 --- /dev/null +++ b/cmake/Modules/Packages/MSCG.cmake @@ -0,0 +1,42 @@ +if(PKG_MSCG) + find_package(GSL REQUIRED) + find_package(MSCG QUIET) + if(MSGC_FOUND) + set(DOWNLOAD_MSCG_DEFAULT OFF) + else() + set(DOWNLOAD_MSCG_DEFAULT ON) + endif() + option(DOWNLOAD_MSCG "Download MSCG library instead of using an already installed one)" ${DOWNLOAD_MSCG_DEFAULT}) + if(DOWNLOAD_MSCG) + if (CMAKE_VERSION VERSION_LESS "3.7") # due to SOURCE_SUBDIR + message(FATAL_ERROR "For downlading MSCG you need at least cmake-3.7") + endif() + include(ExternalProject) + if(NOT LAPACK_FOUND) + set(EXTRA_MSCG_OPTS "-DLAPACK_LIBRARIES=${CMAKE_CURRENT_BINARY_DIR}/liblinalg.a") + endif() + ExternalProject_Add(mscg_build + URL https://github.com/uchicago-voth/MSCG-release/archive/1.7.3.1.tar.gz + URL_MD5 8c45e269ee13f60b303edd7823866a91 + SOURCE_SUBDIR src/CMake + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX= ${CMAKE_REQUEST_PIC} ${EXTRA_MSCG_OPTS} + BUILD_COMMAND make mscg INSTALL_COMMAND "" + ) + ExternalProject_get_property(mscg_build BINARY_DIR) + set(MSCG_LIBRARIES ${BINARY_DIR}/libmscg.a) + ExternalProject_get_property(mscg_build SOURCE_DIR) + set(MSCG_INCLUDE_DIRS ${SOURCE_DIR}/src) + list(APPEND LAMMPS_DEPS mscg_build) + if(NOT LAPACK_FOUND) + file(MAKE_DIRECTORY ${MSCG_INCLUDE_DIRS}) + add_dependencies(mscg_build linalg) + endif() + else() + find_package(MSCG) + if(NOT MSCG_FOUND) + message(FATAL_ERROR "MSCG not found, help CMake to find it by setting MSCG_LIBRARY and MSCG_INCLUDE_DIRS, or set DOWNLOAD_MSCG=ON to download it") + endif() + endif() + list(APPEND LAMMPS_LINK_LIBS ${MSCG_LIBRARIES} ${GSL_LIBRARIES} ${LAPACK_LIBRARIES}) + include_directories(${MSCG_INCLUDE_DIRS}) +endif() diff --git a/cmake/Modules/Packages/USER-MOLFILE.cmake b/cmake/Modules/Packages/USER-MOLFILE.cmake new file mode 100644 index 0000000000..16ffc34994 --- /dev/null +++ b/cmake/Modules/Packages/USER-MOLFILE.cmake @@ -0,0 +1,10 @@ +if(PKG_USER-MOLFILE) + set(MOLFILE_INCLUDE_DIRS "${LAMMPS_LIB_SOURCE_DIR}/molfile" CACHE STRING "Path to VMD molfile plugin headers") + add_library(molfile INTERFACE) + target_include_directories(molfile INTERFACE ${MOLFILE_INCLUDE_DIRS}) + # no need to link with -ldl on windows + if(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows") + target_link_libraries(molfile INTERFACE ${CMAKE_DL_LIBS}) + endif() + list(APPEND LAMMPS_LINK_LIBS molfile) +endif() diff --git a/cmake/Modules/Packages/USER-NETCDF.cmake b/cmake/Modules/Packages/USER-NETCDF.cmake new file mode 100644 index 0000000000..a90725bbbc --- /dev/null +++ b/cmake/Modules/Packages/USER-NETCDF.cmake @@ -0,0 +1,6 @@ +if(PKG_USER-NETCDF) + find_package(NetCDF REQUIRED) + include_directories(${NETCDF_INCLUDE_DIRS}) + list(APPEND LAMMPS_LINK_LIBS ${NETCDF_LIBRARIES}) + add_definitions(-DLMP_HAS_NETCDF -DNC_64BIT_DATA=0x0020) +endif() diff --git a/cmake/Modules/Packages/USER-PLUMED.cmake b/cmake/Modules/Packages/USER-PLUMED.cmake new file mode 100644 index 0000000000..422527dd06 --- /dev/null +++ b/cmake/Modules/Packages/USER-PLUMED.cmake @@ -0,0 +1,76 @@ +if(PKG_USER-PLUMED) + find_package(GSL REQUIRED) + set(PLUMED_MODE "static" CACHE STRING "Linkage mode for Plumed2 library") + set(PLUMED_MODE_VALUES static shared runtime) + set_property(CACHE PLUMED_MODE PROPERTY STRINGS ${PLUMED_MODE_VALUES}) + validate_option(PLUMED_MODE PLUMED_MODE_VALUES) + string(TOUPPER ${PLUMED_MODE} PLUMED_MODE) + + find_package(PkgConfig QUIET) + set(DOWNLOAD_PLUMED_DEFAULT ON) + if(PKG_CONFIG_FOUND) + pkg_check_modules(PLUMED QUIET plumed) + if(PLUMED_FOUND) + set(DOWNLOAD_PLUMED_DEFAULT OFF) + endif() + endif() + + option(DOWNLOAD_PLUMED "Download Plumed package instead of using an already installed one" ${DOWNLOAD_PLUMED_DEFAULT}) + if(DOWNLOAD_PLUMED) + if(BUILD_MPI) + set(PLUMED_CONFIG_MPI "--enable-mpi") + set(PLUMED_CONFIG_CC ${CMAKE_MPI_C_COMPILER}) + set(PLUMED_CONFIG_CXX ${CMAKE_MPI_CXX_COMPILER}) + else() + set(PLUMED_CONFIG_MPI "--disable-mpi") + set(PLUMED_CONFIG_CC ${CMAKE_C_COMPILER}) + set(PLUMED_CONFIG_CXX ${CMAKE_CXX_COMPILER}) + endif() + if(BUILD_OMP) + set(PLUMED_CONFIG_OMP "--enable-openmp") + else() + set(PLUMED_CONFIG_OMP "--disable-openmp") + endif() + message(STATUS "PLUMED download requested - we will build our own") + include(ExternalProject) + ExternalProject_Add(plumed_build + URL https://github.com/plumed/plumed2/releases/download/v2.5.1/plumed-src-2.5.1.tgz + URL_MD5 c2a7b519e32197a120cdf47e0f194f81 + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND /configure --prefix= + ${CONFIGURE_REQUEST_PIC} + --enable-modules=all + ${PLUMED_CONFIG_MPI} + ${PLUMED_CONFIG_OMP} + CXX=${PLUMED_CONFIG_CXX} + CC=${PLUMED_CONFIG_CC} + ) + ExternalProject_get_property(plumed_build INSTALL_DIR) + set(PLUMED_INSTALL_DIR ${INSTALL_DIR}) + list(APPEND LAMMPS_DEPS plumed_build) + if(PLUMED_MODE STREQUAL "STATIC") + add_definitions(-D__PLUMED_WRAPPER_CXX=1) + list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/libplumed.a ${GSL_LIBRARIES} ${LAPACK_LIBRARIES} ${CMAKE_DL_LIBS}) + elseif(PLUMED_MODE STREQUAL "SHARED") + list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/libplumed.so ${PLUMED_INSTALL_DIR}/lib/libplumedKernel.so ${CMAKE_DL_LIBS}) + elseif(PLUMED_MODE STREQUAL "RUNTIME") + add_definitions(-D__PLUMED_HAS_DLOPEN=1 -D__PLUMED_DEFAULT_KERNEL=${PLUMED_INSTALL_DIR}/lib/libplumedKernel.so) + list(APPEND LAMMPS_LINK_LIBS ${PLUMED_INSTALL_DIR}/lib/libplumedWrapper.a -rdynamic ${CMAKE_DL_LIBS}) + endif() + set(PLUMED_INCLUDE_DIRS "${PLUMED_INSTALL_DIR}/include") + else() + find_package(PkgConfig REQUIRED) + pkg_check_modules(PLUMED REQUIRED plumed) + if(PLUMED_MODE STREQUAL "STATIC") + add_definitions(-D__PLUMED_WRAPPER_CXX=1) + include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.static) + elseif(PLUMED_MODE STREQUAL "SHARED") + include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.shared) + elseif(PLUMED_MODE STREQUAL "RUNTIME") + add_definitions(-D__PLUMED_HAS_DLOPEN=1 -D__PLUMED_DEFAULT_KERNEL=${PLUMED_LIBDIR}/libplumedKernel.so) + include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.runtime) + endif() + list(APPEND LAMMPS_LINK_LIBS ${PLUMED_LOAD}) + endif() + include_directories(${PLUMED_INCLUDE_DIRS}) +endif() diff --git a/cmake/Modules/Packages/USER-QMMM.cmake b/cmake/Modules/Packages/USER-QMMM.cmake new file mode 100644 index 0000000000..0d3a7de39f --- /dev/null +++ b/cmake/Modules/Packages/USER-QMMM.cmake @@ -0,0 +1,6 @@ +if(PKG_USER-QMMM) + message(WARNING "Building QMMM with CMake is still experimental") + find_package(QE REQUIRED) + include_directories(${QE_INCLUDE_DIRS}) + list(APPEND LAMMPS_LINK_LIBS ${QE_LIBRARIES}) +endif() diff --git a/cmake/Modules/Packages/USER-QUIP.cmake b/cmake/Modules/Packages/USER-QUIP.cmake new file mode 100644 index 0000000000..ccefa033ea --- /dev/null +++ b/cmake/Modules/Packages/USER-QUIP.cmake @@ -0,0 +1,4 @@ +if(PKG_USER-QUIP) + find_package(QUIP REQUIRED) + list(APPEND LAMMPS_LINK_LIBS ${QUIP_LIBRARIES} ${LAPACK_LIBRARIES}) +endif() diff --git a/cmake/Modules/Packages/USER-SCAFACOS.cmake b/cmake/Modules/Packages/USER-SCAFACOS.cmake new file mode 100644 index 0000000000..b70dab465a --- /dev/null +++ b/cmake/Modules/Packages/USER-SCAFACOS.cmake @@ -0,0 +1,56 @@ +if(PKG_USER-SCAFACOS) + find_package(GSL REQUIRED) + find_package(PkgConfig QUIET) + set(DOWNLOAD_SCAFACOS_DEFAULT ON) + if(PKG_CONFIG_FOUND) + pkg_check_modules(SCAFACOS QUIET scafacos) + if(SCAFACOS_FOUND) + set(DOWNLOAD_SCAFACOS_DEFAULT OFF) + endif() + endif() + option(DOWNLOAD_SCAFACOS "Download ScaFaCoS library instead of using an already installed one" ${DOWNLOAD_SCAFACOS_DEFAULT}) + if(DOWNLOAD_SCAFACOS) + message(STATUS "ScaFaCoS download requested - we will build our own") + include(ExternalProject) + ExternalProject_Add(scafacos_build + URL https://github.com/scafacos/scafacos/releases/download/v1.0.1/scafacos-1.0.1.tar.gz + URL_MD5 bd46d74e3296bd8a444d731bb10c1738 + CONFIGURE_COMMAND /configure --prefix= --disable-doc + --enable-fcs-solvers=fmm,p2nfft,direct,ewald,p3m + --with-internal-fftw --with-internal-pfft + --with-internal-pnfft ${CONFIGURE_REQUEST_PIC} + FC=${CMAKE_MPI_Fortran_COMPILER} + CXX=${CMAKE_MPI_CXX_COMPILER} + CC=${CMAKE_MPI_C_COMPILER} + F77= + ) + ExternalProject_get_property(scafacos_build INSTALL_DIR) + set(SCAFACOS_BUILD_DIR ${INSTALL_DIR}) + set(SCAFACOS_INCLUDE_DIRS ${SCAFACOS_BUILD_DIR}/include) + list(APPEND LAMMPS_DEPS scafacos_build) + # list and order from pkg_config file of ScaFaCoS build + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_direct.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_ewald.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_fmm.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_p2nfft.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_p3m.a) + list(APPEND LAMMPS_LINK_LIBS ${GSL_LIBRARIES}) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_near.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_gridsort.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_resort.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_redist.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_common.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_pnfft.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_pfft.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_fftw3_mpi.a) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_fftw3.a) + list(APPEND LAMMPS_LINK_LIBS ${MPI_Fortran_LIBRARIES}) + list(APPEND LAMMPS_LINK_LIBS ${MPI_C_LIBRARIES}) + else() + find_package(PkgConfig REQUIRED) + pkg_check_modules(SCAFACOS REQUIRED scafacos) + list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_LDFLAGS}) + endif() + include_directories(${SCAFACOS_INCLUDE_DIRS}) +endif() diff --git a/cmake/Modules/Packages/USER-SMD.cmake b/cmake/Modules/Packages/USER-SMD.cmake new file mode 100644 index 0000000000..a868918e37 --- /dev/null +++ b/cmake/Modules/Packages/USER-SMD.cmake @@ -0,0 +1,28 @@ +if(PKG_USER-SMD) + find_package(Eigen3 NO_MODULE) + if(EIGEN3_FOUND) + set(DOWNLOAD_EIGEN3_DEFAULT OFF) + else() + set(DOWNLOAD_EIGEN3_DEFAULT ON) + endif() + option(DOWNLOAD_EIGEN3 "Download Eigen3 instead of using an already installed one)" ${DOWNLOAD_EIGEN3_DEFAULT}) + if(DOWNLOAD_EIGEN3) + message(STATUS "Eigen3 download requested - we will build our own") + include(ExternalProject) + ExternalProject_Add(Eigen3_build + URL http://bitbucket.org/eigen/eigen/get/3.3.7.tar.gz + URL_MD5 f2a417d083fe8ca4b8ed2bc613d20f07 + CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" + ) + ExternalProject_get_property(Eigen3_build SOURCE_DIR) + set(EIGEN3_INCLUDE_DIR ${SOURCE_DIR}) + list(APPEND LAMMPS_DEPS Eigen3_build) + else() + find_package(Eigen3 NO_MODULE) + mark_as_advanced(Eigen3_DIR) + if(NOT EIGEN3_FOUND) + message(FATAL_ERROR "Eigen3 not found, help CMake to find it by setting EIGEN3_INCLUDE_DIR, or set DOWNLOAD_EIGEN3=ON to download it") + endif() + endif() + include_directories(${EIGEN3_INCLUDE_DIR}) +endif() diff --git a/cmake/Modules/Packages/USER-VTK.cmake b/cmake/Modules/Packages/USER-VTK.cmake new file mode 100644 index 0000000000..d264577ca2 --- /dev/null +++ b/cmake/Modules/Packages/USER-VTK.cmake @@ -0,0 +1,6 @@ +if(PKG_USER-VTK) + find_package(VTK REQUIRED NO_MODULE) + include(${VTK_USE_FILE}) + add_definitions(-DLAMMPS_VTK) + list(APPEND LAMMPS_LINK_LIBS ${VTK_LIBRARIES}) +endif() From ae59ffe83eb253eb62e669873d2d8f05ea56fda6 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Sun, 9 Jun 2019 03:54:52 -0400 Subject: [PATCH 261/311] Move more CMake configurations to own files --- cmake/CMakeLists.txt | 482 +----------------------- cmake/Modules/Packages/CORESHELL.cmake | 13 + cmake/Modules/Packages/GPU.cmake | 194 ++++++++++ cmake/Modules/Packages/KOKKOS.cmake | 53 +++ cmake/Modules/Packages/OPT.cmake | 13 + cmake/Modules/Packages/QEQ.cmake | 20 + cmake/Modules/Packages/USER-INTEL.cmake | 119 ++++++ cmake/Modules/Packages/USER-OMP.cmake | 42 +++ cmake/Modules/Packages/USER-SDPD.cmake | 13 + 9 files changed, 475 insertions(+), 474 deletions(-) create mode 100644 cmake/Modules/Packages/CORESHELL.cmake create mode 100644 cmake/Modules/Packages/GPU.cmake create mode 100644 cmake/Modules/Packages/KOKKOS.cmake create mode 100644 cmake/Modules/Packages/OPT.cmake create mode 100644 cmake/Modules/Packages/QEQ.cmake create mode 100644 cmake/Modules/Packages/USER-INTEL.cmake create mode 100644 cmake/Modules/Packages/USER-OMP.cmake create mode 100644 cmake/Modules/Packages/USER-SDPD.cmake diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 193d808c37..6cb595e89e 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -498,480 +498,14 @@ endif() # packages which selectively include variants based on enabled styles # e.g. accelerator packages ###################################################################### -if(PKG_CORESHELL) - set(CORESHELL_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/CORESHELL) - set(CORESHELL_SOURCES) - set_property(GLOBAL PROPERTY "CORESHELL_SOURCES" "${CORESHELL_SOURCES}") - - # detects styles which have a CORESHELL version - RegisterStylesExt(${CORESHELL_SOURCES_DIR} cs CORESHELL_SOURCES) - - get_property(CORESHELL_SOURCES GLOBAL PROPERTY CORESHELL_SOURCES) - - list(APPEND LIB_SOURCES ${CORESHELL_SOURCES}) - include_directories(${CORESHELL_SOURCES_DIR}) -endif() - -# Fix qeq/fire requires MANYBODY (i.e. COMB and COMB3) to be installed -if(PKG_QEQ) - set(QEQ_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/QEQ) - file(GLOB QEQ_HEADERS ${QEQ_SOURCES_DIR}/fix*.h) - file(GLOB QEQ_SOURCES ${QEQ_SOURCES_DIR}/fix*.cpp) - - if(NOT PKG_MANYBODY) - list(REMOVE_ITEM QEQ_HEADERS ${QEQ_SOURCES_DIR}/fix_qeq_fire.h) - list(REMOVE_ITEM QEQ_SOURCES ${QEQ_SOURCES_DIR}/fix_qeq_fire.cpp) - endif() - set_property(GLOBAL PROPERTY "QEQ_SOURCES" "${QEQ_SOURCES}") - - foreach(MY_HEADER ${QEQ_HEADERS}) - AddStyleHeader(${MY_HEADER} FIX) - endforeach() - - get_property(QEQ_SOURCES GLOBAL PROPERTY QEQ_SOURCES) - list(APPEND LIB_SOURCES ${QEQ_SOURCES}) - include_directories(${QEQ_SOURCES_DIR}) -endif() - -if(PKG_USER-OMP) - set(USER-OMP_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-OMP) - set(USER-OMP_SOURCES ${USER-OMP_SOURCES_DIR}/thr_data.cpp - ${USER-OMP_SOURCES_DIR}/thr_omp.cpp - ${USER-OMP_SOURCES_DIR}/fix_omp.cpp - ${USER-OMP_SOURCES_DIR}/fix_nh_omp.cpp - ${USER-OMP_SOURCES_DIR}/fix_nh_sphere_omp.cpp - ${USER-OMP_SOURCES_DIR}/domain_omp.cpp) - add_definitions(-DLMP_USER_OMP) - set_property(GLOBAL PROPERTY "OMP_SOURCES" "${USER-OMP_SOURCES}") - - # detects styles which have USER-OMP version - RegisterStylesExt(${USER-OMP_SOURCES_DIR} omp OMP_SOURCES) - RegisterFixStyle(${USER-OMP_SOURCES_DIR}/fix_omp.h) - - get_property(USER-OMP_SOURCES GLOBAL PROPERTY OMP_SOURCES) - - # manually add package dependent source files from USER-OMP that do not provide styles - - if(PKG_ASPHERE) - list(APPEND USER-OMP_SOURCES ${USER-OMP_SOURCES_DIR}/fix_nh_asphere_omp.cpp) - endif() - - if(PKG_RIGID) - list(APPEND USER-OMP_SOURCES ${USER-OMP_SOURCES_DIR}/fix_rigid_nh_omp.cpp) - endif() - - if(PKG_USER-REAXC) - list(APPEND USER-OMP_SOURCES ${USER-OMP_SOURCES_DIR}/reaxc_bond_orders_omp.cpp - ${USER-OMP_SOURCES_DIR}/reaxc_hydrogen_bonds_omp.cpp - ${USER-OMP_SOURCES_DIR}/reaxc_nonbonded_omp.cpp - ${USER-OMP_SOURCES_DIR}/reaxc_bonds_omp.cpp - ${USER-OMP_SOURCES_DIR}/reaxc_init_md_omp.cpp - ${USER-OMP_SOURCES_DIR}/reaxc_torsion_angles_omp.cpp - ${USER-OMP_SOURCES_DIR}/reaxc_forces_omp.cpp - ${USER-OMP_SOURCES_DIR}/reaxc_multi_body_omp.cpp - ${USER-OMP_SOURCES_DIR}/reaxc_valence_angles_omp.cpp) - endif() - - list(APPEND LIB_SOURCES ${USER-OMP_SOURCES}) - include_directories(${USER-OMP_SOURCES_DIR}) -endif() - -# Fix rigid/meso requires RIGID to be installed -if(PKG_USER-SDPD) - set(USER-SDPD_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-SDPD) - - get_property(hlist GLOBAL PROPERTY FIX) - if(NOT PKG_RIGID) - list(REMOVE_ITEM hlist ${USER-SDPD_SOURCES_DIR}/fix_rigid_meso.h) - list(REMOVE_ITEM LIB_SOURCES ${USER-SDPD_SOURCES_DIR}/fix_rigid_meso.cpp) - endif() - set_property(GLOBAL PROPERTY FIX "${hlist}") - - include_directories(${USER-SDPD_SOURCES_DIR}) -endif() - -if(PKG_KOKKOS) - set(LAMMPS_LIB_KOKKOS_SRC_DIR ${LAMMPS_LIB_SOURCE_DIR}/kokkos) - set(LAMMPS_LIB_KOKKOS_BIN_DIR ${LAMMPS_LIB_BINARY_DIR}/kokkos) - add_definitions(-DLMP_KOKKOS) - add_subdirectory(${LAMMPS_LIB_KOKKOS_SRC_DIR} ${LAMMPS_LIB_KOKKOS_BIN_DIR}) - - set(Kokkos_INCLUDE_DIRS ${LAMMPS_LIB_KOKKOS_SRC_DIR}/core/src - ${LAMMPS_LIB_KOKKOS_SRC_DIR}/containers/src - ${LAMMPS_LIB_KOKKOS_SRC_DIR}/algorithms/src - ${LAMMPS_LIB_KOKKOS_BIN_DIR}) - include_directories(${Kokkos_INCLUDE_DIRS}) - list(APPEND LAMMPS_LINK_LIBS kokkos) - - set(KOKKOS_PKG_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/KOKKOS) - set(KOKKOS_PKG_SOURCES ${KOKKOS_PKG_SOURCES_DIR}/kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/atom_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/atom_vec_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/comm_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/comm_tiled_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/neighbor_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/neigh_list_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/neigh_bond_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/fix_nh_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/nbin_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/npair_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/domain_kokkos.cpp - ${KOKKOS_PKG_SOURCES_DIR}/modify_kokkos.cpp) - - if(PKG_KSPACE) - list(APPEND KOKKOS_PKG_SOURCES ${KOKKOS_PKG_SOURCES_DIR}/gridcomm_kokkos.cpp) - endif() - - set_property(GLOBAL PROPERTY "KOKKOS_PKG_SOURCES" "${KOKKOS_PKG_SOURCES}") - - # detects styles which have KOKKOS version - RegisterStylesExt(${KOKKOS_PKG_SOURCES_DIR} kokkos KOKKOS_PKG_SOURCES) - - # register kokkos-only styles - RegisterNBinStyle(${KOKKOS_PKG_SOURCES_DIR}/nbin_kokkos.h) - RegisterNPairStyle(${KOKKOS_PKG_SOURCES_DIR}/npair_kokkos.h) - - if(PKG_USER-DPD) - get_property(KOKKOS_PKG_SOURCES GLOBAL PROPERTY KOKKOS_PKG_SOURCES) - list(APPEND KOKKOS_PKG_SOURCES ${KOKKOS_PKG_SOURCES_DIR}/npair_ssa_kokkos.cpp) - RegisterNPairStyle(${KOKKOS_PKG_SOURCES_DIR}/npair_ssa_kokkos.h) - set_property(GLOBAL PROPERTY "KOKKOS_PKG_SOURCES" "${KOKKOS_PKG_SOURCES}") - endif() - - get_property(KOKKOS_PKG_SOURCES GLOBAL PROPERTY KOKKOS_PKG_SOURCES) - - list(APPEND LIB_SOURCES ${KOKKOS_PKG_SOURCES}) - include_directories(${KOKKOS_PKG_SOURCES_DIR}) -endif() - -if(PKG_OPT) - set(OPT_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/OPT) - set(OPT_SOURCES) - set_property(GLOBAL PROPERTY "OPT_SOURCES" "${OPT_SOURCES}") - - # detects styles which have OPT version - RegisterStylesExt(${OPT_SOURCES_DIR} opt OPT_SOURCES) - - get_property(OPT_SOURCES GLOBAL PROPERTY OPT_SOURCES) - - list(APPEND LIB_SOURCES ${OPT_SOURCES}) - include_directories(${OPT_SOURCES_DIR}) -endif() - -if(PKG_USER-INTEL) - include(CheckIncludeFile) - check_include_file(immintrin.h FOUND_IMMINTRIN) - if(NOT FOUND_IMMINTRIN) - message(FATAL_ERROR "immintrin.h header not found, Intel package won't work without it") - endif() - - add_definitions(-DLMP_USER_INTEL) - - set(INTEL_ARCH "cpu" CACHE STRING "Architectures used by USER-INTEL (cpu or knl)") - set(INTEL_ARCH_VALUES cpu knl) - set_property(CACHE INTEL_ARCH PROPERTY STRINGS ${INTEL_ARCH_VALUES}) - validate_option(INTEL_ARCH INTEL_ARCH_VALUES) - string(TOUPPER ${INTEL_ARCH} INTEL_ARCH) - - find_package(Threads QUIET) - if(Threads_FOUND) - set(INTEL_LRT_MODE "threads" CACHE STRING "Long-range threads mode (none, threads, or c++11)") - else() - set(INTEL_LRT_MODE "none" CACHE STRING "Long-range threads mode (none, threads, or c++11)") - endif() - set(INTEL_LRT_VALUES none threads c++11) - set_property(CACHE INTEL_LRT_MODE PROPERTY STRINGS ${INTEL_LRT_VALUES}) - validate_option(INTEL_LRT_MODE INTEL_LRT_VALUES) - string(TOUPPER ${INTEL_LRT_MODE} INTEL_LRT_MODE) - if(INTEL_LRT_MODE STREQUAL "THREADS") - if(Threads_FOUND) - add_definitions(-DLMP_INTEL_USELRT) - list(APPEND LAMMPS_LINK_LIBS ${CMAKE_THREAD_LIBS_INIT}) - else() - message(FATAL_ERROR "Must have working threads library for Long-range thread support") - endif() - endif() - if(INTEL_LRT_MODE STREQUAL "C++11") - add_definitions(-DLMP_INTEL_USERLRT -DLMP_INTEL_LRT11) - endif() - - if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16) - message(FATAL_ERROR "USER-INTEL needs at least a 2016 Intel compiler, found ${CMAKE_CXX_COMPILER_VERSION}") - endif() - else() - message(WARNING "USER-INTEL gives best performance with Intel compilers") - endif() - - find_package(TBB QUIET) - if(TBB_FOUND) - list(APPEND LAMMPS_LINK_LIBS ${TBB_MALLOC_LIBRARIES}) - else() - add_definitions(-DLMP_INTEL_NO_TBB) - if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") - message(WARNING "USER-INTEL with Intel compilers should use TBB malloc libraries") - endif() - endif() - - find_package(MKL QUIET) - if(MKL_FOUND) - add_definitions(-DLMP_USE_MKL_RNG) - list(APPEND LAMMPS_LINK_LIBS ${MKL_LIBRARIES}) - else() - message(STATUS "Pair style dpd/intel will be faster with MKL libraries") - endif() - - if((NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows") AND (NOT ${LAMMPS_MEMALIGN} STREQUAL "64") AND (NOT ${LAMMPS_MEMALIGN} STREQUAL "128") AND (NOT ${LAMMPS_MEMALIGN} STREQUAL "256")) - message(FATAL_ERROR "USER-INTEL only supports memory alignment of 64, 128 or 256 on this platform") - endif() - - if(INTEL_ARCH STREQUAL "KNL") - if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "Intel") - message(FATAL_ERROR "Must use Intel compiler with USER-INTEL for KNL architecture") - endif() - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -xHost -qopenmp -qoffload") - set(MIC_OPTIONS "-qoffload-option,mic,compiler,\"-fp-model fast=2 -mGLOB_default_function_attrs=\\\"gather_scatter_loop_unroll=4\\\"\"") - add_compile_options(-xMIC-AVX512 -qoffload -fno-alias -ansi-alias -restrict -qoverride-limits ${MIC_OPTIONS}) - add_definitions(-DLMP_INTEL_OFFLOAD) - else() - if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") - if(CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.3 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.4) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xCOMMON-AVX512") - else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xHost") - endif() - include(CheckCXXCompilerFlag) - foreach(_FLAG -O2 -fp-model fast=2 -no-prec-div -qoverride-limits -qopt-zmm-usage=high -qno-offload -fno-alias -ansi-alias -restrict) - check_cxx_compiler_flag("${__FLAG}" COMPILER_SUPPORTS${_FLAG}) - if(COMPILER_SUPPORTS${_FLAG}) - add_compile_options(${_FLAG}) - endif() - endforeach() - else() - add_compile_options(-O3 -ffast-math) - endif() - endif() - - # collect sources - set(USER-INTEL_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-INTEL) - set(USER-INTEL_SOURCES ${USER-INTEL_SOURCES_DIR}/fix_intel.cpp - ${USER-INTEL_SOURCES_DIR}/fix_nh_intel.cpp - ${USER-INTEL_SOURCES_DIR}/intel_buffers.cpp - ${USER-INTEL_SOURCES_DIR}/nbin_intel.cpp - ${USER-INTEL_SOURCES_DIR}/npair_intel.cpp) - - set_property(GLOBAL PROPERTY "USER-INTEL_SOURCES" "${USER-INTEL_SOURCES}") - - # detect styles which have a USER-INTEL version - RegisterStylesExt(${USER-INTEL_SOURCES_DIR} intel USER-INTEL_SOURCES) - RegisterNBinStyle(${USER-INTEL_SOURCES_DIR}/nbin_intel.h) - RegisterNPairStyle(${USER-INTEL_SOURCES_DIR}/npair_intel.h) - RegisterFixStyle(${USER-INTEL_SOURCES_DIR}/fix_intel.h) - - get_property(USER-INTEL_SOURCES GLOBAL PROPERTY USER-INTEL_SOURCES) - if(PKG_KSPACE) - list(APPEND USER-INTEL_SOURCES ${USER-INTEL_SOURCES_DIR}/verlet_lrt_intel.cpp) - RegisterIntegrateStyle(${USER-INTEL_SOURCES_DIR}/verlet_lrt_intel.h) - endif() - - list(APPEND LIB_SOURCES ${USER-INTEL_SOURCES}) - include_directories(${USER-INTEL_SOURCES_DIR}) -endif() - -if(PKG_GPU) - if (CMAKE_VERSION VERSION_LESS "3.1") - message(FATAL_ERROR "For the GPU package you need at least cmake-3.1") - endif() - set(GPU_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/GPU) - set(GPU_SOURCES ${GPU_SOURCES_DIR}/gpu_extra.h - ${GPU_SOURCES_DIR}/fix_gpu.h - ${GPU_SOURCES_DIR}/fix_gpu.cpp) - - set(GPU_API "opencl" CACHE STRING "API used by GPU package") - set(GPU_API_VALUES opencl cuda) - set_property(CACHE GPU_API PROPERTY STRINGS ${GPU_API_VALUES}) - validate_option(GPU_API GPU_API_VALUES) - string(TOUPPER ${GPU_API} GPU_API) - - set(GPU_PREC "mixed" CACHE STRING "LAMMPS GPU precision") - set(GPU_PREC_VALUES double mixed single) - set_property(CACHE GPU_PREC PROPERTY STRINGS ${GPU_PREC_VALUES}) - validate_option(GPU_PREC GPU_PREC_VALUES) - string(TOUPPER ${GPU_PREC} GPU_PREC) - - if(GPU_PREC STREQUAL "DOUBLE") - set(GPU_PREC_SETTING "DOUBLE_DOUBLE") - elseif(GPU_PREC STREQUAL "MIXED") - set(GPU_PREC_SETTING "SINGLE_DOUBLE") - elseif(GPU_PREC STREQUAL "SINGLE") - set(GPU_PREC_SETTING "SINGLE_SINGLE") - endif() - - file(GLOB GPU_LIB_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/gpu/[^.]*.cpp) - file(MAKE_DIRECTORY ${LAMMPS_LIB_BINARY_DIR}/gpu) - - if(GPU_API STREQUAL "CUDA") - find_package(CUDA REQUIRED) - find_program(BIN2C bin2c) - if(NOT BIN2C) - message(FATAL_ERROR "Could not find bin2c, use -DBIN2C=/path/to/bin2c to help cmake finding it.") - endif() - option(CUDPP_OPT "Enable CUDPP_OPT" ON) - option(CUDA_MPS_SUPPORT "Enable tweaks to support CUDA Multi-process service (MPS)" OFF) - if(CUDA_MPS_SUPPORT) - set(GPU_CUDA_MPS_FLAGS "-DCUDA_PROXY") - endif() - - set(GPU_ARCH "sm_30" CACHE STRING "LAMMPS GPU CUDA SM primary architecture (e.g. sm_60)") - - file(GLOB GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/[^.]*.cu ${CMAKE_CURRENT_SOURCE_DIR}/gpu/[^.]*.cu) - list(REMOVE_ITEM GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_pppm.cu) - - cuda_include_directories(${LAMMPS_LIB_SOURCE_DIR}/gpu ${LAMMPS_LIB_BINARY_DIR}/gpu) - - if(CUDPP_OPT) - cuda_include_directories(${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini) - file(GLOB GPU_LIB_CUDPP_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini/[^.]*.cpp) - file(GLOB GPU_LIB_CUDPP_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini/[^.]*.cu) - endif() - - # build arch/gencode commands for nvcc based on CUDA toolkit version and use choice - # --arch translates directly instead of JIT, so this should be for the preferred or most common architecture - set(GPU_CUDA_GENCODE "-arch=${GPU_ARCH} ") - # Fermi (GPU Arch 2.x) is supported by CUDA 3.2 to CUDA 8.0 - if((CUDA_VERSION VERSION_GREATER "3.1") AND (CUDA_VERSION VERSION_LESS "9.0")) - string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_20,code=[sm_20,compute_20] ") - endif() - # Kepler (GPU Arch 3.x) is supported by CUDA 5 and later - if(CUDA_VERSION VERSION_GREATER "4.9") - string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_30,code=[sm_30,compute_30] -gencode arch=compute_35,code=[sm_35,compute_35] ") - endif() - # Maxwell (GPU Arch 5.x) is supported by CUDA 6 and later - if(CUDA_VERSION VERSION_GREATER "5.9") - string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_50,code=[sm_50,compute_50] -gencode arch=compute_52,code=[sm_52,compute_52] ") - endif() - # Pascal (GPU Arch 6.x) is supported by CUDA 8 and later - if(CUDA_VERSION VERSION_GREATER "7.9") - string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_60,code=[sm_60,compute_60] -gencode arch=compute_61,code=[sm_61,compute_61] ") - endif() - # Volta (GPU Arch 7.0) is supported by CUDA 9 and later - if(CUDA_VERSION VERSION_GREATER "8.9") - string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_70,code=[sm_70,compute_70] ") - endif() - # Turing (GPU Arch 7.5) is supported by CUDA 10 and later - if(CUDA_VERSION VERSION_GREATER "9.9") - string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_75,code=[sm_75,compute_75] ") - endif() - - cuda_compile_fatbin(GPU_GEN_OBJS ${GPU_LIB_CU} OPTIONS - -DUNIX -O3 --use_fast_math -Wno-deprecated-gpu-targets -DNV_KERNEL -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) - - cuda_compile(GPU_OBJS ${GPU_LIB_CUDPP_CU} OPTIONS ${CUDA_REQUEST_PIC} - -DUNIX -O3 --use_fast_math -Wno-deprecated-gpu-targets -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) - - foreach(CU_OBJ ${GPU_GEN_OBJS}) - get_filename_component(CU_NAME ${CU_OBJ} NAME_WE) - string(REGEX REPLACE "^.*_lal_" "" CU_NAME "${CU_NAME}") - add_custom_command(OUTPUT ${LAMMPS_LIB_BINARY_DIR}/gpu/${CU_NAME}_cubin.h - COMMAND ${BIN2C} -c -n ${CU_NAME} ${CU_OBJ} > ${LAMMPS_LIB_BINARY_DIR}/gpu/${CU_NAME}_cubin.h - DEPENDS ${CU_OBJ} - COMMENT "Generating ${CU_NAME}_cubin.h") - list(APPEND GPU_LIB_SOURCES ${LAMMPS_LIB_BINARY_DIR}/gpu/${CU_NAME}_cubin.h) - endforeach() - set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${LAMMPS_LIB_BINARY_DIR}/gpu/*_cubin.h") - - - add_library(gpu STATIC ${GPU_LIB_SOURCES} ${GPU_LIB_CUDPP_SOURCES} ${GPU_OBJS}) - target_link_libraries(gpu ${CUDA_LIBRARIES} ${CUDA_CUDA_LIBRARY}) - target_include_directories(gpu PRIVATE ${LAMMPS_LIB_BINARY_DIR}/gpu ${CUDA_INCLUDE_DIRS}) - target_compile_definitions(gpu PRIVATE -D_${GPU_PREC_SETTING} -DMPI_GERYON -DUCL_NO_EXIT ${GPU_CUDA_MPS_FLAGS}) - if(CUDPP_OPT) - target_include_directories(gpu PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini) - target_compile_definitions(gpu PRIVATE -DUSE_CUDPP) - endif() - - list(APPEND LAMMPS_LINK_LIBS gpu) - - add_executable(nvc_get_devices ${LAMMPS_LIB_SOURCE_DIR}/gpu/geryon/ucl_get_devices.cpp) - target_compile_definitions(nvc_get_devices PRIVATE -DUCL_CUDADR) - target_link_libraries(nvc_get_devices PRIVATE ${CUDA_LIBRARIES} ${CUDA_CUDA_LIBRARY}) - target_include_directories(nvc_get_devices PRIVATE ${CUDA_INCLUDE_DIRS}) - - - elseif(GPU_API STREQUAL "OPENCL") - find_package(OpenCL REQUIRED) - set(OCL_TUNE "generic" CACHE STRING "OpenCL Device Tuning") - set(OCL_TUNE_VALUES intel fermi kepler cypress generic) - set_property(CACHE OCL_TUNE PROPERTY STRINGS ${OCL_TUNE_VALUES}) - validate_option(OCL_TUNE OCL_TUNE_VALUES) - string(TOUPPER ${OCL_TUNE} OCL_TUNE) - - include(OpenCLUtils) - set(OCL_COMMON_HEADERS ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_preprocessor.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_aux_fun1.h) - - file(GLOB GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/[^.]*.cu) - list(REMOVE_ITEM GPU_LIB_CU - ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_gayberne.cu - ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_gayberne_lj.cu - ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_re_squared.cu - ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_re_squared_lj.cu - ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff.cu - ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_zbl.cu - ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_mod.cu - ) - - foreach(GPU_KERNEL ${GPU_LIB_CU}) - get_filename_component(basename ${GPU_KERNEL} NAME_WE) - string(SUBSTRING ${basename} 4 -1 KERNEL_NAME) - GenerateOpenCLHeader(${KERNEL_NAME} ${CMAKE_CURRENT_BINARY_DIR}/gpu/${KERNEL_NAME}_cl.h ${OCL_COMMON_HEADERS} ${GPU_KERNEL}) - list(APPEND GPU_LIB_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/gpu/${KERNEL_NAME}_cl.h) - endforeach() - - GenerateOpenCLHeader(gayberne ${CMAKE_CURRENT_BINARY_DIR}/gpu/gayberne_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_ellipsoid_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_gayberne.cu) - GenerateOpenCLHeader(gayberne_lj ${CMAKE_CURRENT_BINARY_DIR}/gpu/gayberne_lj_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_ellipsoid_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_gayberne_lj.cu) - GenerateOpenCLHeader(re_squared ${CMAKE_CURRENT_BINARY_DIR}/gpu/re_squared_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_ellipsoid_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_re_squared.cu) - GenerateOpenCLHeader(re_squared_lj ${CMAKE_CURRENT_BINARY_DIR}/gpu/re_squared_lj_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_ellipsoid_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_re_squared_lj.cu) - GenerateOpenCLHeader(tersoff ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff.cu) - GenerateOpenCLHeader(tersoff_zbl ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_zbl_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_zbl_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_zbl.cu) - GenerateOpenCLHeader(tersoff_mod ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_mod_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_mod_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_mod.cu) - - list(APPEND GPU_LIB_SOURCES - ${CMAKE_CURRENT_BINARY_DIR}/gpu/gayberne_cl.h - ${CMAKE_CURRENT_BINARY_DIR}/gpu/gayberne_lj_cl.h - ${CMAKE_CURRENT_BINARY_DIR}/gpu/re_squared_cl.h - ${CMAKE_CURRENT_BINARY_DIR}/gpu/re_squared_lj_cl.h - ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_cl.h - ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_zbl_cl.h - ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_mod_cl.h - ) - - add_library(gpu STATIC ${GPU_LIB_SOURCES}) - target_link_libraries(gpu ${OpenCL_LIBRARIES}) - target_include_directories(gpu PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/gpu ${OpenCL_INCLUDE_DIRS}) - target_compile_definitions(gpu PRIVATE -D_${GPU_PREC_SETTING} -D${OCL_TUNE}_OCL -DMPI_GERYON -DUCL_NO_EXIT) - target_compile_definitions(gpu PRIVATE -DUSE_OPENCL) - - list(APPEND LAMMPS_LINK_LIBS gpu) - - add_executable(ocl_get_devices ${LAMMPS_LIB_SOURCE_DIR}/gpu/geryon/ucl_get_devices.cpp) - target_compile_definitions(ocl_get_devices PRIVATE -DUCL_OPENCL) - target_link_libraries(ocl_get_devices PRIVATE ${OpenCL_LIBRARIES}) - target_include_directories(ocl_get_devices PRIVATE ${OpenCL_INCLUDE_DIRS}) - endif() - - # GPU package - FindStyleHeaders(${GPU_SOURCES_DIR} FIX_CLASS fix_ FIX) - - set_property(GLOBAL PROPERTY "GPU_SOURCES" "${GPU_SOURCES}") - - # detects styles which have GPU version - RegisterStylesExt(${GPU_SOURCES_DIR} gpu GPU_SOURCES) - - get_property(GPU_SOURCES GLOBAL PROPERTY GPU_SOURCES) - - list(APPEND LIB_SOURCES ${GPU_SOURCES}) - include_directories(${GPU_SOURCES_DIR}) -endif() +include(Packages/CORESHELL) +include(Packages/QEQ) +include(Packages/USER-OMP) +include(Packages/USER-SDPD) +include(Packages/KOKKOS) +include(Packages/OPT) +include(Packages/USER-INTEL) +include(Packages/GPU) ###################################################### # Generate style headers based on global list of diff --git a/cmake/Modules/Packages/CORESHELL.cmake b/cmake/Modules/Packages/CORESHELL.cmake new file mode 100644 index 0000000000..591477c899 --- /dev/null +++ b/cmake/Modules/Packages/CORESHELL.cmake @@ -0,0 +1,13 @@ +if(PKG_CORESHELL) + set(CORESHELL_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/CORESHELL) + set(CORESHELL_SOURCES) + set_property(GLOBAL PROPERTY "CORESHELL_SOURCES" "${CORESHELL_SOURCES}") + + # detects styles which have a CORESHELL version + RegisterStylesExt(${CORESHELL_SOURCES_DIR} cs CORESHELL_SOURCES) + + get_property(CORESHELL_SOURCES GLOBAL PROPERTY CORESHELL_SOURCES) + + list(APPEND LIB_SOURCES ${CORESHELL_SOURCES}) + include_directories(${CORESHELL_SOURCES_DIR}) +endif() diff --git a/cmake/Modules/Packages/GPU.cmake b/cmake/Modules/Packages/GPU.cmake new file mode 100644 index 0000000000..dab9d51a3f --- /dev/null +++ b/cmake/Modules/Packages/GPU.cmake @@ -0,0 +1,194 @@ +if(PKG_GPU) + if (CMAKE_VERSION VERSION_LESS "3.1") + message(FATAL_ERROR "For the GPU package you need at least cmake-3.1") + endif() + set(GPU_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/GPU) + set(GPU_SOURCES ${GPU_SOURCES_DIR}/gpu_extra.h + ${GPU_SOURCES_DIR}/fix_gpu.h + ${GPU_SOURCES_DIR}/fix_gpu.cpp) + + set(GPU_API "opencl" CACHE STRING "API used by GPU package") + set(GPU_API_VALUES opencl cuda) + set_property(CACHE GPU_API PROPERTY STRINGS ${GPU_API_VALUES}) + validate_option(GPU_API GPU_API_VALUES) + string(TOUPPER ${GPU_API} GPU_API) + + set(GPU_PREC "mixed" CACHE STRING "LAMMPS GPU precision") + set(GPU_PREC_VALUES double mixed single) + set_property(CACHE GPU_PREC PROPERTY STRINGS ${GPU_PREC_VALUES}) + validate_option(GPU_PREC GPU_PREC_VALUES) + string(TOUPPER ${GPU_PREC} GPU_PREC) + + if(GPU_PREC STREQUAL "DOUBLE") + set(GPU_PREC_SETTING "DOUBLE_DOUBLE") + elseif(GPU_PREC STREQUAL "MIXED") + set(GPU_PREC_SETTING "SINGLE_DOUBLE") + elseif(GPU_PREC STREQUAL "SINGLE") + set(GPU_PREC_SETTING "SINGLE_SINGLE") + endif() + + file(GLOB GPU_LIB_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/gpu/[^.]*.cpp) + file(MAKE_DIRECTORY ${LAMMPS_LIB_BINARY_DIR}/gpu) + + if(GPU_API STREQUAL "CUDA") + find_package(CUDA REQUIRED) + find_program(BIN2C bin2c) + if(NOT BIN2C) + message(FATAL_ERROR "Could not find bin2c, use -DBIN2C=/path/to/bin2c to help cmake finding it.") + endif() + option(CUDPP_OPT "Enable CUDPP_OPT" ON) + option(CUDA_MPS_SUPPORT "Enable tweaks to support CUDA Multi-process service (MPS)" OFF) + if(CUDA_MPS_SUPPORT) + set(GPU_CUDA_MPS_FLAGS "-DCUDA_PROXY") + endif() + + set(GPU_ARCH "sm_30" CACHE STRING "LAMMPS GPU CUDA SM primary architecture (e.g. sm_60)") + + file(GLOB GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/[^.]*.cu ${CMAKE_CURRENT_SOURCE_DIR}/gpu/[^.]*.cu) + list(REMOVE_ITEM GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_pppm.cu) + + cuda_include_directories(${LAMMPS_LIB_SOURCE_DIR}/gpu ${LAMMPS_LIB_BINARY_DIR}/gpu) + + if(CUDPP_OPT) + cuda_include_directories(${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini) + file(GLOB GPU_LIB_CUDPP_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini/[^.]*.cpp) + file(GLOB GPU_LIB_CUDPP_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini/[^.]*.cu) + endif() + + # build arch/gencode commands for nvcc based on CUDA toolkit version and use choice + # --arch translates directly instead of JIT, so this should be for the preferred or most common architecture + set(GPU_CUDA_GENCODE "-arch=${GPU_ARCH} ") + # Fermi (GPU Arch 2.x) is supported by CUDA 3.2 to CUDA 8.0 + if((CUDA_VERSION VERSION_GREATER "3.1") AND (CUDA_VERSION VERSION_LESS "9.0")) + string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_20,code=[sm_20,compute_20] ") + endif() + # Kepler (GPU Arch 3.x) is supported by CUDA 5 and later + if(CUDA_VERSION VERSION_GREATER "4.9") + string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_30,code=[sm_30,compute_30] -gencode arch=compute_35,code=[sm_35,compute_35] ") + endif() + # Maxwell (GPU Arch 5.x) is supported by CUDA 6 and later + if(CUDA_VERSION VERSION_GREATER "5.9") + string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_50,code=[sm_50,compute_50] -gencode arch=compute_52,code=[sm_52,compute_52] ") + endif() + # Pascal (GPU Arch 6.x) is supported by CUDA 8 and later + if(CUDA_VERSION VERSION_GREATER "7.9") + string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_60,code=[sm_60,compute_60] -gencode arch=compute_61,code=[sm_61,compute_61] ") + endif() + # Volta (GPU Arch 7.0) is supported by CUDA 9 and later + if(CUDA_VERSION VERSION_GREATER "8.9") + string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_70,code=[sm_70,compute_70] ") + endif() + # Turing (GPU Arch 7.5) is supported by CUDA 10 and later + if(CUDA_VERSION VERSION_GREATER "9.9") + string(APPEND GPU_CUDA_GENCODE "-gencode arch=compute_75,code=[sm_75,compute_75] ") + endif() + + cuda_compile_fatbin(GPU_GEN_OBJS ${GPU_LIB_CU} OPTIONS + -DUNIX -O3 --use_fast_math -Wno-deprecated-gpu-targets -DNV_KERNEL -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) + + cuda_compile(GPU_OBJS ${GPU_LIB_CUDPP_CU} OPTIONS ${CUDA_REQUEST_PIC} + -DUNIX -O3 --use_fast_math -Wno-deprecated-gpu-targets -DUCL_CUDADR ${GPU_CUDA_GENCODE} -D_${GPU_PREC_SETTING}) + + foreach(CU_OBJ ${GPU_GEN_OBJS}) + get_filename_component(CU_NAME ${CU_OBJ} NAME_WE) + string(REGEX REPLACE "^.*_lal_" "" CU_NAME "${CU_NAME}") + add_custom_command(OUTPUT ${LAMMPS_LIB_BINARY_DIR}/gpu/${CU_NAME}_cubin.h + COMMAND ${BIN2C} -c -n ${CU_NAME} ${CU_OBJ} > ${LAMMPS_LIB_BINARY_DIR}/gpu/${CU_NAME}_cubin.h + DEPENDS ${CU_OBJ} + COMMENT "Generating ${CU_NAME}_cubin.h") + list(APPEND GPU_LIB_SOURCES ${LAMMPS_LIB_BINARY_DIR}/gpu/${CU_NAME}_cubin.h) + endforeach() + set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${LAMMPS_LIB_BINARY_DIR}/gpu/*_cubin.h") + + + add_library(gpu STATIC ${GPU_LIB_SOURCES} ${GPU_LIB_CUDPP_SOURCES} ${GPU_OBJS}) + target_link_libraries(gpu ${CUDA_LIBRARIES} ${CUDA_CUDA_LIBRARY}) + target_include_directories(gpu PRIVATE ${LAMMPS_LIB_BINARY_DIR}/gpu ${CUDA_INCLUDE_DIRS}) + target_compile_definitions(gpu PRIVATE -D_${GPU_PREC_SETTING} -DMPI_GERYON -DUCL_NO_EXIT ${GPU_CUDA_MPS_FLAGS}) + if(CUDPP_OPT) + target_include_directories(gpu PRIVATE ${LAMMPS_LIB_SOURCE_DIR}/gpu/cudpp_mini) + target_compile_definitions(gpu PRIVATE -DUSE_CUDPP) + endif() + + list(APPEND LAMMPS_LINK_LIBS gpu) + + add_executable(nvc_get_devices ${LAMMPS_LIB_SOURCE_DIR}/gpu/geryon/ucl_get_devices.cpp) + target_compile_definitions(nvc_get_devices PRIVATE -DUCL_CUDADR) + target_link_libraries(nvc_get_devices PRIVATE ${CUDA_LIBRARIES} ${CUDA_CUDA_LIBRARY}) + target_include_directories(nvc_get_devices PRIVATE ${CUDA_INCLUDE_DIRS}) + + + elseif(GPU_API STREQUAL "OPENCL") + find_package(OpenCL REQUIRED) + set(OCL_TUNE "generic" CACHE STRING "OpenCL Device Tuning") + set(OCL_TUNE_VALUES intel fermi kepler cypress generic) + set_property(CACHE OCL_TUNE PROPERTY STRINGS ${OCL_TUNE_VALUES}) + validate_option(OCL_TUNE OCL_TUNE_VALUES) + string(TOUPPER ${OCL_TUNE} OCL_TUNE) + + include(OpenCLUtils) + set(OCL_COMMON_HEADERS ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_preprocessor.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_aux_fun1.h) + + file(GLOB GPU_LIB_CU ${LAMMPS_LIB_SOURCE_DIR}/gpu/[^.]*.cu) + list(REMOVE_ITEM GPU_LIB_CU + ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_gayberne.cu + ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_gayberne_lj.cu + ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_re_squared.cu + ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_re_squared_lj.cu + ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff.cu + ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_zbl.cu + ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_mod.cu + ) + + foreach(GPU_KERNEL ${GPU_LIB_CU}) + get_filename_component(basename ${GPU_KERNEL} NAME_WE) + string(SUBSTRING ${basename} 4 -1 KERNEL_NAME) + GenerateOpenCLHeader(${KERNEL_NAME} ${CMAKE_CURRENT_BINARY_DIR}/gpu/${KERNEL_NAME}_cl.h ${OCL_COMMON_HEADERS} ${GPU_KERNEL}) + list(APPEND GPU_LIB_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/gpu/${KERNEL_NAME}_cl.h) + endforeach() + + GenerateOpenCLHeader(gayberne ${CMAKE_CURRENT_BINARY_DIR}/gpu/gayberne_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_ellipsoid_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_gayberne.cu) + GenerateOpenCLHeader(gayberne_lj ${CMAKE_CURRENT_BINARY_DIR}/gpu/gayberne_lj_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_ellipsoid_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_gayberne_lj.cu) + GenerateOpenCLHeader(re_squared ${CMAKE_CURRENT_BINARY_DIR}/gpu/re_squared_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_ellipsoid_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_re_squared.cu) + GenerateOpenCLHeader(re_squared_lj ${CMAKE_CURRENT_BINARY_DIR}/gpu/re_squared_lj_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_ellipsoid_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_re_squared_lj.cu) + GenerateOpenCLHeader(tersoff ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff.cu) + GenerateOpenCLHeader(tersoff_zbl ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_zbl_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_zbl_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_zbl.cu) + GenerateOpenCLHeader(tersoff_mod ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_mod_cl.h ${OCL_COMMON_HEADERS} ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_mod_extra.h ${LAMMPS_LIB_SOURCE_DIR}/gpu/lal_tersoff_mod.cu) + + list(APPEND GPU_LIB_SOURCES + ${CMAKE_CURRENT_BINARY_DIR}/gpu/gayberne_cl.h + ${CMAKE_CURRENT_BINARY_DIR}/gpu/gayberne_lj_cl.h + ${CMAKE_CURRENT_BINARY_DIR}/gpu/re_squared_cl.h + ${CMAKE_CURRENT_BINARY_DIR}/gpu/re_squared_lj_cl.h + ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_cl.h + ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_zbl_cl.h + ${CMAKE_CURRENT_BINARY_DIR}/gpu/tersoff_mod_cl.h + ) + + add_library(gpu STATIC ${GPU_LIB_SOURCES}) + target_link_libraries(gpu ${OpenCL_LIBRARIES}) + target_include_directories(gpu PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/gpu ${OpenCL_INCLUDE_DIRS}) + target_compile_definitions(gpu PRIVATE -D_${GPU_PREC_SETTING} -D${OCL_TUNE}_OCL -DMPI_GERYON -DUCL_NO_EXIT) + target_compile_definitions(gpu PRIVATE -DUSE_OPENCL) + + list(APPEND LAMMPS_LINK_LIBS gpu) + + add_executable(ocl_get_devices ${LAMMPS_LIB_SOURCE_DIR}/gpu/geryon/ucl_get_devices.cpp) + target_compile_definitions(ocl_get_devices PRIVATE -DUCL_OPENCL) + target_link_libraries(ocl_get_devices PRIVATE ${OpenCL_LIBRARIES}) + target_include_directories(ocl_get_devices PRIVATE ${OpenCL_INCLUDE_DIRS}) + endif() + + # GPU package + FindStyleHeaders(${GPU_SOURCES_DIR} FIX_CLASS fix_ FIX) + + set_property(GLOBAL PROPERTY "GPU_SOURCES" "${GPU_SOURCES}") + + # detects styles which have GPU version + RegisterStylesExt(${GPU_SOURCES_DIR} gpu GPU_SOURCES) + + get_property(GPU_SOURCES GLOBAL PROPERTY GPU_SOURCES) + + list(APPEND LIB_SOURCES ${GPU_SOURCES}) + include_directories(${GPU_SOURCES_DIR}) +endif() diff --git a/cmake/Modules/Packages/KOKKOS.cmake b/cmake/Modules/Packages/KOKKOS.cmake new file mode 100644 index 0000000000..2f7d401802 --- /dev/null +++ b/cmake/Modules/Packages/KOKKOS.cmake @@ -0,0 +1,53 @@ +if(PKG_KOKKOS) + set(LAMMPS_LIB_KOKKOS_SRC_DIR ${LAMMPS_LIB_SOURCE_DIR}/kokkos) + set(LAMMPS_LIB_KOKKOS_BIN_DIR ${LAMMPS_LIB_BINARY_DIR}/kokkos) + add_definitions(-DLMP_KOKKOS) + add_subdirectory(${LAMMPS_LIB_KOKKOS_SRC_DIR} ${LAMMPS_LIB_KOKKOS_BIN_DIR}) + + set(Kokkos_INCLUDE_DIRS ${LAMMPS_LIB_KOKKOS_SRC_DIR}/core/src + ${LAMMPS_LIB_KOKKOS_SRC_DIR}/containers/src + ${LAMMPS_LIB_KOKKOS_SRC_DIR}/algorithms/src + ${LAMMPS_LIB_KOKKOS_BIN_DIR}) + include_directories(${Kokkos_INCLUDE_DIRS}) + list(APPEND LAMMPS_LINK_LIBS kokkos) + + set(KOKKOS_PKG_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/KOKKOS) + set(KOKKOS_PKG_SOURCES ${KOKKOS_PKG_SOURCES_DIR}/kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/atom_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/atom_vec_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/comm_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/comm_tiled_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/neighbor_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/neigh_list_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/neigh_bond_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/fix_nh_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/nbin_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/npair_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/domain_kokkos.cpp + ${KOKKOS_PKG_SOURCES_DIR}/modify_kokkos.cpp) + + if(PKG_KSPACE) + list(APPEND KOKKOS_PKG_SOURCES ${KOKKOS_PKG_SOURCES_DIR}/gridcomm_kokkos.cpp) + endif() + + set_property(GLOBAL PROPERTY "KOKKOS_PKG_SOURCES" "${KOKKOS_PKG_SOURCES}") + + # detects styles which have KOKKOS version + RegisterStylesExt(${KOKKOS_PKG_SOURCES_DIR} kokkos KOKKOS_PKG_SOURCES) + + # register kokkos-only styles + RegisterNBinStyle(${KOKKOS_PKG_SOURCES_DIR}/nbin_kokkos.h) + RegisterNPairStyle(${KOKKOS_PKG_SOURCES_DIR}/npair_kokkos.h) + + if(PKG_USER-DPD) + get_property(KOKKOS_PKG_SOURCES GLOBAL PROPERTY KOKKOS_PKG_SOURCES) + list(APPEND KOKKOS_PKG_SOURCES ${KOKKOS_PKG_SOURCES_DIR}/npair_ssa_kokkos.cpp) + RegisterNPairStyle(${KOKKOS_PKG_SOURCES_DIR}/npair_ssa_kokkos.h) + set_property(GLOBAL PROPERTY "KOKKOS_PKG_SOURCES" "${KOKKOS_PKG_SOURCES}") + endif() + + get_property(KOKKOS_PKG_SOURCES GLOBAL PROPERTY KOKKOS_PKG_SOURCES) + + list(APPEND LIB_SOURCES ${KOKKOS_PKG_SOURCES}) + include_directories(${KOKKOS_PKG_SOURCES_DIR}) +endif() diff --git a/cmake/Modules/Packages/OPT.cmake b/cmake/Modules/Packages/OPT.cmake new file mode 100644 index 0000000000..f2802c757b --- /dev/null +++ b/cmake/Modules/Packages/OPT.cmake @@ -0,0 +1,13 @@ +if(PKG_OPT) + set(OPT_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/OPT) + set(OPT_SOURCES) + set_property(GLOBAL PROPERTY "OPT_SOURCES" "${OPT_SOURCES}") + + # detects styles which have OPT version + RegisterStylesExt(${OPT_SOURCES_DIR} opt OPT_SOURCES) + + get_property(OPT_SOURCES GLOBAL PROPERTY OPT_SOURCES) + + list(APPEND LIB_SOURCES ${OPT_SOURCES}) + include_directories(${OPT_SOURCES_DIR}) +endif() diff --git a/cmake/Modules/Packages/QEQ.cmake b/cmake/Modules/Packages/QEQ.cmake new file mode 100644 index 0000000000..94cca30540 --- /dev/null +++ b/cmake/Modules/Packages/QEQ.cmake @@ -0,0 +1,20 @@ +# Fix qeq/fire requires MANYBODY (i.e. COMB and COMB3) to be installed +if(PKG_QEQ) + set(QEQ_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/QEQ) + file(GLOB QEQ_HEADERS ${QEQ_SOURCES_DIR}/fix*.h) + file(GLOB QEQ_SOURCES ${QEQ_SOURCES_DIR}/fix*.cpp) + + if(NOT PKG_MANYBODY) + list(REMOVE_ITEM QEQ_HEADERS ${QEQ_SOURCES_DIR}/fix_qeq_fire.h) + list(REMOVE_ITEM QEQ_SOURCES ${QEQ_SOURCES_DIR}/fix_qeq_fire.cpp) + endif() + set_property(GLOBAL PROPERTY "QEQ_SOURCES" "${QEQ_SOURCES}") + + foreach(MY_HEADER ${QEQ_HEADERS}) + AddStyleHeader(${MY_HEADER} FIX) + endforeach() + + get_property(QEQ_SOURCES GLOBAL PROPERTY QEQ_SOURCES) + list(APPEND LIB_SOURCES ${QEQ_SOURCES}) + include_directories(${QEQ_SOURCES_DIR}) +endif() diff --git a/cmake/Modules/Packages/USER-INTEL.cmake b/cmake/Modules/Packages/USER-INTEL.cmake new file mode 100644 index 0000000000..5295ed42d5 --- /dev/null +++ b/cmake/Modules/Packages/USER-INTEL.cmake @@ -0,0 +1,119 @@ +if(PKG_USER-INTEL) + include(CheckIncludeFile) + check_include_file(immintrin.h FOUND_IMMINTRIN) + if(NOT FOUND_IMMINTRIN) + message(FATAL_ERROR "immintrin.h header not found, Intel package won't work without it") + endif() + + add_definitions(-DLMP_USER_INTEL) + + set(INTEL_ARCH "cpu" CACHE STRING "Architectures used by USER-INTEL (cpu or knl)") + set(INTEL_ARCH_VALUES cpu knl) + set_property(CACHE INTEL_ARCH PROPERTY STRINGS ${INTEL_ARCH_VALUES}) + validate_option(INTEL_ARCH INTEL_ARCH_VALUES) + string(TOUPPER ${INTEL_ARCH} INTEL_ARCH) + + find_package(Threads QUIET) + if(Threads_FOUND) + set(INTEL_LRT_MODE "threads" CACHE STRING "Long-range threads mode (none, threads, or c++11)") + else() + set(INTEL_LRT_MODE "none" CACHE STRING "Long-range threads mode (none, threads, or c++11)") + endif() + set(INTEL_LRT_VALUES none threads c++11) + set_property(CACHE INTEL_LRT_MODE PROPERTY STRINGS ${INTEL_LRT_VALUES}) + validate_option(INTEL_LRT_MODE INTEL_LRT_VALUES) + string(TOUPPER ${INTEL_LRT_MODE} INTEL_LRT_MODE) + if(INTEL_LRT_MODE STREQUAL "THREADS") + if(Threads_FOUND) + add_definitions(-DLMP_INTEL_USELRT) + list(APPEND LAMMPS_LINK_LIBS ${CMAKE_THREAD_LIBS_INIT}) + else() + message(FATAL_ERROR "Must have working threads library for Long-range thread support") + endif() + endif() + if(INTEL_LRT_MODE STREQUAL "C++11") + add_definitions(-DLMP_INTEL_USERLRT -DLMP_INTEL_LRT11) + endif() + + if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16) + message(FATAL_ERROR "USER-INTEL needs at least a 2016 Intel compiler, found ${CMAKE_CXX_COMPILER_VERSION}") + endif() + else() + message(WARNING "USER-INTEL gives best performance with Intel compilers") + endif() + + find_package(TBB QUIET) + if(TBB_FOUND) + list(APPEND LAMMPS_LINK_LIBS ${TBB_MALLOC_LIBRARIES}) + else() + add_definitions(-DLMP_INTEL_NO_TBB) + if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + message(WARNING "USER-INTEL with Intel compilers should use TBB malloc libraries") + endif() + endif() + + find_package(MKL QUIET) + if(MKL_FOUND) + add_definitions(-DLMP_USE_MKL_RNG) + list(APPEND LAMMPS_LINK_LIBS ${MKL_LIBRARIES}) + else() + message(STATUS "Pair style dpd/intel will be faster with MKL libraries") + endif() + + if((NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Windows") AND (NOT ${LAMMPS_MEMALIGN} STREQUAL "64") AND (NOT ${LAMMPS_MEMALIGN} STREQUAL "128") AND (NOT ${LAMMPS_MEMALIGN} STREQUAL "256")) + message(FATAL_ERROR "USER-INTEL only supports memory alignment of 64, 128 or 256 on this platform") + endif() + + if(INTEL_ARCH STREQUAL "KNL") + if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + message(FATAL_ERROR "Must use Intel compiler with USER-INTEL for KNL architecture") + endif() + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -xHost -qopenmp -qoffload") + set(MIC_OPTIONS "-qoffload-option,mic,compiler,\"-fp-model fast=2 -mGLOB_default_function_attrs=\\\"gather_scatter_loop_unroll=4\\\"\"") + add_compile_options(-xMIC-AVX512 -qoffload -fno-alias -ansi-alias -restrict -qoverride-limits ${MIC_OPTIONS}) + add_definitions(-DLMP_INTEL_OFFLOAD) + else() + if(CMAKE_CXX_COMPILER_ID STREQUAL "Intel") + if(CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.3 OR CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 17.4) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xCOMMON-AVX512") + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xHost") + endif() + include(CheckCXXCompilerFlag) + foreach(_FLAG -O2 -fp-model fast=2 -no-prec-div -qoverride-limits -qopt-zmm-usage=high -qno-offload -fno-alias -ansi-alias -restrict) + check_cxx_compiler_flag("${__FLAG}" COMPILER_SUPPORTS${_FLAG}) + if(COMPILER_SUPPORTS${_FLAG}) + add_compile_options(${_FLAG}) + endif() + endforeach() + else() + add_compile_options(-O3 -ffast-math) + endif() + endif() + + # collect sources + set(USER-INTEL_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-INTEL) + set(USER-INTEL_SOURCES ${USER-INTEL_SOURCES_DIR}/fix_intel.cpp + ${USER-INTEL_SOURCES_DIR}/fix_nh_intel.cpp + ${USER-INTEL_SOURCES_DIR}/intel_buffers.cpp + ${USER-INTEL_SOURCES_DIR}/nbin_intel.cpp + ${USER-INTEL_SOURCES_DIR}/npair_intel.cpp) + + set_property(GLOBAL PROPERTY "USER-INTEL_SOURCES" "${USER-INTEL_SOURCES}") + + # detect styles which have a USER-INTEL version + RegisterStylesExt(${USER-INTEL_SOURCES_DIR} intel USER-INTEL_SOURCES) + RegisterNBinStyle(${USER-INTEL_SOURCES_DIR}/nbin_intel.h) + RegisterNPairStyle(${USER-INTEL_SOURCES_DIR}/npair_intel.h) + RegisterFixStyle(${USER-INTEL_SOURCES_DIR}/fix_intel.h) + + get_property(USER-INTEL_SOURCES GLOBAL PROPERTY USER-INTEL_SOURCES) + if(PKG_KSPACE) + list(APPEND USER-INTEL_SOURCES ${USER-INTEL_SOURCES_DIR}/verlet_lrt_intel.cpp) + RegisterIntegrateStyle(${USER-INTEL_SOURCES_DIR}/verlet_lrt_intel.h) + endif() + + list(APPEND LIB_SOURCES ${USER-INTEL_SOURCES}) + include_directories(${USER-INTEL_SOURCES_DIR}) +endif() diff --git a/cmake/Modules/Packages/USER-OMP.cmake b/cmake/Modules/Packages/USER-OMP.cmake new file mode 100644 index 0000000000..668f42f10a --- /dev/null +++ b/cmake/Modules/Packages/USER-OMP.cmake @@ -0,0 +1,42 @@ +if(PKG_USER-OMP) + set(USER-OMP_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-OMP) + set(USER-OMP_SOURCES ${USER-OMP_SOURCES_DIR}/thr_data.cpp + ${USER-OMP_SOURCES_DIR}/thr_omp.cpp + ${USER-OMP_SOURCES_DIR}/fix_omp.cpp + ${USER-OMP_SOURCES_DIR}/fix_nh_omp.cpp + ${USER-OMP_SOURCES_DIR}/fix_nh_sphere_omp.cpp + ${USER-OMP_SOURCES_DIR}/domain_omp.cpp) + add_definitions(-DLMP_USER_OMP) + set_property(GLOBAL PROPERTY "OMP_SOURCES" "${USER-OMP_SOURCES}") + + # detects styles which have USER-OMP version + RegisterStylesExt(${USER-OMP_SOURCES_DIR} omp OMP_SOURCES) + RegisterFixStyle(${USER-OMP_SOURCES_DIR}/fix_omp.h) + + get_property(USER-OMP_SOURCES GLOBAL PROPERTY OMP_SOURCES) + + # manually add package dependent source files from USER-OMP that do not provide styles + + if(PKG_ASPHERE) + list(APPEND USER-OMP_SOURCES ${USER-OMP_SOURCES_DIR}/fix_nh_asphere_omp.cpp) + endif() + + if(PKG_RIGID) + list(APPEND USER-OMP_SOURCES ${USER-OMP_SOURCES_DIR}/fix_rigid_nh_omp.cpp) + endif() + + if(PKG_USER-REAXC) + list(APPEND USER-OMP_SOURCES ${USER-OMP_SOURCES_DIR}/reaxc_bond_orders_omp.cpp + ${USER-OMP_SOURCES_DIR}/reaxc_hydrogen_bonds_omp.cpp + ${USER-OMP_SOURCES_DIR}/reaxc_nonbonded_omp.cpp + ${USER-OMP_SOURCES_DIR}/reaxc_bonds_omp.cpp + ${USER-OMP_SOURCES_DIR}/reaxc_init_md_omp.cpp + ${USER-OMP_SOURCES_DIR}/reaxc_torsion_angles_omp.cpp + ${USER-OMP_SOURCES_DIR}/reaxc_forces_omp.cpp + ${USER-OMP_SOURCES_DIR}/reaxc_multi_body_omp.cpp + ${USER-OMP_SOURCES_DIR}/reaxc_valence_angles_omp.cpp) + endif() + + list(APPEND LIB_SOURCES ${USER-OMP_SOURCES}) + include_directories(${USER-OMP_SOURCES_DIR}) +endif() diff --git a/cmake/Modules/Packages/USER-SDPD.cmake b/cmake/Modules/Packages/USER-SDPD.cmake new file mode 100644 index 0000000000..530dcf2bd9 --- /dev/null +++ b/cmake/Modules/Packages/USER-SDPD.cmake @@ -0,0 +1,13 @@ +# Fix rigid/meso requires RIGID to be installed +if(PKG_USER-SDPD) + set(USER-SDPD_SOURCES_DIR ${LAMMPS_SOURCE_DIR}/USER-SDPD) + + get_property(hlist GLOBAL PROPERTY FIX) + if(NOT PKG_RIGID) + list(REMOVE_ITEM hlist ${USER-SDPD_SOURCES_DIR}/fix_rigid_meso.h) + list(REMOVE_ITEM LIB_SOURCES ${USER-SDPD_SOURCES_DIR}/fix_rigid_meso.cpp) + endif() + set_property(GLOBAL PROPERTY FIX "${hlist}") + + include_directories(${USER-SDPD_SOURCES_DIR}) +endif() From e788d326781bec8e6fac44596a4fce87c3c9f11e Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Sun, 9 Jun 2019 04:02:08 -0400 Subject: [PATCH 262/311] Move autogen check into utility function --- cmake/CMakeLists.txt | 17 +---------------- cmake/Modules/LAMMPSUtils.cmake | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 6cb595e89e..49a4b98a1e 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -41,22 +41,7 @@ string(TOUPPER "${CMAKE_BUILD_TYPE}" BTYPE) # check for files auto-generated by make-based buildsystem # this is fast, so check for it all the time -message(STATUS "Running check for auto-generated files from make-based build system") -file(GLOB SRC_AUTOGEN_FILES ${LAMMPS_SOURCE_DIR}/style_*.h) -file(GLOB SRC_AUTOGEN_PACKAGES ${LAMMPS_SOURCE_DIR}/packages_*.h) -list(APPEND SRC_AUTOGEN_FILES ${SRC_AUTOGEN_PACKAGES} ${LAMMPS_SOURCE_DIR}/lmpinstalledpkgs.h ${LAMMPS_SOURCE_DIR}/lmpgitversion.h) -foreach(_SRC ${SRC_AUTOGEN_FILES}) - get_filename_component(FILENAME "${_SRC}" NAME) - if(EXISTS ${LAMMPS_SOURCE_DIR}/${FILENAME}) - message(FATAL_ERROR "\n########################################################################\n" - "Found header file(s) generated by the make-based build system\n" - "\n" - "Please run\n" - "make -C ${LAMMPS_SOURCE_DIR} purge\n" - "to remove\n" - "########################################################################") - endif() -endforeach() +check_for_autogen_files(${LAMMPS_SOURCE_DIR}) ###################################################################### # compiler tests diff --git a/cmake/Modules/LAMMPSUtils.cmake b/cmake/Modules/LAMMPSUtils.cmake index ca9d3b72ca..3ea2b3cb7e 100644 --- a/cmake/Modules/LAMMPSUtils.cmake +++ b/cmake/Modules/LAMMPSUtils.cmake @@ -45,6 +45,25 @@ function(get_lammps_version version_header variable) set(${variable} "${year}${month}${day}" PARENT_SCOPE) endfunction() +function(check_for_autogen_files source_dir) + message(STATUS "Running check for auto-generated files from make-based build system") + file(GLOB SRC_AUTOGEN_FILES ${source_dir}/style_*.h) + file(GLOB SRC_AUTOGEN_PACKAGES ${source_dir}/packages_*.h) + list(APPEND SRC_AUTOGEN_FILES ${SRC_AUTOGEN_PACKAGES} ${source_dir}/lmpinstalledpkgs.h ${source_dir}/lmpgitversion.h) + foreach(_SRC ${SRC_AUTOGEN_FILES}) + get_filename_component(FILENAME "${_SRC}" NAME) + if(EXISTS ${source_dir}/${FILENAME}) + message(FATAL_ERROR "\n########################################################################\n" + "Found header file(s) generated by the make-based build system\n" + "\n" + "Please run\n" + "make -C ${source_dir} purge\n" + "to remove\n" + "########################################################################") + endif() + endforeach() +endfunction() + macro(pkg_depends PKG1 PKG2) if(PKG_${PKG1} AND NOT (PKG_${PKG2} OR BUILD_${PKG2})) message(FATAL_ERROR "${PKG1} package needs LAMMPS to be build with ${PKG2}") From 203c6d122b413758efd07854814b4fce7fd74def Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Sun, 9 Jun 2019 21:37:34 -0400 Subject: [PATCH 263/311] Move KSPACE CMake configuration into its own file --- cmake/CMakeLists.txt | 39 +---------------------------- cmake/Modules/Packages/KSPACE.cmake | 38 ++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 38 deletions(-) create mode 100644 cmake/Modules/Packages/KSPACE.cmake diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 49a4b98a1e..8b82668d42 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -227,44 +227,7 @@ if(BUILD_OMP) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") endif() -if(PKG_KSPACE) - option(FFT_SINGLE "Use single precision FFT instead of double" OFF) - set(FFTW "FFTW3") - if(FFT_SINGLE) - set(FFTW "FFTW3F") - add_definitions(-DFFT_SINGLE) - endif() - find_package(${FFTW} QUIET) - if(${FFTW}_FOUND) - set(FFT "${FFTW}" CACHE STRING "FFT library for KSPACE package") - else() - set(FFT "KISS" CACHE STRING "FFT library for KSPACE package") - endif() - set(FFT_VALUES KISS ${FFTW} MKL) - set_property(CACHE FFT PROPERTY STRINGS ${FFT_VALUES}) - validate_option(FFT FFT_VALUES) - string(TOUPPER ${FFT} FFT) - if(NOT FFT STREQUAL "KISS") - find_package(${FFT} REQUIRED) - if(NOT FFT STREQUAL "FFTW3F") - add_definitions(-DFFT_FFTW) - else() - add_definitions(-DFFT_${FFT}) - endif() - include_directories(${${FFT}_INCLUDE_DIRS}) - list(APPEND LAMMPS_LINK_LIBS ${${FFT}_LIBRARIES}) - else() - add_definitions(-DFFT_KISS) - endif() - set(FFT_PACK "array" CACHE STRING "Optimization for FFT") - set(FFT_PACK_VALUES array pointer memcpy) - set_property(CACHE FFT_PACK PROPERTY STRINGS ${FFT_PACK_VALUES}) - validate_option(FFT_PACK FFT_PACK_VALUES) - if(NOT FFT_PACK STREQUAL "array") - string(TOUPPER ${FFT_PACK} FFT_PACK) - add_definitions(-DFFT_PACK_${FFT_PACK}) - endif() -endif() +include(Packages/KSPACE) if(PKG_MSCG OR PKG_USER-ATC OR PKG_USER-AWPMD OR PKG_USER-PLUMED OR PKG_USER-QUIP OR PKG_LATTE) find_package(LAPACK) diff --git a/cmake/Modules/Packages/KSPACE.cmake b/cmake/Modules/Packages/KSPACE.cmake new file mode 100644 index 0000000000..6938a93a36 --- /dev/null +++ b/cmake/Modules/Packages/KSPACE.cmake @@ -0,0 +1,38 @@ +if(PKG_KSPACE) + option(FFT_SINGLE "Use single precision FFT instead of double" OFF) + set(FFTW "FFTW3") + if(FFT_SINGLE) + set(FFTW "FFTW3F") + add_definitions(-DFFT_SINGLE) + endif() + find_package(${FFTW} QUIET) + if(${FFTW}_FOUND) + set(FFT "${FFTW}" CACHE STRING "FFT library for KSPACE package") + else() + set(FFT "KISS" CACHE STRING "FFT library for KSPACE package") + endif() + set(FFT_VALUES KISS ${FFTW} MKL) + set_property(CACHE FFT PROPERTY STRINGS ${FFT_VALUES}) + validate_option(FFT FFT_VALUES) + string(TOUPPER ${FFT} FFT) + if(NOT FFT STREQUAL "KISS") + find_package(${FFT} REQUIRED) + if(NOT FFT STREQUAL "FFTW3F") + add_definitions(-DFFT_FFTW) + else() + add_definitions(-DFFT_${FFT}) + endif() + include_directories(${${FFT}_INCLUDE_DIRS}) + list(APPEND LAMMPS_LINK_LIBS ${${FFT}_LIBRARIES}) + else() + add_definitions(-DFFT_KISS) + endif() + set(FFT_PACK "array" CACHE STRING "Optimization for FFT") + set(FFT_PACK_VALUES array pointer memcpy) + set_property(CACHE FFT_PACK PROPERTY STRINGS ${FFT_PACK_VALUES}) + validate_option(FFT_PACK FFT_PACK_VALUES) + if(NOT FFT_PACK STREQUAL "array") + string(TOUPPER ${FFT_PACK} FFT_PACK) + add_definitions(-DFFT_PACK_${FFT_PACK}) + endif() +endif() From 4ecd81f81bc2297469f62b318fe1c5c087ce53a9 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Sun, 9 Jun 2019 21:48:05 -0400 Subject: [PATCH 264/311] Move CMake configuration of PYTHON package into its own file --- cmake/CMakeLists.txt | 9 ++------- cmake/Modules/Packages/PYTHON.cmake | 6 ++++++ 2 files changed, 8 insertions(+), 7 deletions(-) create mode 100644 cmake/Modules/Packages/PYTHON.cmake diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 8b82668d42..8ca80714e1 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -227,7 +227,6 @@ if(BUILD_OMP) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") endif() -include(Packages/KSPACE) if(PKG_MSCG OR PKG_USER-ATC OR PKG_USER-AWPMD OR PKG_USER-PLUMED OR PKG_USER-QUIP OR PKG_LATTE) find_package(LAPACK) @@ -242,12 +241,6 @@ if(PKG_MSCG OR PKG_USER-ATC OR PKG_USER-AWPMD OR PKG_USER-PLUMED OR PKG_USER-QUI endif() endif() -if(PKG_PYTHON) - find_package(PythonLibs REQUIRED) - add_definitions(-DLMP_PYTHON) - include_directories(${PYTHON_INCLUDE_DIR}) - list(APPEND LAMMPS_LINK_LIBS ${PYTHON_LIBRARY}) -endif() find_package(JPEG QUIET) option(WITH_JPEG "Enable JPEG support" ${JPEG_FOUND}) @@ -303,6 +296,8 @@ else() set(CUDA_REQUEST_PIC) endif() +include(Packages/KSPACE) +include(Packages/PYTHON) include(Packages/VORONOI) include(Packages/USER-SCAFACOS) include(Packages/USER-PLUMED) diff --git a/cmake/Modules/Packages/PYTHON.cmake b/cmake/Modules/Packages/PYTHON.cmake new file mode 100644 index 0000000000..4f8959ae38 --- /dev/null +++ b/cmake/Modules/Packages/PYTHON.cmake @@ -0,0 +1,6 @@ +if(PKG_PYTHON) + find_package(PythonLibs REQUIRED) + add_definitions(-DLMP_PYTHON) + include_directories(${PYTHON_INCLUDE_DIR}) + list(APPEND LAMMPS_LINK_LIBS ${PYTHON_LIBRARY}) +endif() From 4ac100fe6958802e4e5fdb9c6badc435a37d682f Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Sun, 9 Jun 2019 22:05:53 -0400 Subject: [PATCH 265/311] Define additional LAMMPS_*_DIRS to remove relative paths later --- cmake/CMakeLists.txt | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 8ca80714e1..3c35d3f28a 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -10,6 +10,9 @@ get_filename_component(LAMMPS_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../src ABSO get_filename_component(LAMMPS_LIB_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../lib ABSOLUTE) get_filename_component(LAMMPS_LIB_BINARY_DIR ${CMAKE_BINARY_DIR}/lib ABSOLUTE) get_filename_component(LAMMPS_DOC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../doc ABSOLUTE) +get_filename_component(LAMMPS_TOOLS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../tools ABSOLUTE) +get_filename_component(LAMMPS_PYTHON_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../python ABSOLUTE) +get_filename_component(LAMMPS_POTENTIALS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../potentials ABSOLUTE) find_package(Git) @@ -537,7 +540,7 @@ if(BUILD_EXE) endif() enable_language(C) - get_filename_component(MSI2LMP_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../tools/msi2lmp/src ABSOLUTE) + get_filename_component(MSI2LMP_SOURCE_DIR ${LAMMPS_TOOLS_DIR}/msi2lmp/src ABSOLUTE) file(GLOB MSI2LMP_SOURCES ${MSI2LMP_SOURCE_DIR}/[^.]*.c) add_executable(msi2lmp ${MSI2LMP_SOURCES}) target_link_libraries(msi2lmp m) @@ -551,11 +554,11 @@ include(Documentation) ############################################################################### # Install potential and force field files in data directory ############################################################################### -set(LAMMPS_POTENTIALS_DIR ${CMAKE_INSTALL_FULL_DATADIR}/lammps/potentials) -install(DIRECTORY ${LAMMPS_SOURCE_DIR}/../potentials/ DESTINATION ${LAMMPS_POTENTIALS_DIR}) +set(LAMMPS_INSTALL_POTENTIALS_DIR ${CMAKE_INSTALL_FULL_DATADIR}/lammps/potentials) +install(DIRECTORY ${LAMMPS_POTENTIALS_DIR} DESTINATION ${LAMMPS_INSTALL_POTENTIALS_DIR}) -set(LAMMPS_FRC_FILES_DIR ${CMAKE_INSTALL_FULL_DATADIR}/lammps/frc_files) -install(DIRECTORY ${LAMMPS_SOURCE_DIR}/../tools/msi2lmp/frc_files/ DESTINATION ${LAMMPS_FRC_FILES_DIR}) +set(LAMMPS_INSTALL_FRC_FILES_DIR ${CMAKE_INSTALL_FULL_DATADIR}/lammps/frc_files) +install(DIRECTORY ${LAMMPS_TOOLS_DIR}/msi2lmp/frc_files/ DESTINATION ${LAMMPS_INSTALL_FRC_FILES_DIR}) configure_file(etc/profile.d/lammps.sh.in ${CMAKE_BINARY_DIR}/etc/profile.d/lammps.sh @ONLY) configure_file(etc/profile.d/lammps.csh.in ${CMAKE_BINARY_DIR}/etc/profile.d/lammps.csh @ONLY) @@ -577,9 +580,9 @@ if(BUILD_LIB AND BUILD_SHARED_LIBS) add_custom_target( install-python ${PYTHON_EXECUTABLE} install.py -v ${LAMMPS_SOURCE_DIR}/version.h - -m ${CMAKE_CURRENT_SOURCE_DIR}/../python/lammps.py + -m ${LAMMPS_PYTHON_DIR}/lammps.py -l ${CMAKE_BINARY_DIR}/liblammps${CMAKE_SHARED_LIBRARY_SUFFIX} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../python + WORKING_DIRECTORY ${LAMMPS_PYTHON_DIR} COMMENT "Installing LAMMPS Python module") else() add_custom_target( @@ -604,7 +607,7 @@ if((BUILD_LIB AND BUILD_SHARED_LIBS) OR (PKG_PYTHON)) -c "import distutils.sysconfig as cg; print(cg.get_python_lib(1,0,prefix='${CMAKE_INSTALL_PREFIX}'))" OUTPUT_VARIABLE PYTHON_DEFAULT_INSTDIR OUTPUT_STRIP_TRAILING_WHITESPACE) set(PYTHON_INSTDIR ${PYTHON_DEFAULT_INSTDIR} CACHE PATH "Installation folder for LAMMPS Python module") - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/../python/lammps.py DESTINATION ${PYTHON_INSTDIR}) + install(FILES ${LAMMPS_PYTHON_DIR}/lammps.py DESTINATION ${PYTHON_INSTDIR}) endif() endif() From 591e6836fd6b6fba87b1c6255a155ebe4a92c442 Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Sun, 9 Jun 2019 22:24:59 -0400 Subject: [PATCH 266/311] Move CMake configuration for USER-H5MD into its own file --- cmake/CMakeLists.txt | 15 +-------------- cmake/Modules/Packages/LATTE.cmake | 1 + cmake/Modules/Packages/USER-H5MD.cmake | 8 ++++++++ cmake/Modules/Packages/USER-QMMM.cmake | 3 +++ cmake/Modules/Packages/USER-QUIP.cmake | 1 + cmake/Modules/Packages/USER-SCAFACOS.cmake | 3 +++ 6 files changed, 17 insertions(+), 14 deletions(-) create mode 100644 cmake/Modules/Packages/USER-H5MD.cmake diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 3c35d3f28a..8c195068b9 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -134,14 +134,6 @@ endforeach() ###################################################### # packages with special compiler needs or external libs ###################################################### -if(PKG_USER-QUIP OR PKG_USER-QMMM OR PKG_LATTE OR PKG_USER-SCAFACOS) - enable_language(Fortran) -endif() - -if(PKG_USER-H5MD OR PKG_USER-QMMM OR PKG_USER-SCAFACOS) - enable_language(C) -endif() - include_directories(${LAMMPS_SOURCE_DIR}) if(PKG_USER-ADIOS) @@ -433,12 +425,7 @@ if(PKG_USER-ATC) target_link_libraries(atc ${LAPACK_LIBRARIES}) endif() -if(PKG_USER-H5MD) - find_package(HDF5 REQUIRED) - target_link_libraries(h5md ${HDF5_LIBRARIES}) - target_include_directories(h5md PRIVATE ${HDF5_INCLUDE_DIRS}) - include_directories(${HDF5_INCLUDE_DIRS}) -endif() +include(Packages/USER-H5MD) ###################################################################### # packages which selectively include variants based on enabled styles diff --git a/cmake/Modules/Packages/LATTE.cmake b/cmake/Modules/Packages/LATTE.cmake index 9aa813a6e4..a709561562 100644 --- a/cmake/Modules/Packages/LATTE.cmake +++ b/cmake/Modules/Packages/LATTE.cmake @@ -1,4 +1,5 @@ if(PKG_LATTE) + enable_language(Fortran) find_package(LATTE) if(LATTE_FOUND) set(DOWNLOAD_LATTE_DEFAULT OFF) diff --git a/cmake/Modules/Packages/USER-H5MD.cmake b/cmake/Modules/Packages/USER-H5MD.cmake new file mode 100644 index 0000000000..40ea7b7444 --- /dev/null +++ b/cmake/Modules/Packages/USER-H5MD.cmake @@ -0,0 +1,8 @@ +if(PKG_USER-H5MD) + enable_language(C) + + find_package(HDF5 REQUIRED) + target_link_libraries(h5md ${HDF5_LIBRARIES}) + target_include_directories(h5md PRIVATE ${HDF5_INCLUDE_DIRS}) + include_directories(${HDF5_INCLUDE_DIRS}) +endif() diff --git a/cmake/Modules/Packages/USER-QMMM.cmake b/cmake/Modules/Packages/USER-QMMM.cmake index 0d3a7de39f..e0ae1a46dc 100644 --- a/cmake/Modules/Packages/USER-QMMM.cmake +++ b/cmake/Modules/Packages/USER-QMMM.cmake @@ -1,4 +1,7 @@ if(PKG_USER-QMMM) + enable_language(Fortran) + enable_language(C) + message(WARNING "Building QMMM with CMake is still experimental") find_package(QE REQUIRED) include_directories(${QE_INCLUDE_DIRS}) diff --git a/cmake/Modules/Packages/USER-QUIP.cmake b/cmake/Modules/Packages/USER-QUIP.cmake index ccefa033ea..93096a2f54 100644 --- a/cmake/Modules/Packages/USER-QUIP.cmake +++ b/cmake/Modules/Packages/USER-QUIP.cmake @@ -1,4 +1,5 @@ if(PKG_USER-QUIP) + enable_language(Fortran) find_package(QUIP REQUIRED) list(APPEND LAMMPS_LINK_LIBS ${QUIP_LIBRARIES} ${LAPACK_LIBRARIES}) endif() diff --git a/cmake/Modules/Packages/USER-SCAFACOS.cmake b/cmake/Modules/Packages/USER-SCAFACOS.cmake index b70dab465a..adb002081f 100644 --- a/cmake/Modules/Packages/USER-SCAFACOS.cmake +++ b/cmake/Modules/Packages/USER-SCAFACOS.cmake @@ -1,4 +1,7 @@ if(PKG_USER-SCAFACOS) + enable_language(Fortran) + enable_language(C) + find_package(GSL REQUIRED) find_package(PkgConfig QUIET) set(DOWNLOAD_SCAFACOS_DEFAULT ON) From b368b11d604ead99fa3ab9a129402a8d7381470f Mon Sep 17 00:00:00 2001 From: Richard Berger Date: Sun, 9 Jun 2019 22:31:56 -0400 Subject: [PATCH 267/311] Move ShowHelp test into Testing.cmake --- cmake/CMakeLists.txt | 3 --- cmake/Modules/Testing.cmake | 2 ++ 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 8c195068b9..40d3de0e7b 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -522,9 +522,6 @@ if(BUILD_EXE) set_target_properties(lmp PROPERTIES OUTPUT_NAME ${LAMMPS_BINARY}) install(TARGETS lmp DESTINATION ${CMAKE_INSTALL_BINDIR}) install(FILES ${LAMMPS_DOC_DIR}/lammps.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 RENAME ${LAMMPS_BINARY}.1) - if(ENABLE_TESTING) - add_test(ShowHelp ${LAMMPS_BINARY} -help) - endif() enable_language(C) get_filename_component(MSI2LMP_SOURCE_DIR ${LAMMPS_TOOLS_DIR}/msi2lmp/src ABSOLUTE) diff --git a/cmake/Modules/Testing.cmake b/cmake/Modules/Testing.cmake index cac1dd851e..0eeef00fe9 100644 --- a/cmake/Modules/Testing.cmake +++ b/cmake/Modules/Testing.cmake @@ -28,6 +28,8 @@ if(ENABLE_TESTING AND BUILD_EXE) "https://github.com/lammps/lammps-testing in LAMMPS_TESTING_SOURCE_DIR") endif() + add_test(ShowHelp ${CMAKE_BINARY_DIR}/${LAMMPS_BINARY} -help) + if(EXISTS ${LAMMPS_TESTING_SOURCE_DIR}) message(STATUS "Running test discovery...") From fa764721355611257119b59f505ff00708b8c0a9 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Mon, 10 Jun 2019 15:48:53 -0600 Subject: [PATCH 268/311] Add Kamesh as contributing author to fix_qeq_reax_kokkos --- src/KOKKOS/fix_qeq_reax_kokkos.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/KOKKOS/fix_qeq_reax_kokkos.cpp b/src/KOKKOS/fix_qeq_reax_kokkos.cpp index e3e3cfd5d2..da0637800b 100644 --- a/src/KOKKOS/fix_qeq_reax_kokkos.cpp +++ b/src/KOKKOS/fix_qeq_reax_kokkos.cpp @@ -12,7 +12,8 @@ ------------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- - Contributing author: Ray Shan (SNL), Stan Moore (SNL) + Contributing authors: Ray Shan (SNL), Stan Moore (SNL), + Kamesh Arumugam (NVIDIA) ------------------------------------------------------------------------- */ #include From 72b295d7f48538f310b658b63497904a0659a082 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 10 Jun 2019 18:21:17 -0400 Subject: [PATCH 269/311] add support for internal style variables to info command --- src/info.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/info.cpp b/src/info.cpp index ac2ee4a96d..25b9879408 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -67,7 +67,7 @@ namespace LAMMPS_NS { // same as in variable.cpp enum {INDEX,LOOP,WORLD,UNIVERSE,ULOOP,STRING,GETENV, - SCALARFILE,ATOMFILE,FORMAT,EQUAL,ATOM,PYTHON}; + SCALARFILE,ATOMFILE,FORMAT,EQUAL,ATOM,VECTOR,PYTHON,INTERNAL}; enum {COMPUTES=1<<0, DUMPS=1<<1, @@ -106,7 +106,7 @@ static const int STYLES = ATOM_STYLES | INTEGRATE_STYLES | MINIMIZE_STYLES static const char *varstyles[] = { "index", "loop", "world", "universe", "uloop", "string", "getenv", - "file", "atomfile", "format", "equal", "atom", "python", "(unknown)"}; + "file", "atomfile", "format", "equal", "atom", "vector", "python", "internal", "(unknown)"}; static const char *mapstyles[] = { "none", "array", "hash" }; @@ -599,6 +599,10 @@ void Info::command(int narg, char **arg) int ndata = 1; fprintf(out,"Variable[%3d]: %-10s, style = %-10s, def =", i,names[i],varstyles[style[i]]); + if (style[i] == INTERNAL) { + fprintf(out,"%g\n",input->variable->dvalue[i]); + continue; + } if ((style[i] != LOOP) && (style[i] != ULOOP)) ndata = input->variable->num[i]; for (int j=0; j < ndata; ++j) From 3e2f3a80583494420eda14e4ce178f5b71695e60 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 10 Jun 2019 18:22:04 -0400 Subject: [PATCH 270/311] avoid a case of mixing malloc()/free() with new/delete --- src/variable.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/variable.cpp b/src/variable.cpp index 376cc8045a..7cbdc57d3a 100644 --- a/src/variable.cpp +++ b/src/variable.cpp @@ -288,11 +288,11 @@ void Variable::set(int narg, char **arg) int maxcopy = strlen(arg[2]) + 1; int maxwork = maxcopy; - char *scopy = new char[maxcopy]; - char *work = new char[maxwork]; + char *scopy = (char *) memory->smalloc(maxcopy,"var:string/copy"); + char *work = (char *) memory->smalloc(maxwork,"var:string/work"); strcpy(scopy,arg[2]); input->substitute(scopy,work,maxcopy,maxwork,1); - delete [] work; + memory->sfree(work); int ivar = find(arg[0]); if (ivar >= 0) { @@ -310,7 +310,7 @@ void Variable::set(int narg, char **arg) data[nvar] = new char*[num[nvar]]; copy(1,&scopy,data[nvar]); } - delete [] scopy; + memory->sfree(scopy); // GETENV // remove pre-existing var if also style GETENV (allows it to be reset) From 7f4c611e2148387acedb58b2f7767cf54c936b14 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 11 Jun 2019 06:51:03 -0400 Subject: [PATCH 271/311] must use C++ compiler to check for include files --- cmake/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 911b6f0f15..8ab9540482 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -1135,7 +1135,7 @@ endif() if(PKG_USER-INTEL) include(CheckIncludeFile) - check_include_file(immintrin.h FOUND_IMMINTRIN) + check_include_file_cxx(immintrin.h FOUND_IMMINTRIN) if(NOT FOUND_IMMINTRIN) message(FATAL_ERROR "immintrin.h header not found, Intel package won't work without it") endif() From 4cee333c07acecc6ac25aaa30fd06bedb85522c5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 11 Jun 2019 07:12:39 -0400 Subject: [PATCH 272/311] need to use C++ compiler when checking for includes this is the same bugfix as in PR #1504 --- cmake/Modules/Packages/USER-INTEL.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/Modules/Packages/USER-INTEL.cmake b/cmake/Modules/Packages/USER-INTEL.cmake index 5295ed42d5..f61b8f1630 100644 --- a/cmake/Modules/Packages/USER-INTEL.cmake +++ b/cmake/Modules/Packages/USER-INTEL.cmake @@ -1,6 +1,6 @@ if(PKG_USER-INTEL) include(CheckIncludeFile) - check_include_file(immintrin.h FOUND_IMMINTRIN) + check_include_file_cxx(immintrin.h FOUND_IMMINTRIN) if(NOT FOUND_IMMINTRIN) message(FATAL_ERROR "immintrin.h header not found, Intel package won't work without it") endif() From 3d5db63381117c65cb581920a11654a1682c4365 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 11 Jun 2019 10:36:04 -0400 Subject: [PATCH 273/311] minor cleanup --- tools/vim/README.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/vim/README.txt b/tools/vim/README.txt index 578ff4945e..29ce1822b8 100644 --- a/tools/vim/README.txt +++ b/tools/vim/README.txt @@ -7,10 +7,10 @@ end on *.lmp or start with in.* (see mysyntax.vim). By far not all commands are included in the syntax file (lammps.vim). You can easily add new ones. -=To enable the highlighting: +=To enable the highlighting (compatible with old versions of VIM): ============================ (0) Create a ~/.vimrc - You can have a look in /usr/local/share/vim/current/vimrc.example + You can have a look in /usr/share/vim/vim*/vimrc_example.vim (1) Insert in ~/.vimrc let mysyntaxfile = "~/.vim/mysyntax.vim" just before @@ -24,7 +24,7 @@ in the syntax file (lammps.vim). You can easily add new ones. syntax on (1) Create directories ~/.vim/syntax and ~/.vim/ftdetect (2) Copy lammps.vim to ~/.vim/syntax/lammps.vim -(3) Copy filetype.vim as ~/.vim/ftdetect/lammps.vim +(3) Copy filetype.vim to ~/.vim/ftdetect/lammps.vim Gerolf Ziegenhain 2007 From fd55d7d367a2063d67d082c250232d5d468fe78e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 11 Jun 2019 11:15:04 -0400 Subject: [PATCH 274/311] update list of known LAMMPS keywords --- tools/vim/lammps.vim | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/tools/vim/lammps.vim b/tools/vim/lammps.vim index be26f3081e..69676ba451 100644 --- a/tools/vim/lammps.vim +++ b/tools/vim/lammps.vim @@ -2,25 +2,26 @@ " Language: Lammps Simulation Script File " Maintainer: Gerolf Ziegenhain " Updates: Axel Kohlmeyer , Sam Bateman , Daniel Möller Montull -" Latest Revision: 2012-06-19 +" Latest Revision: 2019-06-11 syn clear -syn keyword lammpsOutput log write_restart restart dump undump thermo thermo_modify thermo_style print -syn keyword lammpsRead include read read_restart read_data +syn keyword lammpsOutput log write_data write_dump info shell write_restart restart dump undump thermo thermo_modify thermo_style print timer +syn keyword lammpsRead include read_restart read_data read_dump molecule syn keyword lammpsLattice boundary units atom_style lattice region create_box create_atoms dielectric -syn keyword lammpsLattice delete_atoms change_box dimension replicate -syn keyword lammpsParticle pair_coeff pair_style pair_modify mass velocity angle_coeff angle_style -syn keyword lammpsParticle atom_modify atom_style bond_coeff bond_style delete_bonds kspace_style +syn keyword lammpsLattice delete_atoms displace_atoms change_box dimension replicate +syn keyword lammpsParticle pair_coeff pair_style pair_modify pair_write mass velocity angle_coeff angle_style +syn keyword lammpsParticle atom_modify atom_style bond_coeff bond_style bond_write create_bonds delete_bonds kspace_style syn keyword lammpsParticle kspace_modify dihedral_style dihedral_coeff improper_style improper_coeff -syn keyword lammpsSetup min_style fix_modify run_style timestep neighbor neigh_modify fix unfix -syn keyword lammpsSetup communicate newton nthreads processors reset_timestep -syn keyword lammpsRun minimize run -syn keyword lammpsDefine variable group compute +syn keyword lammpsSetup min_style fix_modify run_style timestep neighbor neigh_modify fix unfix suffix special_bonds +syn keyword lammpsSetup balance box clear comm_modify comm_style newton package processors reset_ids reset_timestep +syn keyword lammpsRun minimize run rerun tad neb prd quit server temper temper/grem temper/npt +syn keyword lammpsRun min/spin message hyper dynamical_matrix +syn keyword lammpsDefine variable group compute python set uncompute kim_query syn keyword lammpsRepeat jump next loop -syn keyword lammpsOperator equal add sub mult div +syn keyword lammpsOperator equal add sub mult div syn keyword lammpsConditional if then elif else From dbafb92dd5202571be499acbe306f50cb18ff8e2 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 11 Jun 2019 14:02:41 -0400 Subject: [PATCH 275/311] cmake minor cleanup and removal of redundant code and empty lines --- cmake/CMakeLists.txt | 7 +------ cmake/Modules/Packages/USER-INTEL.cmake | 1 - 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 40d3de0e7b..8f7ac9a6e7 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -33,7 +33,6 @@ include(LAMMPSUtils) get_lammps_version(${LAMMPS_SOURCE_DIR}/version.h LAMMPS_VERSION) - include(PreventInSourceBuilds) if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CXX_FLAGS) @@ -51,6 +50,7 @@ check_for_autogen_files(${LAMMPS_SOURCE_DIR}) # these need ot be done early (before further tests). ##################################################################### include(CheckCCompilerFlag) +include(CheckIncludeFileCXX) if (${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -restrict") @@ -186,10 +186,6 @@ if(LAMMPS_EXCEPTIONS) set(LAMMPS_API_DEFINES "${LAMMPS_API_DEFINES} -DLAMMPS_EXCEPTIONS") endif() -option(CMAKE_VERBOSE_MAKEFILE "Verbose makefile" OFF) - - - # "hard" dependencies between packages resulting # in an error instead of skipping over files pkg_depends(MPIIO MPI) @@ -198,7 +194,6 @@ pkg_depends(USER-LB MPI) pkg_depends(USER-PHONON KSPACE) pkg_depends(USER-SCAFACOS MPI) -include(CheckIncludeFileCXX) find_package(OpenMP QUIET) # TODO: this is a temporary workaround until a better solution is found. AK 2019-05-30 diff --git a/cmake/Modules/Packages/USER-INTEL.cmake b/cmake/Modules/Packages/USER-INTEL.cmake index f61b8f1630..3c0cc7ba24 100644 --- a/cmake/Modules/Packages/USER-INTEL.cmake +++ b/cmake/Modules/Packages/USER-INTEL.cmake @@ -1,5 +1,4 @@ if(PKG_USER-INTEL) - include(CheckIncludeFile) check_include_file_cxx(immintrin.h FOUND_IMMINTRIN) if(NOT FOUND_IMMINTRIN) message(FATAL_ERROR "immintrin.h header not found, Intel package won't work without it") From 4fbf96a353a10f97798b607fb3aae8297a7e1626 Mon Sep 17 00:00:00 2001 From: sniblett402 Date: Tue, 11 Jun 2019 13:48:01 -0700 Subject: [PATCH 276/311] Bugfix for bond_style table with MPI Summary Very small bug fix - an incorrect MPI datatype was causing undefined behaviour for tabulated bond potentials (bond_style table). Author(s) Sam Niblett, LBNL Licensing By submitting this pull request, I agree, that my contribution will be included in LAMMPS and redistributed under either the GNU General Public License version 2 (GPL v2) or the GNU Lesser General Public License version 2.1 (LGPL v2.1). Backward Compatibility No impact Implementation Notes The equilibrium bond length of the tabulated potential (tb->r0) was incorrectly specified as an MPI_INT during a broadcast. Therefore, all non-root processes received a truncated value of this parameter. This simple fix produced the expected behaviour for me. --- src/MOLECULE/bond_table.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/MOLECULE/bond_table.cpp b/src/MOLECULE/bond_table.cpp index 94e843eb65..fc71654a44 100644 --- a/src/MOLECULE/bond_table.cpp +++ b/src/MOLECULE/bond_table.cpp @@ -503,7 +503,7 @@ void BondTable::param_extract(Table *tb, char *line) void BondTable::bcast_table(Table *tb) { MPI_Bcast(&tb->ninput,1,MPI_INT,0,world); - MPI_Bcast(&tb->r0,1,MPI_INT,0,world); + MPI_Bcast(&tb->r0,1,MPI_DOUBLE,0,world); int me; MPI_Comm_rank(world,&me); From 400751f30f71b181e7ca1e38f4a3424459965911 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 11 Jun 2019 19:09:23 -0400 Subject: [PATCH 277/311] remove redundant call to broadcast r0 --- src/MOLECULE/bond_table.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/MOLECULE/bond_table.cpp b/src/MOLECULE/bond_table.cpp index fc71654a44..10851774d7 100644 --- a/src/MOLECULE/bond_table.cpp +++ b/src/MOLECULE/bond_table.cpp @@ -522,7 +522,6 @@ void BondTable::bcast_table(Table *tb) MPI_Bcast(&tb->fplo,1,MPI_DOUBLE,0,world); MPI_Bcast(&tb->fphi,1,MPI_DOUBLE,0,world); } - MPI_Bcast(&tb->r0,1,MPI_INT,0,world); } /* ---------------------------------------------------------------------- From 0559e155f23330999239847396384115fc698311 Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Tue, 11 Jun 2019 18:24:02 -0600 Subject: [PATCH 278/311] Implemented lists instead of multidim arrays --- src/SNAP/compute_sna_atom.cpp | 7 +- src/SNAP/compute_snad_atom.cpp | 34 +- src/SNAP/compute_snav_atom.cpp | 46 +- src/SNAP/pair_snap.cpp | 8 +- src/SNAP/sna.cpp | 1160 ++++++++++++++------------------ src/SNAP/sna.h | 25 +- 6 files changed, 566 insertions(+), 714 deletions(-) diff --git a/src/SNAP/compute_sna_atom.cpp b/src/SNAP/compute_sna_atom.cpp index 17774143d5..fea37faca0 100644 --- a/src/SNAP/compute_sna_atom.cpp +++ b/src/SNAP/compute_sna_atom.cpp @@ -247,13 +247,12 @@ void ComputeSNAAtom::compute_peratom() snaptr->compute_ui(ninside); snaptr->compute_zi(); snaptr->compute_bi(); - snaptr->copy_bi2bvec(); for (int icoeff = 0; icoeff < ncoeff; icoeff++) - sna[i][icoeff] = snaptr->bvec[icoeff]; + sna[i][icoeff] = snaptr->blist[icoeff]; if (quadraticflag) { int ncount = ncoeff; for (int icoeff = 0; icoeff < ncoeff; icoeff++) { - double bi = snaptr->bvec[icoeff]; + double bi = snaptr->blist[icoeff]; // diagonal element of quadratic matrix @@ -262,7 +261,7 @@ void ComputeSNAAtom::compute_peratom() // upper-triangular elements of quadratic matrix for (int jcoeff = icoeff+1; jcoeff < ncoeff; jcoeff++) - sna[i][ncount++] = bi*snaptr->bvec[jcoeff]; + sna[i][ncount++] = bi*snaptr->blist[jcoeff]; } } } else { diff --git a/src/SNAP/compute_snad_atom.cpp b/src/SNAP/compute_snad_atom.cpp index b356d61d3d..156380eccc 100644 --- a/src/SNAP/compute_snad_atom.cpp +++ b/src/SNAP/compute_snad_atom.cpp @@ -266,7 +266,6 @@ void ComputeSNADAtom::compute_peratom() snaptr->compute_zi(); if (quadraticflag) { snaptr->compute_bi(); - snaptr->copy_bi2bvec(); } for (int jj = 0; jj < ninside; jj++) { @@ -275,7 +274,6 @@ void ComputeSNADAtom::compute_peratom() snaptr->wj[jj], snaptr->rcutij[jj]); snaptr->compute_dbidrj(); - snaptr->copy_dbi2dbvec(); // Accumulate -dBi/dRi, -dBi/dRj @@ -283,12 +281,12 @@ void ComputeSNADAtom::compute_peratom() double *snadj = snad[j]+typeoffset; for (int icoeff = 0; icoeff < ncoeff; icoeff++) { - snadi[icoeff] += snaptr->dbvec[icoeff][0]; - snadi[icoeff+yoffset] += snaptr->dbvec[icoeff][1]; - snadi[icoeff+zoffset] += snaptr->dbvec[icoeff][2]; - snadj[icoeff] -= snaptr->dbvec[icoeff][0]; - snadj[icoeff+yoffset] -= snaptr->dbvec[icoeff][1]; - snadj[icoeff+zoffset] -= snaptr->dbvec[icoeff][2]; + snadi[icoeff] += snaptr->dblist[icoeff][0]; + snadi[icoeff+yoffset] += snaptr->dblist[icoeff][1]; + snadi[icoeff+zoffset] += snaptr->dblist[icoeff][2]; + snadj[icoeff] -= snaptr->dblist[icoeff][0]; + snadj[icoeff+yoffset] -= snaptr->dblist[icoeff][1]; + snadj[icoeff+zoffset] -= snaptr->dblist[icoeff][2]; } if (quadraticflag) { @@ -297,10 +295,10 @@ void ComputeSNADAtom::compute_peratom() snadj += quadraticoffset; int ncount = 0; for (int icoeff = 0; icoeff < ncoeff; icoeff++) { - double bi = snaptr->bvec[icoeff]; - double bix = snaptr->dbvec[icoeff][0]; - double biy = snaptr->dbvec[icoeff][1]; - double biz = snaptr->dbvec[icoeff][2]; + double bi = snaptr->blist[icoeff]; + double bix = snaptr->dblist[icoeff][0]; + double biy = snaptr->dblist[icoeff][1]; + double biz = snaptr->dblist[icoeff][2]; // diagonal elements of quadratic matrix @@ -319,12 +317,12 @@ void ComputeSNADAtom::compute_peratom() // upper-triangular elements of quadratic matrix for (int jcoeff = icoeff+1; jcoeff < ncoeff; jcoeff++) { - double dbxtmp = bi*snaptr->dbvec[jcoeff][0] - + bix*snaptr->bvec[jcoeff]; - double dbytmp = bi*snaptr->dbvec[jcoeff][1] - + biy*snaptr->bvec[jcoeff]; - double dbztmp = bi*snaptr->dbvec[jcoeff][2] - + biz*snaptr->bvec[jcoeff]; + double dbxtmp = bi*snaptr->dblist[jcoeff][0] + + bix*snaptr->blist[jcoeff]; + double dbytmp = bi*snaptr->dblist[jcoeff][1] + + biy*snaptr->blist[jcoeff]; + double dbztmp = bi*snaptr->dblist[jcoeff][2] + + biz*snaptr->blist[jcoeff]; snadi[ncount] += dbxtmp; snadi[ncount+yoffset] += dbytmp; diff --git a/src/SNAP/compute_snav_atom.cpp b/src/SNAP/compute_snav_atom.cpp index 9f9ef7a67d..6caff0820c 100644 --- a/src/SNAP/compute_snav_atom.cpp +++ b/src/SNAP/compute_snav_atom.cpp @@ -260,7 +260,6 @@ void ComputeSNAVAtom::compute_peratom() snaptr->compute_zi(); if (quadraticflag) { snaptr->compute_bi(); - snaptr->copy_bi2bvec(); } for (int jj = 0; jj < ninside; jj++) { @@ -270,7 +269,6 @@ void ComputeSNAVAtom::compute_peratom() snaptr->wj[jj], snaptr->rcutij[jj]); snaptr->compute_dbidrj(); - snaptr->copy_dbi2dbvec(); // Accumulate -dBi/dRi*Ri, -dBi/dRj*Rj @@ -278,18 +276,18 @@ void ComputeSNAVAtom::compute_peratom() double *snavj = snav[j]+typeoffset; for (int icoeff = 0; icoeff < ncoeff; icoeff++) { - snavi[icoeff] += snaptr->dbvec[icoeff][0]*xtmp; - snavi[icoeff+nperdim] += snaptr->dbvec[icoeff][1]*ytmp; - snavi[icoeff+2*nperdim] += snaptr->dbvec[icoeff][2]*ztmp; - snavi[icoeff+3*nperdim] += snaptr->dbvec[icoeff][1]*ztmp; - snavi[icoeff+4*nperdim] += snaptr->dbvec[icoeff][0]*ztmp; - snavi[icoeff+5*nperdim] += snaptr->dbvec[icoeff][0]*ytmp; - snavj[icoeff] -= snaptr->dbvec[icoeff][0]*x[j][0]; - snavj[icoeff+nperdim] -= snaptr->dbvec[icoeff][1]*x[j][1]; - snavj[icoeff+2*nperdim] -= snaptr->dbvec[icoeff][2]*x[j][2]; - snavj[icoeff+3*nperdim] -= snaptr->dbvec[icoeff][1]*x[j][2]; - snavj[icoeff+4*nperdim] -= snaptr->dbvec[icoeff][0]*x[j][2]; - snavj[icoeff+5*nperdim] -= snaptr->dbvec[icoeff][0]*x[j][1]; + snavi[icoeff] += snaptr->dblist[icoeff][0]*xtmp; + snavi[icoeff+nperdim] += snaptr->dblist[icoeff][1]*ytmp; + snavi[icoeff+2*nperdim] += snaptr->dblist[icoeff][2]*ztmp; + snavi[icoeff+3*nperdim] += snaptr->dblist[icoeff][1]*ztmp; + snavi[icoeff+4*nperdim] += snaptr->dblist[icoeff][0]*ztmp; + snavi[icoeff+5*nperdim] += snaptr->dblist[icoeff][0]*ytmp; + snavj[icoeff] -= snaptr->dblist[icoeff][0]*x[j][0]; + snavj[icoeff+nperdim] -= snaptr->dblist[icoeff][1]*x[j][1]; + snavj[icoeff+2*nperdim] -= snaptr->dblist[icoeff][2]*x[j][2]; + snavj[icoeff+3*nperdim] -= snaptr->dblist[icoeff][1]*x[j][2]; + snavj[icoeff+4*nperdim] -= snaptr->dblist[icoeff][0]*x[j][2]; + snavj[icoeff+5*nperdim] -= snaptr->dblist[icoeff][0]*x[j][1]; } if (quadraticflag) { @@ -298,10 +296,10 @@ void ComputeSNAVAtom::compute_peratom() snavj += quadraticoffset; int ncount = 0; for (int icoeff = 0; icoeff < ncoeff; icoeff++) { - double bi = snaptr->bvec[icoeff]; - double bix = snaptr->dbvec[icoeff][0]; - double biy = snaptr->dbvec[icoeff][1]; - double biz = snaptr->dbvec[icoeff][2]; + double bi = snaptr->blist[icoeff]; + double bix = snaptr->dblist[icoeff][0]; + double biy = snaptr->dblist[icoeff][1]; + double biz = snaptr->dblist[icoeff][2]; // diagonal element of quadratic matrix @@ -325,12 +323,12 @@ void ComputeSNAVAtom::compute_peratom() // upper-triangular elements of quadratic matrix for (int jcoeff = icoeff+1; jcoeff < ncoeff; jcoeff++) { - double dbxtmp = bi*snaptr->dbvec[jcoeff][0] - + bix*snaptr->bvec[jcoeff]; - double dbytmp = bi*snaptr->dbvec[jcoeff][1] - + biy*snaptr->bvec[jcoeff]; - double dbztmp = bi*snaptr->dbvec[jcoeff][2] - + biz*snaptr->bvec[jcoeff]; + double dbxtmp = bi*snaptr->dblist[jcoeff][0] + + bix*snaptr->blist[jcoeff]; + double dbytmp = bi*snaptr->dblist[jcoeff][1] + + biy*snaptr->blist[jcoeff]; + double dbztmp = bi*snaptr->dblist[jcoeff][2] + + biz*snaptr->blist[jcoeff]; snavi[ncount] += dbxtmp*xtmp; snavi[ncount+nperdim] += dbytmp*ytmp; snavi[ncount+2*nperdim] += dbztmp*ztmp; diff --git a/src/SNAP/pair_snap.cpp b/src/SNAP/pair_snap.cpp index ae542e81b4..6a65f872fd 100644 --- a/src/SNAP/pair_snap.cpp +++ b/src/SNAP/pair_snap.cpp @@ -166,17 +166,14 @@ void PairSNAP::compute(int eflag, int vflag) } } - // compute Ui, Zi, and Bi for atom I + // compute Ui, Yi for atom I snaptr->compute_ui(ninside); - snaptr->compute_zi(); // for neighbors of I within cutoff: // compute Fij = dEi/dRj = -dEi/dRi // add to Fi, subtract from Fj - // compute beta_i*Z_i = Y_i - snaptr->compute_yi(beta[ii]); for (int jj = 0; jj < ninside; jj++) { @@ -310,10 +307,9 @@ void PairSNAP::compute_bispectrum() snaptr->compute_ui(ninside); snaptr->compute_zi(); snaptr->compute_bi(); - snaptr->copy_bi2bvec(); for (int k = 0; k < ncoeff; k++) - bispectrum[ii][k] = snaptr->bvec[k]; + bispectrum[ii][k] = snaptr->blist[k]; } } diff --git a/src/SNAP/sna.cpp b/src/SNAP/sna.cpp index b388136caf..131ac48fdb 100644 --- a/src/SNAP/sna.cpp +++ b/src/SNAP/sna.cpp @@ -128,8 +128,6 @@ SNA::SNA(LAMMPS* lmp, double rfac0_in, ncoeff = compute_ncoeff(); - create_twojmax_arrays(); - bvec = NULL; dbvec = NULL; memory->create(bvec, ncoeff, "pair:bvec"); @@ -142,20 +140,21 @@ SNA::SNA(LAMMPS* lmp, double rfac0_in, idxz = NULL; idxb= NULL; + build_indexlist(); + create_twojmax_arrays(); + if (bzero_flag) { double www = wself*wself*wself; for(int j = 0; j <= twojmax; j++) bzero[j] = www*(j+1); } - build_indexlist(); } /* ---------------------------------------------------------------------- */ SNA::~SNA() { - destroy_twojmax_arrays(); memory->destroy(rij); memory->destroy(inside); memory->destroy(wj); @@ -164,6 +163,7 @@ SNA::~SNA() memory->destroy(dbvec); delete[] idxz; delete[] idxb; + destroy_twojmax_arrays(); } void SNA::build_indexlist() @@ -234,9 +234,10 @@ void SNA::build_indexlist() for(int j1 = 0; j1 <= twojmax; j1++) for(int j2 = 0; j2 <= j1; j2++) for(int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) { - if (j < j1) continue; - idxb_block[j1][j2][j] = idxb_count; - idxb_count++; + if (j >= j1) { + idxb_block[j1][j2][j] = idxb_count; + idxb_count++; + } } // index list for zlist @@ -266,38 +267,6 @@ void SNA::build_indexlist() // multiply and divide by j+1 factors // account for multiplicity of 1, 2, or 3 - // CODE HORROR!! Need to figure this out later - double betaj = 1.0; -// #ifdef USE_YDIRECT_ZLIST -// double betaj; -// if (j >= j1) { -// const int jjb = idxb_block[j1][j2][j]; -// if (j1 == j) { -// if (j2 == j) betaj = 3*beta[jjb]; -// else betaj = 2*beta[jjb]; -// } else betaj = beta[jjb]; -// } else if (j >= j2) { -// const int jjb = idxb_block[j][j2][j1]; -// if (j2 == j) betaj = 2*beta[jjb]*(j1+1)/(j+1.0); -// else betaj = beta[jjb]*(j1+1)/(j+1.0); -// } else { -// const int jjb = idxb_block[j2][j][j1]; -// betaj = beta[jjb]*(j1+1)/(j+1.0); -// } -// #else -// double betaj; -// if (j >= j1) { -// const int jjb = idxb_block[j1][j2][j]; -// betaj = beta[jjb]; -// } else if (j >= j2) { -// const int jjb = idxb_block[j][j2][j1]; -// betaj = beta[jjb]*(j1+1)/(j+1.0); -// } else { -// const int jjb = idxb_block[j2][j][j1]; -// betaj = beta[jjb]*(j1+1)/(j+1.0); -// } -// #endif - for (int mb = 0; 2*mb <= j; mb++) for (int ma = 0; ma <= j; ma++) { idxz[idxz_count].j1 = j1; @@ -311,11 +280,9 @@ void SNA::build_indexlist() idxz[idxz_count].nb = MIN(j1, (2 * mb - j + j2 + j1) / 2) - idxz[idxz_count].mb1min + 1; // apply to z(j1,j2,j,ma,mb) to unique element of y(j) - // find right beta[jjb] and y_list[jju] entries const int jju = idxu_block[j] + (j+1)*mb + ma; idxz[idxz_count].jju = jju; - idxz[idxz_count].betaj = betaj; idxz_count++; } @@ -386,105 +353,168 @@ void SNA::compute_ui(int jnum) void SNA::compute_zi() { - // compute_dbidrj() requires full j1/j2/j chunk of z elements - // use zarray j1/j2 symmetry + int ma2, mb2; + for(int jjz = 0; jjz < idxz_max; jjz++) { + const int j1 = idxz[jjz].j1; + const int j2 = idxz[jjz].j2; + const int j = idxz[jjz].j; + const int ma1min = idxz[jjz].ma1min; + const int ma2max = idxz[jjz].ma2max; + const int na = idxz[jjz].na; + const int mb1min = idxz[jjz].mb1min; + const int mb2max = idxz[jjz].mb2max; + const int nb = idxz[jjz].nb; - for(int j1 = 0; j1 <= twojmax; j1++) - for(int j2 = 0; j2 <= j1; j2++) { - for(int j = j1 - j2; j <= MIN(twojmax, j1 + j2); j += 2) { - double sumb1_r, sumb1_i; - int ma2, mb2; - for(int mb = 0; 2*mb <= j; mb++) - for(int ma = 0; ma <= j; ma++) { - zarray_r[j1][j2][j][ma][mb] = 0.0; - zarray_i[j1][j2][j][ma][mb] = 0.0; + const double* cgblock = cglist + idxcg_block[j1][j2][j]; - for(int ma1 = MAX(0, (2 * ma - j - j2 + j1) / 2); - ma1 <= MIN(j1, (2 * ma - j + j2 + j1) / 2); ma1++) { - sumb1_r = 0.0; - sumb1_i = 0.0; + zlist_r[jjz] = 0.0; + zlist_i[jjz] = 0.0; - ma2 = (2 * ma - j - (2 * ma1 - j1) + j2) / 2; + int jju1 = idxu_block[j1] + (j1+1)*mb1min; + int jju2 = idxu_block[j2] + (j2+1)*mb2max; + int icgb = mb1min*(j2+1) + mb2max; + for(int ib = 0; ib < nb; ib++) { - for(int mb1 = MAX(0, (2 * mb - j - j2 + j1) / 2); - mb1 <= MIN(j1, (2 * mb - j + j2 + j1) / 2); mb1++) { + double suma1_r = 0.0; + double suma1_i = 0.0; - mb2 = (2 * mb - j - (2 * mb1 - j1) + j2) / 2; - sumb1_r += cgarray[j1][j2][j][mb1][mb2] * - (uarraytot_r[j1][ma1][mb1] * uarraytot_r[j2][ma2][mb2] - - uarraytot_i[j1][ma1][mb1] * uarraytot_i[j2][ma2][mb2]); - sumb1_i += cgarray[j1][j2][j][mb1][mb2] * - (uarraytot_r[j1][ma1][mb1] * uarraytot_i[j2][ma2][mb2] + - uarraytot_i[j1][ma1][mb1] * uarraytot_r[j2][ma2][mb2]); - } // end loop over mb1 + const double* u1_r = &ulisttot_r[jju1]; + const double* u1_i = &ulisttot_i[jju1]; + const double* u2_r = &ulisttot_r[jju2]; + const double* u2_i = &ulisttot_i[jju2]; - zarray_r[j1][j2][j][ma][mb] += - sumb1_r * cgarray[j1][j2][j][ma1][ma2]; - zarray_i[j1][j2][j][ma][mb] += - sumb1_i * cgarray[j1][j2][j][ma1][ma2]; - } // end loop over ma1 - } // end loop over ma, mb - } // end loop over j - } // end loop over j1, j2 + int ma1 = ma1min; + int ma2 = ma2max; + int icga = ma1min*(j2+1) + ma2max; + for(int ia = 0; ia < na; ia++) { + suma1_r += cgblock[icga] * (u1_r[ma1] * u2_r[ma2] - u1_i[ma1] * u2_i[ma2]); + suma1_i += cgblock[icga] * (u1_r[ma1] * u2_i[ma2] + u1_i[ma1] * u2_r[ma2]); + ma1++; + ma2--; + icga += j2; + } // end loop over ia + zlist_r[jjz] += cgblock[icgb] * suma1_r; + zlist_i[jjz] += cgblock[icgb] * suma1_i; + jju1 += j1+1; + jju2 -= j2+1; + icgb += j2; + } // end loop over ib + +// // apply symmetry factor + +// const double jfac = 1.0/(j+1); +// zlist_r[jjz] *= jfac; +// zlist_i[jjz] *= jfac; + + } // end loop over jjz } /* ---------------------------------------------------------------------- - compute Yi by summing over products of beta and Zi + compute Yi from Ui without storing Zi, looping over ylist ------------------------------------------------------------------------- */ void SNA::compute_yi(const double* beta) { - int j; - int idxz_count; - double **jjjzarray_r, **jjjzarray_i; - for(int j = 0; j <= twojmax; j++) { + int jju = idxu_block[j]; for(int mb = 0; 2*mb <= j; mb++) for(int ma = 0; ma <= j; ma++) { - yarray_r[j][ma][mb] = 0.0; - yarray_i[j][ma][mb] = 0.0; + ylist_r[jju] = 0.0; + ylist_i[jju] = 0.0; + jju++; } // end loop over ma, mb } // end loop over j for(int jjb = 0; jjb < idxb_max; jjb++) { - const int j1 = idxb[jjb].j1; - const int j2 = idxb[jjb].j2; - const int j3 = idxb[jjb].j; + const int j1b = idxb[jjb].j1; + const int j2b = idxb[jjb].j2; + const int j3b = idxb[jjb].j; - j = j3; - jjjzarray_r = zarray_r[j1][j2][j3]; - jjjzarray_i = zarray_i[j1][j2][j3]; - for(int mb = 0; 2*mb <= j; mb++) - for(int ma = 0; ma <= j; ma++) { - yarray_r[j][ma][mb] += beta[jjb]*jjjzarray_r[ma][mb]; - yarray_i[j][ma][mb] += beta[jjb]*jjjzarray_i[ma][mb]; - } // end loop over ma, mb - - j = j1; - jjjzarray_r = zarray_r[j3][j2][j1]; - jjjzarray_i = zarray_i[j3][j2][j1]; - double j1fac = (j3+1)/(j+1.0); - for(int mb = 0; 2*mb <= j; mb++) - for(int ma = 0; ma <= j; ma++) { - yarray_r[j][ma][mb] += beta[jjb]*jjjzarray_r[ma][mb]*j1fac; - yarray_i[j][ma][mb] += beta[jjb]*jjjzarray_i[ma][mb]*j1fac; - } // end loop over ma, mb - - j = j2; - jjjzarray_r = zarray_r[j3][j1][j2]; - jjjzarray_i = zarray_i[j3][j1][j2]; - double j2fac = (j3+1)/(j+1.0); - for(int mb = 0; 2*mb <= j; mb++) - for(int ma = 0; ma <= j; ma++) { - yarray_r[j][ma][mb] += beta[jjb]*jjjzarray_r[ma][mb]*j2fac; - yarray_i[j][ma][mb] += beta[jjb]*jjjzarray_i[ma][mb]*j2fac; - } // end loop over ma, mb + compute_yterm(j1b,j2b,j3b,beta); + compute_yterm(j3b,j2b,j1b,beta); + compute_yterm(j3b,j1b,j2b,beta); } // end loop over jjb } +void SNA::compute_yterm(int j1, int j2, int j, const double* beta) { + double betaj; + + int jju = idxu_block[j]; + int jjz = idxz_block[j1][j2][j]; + + // pick out right beta value + + if (j >= j1) { + const int jjb = idxb_block[j1][j2][j]; + betaj = beta[jjb]; + } else if (j >= j2) { + const int jjb = idxb_block[j][j2][j1]; + betaj = beta[jjb]*(j1+1)/(j+1.0); + } else { + const int jjb = idxb_block[j2][j][j1]; + betaj = beta[jjb]*(j1+1)/(j+1.0); + } + + // can replace this with a single loop over jjz + + for (int mb = 0; 2*mb <= j; mb++) + for (int ma = 0; ma <= j; ma++) { + + const int ma1min = idxz[jjz].ma1min; + const int ma2max = idxz[jjz].ma2max; + const int na = idxz[jjz].na; + const int mb1min = idxz[jjz].mb1min; + const int mb2max = idxz[jjz].mb2max; + const int nb = idxz[jjz].nb; + + const double* cgblock = cglist + idxcg_block[j1][j2][j]; + + double ztmp_r = 0.0; + double ztmp_i = 0.0; + + int jju1 = idxu_block[j1] + (j1+1)*mb1min; + int jju2 = idxu_block[j2] + (j2+1)*mb2max; + int icgb = mb1min*(j2+1) + mb2max; + for(int ib = 0; ib < nb; ib++) { + + double suma1_r = 0.0; + double suma1_i = 0.0; + + const double* u1_r = &ulisttot_r[jju1]; + const double* u1_i = &ulisttot_i[jju1]; + const double* u2_r = &ulisttot_r[jju2]; + const double* u2_i = &ulisttot_i[jju2]; + + int ma1 = ma1min; + int ma2 = ma2max; + int icga = ma1min*(j2+1) + ma2max; + + for(int ia = 0; ia < na; ia++) { + suma1_r += cgblock[icga] * (u1_r[ma1] * u2_r[ma2] - u1_i[ma1] * u2_i[ma2]); + suma1_i += cgblock[icga] * (u1_r[ma1] * u2_i[ma2] + u1_i[ma1] * u2_r[ma2]); + ma1++; + ma2--; + icga += j2; + } // end loop over ia + + ztmp_r += cgblock[icgb] * suma1_r; + ztmp_i += cgblock[icgb] * suma1_i; + jju1 += j1+1; + jju2 -= j2+1; + icgb += j2; + } // end loop over ib + + // printf("jju betaj ztmp ylist %d %g %g %d %d %d %d %d\n",jju,betaj,ztmp_r,j1,j2,j,ma,mb); + ylist_r[jju] += betaj*ztmp_r; + ylist_i[jju] += betaj*ztmp_i; + jjz++; + jju++; + } // end loop over ma, mb +} + /* ---------------------------------------------------------------------- compute dEidRj ------------------------------------------------------------------------- */ @@ -496,19 +526,21 @@ void SNA::compute_deidrj(double* dedr) dedr[k] = 0.0; for(int j = 0; j <= twojmax; j++) { + int jju = idxu_block[j]; for(int mb = 0; 2*mb < j; mb++) for(int ma = 0; ma <= j; ma++) { - double* dudr_r = duarray_r[j][ma][mb]; - double* dudr_i = duarray_i[j][ma][mb]; - double jjjmambyarray_r = yarray_r[j][ma][mb]; - double jjjmambyarray_i = yarray_i[j][ma][mb]; + double* dudr_r = dulist_r[jju]; + double* dudr_i = dulist_i[jju]; + double jjjmambyarray_r = ylist_r[jju]; + double jjjmambyarray_i = ylist_i[jju]; + for(int k = 0; k < 3; k++) dedr[k] += dudr_r[k] * jjjmambyarray_r + dudr_i[k] * jjjmambyarray_i; - + jju++; } //end loop over ma mb // For j even, handle middle column @@ -517,30 +549,33 @@ void SNA::compute_deidrj(double* dedr) int mb = j/2; for(int ma = 0; ma < mb; ma++) { - double* dudr_r = duarray_r[j][ma][mb]; - double* dudr_i = duarray_i[j][ma][mb]; - double jjjmambyarray_r = yarray_r[j][ma][mb]; - double jjjmambyarray_i = yarray_i[j][ma][mb]; + double* dudr_r = dulist_r[jju]; + double* dudr_i = dulist_i[jju]; + double jjjmambyarray_r = ylist_r[jju]; + double jjjmambyarray_i = ylist_i[jju]; + for(int k = 0; k < 3; k++) dedr[k] += dudr_r[k] * jjjmambyarray_r + dudr_i[k] * jjjmambyarray_i; - + jju++; } int ma = mb; - double* dudr_r = duarray_r[j][ma][mb]; - double* dudr_i = duarray_i[j][ma][mb]; - double jjjmambyarray_r = yarray_r[j][ma][mb]; - double jjjmambyarray_i = yarray_i[j][ma][mb]; + double* dudr_r = dulist_r[jju]; + double* dudr_i = dulist_i[jju]; + double jjjmambyarray_r = ylist_r[jju]; + double jjjmambyarray_i = ylist_i[jju]; + for(int k = 0; k < 3; k++) dedr[k] += (dudr_r[k] * jjjmambyarray_r + dudr_i[k] * jjjmambyarray_i)*0.5; - + jju++; + } // end if jeven - } // End loop over j + } // end loop over j for(int k = 0; k < 3; k++) dedr[k] *= 2.0; @@ -562,103 +597,41 @@ void SNA::compute_bi() // b(j1,j2,j) += // 2*Conj(u(j,ma,mb))*z(j1,j2,j,ma,mb) - for(int j1 = 0; j1 <= twojmax; j1++) - for(int j2 = 0; j2 <= j1; j2++) { - for(int j = abs(j1 - j2); - j <= MIN(twojmax, j1 + j2); j += 2) { - barray[j1][j2][j] = 0.0; + for(int jjb = 0; jjb < idxb_max; jjb++) { + const int j1 = idxb[jjb].j1; + const int j2 = idxb[jjb].j2; + const int j = idxb[jjb].j; - for(int mb = 0; 2*mb < j; mb++) - for(int ma = 0; ma <= j; ma++) - barray[j1][j2][j] += - uarraytot_r[j][ma][mb] * zarray_r[j1][j2][j][ma][mb] + - uarraytot_i[j][ma][mb] * zarray_i[j1][j2][j][ma][mb]; + int jjz = idxz_block[j1][j2][j]; + int jju = idxu_block[j]; + double sumzu = 0.0; + for (int mb = 0; 2*mb < j; mb++) + for (int ma = 0; ma <= j; ma++) { + sumzu += ulisttot_r[jju]*zlist_r[jjz] + + ulisttot_i[jju]*zlist_i[jjz]; + jjz++; + jju++; + } // end loop over ma, mb - // For j even, special treatment for middle column + // For j even, handle middle column - if (j%2 == 0) { - int mb = j/2; - for(int ma = 0; ma < mb; ma++) - barray[j1][j2][j] += - uarraytot_r[j][ma][mb] * zarray_r[j1][j2][j][ma][mb] + - uarraytot_i[j][ma][mb] * zarray_i[j1][j2][j][ma][mb]; - int ma = mb; - barray[j1][j2][j] += - (uarraytot_r[j][ma][mb] * zarray_r[j1][j2][j][ma][mb] + - uarraytot_i[j][ma][mb] * zarray_i[j1][j2][j][ma][mb])*0.5; - } - - barray[j1][j2][j] *= 2.0; - if (bzero_flag) - barray[j1][j2][j] -= bzero[j]; + if (j%2 == 0) { + int mb = j/2; + for(int ma = 0; ma < mb; ma++) { + sumzu += ulisttot_r[jju]*zlist_r[jjz] + + ulisttot_i[jju]*zlist_i[jjz]; + jjz++; + jju++; } - } -} - -/* ---------------------------------------------------------------------- - copy Bi array to a vector -------------------------------------------------------------------------- */ - -void SNA::copy_bi2bvec() -{ - int ncount, j1, j2, j; - - ncount = 0; - - for(j1 = 0; j1 <= twojmax; j1++) - if(diagonalstyle == 0) { - for(j2 = 0; j2 <= j1; j2++) - for(j = abs(j1 - j2); - j <= MIN(twojmax, j1 + j2); j += 2) { - bvec[ncount] = barray[j1][j2][j]; - ncount++; - } - } else if(diagonalstyle == 1) { - j2 = j1; - for(j = abs(j1 - j2); - j <= MIN(twojmax, j1 + j2); j += 2) { - bvec[ncount] = barray[j1][j2][j]; - ncount++; - } - } else if(diagonalstyle == 2) { - j = j2 = j1; - bvec[ncount] = barray[j1][j2][j]; - ncount++; - } else if(diagonalstyle == 3) { - for(j2 = 0; j2 <= j1; j2++) - for(j = abs(j1 - j2); - j <= MIN(twojmax, j1 + j2); j += 2) - if (j >= j1) { - bvec[ncount] = barray[j1][j2][j]; - ncount++; - } - } -} - -/* ---------------------------------------------------------------------- - calculate derivative of Ui w.r.t. atom j -------------------------------------------------------------------------- */ - -void SNA::compute_duidrj(double* rij, double wj, double rcut) -{ - double rsq, r, x, y, z, z0, theta0, cs, sn; - double dz0dr; - - x = rij[0]; - y = rij[1]; - z = rij[2]; - rsq = x * x + y * y + z * z; - r = sqrt(rsq); - double rscale0 = rfac0 * MY_PI / (rcut - rmin0); - theta0 = (r - rmin0) * rscale0; - cs = cos(theta0); - sn = sin(theta0); - z0 = r * cs / sn; - dz0dr = z0 / r - (r*rscale0) * (rsq + z0 * z0) / rsq; - - compute_duarray(x, y, z, z0, r, dz0dr, wj, rcut); + sumzu += 0.5*(ulisttot_r[jju]*zlist_r[jjz] + + ulisttot_i[jju]*zlist_i[jjz]); + jjz++; + jju++; + } // end if jeven + blist[jjb] = 2.0*sumzu; + } } /* ---------------------------------------------------------------------- @@ -698,44 +671,36 @@ void SNA::compute_dbidrj() double** jjjzarray_i; double jjjmambzarray_r; double jjjmambzarray_i; + int jjz, jju; for(int jjb = 0; jjb < idxb_max; jjb++) { const int j1 = idxb[jjb].j1; const int j2 = idxb[jjb].j2; const int j = idxb[jjb].j; - dbdr = dbarray[j1][j2][j]; + dbdr = dblist[jjb]; dbdr[0] = 0.0; dbdr[1] = 0.0; dbdr[2] = 0.0; // Sum terms Conj(dudr(j,ma,mb))*z(j1,j2,j,ma,mb) + jjz = idxz_block[j1][j2][j]; + jju = idxu_block[j]; + for(int k = 0; k < 3; k++) sumzdu_r[k] = 0.0; - // use zarray j1/j2 symmetry (optional) - - if (j1 >= j2) { - jjjzarray_r = zarray_r[j1][j2][j]; - jjjzarray_i = zarray_i[j1][j2][j]; - } else { - jjjzarray_r = zarray_r[j2][j1][j]; - jjjzarray_i = zarray_i[j2][j1][j]; - } - for(int mb = 0; 2*mb < j; mb++) for(int ma = 0; ma <= j; ma++) { - - dudr_r = duarray_r[j][ma][mb]; - dudr_i = duarray_i[j][ma][mb]; - jjjmambzarray_r = jjjzarray_r[ma][mb]; - jjjmambzarray_i = jjjzarray_i[ma][mb]; + dudr_r = dulist_r[jju]; + dudr_i = dulist_i[jju]; for(int k = 0; k < 3; k++) sumzdu_r[k] += - dudr_r[k] * jjjmambzarray_r + - dudr_i[k] * jjjmambzarray_i; - + dudr_r[k] * zlist_r[jjz] + + dudr_i[k] * zlist_i[jjz]; + jjz++; + jju++; } //end loop over ma mb // For j even, handle middle column @@ -743,24 +708,24 @@ void SNA::compute_dbidrj() if (j%2 == 0) { int mb = j/2; for(int ma = 0; ma < mb; ma++) { - dudr_r = duarray_r[j][ma][mb]; - dudr_i = duarray_i[j][ma][mb]; - jjjmambzarray_r = jjjzarray_r[ma][mb]; - jjjmambzarray_i = jjjzarray_i[ma][mb]; + dudr_r = dulist_r[jju]; + dudr_i = dulist_i[jju]; for(int k = 0; k < 3; k++) sumzdu_r[k] += - dudr_r[k] * jjjmambzarray_r + - dudr_i[k] * jjjmambzarray_i; + dudr_r[k] * zlist_r[jjz] + + dudr_i[k] * zlist_i[jjz]; + jjz++; + jju++; } int ma = mb; - dudr_r = duarray_r[j][ma][mb]; - dudr_i = duarray_i[j][ma][mb]; - jjjmambzarray_r = jjjzarray_r[ma][mb]; - jjjmambzarray_i = jjjzarray_i[ma][mb]; + dudr_r = dulist_r[jju]; + dudr_i = dulist_i[jju]; for(int k = 0; k < 3; k++) sumzdu_r[k] += - (dudr_r[k] * jjjmambzarray_r + - dudr_i[k] * jjjmambzarray_i)*0.5; + (dudr_r[k] * zlist_r[jjz] + + dudr_i[k] * zlist_i[jjz])*0.5; + jjz++; + jju++; } // end if jeven for(int k = 0; k < 3; k++) @@ -770,115 +735,97 @@ void SNA::compute_dbidrj() double j1fac = (j+1)/(j1+1.0); + jjz = idxz_block[j][j2][j1]; + jju = idxu_block[j1]; + for(int k = 0; k < 3; k++) sumzdu_r[k] = 0.0; - // use zarray j1/j2 symmetry (optional) - - if (j >= j2) { - jjjzarray_r = zarray_r[j][j2][j1]; - jjjzarray_i = zarray_i[j][j2][j1]; - } else { - jjjzarray_r = zarray_r[j2][j][j1]; - jjjzarray_i = zarray_i[j2][j][j1]; - } - - for(int mb1 = 0; 2*mb1 < j1; mb1++) - for(int ma1 = 0; ma1 <= j1; ma1++) { - - dudr_r = duarray_r[j1][ma1][mb1]; - dudr_i = duarray_i[j1][ma1][mb1]; - jjjmambzarray_r = jjjzarray_r[ma1][mb1]; - jjjmambzarray_i = jjjzarray_i[ma1][mb1]; + for(int mb = 0; 2*mb < j1; mb++) + for(int ma = 0; ma <= j1; ma++) { + dudr_r = dulist_r[jju]; + dudr_i = dulist_i[jju]; for(int k = 0; k < 3; k++) sumzdu_r[k] += - dudr_r[k] * jjjmambzarray_r + - dudr_i[k] * jjjmambzarray_i; - - } //end loop over ma1 mb1 + dudr_r[k] * zlist_r[jjz] + + dudr_i[k] * zlist_i[jjz]; + jjz++; + jju++; + } //end loop over ma mb // For j1 even, handle middle column if (j1%2 == 0) { - int mb1 = j1/2; - for(int ma1 = 0; ma1 < mb1; ma1++) { - dudr_r = duarray_r[j1][ma1][mb1]; - dudr_i = duarray_i[j1][ma1][mb1]; - jjjmambzarray_r = jjjzarray_r[ma1][mb1]; - jjjmambzarray_i = jjjzarray_i[ma1][mb1]; + int mb = j1/2; + for(int ma = 0; ma < mb; ma++) { + dudr_r = dulist_r[jju]; + dudr_i = dulist_i[jju]; for(int k = 0; k < 3; k++) sumzdu_r[k] += - dudr_r[k] * jjjmambzarray_r + - dudr_i[k] * jjjmambzarray_i; + dudr_r[k] * zlist_r[jjz] + + dudr_i[k] * zlist_i[jjz]; + jjz++; + jju++; } - int ma1 = mb1; - dudr_r = duarray_r[j1][ma1][mb1]; - dudr_i = duarray_i[j1][ma1][mb1]; - jjjmambzarray_r = jjjzarray_r[ma1][mb1]; - jjjmambzarray_i = jjjzarray_i[ma1][mb1]; + int ma = mb; + dudr_r = dulist_r[jju]; + dudr_i = dulist_i[jju]; for(int k = 0; k < 3; k++) sumzdu_r[k] += - (dudr_r[k] * jjjmambzarray_r + - dudr_i[k] * jjjmambzarray_i)*0.5; + (dudr_r[k] * zlist_r[jjz] + + dudr_i[k] * zlist_i[jjz])*0.5; + jjz++; + jju++; } // end if j1even for(int k = 0; k < 3; k++) dbdr[k] += 2.0*sumzdu_r[k]*j1fac; - // Sum over Conj(dudr(j2,ma2,mb2))*z(j1,j,j2,ma2,mb2) + // Sum over Conj(dudr(j2,ma2,mb2))*z(j,j1,j2,ma2,mb2) double j2fac = (j+1)/(j2+1.0); + jjz = idxz_block[j][j1][j2]; + jju = idxu_block[j2]; + for(int k = 0; k < 3; k++) sumzdu_r[k] = 0.0; - // use zarray j1/j2 symmetry (optional) - - if (j1 >= j) { - jjjzarray_r = zarray_r[j1][j][j2]; - jjjzarray_i = zarray_i[j1][j][j2]; - } else { - jjjzarray_r = zarray_r[j][j1][j2]; - jjjzarray_i = zarray_i[j][j1][j2]; - } - - for(int mb2 = 0; 2*mb2 < j2; mb2++) - for(int ma2 = 0; ma2 <= j2; ma2++) { - - dudr_r = duarray_r[j2][ma2][mb2]; - dudr_i = duarray_i[j2][ma2][mb2]; - jjjmambzarray_r = jjjzarray_r[ma2][mb2]; - jjjmambzarray_i = jjjzarray_i[ma2][mb2]; + for(int mb = 0; 2*mb < j2; mb++) + for(int ma = 0; ma <= j2; ma++) { + dudr_r = dulist_r[jju]; + dudr_i = dulist_i[jju]; for(int k = 0; k < 3; k++) sumzdu_r[k] += - dudr_r[k] * jjjmambzarray_r + - dudr_i[k] * jjjmambzarray_i; - - } //end loop over ma2 mb2 + dudr_r[k] * zlist_r[jjz] + + dudr_i[k] * zlist_i[jjz]; + jjz++; + jju++; + } //end loop over ma mb // For j2 even, handle middle column if (j2%2 == 0) { - int mb2 = j2/2; - for(int ma2 = 0; ma2 < mb2; ma2++) { - dudr_r = duarray_r[j2][ma2][mb2]; - dudr_i = duarray_i[j2][ma2][mb2]; - jjjmambzarray_r = jjjzarray_r[ma2][mb2]; - jjjmambzarray_i = jjjzarray_i[ma2][mb2]; + int mb = j2/2; + for(int ma = 0; ma < mb; ma++) { + dudr_r = dulist_r[jju]; + dudr_i = dulist_i[jju]; for(int k = 0; k < 3; k++) sumzdu_r[k] += - dudr_r[k] * jjjmambzarray_r + - dudr_i[k] * jjjmambzarray_i; + dudr_r[k] * zlist_r[jjz] + + dudr_i[k] * zlist_i[jjz]; + jjz++; + jju++; } - int ma2 = mb2; - dudr_r = duarray_r[j2][ma2][mb2]; - dudr_i = duarray_i[j2][ma2][mb2]; - jjjmambzarray_r = jjjzarray_r[ma2][mb2]; - jjjmambzarray_i = jjjzarray_i[ma2][mb2]; + int ma = mb; + dudr_r = dulist_r[jju]; + dudr_i = dulist_i[jju]; for(int k = 0; k < 3; k++) sumzdu_r[k] += - (dudr_r[k] * jjjmambzarray_r + - dudr_i[k] * jjjmambzarray_i)*0.5; + (dudr_r[k] * zlist_r[jjz] + + dudr_i[k] * zlist_i[jjz])*0.5; + jjz++; + jju++; } // end if j2even for(int k = 0; k < 3; k++) @@ -889,75 +836,56 @@ void SNA::compute_dbidrj() } /* ---------------------------------------------------------------------- - copy Bi derivatives into a vector + calculate derivative of Ui w.r.t. atom j ------------------------------------------------------------------------- */ -void SNA::copy_dbi2dbvec() +void SNA::compute_duidrj(double* rij, double wj, double rcut) { - int ncount, j1, j2, j; + double rsq, r, x, y, z, z0, theta0, cs, sn; + double dz0dr; - ncount = 0; + x = rij[0]; + y = rij[1]; + z = rij[2]; + rsq = x * x + y * y + z * z; + r = sqrt(rsq); + double rscale0 = rfac0 * MY_PI / (rcut - rmin0); + theta0 = (r - rmin0) * rscale0; + cs = cos(theta0); + sn = sin(theta0); + z0 = r * cs / sn; + dz0dr = z0 / r - (r*rscale0) * (rsq + z0 * z0) / rsq; - for(j1 = 0; j1 <= twojmax; j1++) { - if(diagonalstyle == 0) { - for(j2 = 0; j2 <= j1; j2++) - for(j = abs(j1 - j2); - j <= MIN(twojmax, j1 + j2); j += 2) { - dbvec[ncount][0] = dbarray[j1][j2][j][0]; - dbvec[ncount][1] = dbarray[j1][j2][j][1]; - dbvec[ncount][2] = dbarray[j1][j2][j][2]; - ncount++; - } - } else if(diagonalstyle == 1) { - j2 = j1; - for(j = abs(j1 - j2); - j <= MIN(twojmax, j1 + j2); j += 2) { - dbvec[ncount][0] = dbarray[j1][j2][j][0]; - dbvec[ncount][1] = dbarray[j1][j2][j][1]; - dbvec[ncount][2] = dbarray[j1][j2][j][2]; - ncount++; - } - } else if(diagonalstyle == 2) { - j = j2 = j1; - dbvec[ncount][0] = dbarray[j1][j2][j][0]; - dbvec[ncount][1] = dbarray[j1][j2][j][1]; - dbvec[ncount][2] = dbarray[j1][j2][j][2]; - ncount++; - } else if(diagonalstyle == 3) { - for(j2 = 0; j2 <= j1; j2++) - for(j = abs(j1 - j2); - j <= MIN(twojmax, j1 + j2); j += 2) - if (j >= j1) { - dbvec[ncount][0] = dbarray[j1][j2][j][0]; - dbvec[ncount][1] = dbarray[j1][j2][j][1]; - dbvec[ncount][2] = dbarray[j1][j2][j][2]; - ncount++; - } - } - } + compute_duarray(x, y, z, z0, r, dz0dr, wj, rcut); } /* ---------------------------------------------------------------------- */ void SNA::zero_uarraytot() { - for (int j = 0; j <= twojmax; j++) - for (int ma = 0; ma <= j; ma++) - for (int mb = 0; mb <= j; mb++) { - uarraytot_r[j][ma][mb] = 0.0; - uarraytot_i[j][ma][mb] = 0.0; + for (int j = 0; j <= twojmax; j++) { + int jju = idxu_block[j]; + for (int mb = 0; mb <= j; mb++) + for (int ma = 0; ma <= j; ma++) { + ulisttot_r[jju] = 0.0; + ulisttot_i[jju] = 0.0; + jju++; } + } } /* ---------------------------------------------------------------------- */ void SNA::addself_uarraytot(double wself_in) { - for (int j = 0; j <= twojmax; j++) + for (int j = 0; j <= twojmax; j++) { + int jju = idxu_block[j]; for (int ma = 0; ma <= j; ma++) { - uarraytot_r[j][ma][ma] = wself_in; - uarraytot_i[j][ma][ma] = 0.0; + ulisttot_r[jju] = wself_in; + ulisttot_i[jju] = 0.0; + jju += j+2; } + } } /* ---------------------------------------------------------------------- @@ -972,14 +900,17 @@ void SNA::add_uarraytot(double r, double wj, double rcut) sfac *= wj; - for (int j = 0; j <= twojmax; j++) - for (int ma = 0; ma <= j; ma++) - for (int mb = 0; mb <= j; mb++) { - uarraytot_r[j][ma][mb] += - sfac * uarray_r[j][ma][mb]; - uarraytot_i[j][ma][mb] += - sfac * uarray_i[j][ma][mb]; + for (int j = 0; j <= twojmax; j++) { + int jju = idxu_block[j]; + for (int mb = 0; mb <= j; mb++) + for (int ma = 0; ma <= j; ma++) { + ulisttot_r[jju] += + sfac * ulist_r[jju]; + ulisttot_i[jju] += + sfac * ulist_i[jju]; + jju++; } + } } /* ---------------------------------------------------------------------- @@ -1003,63 +934,72 @@ void SNA::compute_uarray(double x, double y, double z, // VMK Section 4.8.2 - uarray_r[0][0][0] = 1.0; - uarray_i[0][0][0] = 0.0; + ulist_r[0] = 1.0; + ulist_i[0] = 0.0; for (int j = 1; j <= twojmax; j++) { + int jju = idxu_block[j]; + int jjup = idxu_block[j-1]; // fill in left side of matrix layer from previous layer for (int mb = 0; 2*mb <= j; mb++) { - uarray_r[j][0][mb] = 0.0; - uarray_i[j][0][mb] = 0.0; + ulist_r[jju] = 0.0; + ulist_i[jju] = 0.0; for (int ma = 0; ma < j; ma++) { rootpq = rootpqarray[j - ma][j - mb]; - uarray_r[j][ma][mb] += + ulist_r[jju] += rootpq * - (a_r * uarray_r[j - 1][ma][mb] + - a_i * uarray_i[j - 1][ma][mb]); - uarray_i[j][ma][mb] += + (a_r * ulist_r[jjup] + + a_i * ulist_i[jjup]); + ulist_i[jju] += rootpq * - (a_r * uarray_i[j - 1][ma][mb] - - a_i * uarray_r[j - 1][ma][mb]); + (a_r * ulist_i[jjup] - + a_i * ulist_r[jjup]); rootpq = rootpqarray[ma + 1][j - mb]; - uarray_r[j][ma + 1][mb] = + ulist_r[jju+1] = -rootpq * - (b_r * uarray_r[j - 1][ma][mb] + - b_i * uarray_i[j - 1][ma][mb]); - uarray_i[j][ma + 1][mb] = + (b_r * ulist_r[jjup] + + b_i * ulist_i[jjup]); + ulist_i[jju+1] = -rootpq * - (b_r * uarray_i[j - 1][ma][mb] - - b_i * uarray_r[j - 1][ma][mb]); + (b_r * ulist_i[jjup] - + b_i * ulist_r[jjup]); + jju++; + jjup++; } + jju++; } // copy left side to right side with inversion symmetry VMK 4.4(2) // u[ma-j][mb-j] = (-1)^(ma-mb)*Conj([u[ma][mb]) - int mbpar = -1; + jju = idxu_block[j]; + jjup = jju+(j+1)*(j+1)-1; + int mbpar = 1; for (int mb = 0; 2*mb <= j; mb++) { - mbpar = -mbpar; - int mapar = -mbpar; + int mapar = mbpar; for (int ma = 0; ma <= j; ma++) { - mapar = -mapar; if (mapar == 1) { - uarray_r[j][j-ma][j-mb] = uarray_r[j][ma][mb]; - uarray_i[j][j-ma][j-mb] = -uarray_i[j][ma][mb]; + ulist_r[jjup] = ulist_r[jju]; + ulist_i[jjup] = -ulist_i[jju]; } else { - uarray_r[j][j-ma][j-mb] = -uarray_r[j][ma][mb]; - uarray_i[j][j-ma][j-mb] = uarray_i[j][ma][mb]; + ulist_r[jjup] = -ulist_r[jju]; + ulist_i[jjup] = ulist_i[jju]; } + mapar = -mapar; + jju++; + jjup--; } + mbpar = -mbpar; } } } /* ---------------------------------------------------------------------- - compute derivatives of Wigner U-functions for one neighbor + Compute derivatives of Wigner U-functions for one neighbor see comments in compute_uarray() ------------------------------------------------------------------------- */ @@ -1109,93 +1049,105 @@ void SNA::compute_duarray(double x, double y, double z, db_i[0] += -r0inv; db_r[1] += r0inv; - uarray_r[0][0][0] = 1.0; - duarray_r[0][0][0][0] = 0.0; - duarray_r[0][0][0][1] = 0.0; - duarray_r[0][0][0][2] = 0.0; - uarray_i[0][0][0] = 0.0; - duarray_i[0][0][0][0] = 0.0; - duarray_i[0][0][0][1] = 0.0; - duarray_i[0][0][0][2] = 0.0; + ulist_r[0] = 1.0; + dulist_r[0][0] = 0.0; + dulist_r[0][1] = 0.0; + dulist_r[0][2] = 0.0; + ulist_i[0] = 0.0; + dulist_i[0][0] = 0.0; + dulist_i[0][1] = 0.0; + dulist_i[0][2] = 0.0; for (int j = 1; j <= twojmax; j++) { + int jju = idxu_block[j]; + int jjup = idxu_block[j-1]; for (int mb = 0; 2*mb <= j; mb++) { - uarray_r[j][0][mb] = 0.0; - duarray_r[j][0][mb][0] = 0.0; - duarray_r[j][0][mb][1] = 0.0; - duarray_r[j][0][mb][2] = 0.0; - uarray_i[j][0][mb] = 0.0; - duarray_i[j][0][mb][0] = 0.0; - duarray_i[j][0][mb][1] = 0.0; - duarray_i[j][0][mb][2] = 0.0; + ulist_r[jju] = 0.0; + dulist_r[jju][0] = 0.0; + dulist_r[jju][1] = 0.0; + dulist_r[jju][2] = 0.0; + ulist_i[jju] = 0.0; + dulist_i[jju][0] = 0.0; + dulist_i[jju][1] = 0.0; + dulist_i[jju][2] = 0.0; for (int ma = 0; ma < j; ma++) { rootpq = rootpqarray[j - ma][j - mb]; - uarray_r[j][ma][mb] += rootpq * - (a_r * uarray_r[j - 1][ma][mb] + - a_i * uarray_i[j - 1][ma][mb]); - uarray_i[j][ma][mb] += rootpq * - (a_r * uarray_i[j - 1][ma][mb] - - a_i * uarray_r[j - 1][ma][mb]); + ulist_r[jju] += rootpq * + (a_r * ulist_r[jjup] + + a_i * ulist_i[jjup]); + ulist_i[jju] += rootpq * + (a_r * ulist_i[jjup] - + a_i * ulist_r[jjup]); for (int k = 0; k < 3; k++) { - duarray_r[j][ma][mb][k] += - rootpq * (da_r[k] * uarray_r[j - 1][ma][mb] + - da_i[k] * uarray_i[j - 1][ma][mb] + - a_r * duarray_r[j - 1][ma][mb][k] + - a_i * duarray_i[j - 1][ma][mb][k]); - duarray_i[j][ma][mb][k] += - rootpq * (da_r[k] * uarray_i[j - 1][ma][mb] - - da_i[k] * uarray_r[j - 1][ma][mb] + - a_r * duarray_i[j - 1][ma][mb][k] - - a_i * duarray_r[j - 1][ma][mb][k]); + dulist_r[jju][k] += + rootpq * (da_r[k] * ulist_r[jjup] + + da_i[k] * ulist_i[jjup] + + a_r * dulist_r[jjup][k] + + a_i * dulist_i[jjup][k]); + dulist_i[jju][k] += + rootpq * (da_r[k] * ulist_i[jjup] - + da_i[k] * ulist_r[jjup] + + a_r * dulist_i[jjup][k] - + a_i * dulist_r[jjup][k]); } rootpq = rootpqarray[ma + 1][j - mb]; - uarray_r[j][ma + 1][mb] = - -rootpq * (b_r * uarray_r[j - 1][ma][mb] + - b_i * uarray_i[j - 1][ma][mb]); - uarray_i[j][ma + 1][mb] = - -rootpq * (b_r * uarray_i[j - 1][ma][mb] - - b_i * uarray_r[j - 1][ma][mb]); + ulist_r[jju+1] = + -rootpq * (b_r * ulist_r[jjup] + + b_i * ulist_i[jjup]); + ulist_i[jju+1] = + -rootpq * (b_r * ulist_i[jjup] - + b_i * ulist_r[jjup]); for (int k = 0; k < 3; k++) { - duarray_r[j][ma + 1][mb][k] = - -rootpq * (db_r[k] * uarray_r[j - 1][ma][mb] + - db_i[k] * uarray_i[j - 1][ma][mb] + - b_r * duarray_r[j - 1][ma][mb][k] + - b_i * duarray_i[j - 1][ma][mb][k]); - duarray_i[j][ma + 1][mb][k] = - -rootpq * (db_r[k] * uarray_i[j - 1][ma][mb] - - db_i[k] * uarray_r[j - 1][ma][mb] + - b_r * duarray_i[j - 1][ma][mb][k] - - b_i * duarray_r[j - 1][ma][mb][k]); + dulist_r[jju+1][k] = + -rootpq * (db_r[k] * ulist_r[jjup] + + db_i[k] * ulist_i[jjup] + + b_r * dulist_r[jjup][k] + + b_i * dulist_i[jjup][k]); + dulist_i[jju+1][k] = + -rootpq * (db_r[k] * ulist_i[jjup] - + db_i[k] * ulist_r[jjup] + + b_r * dulist_i[jjup][k] - + b_i * dulist_r[jjup][k]); } + jju++; + jjup++; } + jju++; } - int mbpar = -1; + // copy left side to right side with inversion symmetry VMK 4.4(2) + // u[ma-j][mb-j] = (-1)^(ma-mb)*Conj([u[ma][mb]) + + jju = idxu_block[j]; + jjup = jju+(j+1)*(j+1)-1; + int mbpar = 1; for (int mb = 0; 2*mb <= j; mb++) { - mbpar = -mbpar; - int mapar = -mbpar; + int mapar = mbpar; for (int ma = 0; ma <= j; ma++) { - mapar = -mapar; if (mapar == 1) { - uarray_r[j][j-ma][j-mb] = uarray_r[j][ma][mb]; - uarray_i[j][j-ma][j-mb] = -uarray_i[j][ma][mb]; + ulist_r[jjup] = ulist_r[jju]; + ulist_i[jjup] = -ulist_i[jju]; for (int k = 0; k < 3; k++) { - duarray_r[j][j-ma][j-mb][k] = duarray_r[j][ma][mb][k]; - duarray_i[j][j-ma][j-mb][k] = -duarray_i[j][ma][mb][k]; + dulist_r[jjup][k] = dulist_r[jju][k]; + dulist_i[jjup][k] = -dulist_i[jju][k]; } } else { - uarray_r[j][j-ma][j-mb] = -uarray_r[j][ma][mb]; - uarray_i[j][j-ma][j-mb] = uarray_i[j][ma][mb]; + ulist_r[jjup] = -ulist_r[jju]; + ulist_i[jjup] = ulist_i[jju]; for (int k = 0; k < 3; k++) { - duarray_r[j][j-ma][j-mb][k] = -duarray_r[j][ma][mb][k]; - duarray_i[j][j-ma][j-mb][k] = duarray_i[j][ma][mb][k]; + dulist_r[jjup][k] = -dulist_r[jju][k]; + dulist_i[jjup][k] = dulist_i[jju][k]; } } + mapar = -mapar; + jju++; + jjup--; } + mbpar = -mbpar; } } @@ -1204,23 +1156,25 @@ void SNA::compute_duarray(double x, double y, double z, sfac *= wj; dsfac *= wj; - - for (int j = 0; j <= twojmax; j++) - for (int ma = 0; ma <= j; ma++) - for (int mb = 0; mb <= j; mb++) { - duarray_r[j][ma][mb][0] = dsfac * uarray_r[j][ma][mb] * ux + - sfac * duarray_r[j][ma][mb][0]; - duarray_i[j][ma][mb][0] = dsfac * uarray_i[j][ma][mb] * ux + - sfac * duarray_i[j][ma][mb][0]; - duarray_r[j][ma][mb][1] = dsfac * uarray_r[j][ma][mb] * uy + - sfac * duarray_r[j][ma][mb][1]; - duarray_i[j][ma][mb][1] = dsfac * uarray_i[j][ma][mb] * uy + - sfac * duarray_i[j][ma][mb][1]; - duarray_r[j][ma][mb][2] = dsfac * uarray_r[j][ma][mb] * uz + - sfac * duarray_r[j][ma][mb][2]; - duarray_i[j][ma][mb][2] = dsfac * uarray_i[j][ma][mb] * uz + - sfac * duarray_i[j][ma][mb][2]; + for (int j = 0; j <= twojmax; j++) { + int jju = idxu_block[j]; + for (int mb = 0; 2*mb <= j; mb++) + for (int ma = 0; ma <= j; ma++) { + dulist_r[jju][0] = dsfac * ulist_r[jju] * ux + + sfac * dulist_r[jju][0]; + dulist_i[jju][0] = dsfac * ulist_i[jju] * ux + + sfac * dulist_i[jju][0]; + dulist_r[jju][1] = dsfac * ulist_r[jju] * uy + + sfac * dulist_r[jju][1]; + dulist_i[jju][1] = dsfac * ulist_i[jju] * uy + + sfac * dulist_i[jju][1]; + dulist_r[jju][2] = dsfac * ulist_r[jju] * uz + + sfac * dulist_r[jju][2]; + dulist_i[jju][2] = dsfac * ulist_i[jju] * uz + + sfac * dulist_i[jju][2]; + jju++; } + } } /* ---------------------------------------------------------------------- @@ -1229,89 +1183,89 @@ void SNA::compute_duarray(double x, double y, double z, double SNA::memory_usage() { + int jdimpq = twojmax + 2; int jdim = twojmax + 1; double bytes; - bytes = jdim * jdim * jdim * jdim * jdim * sizeof(double); - bytes += 2 * jdim * jdim * jdim * sizeof(complex); - bytes += 2 * jdim * jdim * jdim * sizeof(double); - bytes += jdim * jdim * jdim * 3 * sizeof(complex); - bytes += jdim * jdim * jdim * 3 * sizeof(double); - bytes += ncoeff * sizeof(double); - bytes += jdim * jdim * jdim * jdim * jdim * sizeof(complex); + bytes = ncoeff * sizeof(double); // coeff + + bytes += jdimpq*jdimpq * sizeof(double); // pqarray + bytes += idxcg_max * sizeof(double); // cglist + bytes += jdim * jdim * jdim * sizeof(int); // idxcg_block + + bytes += idxu_max * sizeof(double) * 2; // ulist + bytes += idxu_max * sizeof(double) * 2; // ulisttot + bytes += idxu_max * 3 * sizeof(double) * 2; // dulist + bytes += jdim * sizeof(int); // idxu_block + + bytes += idxz_max * 9 * sizeof(int); // idxz + bytes += idxz_max * sizeof(double) * 2; // zlist + bytes += jdim * jdim * jdim * sizeof(int); // idxz_block + + bytes += idxu_max * sizeof(double) * 2; // ylist + bytes += idxb_max * 3 * sizeof(int); // idxb + + bytes += jdim * jdim * jdim * sizeof(int); // idxb_block + return bytes; } - /* ---------------------------------------------------------------------- */ void SNA::create_twojmax_arrays() { - int jdim = twojmax + 1; - - memory->create(cgarray, jdim, jdim, jdim, jdim, jdim, - "sna:cgarray"); - memory->create(rootpqarray, jdim+1, jdim+1, + int jdimpq = twojmax + 2; + memory->create(rootpqarray, jdimpq, jdimpq, "sna:rootpqarray"); - memory->create(barray, jdim, jdim, jdim, - "sna:barray"); - memory->create(dbarray, jdim, jdim, jdim, 3, - "sna:dbarray"); - - memory->create(duarray_r, jdim, jdim, jdim, 3, - "sna:duarray"); - memory->create(duarray_i, jdim, jdim, jdim, 3, - "sna:duarray"); - - memory->create(uarray_r, jdim, jdim, jdim, - "sna:uarray"); - memory->create(uarray_i, jdim, jdim, jdim, - "sna:uarray"); + memory->create(cglist, idxcg_max, "sna:cglist"); + memory->create(ulist_r, idxu_max, "sna:ulist"); + memory->create(ulist_i, idxu_max, "sna:ulist"); + memory->create(ulisttot_r, idxu_max, "sna:ulisttot"); + memory->create(ulisttot_i, idxu_max, "sna:ulisttot"); + memory->create(dulist_r, idxu_max, 3, "sna:dulist"); + memory->create(dulist_i, idxu_max, 3, "sna:dulist"); + memory->create(zlist_r, idxz_max, "sna:zlist"); + memory->create(zlist_i, idxz_max, "sna:zlist"); + memory->create(blist, idxb_max, "sna:blist"); + memory->create(dblist, idxb_max, 3, "sna:dblist"); + memory->create(ylist_r, idxu_max, "sna:ylist"); + memory->create(ylist_i, idxu_max, "sna:ylist"); if (bzero_flag) - memory->create(bzero, jdim,"sna:bzero"); + memory->create(bzero, twojmax+1,"sna:bzero"); else bzero = NULL; - - memory->create(uarraytot_r, jdim, jdim, jdim, - "sna:uarraytot"); - memory->create(zarray_r, jdim, jdim, jdim, jdim, jdim, - "sna:zarray"); - memory->create(uarraytot_i, jdim, jdim, jdim, - "sna:uarraytot"); - memory->create(zarray_i, jdim, jdim, jdim, jdim, jdim, - "sna:zarray"); - memory->create(yarray_r, jdim, jdim, jdim, - "sna:yarray"); - memory->create(yarray_i, jdim, jdim, jdim, - "sna:yarray"); - } /* ---------------------------------------------------------------------- */ void SNA::destroy_twojmax_arrays() { - memory->destroy(cgarray); memory->destroy(rootpqarray); - memory->destroy(barray); + memory->destroy(cglist); + memory->destroy(idxcg_block); - memory->destroy(dbarray); + memory->destroy(ulist_r); + memory->destroy(ulist_i); + memory->destroy(ulisttot_r); + memory->destroy(ulisttot_i); + memory->destroy(dulist_r); + memory->destroy(dulist_i); + memory->destroy(idxu_block); - memory->destroy(duarray_r); - memory->destroy(duarray_i); + memory->destroy(zlist_r); + memory->destroy(zlist_i); + memory->destroy(blist); + memory->destroy(dblist); + memory->destroy(idxz_block); - memory->destroy(uarray_r); - memory->destroy(uarray_i); + memory->destroy(ylist_r); + memory->destroy(ylist_i); + + memory->destroy(idxb_block); if (bzero_flag) memory->destroy(bzero); - memory->destroy(uarraytot_r); - memory->destroy(zarray_r); - memory->destroy(uarraytot_i); - memory->destroy(zarray_i); - memory->destroy(yarray_r); - memory->destroy(yarray_i); } /* ---------------------------------------------------------------------- @@ -1527,28 +1481,33 @@ void SNA::init_clebsch_gordan() int m, aa2, bb2, cc2; int ifac; - for (int j1 = 0; j1 <= twojmax; j1++) - for (int j2 = 0; j2 <= twojmax; j2++) - for (int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) - for (int m1 = 0; m1 <= j1; m1 += 1) { + int idxcg_count = 0; + for(int j1 = 0; j1 <= twojmax; j1++) + for(int j2 = 0; j2 <= j1; j2++) + for(int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) { + for (int m1 = 0; m1 <= j1; m1++) { aa2 = 2 * m1 - j1; - for (int m2 = 0; m2 <= j2; m2 += 1) { + for (int m2 = 0; m2 <= j2; m2++) { // -c <= cc <= c bb2 = 2 * m2 - j2; m = (aa2 + bb2 + j) / 2; - if(m < 0 || m > j) continue; + if(m < 0 || m > j) { + cglist[idxcg_count] = 0.0; + idxcg_count++; + continue; + } sum = 0.0; for (int z = MAX(0, MAX(-(j - j2 + aa2) - / 2, -(j - j1 - bb2) / 2)); - z <= MIN((j1 + j2 - j) / 2, - MIN((j1 - aa2) / 2, (j2 + bb2) / 2)); - z++) { + / 2, -(j - j1 - bb2) / 2)); + z <= MIN((j1 + j2 - j) / 2, + MIN((j1 - aa2) / 2, (j2 + bb2) / 2)); + z++) { ifac = z % 2 ? -1 : 1; sum += ifac / (factorial(z) * @@ -1558,20 +1517,22 @@ void SNA::init_clebsch_gordan() factorial((j - j2 + aa2) / 2 + z) * factorial((j - j1 - bb2) / 2 + z)); } - + cc2 = 2 * m - j; dcg = deltacg(j1, j2, j); sfaccg = sqrt(factorial((j1 + aa2) / 2) * - factorial((j1 - aa2) / 2) * - factorial((j2 + bb2) / 2) * - factorial((j2 - bb2) / 2) * - factorial((j + cc2) / 2) * - factorial((j - cc2) / 2) * - (j + 1)); - - cgarray[j1][j2][j][m1][m2] = sum * dcg * sfaccg; + factorial((j1 - aa2) / 2) * + factorial((j2 + bb2) / 2) * + factorial((j2 - bb2) / 2) * + factorial((j + cc2) / 2) * + factorial((j - cc2) / 2) * + (j + 1)); + + cglist[idxcg_count] = sum * dcg * sfaccg; + idxcg_count++; } } + } } /* ---------------------------------------------------------------------- @@ -1586,74 +1547,6 @@ void SNA::init_rootpqarray() rootpqarray[p][q] = sqrt(static_cast(p)/q); } -/* ---------------------------------------------------------------------- - a = j/2 -------------------------------------------------------------------------- */ - -void SNA::jtostr(char* str, int j) -{ - if(j % 2 == 0) - sprintf(str, "%d", j / 2); - else - sprintf(str, "%d/2", j); -} - -/* ---------------------------------------------------------------------- - aa = m - j/2 -------------------------------------------------------------------------- */ - -void SNA::mtostr(char* str, int j, int m) -{ - if(j % 2 == 0) - sprintf(str, "%d", m - j / 2); - else - sprintf(str, "%d/2", 2 * m - j); -} - -/* ---------------------------------------------------------------------- - list values of Clebsch-Gordan coefficients - using notation of VMK Table 8.11 -------------------------------------------------------------------------- */ - -void SNA::print_clebsch_gordan(FILE* file) -{ - char stra[20], strb[20], strc[20], straa[20], strbb[20], strcc[20]; - int m, aa2, bb2; - - fprintf(file, "a, aa, b, bb, c, cc, c(a,aa,b,bb,c,cc) \n"); - - for (int j1 = 0; j1 <= twojmax; j1++) { - jtostr(stra, j1); - - for (int j2 = 0; j2 <= twojmax; j2++) { - jtostr(strb, j2); - - for (int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) { - jtostr(strc, j); - - for (int m1 = 0; m1 <= j1; m1 += 1) { - mtostr(straa, j1, m1); - aa2 = 2 * m1 - j1; - - for (int m2 = 0; m2 <= j2; m2 += 1) { - bb2 = 2 * m2 - j2; - m = (aa2 + bb2 + j) / 2; - - if(m < 0 || m > j) continue; - - mtostr(strbb, j2, m2); - mtostr(strcc, j, m); - - fprintf(file, "%s\t%s\t%s\t%s\t%s\t%s\t%g\n", - stra, straa, strb, strbb, strc, strcc, - cgarray[j1][j2][j][m1][m2]); - } - } - } - } - } -} - /* ---------------------------------------------------------------------- */ int SNA::compute_ncoeff() @@ -1663,25 +1556,10 @@ int SNA::compute_ncoeff() ncount = 0; for (int j1 = 0; j1 <= twojmax; j1++) - if(diagonalstyle == 0) { - for (int j2 = 0; j2 <= j1; j2++) - for (int j = abs(j1 - j2); - j <= MIN(twojmax, j1 + j2); j += 2) - ncount++; - } else if(diagonalstyle == 1) { - int j2 = j1; - + for (int j2 = 0; j2 <= j1; j2++) for (int j = abs(j1 - j2); - j <= MIN(twojmax, j1 + j2); j += 2) - ncount++; - } else if(diagonalstyle == 2) { - ncount++; - } else if(diagonalstyle == 3) { - for (int j2 = 0; j2 <= j1; j2++) - for (int j = abs(j1 - j2); - j <= MIN(twojmax, j1 + j2); j += 2) - if (j >= j1) ncount++; - } + j <= MIN(twojmax, j1 + j2); j += 2) + if (j >= j1) ncount++; return ncount; } diff --git a/src/SNAP/sna.h b/src/SNAP/sna.h index b93b0ac7b0..b54ad3482a 100644 --- a/src/SNAP/sna.h +++ b/src/SNAP/sna.h @@ -26,7 +26,6 @@ namespace LAMMPS_NS { struct SNA_ZINDICES { int j1, j2, j, ma1min, ma2max, mb1min, mb2max, na, nb, jju; - double betaj; }; struct SNA_BINDICES { @@ -51,19 +50,20 @@ public: void compute_ui(int); void compute_zi(); void compute_yi(const double*); + void compute_yterm(int, int, int, const double*); void compute_bi(); - void copy_bi2bvec(); // functions for derivatives void compute_duidrj(double*, double, double); void compute_dbidrj(); void compute_deidrj(double*); - void copy_dbi2dbvec(); double compute_sfac(double, double); double compute_dsfac(double, double); double* bvec, ** dbvec; + double* blist; + double** dblist; double** rij; int* inside; double* wj; @@ -73,31 +73,17 @@ public: void grow_rij(int); int twojmax, diagonalstyle; - double*** uarraytot_r, *** uarraytot_i; - double***** zarray_r, ***** zarray_i; - double*** yarray_r, *** yarray_i; - double*** uarray_r, *** uarray_i; private: double rmin0, rfac0; - // use indexlist instead of loops, constructor generates these + // data for bispectrum coefficients SNA_ZINDICES* idxz; SNA_BINDICES* idxb; int idxcg_max, idxu_max, idxz_max, idxb_max; - // data for bispectrum coefficients - - double***** cgarray; double** rootpqarray; - double*** barray; - - // derivatives of data - - double**** duarray_r, **** duarray_i; - double**** dbarray; - double* cglist; int*** idxcg_block; @@ -121,9 +107,6 @@ private: void destroy_twojmax_arrays(); void init_clebsch_gordan(); void init_rootpqarray(); - void jtostr(char*, int); - void mtostr(char*, int, int); - void print_clebsch_gordan(FILE*); void zero_uarraytot(); void addself_uarraytot(double); void add_uarraytot(double, double, double); From 7a33d1e328d71e339a709f7eb89da09348db2d73 Mon Sep 17 00:00:00 2001 From: Stan Moore Date: Wed, 12 Jun 2019 11:36:42 -0600 Subject: [PATCH 279/311] Code cleanup --- src/KSPACE/ewald_dipole_spin.cpp | 1 - src/KSPACE/pppm_dipole_spin.cpp | 5 ----- src/SPIN/fix_nve_spin.cpp | 8 -------- 3 files changed, 14 deletions(-) diff --git a/src/KSPACE/ewald_dipole_spin.cpp b/src/KSPACE/ewald_dipole_spin.cpp index dea563eb99..698203c85c 100644 --- a/src/KSPACE/ewald_dipole_spin.cpp +++ b/src/KSPACE/ewald_dipole_spin.cpp @@ -53,7 +53,6 @@ EwaldDipoleSpin::EwaldDipoleSpin(LAMMPS *lmp) : mub = 9.274e-4; // in A.Ang^2 mu_0 = 785.15; // in eV/Ang/A^2 mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV.Ang^3 - //mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz } diff --git a/src/KSPACE/pppm_dipole_spin.cpp b/src/KSPACE/pppm_dipole_spin.cpp index cee879422c..878d40c82e 100644 --- a/src/KSPACE/pppm_dipole_spin.cpp +++ b/src/KSPACE/pppm_dipole_spin.cpp @@ -72,8 +72,6 @@ PPPMDipoleSpin::PPPMDipoleSpin(LAMMPS *lmp) : mub = 9.274e-4; // in A.Ang^2 mu_0 = 785.15; // in eV/Ang/A^2 mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV.Ang^3 - //mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV - mub2mu0 = mub * mub * mu_0 / (4.0*MY_PI); // in eV mub2mu0hbinv = mub2mu0 / hbar; // in rad.THz } @@ -107,9 +105,6 @@ void PPPMDipoleSpin::init() // error check spinflag = atom->sp?1:0; - //qsum_qsq(0); // q[i] is probably not declared ? - //if (spinflag && q2) - // error->all(FLERR,"Cannot use charges with Kspace style PPPMDipoleSpin"); triclinic_check(); diff --git a/src/SPIN/fix_nve_spin.cpp b/src/SPIN/fix_nve_spin.cpp index 0d72261ad8..595ddb0cc2 100644 --- a/src/SPIN/fix_nve_spin.cpp +++ b/src/SPIN/fix_nve_spin.cpp @@ -305,13 +305,6 @@ void FixNVESpin::initial_integrate(int /*vflag*/) } } - // update fm_kspace if long-range - // remove short-range comp. of fm_kspace - - if (long_spin_flag) { - - } - // update half s for all atoms if (sector_flag) { // sectoring seq. update @@ -451,7 +444,6 @@ void FixNVESpin::ComputeInteractionsSpin(int i) double **sp = atom->sp; double **fm = atom->fm; - //double **fm_long = atom->fm_long; // force computation for spin i From a973700295d264b09503728f805d451c054470da Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Wed, 12 Jun 2019 16:42:28 -0600 Subject: [PATCH 280/311] Completed back-porting of Zombie SNAP improvements, particularly noteworthy is reduction in memory footprint, elimination of most multidimensional arrays, elimination of diagonal_style, elimination of Z array in force calculation. --- doc/src/compute_sna_atom.txt | 39 ++++++--------- doc/src/pair_snap.txt | 8 +-- potentials/Ta06A.snapparam | 1 - potentials/W_2940_2017_2.snapparam | 1 - src/SNAP/compute_sna_atom.cpp | 19 ++----- src/SNAP/compute_sna_atom.h | 2 +- src/SNAP/compute_snad_atom.cpp | 21 +++----- src/SNAP/compute_snad_atom.h | 2 +- src/SNAP/compute_snav_atom.cpp | 21 ++------ src/SNAP/compute_snav_atom.h | 2 +- src/SNAP/pair_snap.cpp | 75 +++++++++++++++++----------- src/SNAP/pair_snap.h | 4 +- src/SNAP/sna.cpp | 80 +++++++++++++++--------------- src/SNAP/sna.h | 9 ++-- 14 files changed, 130 insertions(+), 154 deletions(-) diff --git a/doc/src/compute_sna_atom.txt b/doc/src/compute_sna_atom.txt index efbf2e9ea3..10e68f5698 100644 --- a/doc/src/compute_sna_atom.txt +++ b/doc/src/compute_sna_atom.txt @@ -24,12 +24,8 @@ twojmax = band limit for bispectrum components (non-negative integer) :l R_1, R_2,... = list of cutoff radii, one for each type (distance units) :l w_1, w_2,... = list of neighbor weights, one for each type :l zero or more keyword/value pairs may be appended :l -keyword = {diagonal} or {rmin0} or {switchflag} or {bzeroflag} or {quadraticflag} :l - {diagonal} value = {0} or {1} or {2} or {3} - {0} = all j1, j2, j <= twojmax, j2 <= j1 - {1} = subset satisfying j1 == j2 - {2} = subset satisfying j1 == j2 == j3 - {3} = subset satisfying j2 <= j1 <= j +keyword = {rmin0} or {switchflag} or {bzeroflag} or {quadraticflag} :l +// {3} = subset satisfying j2 <= j1 <= j {rmin0} value = parameter in distance to angle conversion (distance units) {switchflag} value = {0} or {1} {0} = do not use switching function @@ -44,7 +40,7 @@ keyword = {diagonal} or {rmin0} or {switchflag} or {bzeroflag} or {quadraticflag [Examples:] -compute b all sna/atom 1.4 0.99363 6 2.0 2.4 0.75 1.0 diagonal 3 rmin0 0.0 +compute b all sna/atom 1.4 0.99363 6 2.0 2.4 0.75 1.0 rmin0 0.0 compute db all sna/atom 1.4 0.95 6 2.0 1.0 compute vb all sna/atom 1.4 0.95 6 2.0 1.0 :pre @@ -151,7 +147,7 @@ The argument {rfac0} and the optional keyword {rmin0} define the linear mapping from radial distance to polar angle {theta0} on the 3-sphere. -The argument {twojmax} and the keyword {diagonal} define which +The argument {twojmax} defines which bispectrum components are generated. See section below on output for a detailed explanation of the number of bispectrum components and the ordered in which they are listed. @@ -192,25 +188,20 @@ command that includes all pairs in the neighbor list. Compute {sna/atom} calculates a per-atom array, each column corresponding to a particular bispectrum component. The total number of columns and the identity of the bispectrum component contained in -each column depend on the values of {twojmax} and {diagonal}, as +each column depend of the value of {twojmax}, as described by the following piece of python code: for j1 in range(0,twojmax+1): - if(diagonal==2): - print j1/2.,j1/2.,j1/2. - elif(diagonal==1): - for j in range(0,min(twojmax,2*j1)+1,2): - print j1/2.,j1/2.,j/2. - elif(diagonal==0): - for j2 in range(0,j1+1): - for j in range(j1-j2,min(twojmax,j1+j2)+1,2): - print j1/2.,j2/2.,j/2. - elif(diagonal==3): - for j2 in range(0,j1+1): - for j in range(j1-j2,min(twojmax,j1+j2)+1,2): - if (j>=j1): print j1/2.,j2/2.,j/2. :pre + for j2 in range(0,j1+1): + for j in range(j1-j2,min(twojmax,j1+j2)+1,2): + if (j>=j1): print j1/2.,j2/2.,j/2. :pre -Compute {snad/atom} evaluates a per-atom array. The columns are +NOTE: the {diagonal} keyword allowing other possible choices +for the number of bispectrum components was removed in 2019, +since all potentials use the value of 3, corresponding to the +above set of bispectrum components. + +ompute {snad/atom} evaluates a per-atom array. The columns are arranged into {ntypes} blocks, listed in order of atom type {I}. Each block contains three sub-blocks corresponding to the {x}, {y}, and {z} components of the atom position. Each of these sub-blocks contains @@ -259,7 +250,7 @@ package"_Build_package.html doc page for more info. [Default:] -The optional keyword defaults are {diagonal} = 0, {rmin0} = 0, +The optional keyword defaults are {rmin0} = 0, {switchflag} = 1, {bzeroflag} = 1, {quadraticflag} = 0, :line diff --git a/doc/src/pair_snap.txt b/doc/src/pair_snap.txt index a796cfdeba..1fba74a188 100644 --- a/doc/src/pair_snap.txt +++ b/doc/src/pair_snap.txt @@ -38,7 +38,7 @@ where {B_k^i} is the {k}-th bispectrum component of atom {i}, and {beta_k^alpha_i} is the corresponding linear coefficient that depends on {alpha_i}, the SNAP element of atom {i}. The number of bispectrum components used and their definitions -depend on the values of {twojmax} and {diagonalstyle} +depend on the value of {twojmax} defined in the SNAP parameter file described below. The bispectrum calculation is described in more detail in "compute sna/atom"_compute_sna_atom.html. @@ -125,14 +125,13 @@ This line is followed by {ncoeff} coefficients, one per line. The SNAP parameter file can contain blank and comment lines (start with #) anywhere. Each non-blank non-comment line must contain one keyword/value pair. The required keywords are {rcutfac} and -{twojmax}. Optional keywords are {rfac0}, {rmin0}, {diagonalstyle}, +{twojmax}. Optional keywords are {rfac0}, {rmin0}, {switchflag}, and {bzeroflag}. The default values for these keywords are {rfac0} = 0.99363 {rmin0} = 0.0 -{diagonalstyle} = 3 {switchflag} = 0 {bzeroflag} = 1 {quadraticflag} = 1 :ul @@ -144,6 +143,9 @@ If {quadraticflag} is set to 1, then the SNAP energy expression includes the qua The SNAP element file should contain {K}({K}+1)/2 additional coefficients for each element, the upper-triangular elements of alpha. +NOTE: The previously used {diagonalstyle} keyword was removed in 2019, +since all known SNAP potentials use the default value of 3. + :line [Mixing, shift, table, tail correction, restart, rRESPA info]: diff --git a/potentials/Ta06A.snapparam b/potentials/Ta06A.snapparam index 283629d658..629d96d708 100644 --- a/potentials/Ta06A.snapparam +++ b/potentials/Ta06A.snapparam @@ -10,6 +10,5 @@ twojmax 6 rfac0 0.99363 rmin0 0 -diagonalstyle 3 bzeroflag 0 quadraticflag 0 diff --git a/potentials/W_2940_2017_2.snapparam b/potentials/W_2940_2017_2.snapparam index 27ab61a266..49f3094d08 100644 --- a/potentials/W_2940_2017_2.snapparam +++ b/potentials/W_2940_2017_2.snapparam @@ -8,6 +8,5 @@ twojmax 8 rfac0 0.99363 rmin0 0 -diagonalstyle 3 bzeroflag 0 quadraticflag 0 diff --git a/src/SNAP/compute_sna_atom.cpp b/src/SNAP/compute_sna_atom.cpp index fea37faca0..cc7a84281e 100644 --- a/src/SNAP/compute_sna_atom.cpp +++ b/src/SNAP/compute_sna_atom.cpp @@ -44,7 +44,6 @@ ComputeSNAAtom::ComputeSNAAtom(LAMMPS *lmp, int narg, char **arg) : // default values - diagonalstyle = 0; rmin0 = 0.0; switchflag = 1; bzeroflag = 1; @@ -84,14 +83,7 @@ ComputeSNAAtom::ComputeSNAAtom(LAMMPS *lmp, int narg, char **arg) : int iarg = nargmin; while (iarg < narg) { - if (strcmp(arg[iarg],"diagonal") == 0) { - if (iarg+2 > narg) - error->all(FLERR,"Illegal compute sna/atom command"); - diagonalstyle = atoi(arg[iarg+1]); - if (diagonalstyle < 0 || diagonalstyle > 3) - error->all(FLERR,"Illegal compute sna/atom command"); - iarg += 2; - } else if (strcmp(arg[iarg],"rmin0") == 0) { + if (strcmp(arg[iarg],"rmin0") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal compute sna/atom command"); rmin0 = atof(arg[iarg+1]); @@ -114,7 +106,7 @@ ComputeSNAAtom::ComputeSNAAtom(LAMMPS *lmp, int narg, char **arg) : } else error->all(FLERR,"Illegal compute sna/atom command"); } - snaptr = new SNA(lmp,rfac0,twojmax,diagonalstyle, + snaptr = new SNA(lmp,rfac0,twojmax, rmin0,switchflag,bzeroflag); ncoeff = snaptr->ncoeff; @@ -123,7 +115,6 @@ ComputeSNAAtom::ComputeSNAAtom(LAMMPS *lmp, int narg, char **arg) : peratom_flag = 1; nmax = 0; - njmax = 0; sna = NULL; } @@ -277,9 +268,9 @@ void ComputeSNAAtom::compute_peratom() double ComputeSNAAtom::memory_usage() { - double bytes = nmax*size_peratom_cols * sizeof(double); - bytes += 3*njmax*sizeof(double); - bytes += njmax*sizeof(int); + double bytes = nmax*size_peratom_cols * sizeof(double); // sna + bytes += snaptr->memory_usage(); // SNA object + return bytes; } diff --git a/src/SNAP/compute_sna_atom.h b/src/SNAP/compute_sna_atom.h index 56ffccfa7e..105a62a37a 100644 --- a/src/SNAP/compute_sna_atom.h +++ b/src/SNAP/compute_sna_atom.h @@ -34,7 +34,7 @@ class ComputeSNAAtom : public Compute { double memory_usage(); private: - int nmax, njmax, diagonalstyle; + int nmax; int ncoeff; double **cutsq; class NeighList *list; diff --git a/src/SNAP/compute_snad_atom.cpp b/src/SNAP/compute_snad_atom.cpp index 156380eccc..37587a0aae 100644 --- a/src/SNAP/compute_snad_atom.cpp +++ b/src/SNAP/compute_snad_atom.cpp @@ -44,7 +44,6 @@ ComputeSNADAtom::ComputeSNADAtom(LAMMPS *lmp, int narg, char **arg) : // default values - diagonalstyle = 0; rmin0 = 0.0; switchflag = 1; bzeroflag = 1; @@ -82,14 +81,7 @@ ComputeSNADAtom::ComputeSNADAtom(LAMMPS *lmp, int narg, char **arg) : int iarg = nargmin; while (iarg < narg) { - if (strcmp(arg[iarg],"diagonal") == 0) { - if (iarg+2 > narg) - error->all(FLERR,"Illegal compute snad/atom command"); - diagonalstyle = atof(arg[iarg+1]); - if (diagonalstyle < 0 || diagonalstyle > 3) - error->all(FLERR,"Illegal compute snad/atom command"); - iarg += 2; - } else if (strcmp(arg[iarg],"rmin0") == 0) { + if (strcmp(arg[iarg],"rmin0") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal compute snad/atom command"); rmin0 = atof(arg[iarg+1]); @@ -112,7 +104,7 @@ ComputeSNADAtom::ComputeSNADAtom(LAMMPS *lmp, int narg, char **arg) : } else error->all(FLERR,"Illegal compute snad/atom command"); } - snaptr = new SNA(lmp,rfac0,twojmax,diagonalstyle, + snaptr = new SNA(lmp,rfac0,twojmax, rmin0,switchflag,bzeroflag); ncoeff = snaptr->ncoeff; @@ -125,7 +117,6 @@ ComputeSNADAtom::ComputeSNADAtom(LAMMPS *lmp, int narg, char **arg) : peratom_flag = 1; nmax = 0; - njmax = 0; snad = NULL; } @@ -378,9 +369,9 @@ void ComputeSNADAtom::unpack_reverse_comm(int n, int *list, double *buf) double ComputeSNADAtom::memory_usage() { - double bytes = nmax*size_peratom_cols * sizeof(double); - bytes += 3*njmax*sizeof(double); - bytes += njmax*sizeof(int); - bytes += 3*nperdim*atom->ntypes; + + double bytes = nmax*size_peratom_cols * sizeof(double); // snad + bytes += snaptr->memory_usage(); // SNA object + return bytes; } diff --git a/src/SNAP/compute_snad_atom.h b/src/SNAP/compute_snad_atom.h index 1fcf540d7c..ac353d8553 100644 --- a/src/SNAP/compute_snad_atom.h +++ b/src/SNAP/compute_snad_atom.h @@ -36,7 +36,7 @@ class ComputeSNADAtom : public Compute { double memory_usage(); private: - int nmax, njmax, diagonalstyle; + int nmax; int ncoeff, nperdim, yoffset, zoffset; double **cutsq; class NeighList *list; diff --git a/src/SNAP/compute_snav_atom.cpp b/src/SNAP/compute_snav_atom.cpp index 6caff0820c..1f702496ed 100644 --- a/src/SNAP/compute_snav_atom.cpp +++ b/src/SNAP/compute_snav_atom.cpp @@ -44,7 +44,6 @@ ComputeSNAVAtom::ComputeSNAVAtom(LAMMPS *lmp, int narg, char **arg) : // default values - diagonalstyle = 0; rmin0 = 0.0; switchflag = 1; bzeroflag = 1; @@ -78,14 +77,7 @@ ComputeSNAVAtom::ComputeSNAVAtom(LAMMPS *lmp, int narg, char **arg) : int iarg = nargmin; while (iarg < narg) { - if (strcmp(arg[iarg],"diagonal") == 0) { - if (iarg+2 > narg) - error->all(FLERR,"Illegal compute snav/atom command"); - diagonalstyle = atof(arg[iarg+1]); - if (diagonalstyle < 0 || diagonalstyle > 3) - error->all(FLERR,"Illegal compute snav/atom command"); - iarg += 2; - } else if (strcmp(arg[iarg],"rmin0") == 0) { + if (strcmp(arg[iarg],"rmin0") == 0) { if (iarg+2 > narg) error->all(FLERR,"Illegal compute snav/atom command"); rmin0 = atof(arg[iarg+1]); @@ -108,7 +100,7 @@ ComputeSNAVAtom::ComputeSNAVAtom(LAMMPS *lmp, int narg, char **arg) : } else error->all(FLERR,"Illegal compute snav/atom command"); } - snaptr = new SNA(lmp,rfac0,twojmax,diagonalstyle, + snaptr = new SNA(lmp,rfac0,twojmax, rmin0,switchflag,bzeroflag); ncoeff = snaptr->ncoeff; @@ -119,7 +111,6 @@ ComputeSNAVAtom::ComputeSNAVAtom(LAMMPS *lmp, int narg, char **arg) : peratom_flag = 1; nmax = 0; - njmax = 0; snav = NULL; } @@ -389,10 +380,8 @@ void ComputeSNAVAtom::unpack_reverse_comm(int n, int *list, double *buf) double ComputeSNAVAtom::memory_usage() { - double bytes = nmax*size_peratom_cols * sizeof(double); - bytes += 3*njmax*sizeof(double); - bytes += njmax*sizeof(int); - bytes += 6*nperdim*atom->ntypes; - if (quadraticflag) bytes += 6*nperdim*atom->ntypes; + double bytes = nmax*size_peratom_cols * sizeof(double); // snav + bytes += snaptr->memory_usage(); // SNA object + return bytes; } diff --git a/src/SNAP/compute_snav_atom.h b/src/SNAP/compute_snav_atom.h index 6bcce346e0..9df17cc667 100644 --- a/src/SNAP/compute_snav_atom.h +++ b/src/SNAP/compute_snav_atom.h @@ -36,7 +36,7 @@ class ComputeSNAVAtom : public Compute { double memory_usage(); private: - int nmax, njmax, diagonalstyle; + int nmax; int ncoeff, nperdim; double **cutsq; class NeighList *list; diff --git a/src/SNAP/pair_snap.cpp b/src/SNAP/pair_snap.cpp index 6a65f872fd..6eb05f85a4 100644 --- a/src/SNAP/pair_snap.cpp +++ b/src/SNAP/pair_snap.cpp @@ -34,10 +34,6 @@ using namespace LAMMPS_NS; #define MAXLINE 1024 #define MAXWORD 3 -// Outstanding issues with quadratic term -// 1. there seems to a problem with compute_optimized energy calc -// it does not match compute_regular, even when quadratic coeffs = 0 - /* ---------------------------------------------------------------------- */ PairSNAP::PairSNAP(LAMMPS *lmp) : Pair(lmp) @@ -53,8 +49,6 @@ PairSNAP::PairSNAP(LAMMPS *lmp) : Pair(lmp) wjelem = NULL; coeffelem = NULL; - nmax = 0; - beta_max = 0; beta = NULL; bispectrum = NULL; @@ -74,6 +68,7 @@ PairSNAP::~PairSNAP() memory->destroy(wjelem); memory->destroy(coeffelem); } + memory->destroy(beta); memory->destroy(bispectrum); @@ -115,7 +110,8 @@ void PairSNAP::compute(int eflag, int vflag) // compute dE_i/dB_i = beta_i for all i in list - compute_bispectrum(); + if (quadraticflag || eflag) + compute_bispectrum(); compute_beta(); numneigh = list->numneigh; @@ -209,15 +205,25 @@ void PairSNAP::compute(int eflag, int vflag) evdwl = coeffi[0]; // E = beta.B + 0.5*B^t.alpha.B - // coeff[k] = beta[k-1] or - // coeff[k] = alpha_ii or - // coeff[k] = alpha_ij = alpha_ji, j != i // linear contributions - for (int k = 0; k < ncoeff; k++) - evdwl += beta[ii][k]*bispectrum[ii][k]; + for (int icoeff = 0; icoeff < ncoeff; icoeff++) + evdwl += coeffi[icoeff+1]*bispectrum[ii][icoeff]; + // quadratic contributions + + if (quadraticflag) { + int k = ncoeff+1; + for (int icoeff = 0; icoeff < ncoeff; icoeff++) { + double bveci = bispectrum[ii][icoeff]; + evdwl += 0.5*coeffi[k++]*bveci*bveci; + for (int jcoeff = icoeff+1; jcoeff < ncoeff; jcoeff++) { + double bvecj = bispectrum[ii][jcoeff]; + evdwl += coeffi[k++]*bveci*bvecj; + } + } + } ev_tally_full(i,2.0*evdwl,0.0,0.0,0.0,0.0,0.0); } @@ -241,8 +247,23 @@ void PairSNAP::compute_beta() const int ielem = map[itype]; double* coeffi = coeffelem[ielem]; - for (int k = 1; k <= ncoeff; k++) - beta[ii][k-1] = coeffi[k]; + for (int icoeff = 0; icoeff < ncoeff; icoeff++) + beta[ii][icoeff] = coeffi[icoeff+1]; + + if (quadraticflag) { + int k = ncoeff+1; + for (int icoeff = 0; icoeff < ncoeff; icoeff++) { + double bveci = bispectrum[ii][icoeff]; + beta[ii][icoeff] += coeffi[k]*bveci; + k++; + for (int jcoeff = icoeff+1; jcoeff < ncoeff; jcoeff++) { + double bvecj = bispectrum[ii][jcoeff]; + beta[ii][icoeff] += coeffi[k]*bvecj; + beta[ii][jcoeff] += coeffi[k]*bveci; + k++; + } + } + } } } @@ -308,8 +329,8 @@ void PairSNAP::compute_bispectrum() snaptr->compute_zi(); snaptr->compute_bi(); - for (int k = 0; k < ncoeff; k++) - bispectrum[ii][k] = snaptr->blist[k]; + for (int icoeff = 0; icoeff < ncoeff; icoeff++) + bispectrum[ii][icoeff] = snaptr->blist[icoeff]; } } @@ -354,8 +375,6 @@ void PairSNAP::coeff(int narg, char **arg) memory->destroy(wjelem); memory->destroy(coeffelem); } - memory->destroy(beta); - memory->destroy(bispectrum); char* type1 = arg[0]; char* type2 = arg[1]; @@ -425,9 +444,7 @@ void PairSNAP::coeff(int narg, char **arg) if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); snaptr = new SNA(lmp,rfac0,twojmax, - diagonalstyle, rmin0,switchflag,bzeroflag); - snaptr->grow_rij(nmax); if (ncoeff != snaptr->ncoeff) { if (comm->me == 0) @@ -617,7 +634,6 @@ void PairSNAP::read_files(char *coefffilename, char *paramfilename) rfac0 = 0.99363; rmin0 = 0.0; - diagonalstyle = 3; switchflag = 1; bzeroflag = 1; quadraticflag = 0; @@ -678,8 +694,6 @@ void PairSNAP::read_files(char *coefffilename, char *paramfilename) rfac0 = atof(keyval); else if (strcmp(keywd,"rmin0") == 0) rmin0 = atof(keyval); - else if (strcmp(keywd,"diagonalstyle") == 0) - diagonalstyle = atoi(keyval); else if (strcmp(keywd,"switchflag") == 0) switchflag = atoi(keyval); else if (strcmp(keywd,"bzeroflag") == 0) @@ -702,13 +716,16 @@ void PairSNAP::read_files(char *coefffilename, char *paramfilename) double PairSNAP::memory_usage() { double bytes = Pair::memory_usage(); + int n = atom->ntypes+1; - bytes += n*n*sizeof(int); - bytes += n*n*sizeof(double); - bytes += 3*nmax*sizeof(double); - bytes += nmax*sizeof(int); - bytes += (2*ncoeffall)*sizeof(double); - bytes += (ncoeff*3)*sizeof(double); + bytes += n*n*sizeof(int); // setflag + bytes += n*n*sizeof(double); // cutsq + bytes += n*sizeof(int); // map + bytes += beta_max*ncoeff*sizeof(double); // bispectrum + bytes += beta_max*ncoeff*sizeof(double); // beta + + bytes += snaptr->memory_usage(); // SNA object + return bytes; } diff --git a/src/SNAP/pair_snap.h b/src/SNAP/pair_snap.h index b5871c1527..c64eaa5d4e 100644 --- a/src/SNAP/pair_snap.h +++ b/src/SNAP/pair_snap.h @@ -40,9 +40,7 @@ public: protected: int ncoeffq, ncoeffall; - double **bvec, ***dbvec; class SNA* snaptr; - int nmax; virtual void allocate(); void read_files(char *, char *); inline int equal(double* x,double* y); @@ -60,7 +58,7 @@ protected: double** beta; // betas for all atoms in list double** bispectrum; // bispectrum components for all atoms in list int *map; // mapping from atom types to elements - int twojmax, diagonalstyle, switchflag, bzeroflag; + int twojmax, switchflag, bzeroflag; double rfac0, rmin0, wj1, wj2; int rcutfacflag, twojmaxflag; // flags for required parameters int beta_max; // length of beta diff --git a/src/SNAP/sna.cpp b/src/SNAP/sna.cpp index 131ac48fdb..75601b8e17 100644 --- a/src/SNAP/sna.cpp +++ b/src/SNAP/sna.cpp @@ -113,7 +113,7 @@ using namespace MathConst; ------------------------------------------------------------------------- */ SNA::SNA(LAMMPS* lmp, double rfac0_in, - int twojmax_in, int diagonalstyle_in, + int twojmax_in, double rmin0_in, int switch_flag_in, int bzero_flag_in) : Pointers(lmp) { wself = 1.0; @@ -124,21 +124,16 @@ SNA::SNA(LAMMPS* lmp, double rfac0_in, bzero_flag = bzero_flag_in; twojmax = twojmax_in; - diagonalstyle = diagonalstyle_in; ncoeff = compute_ncoeff(); - bvec = NULL; - dbvec = NULL; - memory->create(bvec, ncoeff, "pair:bvec"); - memory->create(dbvec, ncoeff, 3, "pair:dbvec"); rij = NULL; inside = NULL; wj = NULL; rcutij = NULL; nmax = 0; idxz = NULL; - idxb= NULL; + idxb = NULL; build_indexlist(); create_twojmax_arrays(); @@ -159,8 +154,6 @@ SNA::~SNA() memory->destroy(inside); memory->destroy(wj); memory->destroy(rcutij); - memory->destroy(bvec); - memory->destroy(dbvec); delete[] idxz; delete[] idxb; destroy_twojmax_arrays(); @@ -168,8 +161,6 @@ SNA::~SNA() void SNA::build_indexlist() { - if(diagonalstyle != 3) - error->all(FLERR, "diagonal_style must be 3\n"); // index list for cglist @@ -180,7 +171,7 @@ void SNA::build_indexlist() int idxcg_count = 0; for(int j1 = 0; j1 <= twojmax; j1++) for(int j2 = 0; j2 <= j1; j2++) - for(int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) { + for(int j = j1 - j2; j <= MIN(twojmax, j1 + j2); j += 2) { idxcg_block[j1][j2][j] = idxcg_count; for (int m1 = 0; m1 <= j1; m1++) for (int m2 = 0; m2 <= j2; m2++) @@ -209,7 +200,7 @@ void SNA::build_indexlist() int idxb_count = 0; for(int j1 = 0; j1 <= twojmax; j1++) for(int j2 = 0; j2 <= j1; j2++) - for(int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) + for(int j = j1 - j2; j <= MIN(twojmax, j1 + j2); j += 2) if (j >= j1) idxb_count++; idxb_max = idxb_count; @@ -218,7 +209,7 @@ void SNA::build_indexlist() idxb_count = 0; for(int j1 = 0; j1 <= twojmax; j1++) for(int j2 = 0; j2 <= j1; j2++) - for(int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) + for(int j = j1 - j2; j <= MIN(twojmax, j1 + j2); j += 2) if (j >= j1) { idxb[idxb_count].j1 = j1; idxb[idxb_count].j2 = j2; @@ -233,7 +224,7 @@ void SNA::build_indexlist() idxb_count = 0; for(int j1 = 0; j1 <= twojmax; j1++) for(int j2 = 0; j2 <= j1; j2++) - for(int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) { + for(int j = j1 - j2; j <= MIN(twojmax, j1 + j2); j += 2) { if (j >= j1) { idxb_block[j1][j2][j] = idxb_count; idxb_count++; @@ -246,7 +237,7 @@ void SNA::build_indexlist() for(int j1 = 0; j1 <= twojmax; j1++) for(int j2 = 0; j2 <= j1; j2++) - for(int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) + for(int j = j1 - j2; j <= MIN(twojmax, j1 + j2); j += 2) for (int mb = 0; 2*mb <= j; mb++) for (int ma = 0; ma <= j; ma++) idxz_count++; @@ -260,7 +251,7 @@ void SNA::build_indexlist() idxz_count = 0; for(int j1 = 0; j1 <= twojmax; j1++) for(int j2 = 0; j2 <= j1; j2++) - for(int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) { + for(int j = j1 - j2; j <= MIN(twojmax, j1 + j2); j += 2) { idxz_block[j1][j2][j] = idxz_count; // find right beta[jjb] entry @@ -288,6 +279,7 @@ void SNA::build_indexlist() } } } + /* ---------------------------------------------------------------------- */ void SNA::init() @@ -312,6 +304,7 @@ void SNA::grow_rij(int newnmax) memory->create(wj, nmax, "pair:wj"); memory->create(rcutij, nmax, "pair:rcutij"); } + /* ---------------------------------------------------------------------- compute Ui by summing over neighbors j ------------------------------------------------------------------------- */ @@ -401,12 +394,6 @@ void SNA::compute_zi() icgb += j2; } // end loop over ib -// // apply symmetry factor - -// const double jfac = 1.0/(j+1); -// zlist_r[jjz] *= jfac; -// zlist_i[jjz] *= jfac; - } // end loop over jjz } @@ -631,6 +618,11 @@ void SNA::compute_bi() } // end if jeven blist[jjb] = 2.0*sumzu; + + // apply bzero shift + + if (bzero_flag) + blist[jjb] -= bzero[j]; } } @@ -1186,25 +1178,38 @@ double SNA::memory_usage() int jdimpq = twojmax + 2; int jdim = twojmax + 1; double bytes; - bytes = ncoeff * sizeof(double); // coeff + + bytes = 0; bytes += jdimpq*jdimpq * sizeof(double); // pqarray bytes += idxcg_max * sizeof(double); // cglist - bytes += jdim * jdim * jdim * sizeof(int); // idxcg_block bytes += idxu_max * sizeof(double) * 2; // ulist bytes += idxu_max * sizeof(double) * 2; // ulisttot bytes += idxu_max * 3 * sizeof(double) * 2; // dulist - bytes += jdim * sizeof(int); // idxu_block - bytes += idxz_max * 9 * sizeof(int); // idxz bytes += idxz_max * sizeof(double) * 2; // zlist - bytes += jdim * jdim * jdim * sizeof(int); // idxz_block - + bytes += idxb_max * sizeof(double); // blist + bytes += idxb_max * 3 * sizeof(double); // dblist bytes += idxu_max * sizeof(double) * 2; // ylist - bytes += idxb_max * 3 * sizeof(int); // idxb - bytes += jdim * jdim * jdim * sizeof(int); // idxb_block + bytes += jdim * jdim * jdim * sizeof(int); // idxcg_block + bytes += jdim * sizeof(int); // idxu_block + bytes += jdim * jdim * jdim * sizeof(int); // idxz_block + bytes += jdim * jdim * jdim * sizeof(int); // idxb_block + + bytes += idxz_max * sizeof(SNA_ZINDICES); // idxz + bytes += idxb_max * sizeof(SNA_BINDICES); // idxb + + bytes += jdim * sizeof(double); // bzero + + bytes += nmax * 3 * sizeof(double); // rij + bytes += nmax * sizeof(int); // inside + bytes += nmax * sizeof(double); // wj + bytes += nmax * sizeof(double); // rcutij + + printf("SNAP Z list Memory Usage %d\n",idxz_max * sizeof(double) * 2); + printf("SNAP CG list Memory Usage %d\n",idxcg_max * sizeof(double)); return bytes; } @@ -1242,25 +1247,22 @@ void SNA::destroy_twojmax_arrays() { memory->destroy(rootpqarray); memory->destroy(cglist); - memory->destroy(idxcg_block); - memory->destroy(ulist_r); memory->destroy(ulist_i); memory->destroy(ulisttot_r); memory->destroy(ulisttot_i); memory->destroy(dulist_r); memory->destroy(dulist_i); - memory->destroy(idxu_block); - memory->destroy(zlist_r); memory->destroy(zlist_i); memory->destroy(blist); memory->destroy(dblist); - memory->destroy(idxz_block); - memory->destroy(ylist_r); memory->destroy(ylist_i); + memory->destroy(idxcg_block); + memory->destroy(idxu_block); + memory->destroy(idxz_block); memory->destroy(idxb_block); if (bzero_flag) @@ -1484,7 +1486,7 @@ void SNA::init_clebsch_gordan() int idxcg_count = 0; for(int j1 = 0; j1 <= twojmax; j1++) for(int j2 = 0; j2 <= j1; j2++) - for(int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) { + for(int j = j1 - j2; j <= MIN(twojmax, j1 + j2); j += 2) { for (int m1 = 0; m1 <= j1; m1++) { aa2 = 2 * m1 - j1; @@ -1557,7 +1559,7 @@ int SNA::compute_ncoeff() for (int j1 = 0; j1 <= twojmax; j1++) for (int j2 = 0; j2 <= j1; j2++) - for (int j = abs(j1 - j2); + for (int j = j1 - j2; j <= MIN(twojmax, j1 + j2); j += 2) if (j >= j1) ncount++; diff --git a/src/SNAP/sna.h b/src/SNAP/sna.h index b54ad3482a..1e08ef123c 100644 --- a/src/SNAP/sna.h +++ b/src/SNAP/sna.h @@ -18,9 +18,7 @@ #ifndef LMP_SNA_H #define LMP_SNA_H -#include #include "pointers.h" -#include namespace LAMMPS_NS { @@ -35,7 +33,7 @@ struct SNA_BINDICES { class SNA : protected Pointers { public: - SNA(LAMMPS*, double, int, int, double, int, int); + SNA(LAMMPS*, double, int, double, int, int); SNA(LAMMPS* lmp) : Pointers(lmp) {}; ~SNA(); @@ -61,7 +59,6 @@ public: double compute_sfac(double, double); double compute_dsfac(double, double); - double* bvec, ** dbvec; double* blist; double** dblist; double** rij; @@ -72,7 +69,7 @@ public: void grow_rij(int); - int twojmax, diagonalstyle; + int twojmax; private: double rmin0, rfac0; @@ -126,7 +123,7 @@ private: double wself; int bzero_flag; // 1 if bzero subtracted from barray - double *bzero; // array of B values for isolated atoms + double* bzero; // array of B values for isolated atoms }; } From 3f523ea906a417232a7be1e8d64778fef41041d0 Mon Sep 17 00:00:00 2001 From: athomps Date: Wed, 12 Jun 2019 17:02:59 -0600 Subject: [PATCH 281/311] Not part of this pull request --- examples/snap/W.nnsnap | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 examples/snap/W.nnsnap diff --git a/examples/snap/W.nnsnap b/examples/snap/W.nnsnap deleted file mode 100644 index 6ca97a701a..0000000000 --- a/examples/snap/W.nnsnap +++ /dev/null @@ -1,16 +0,0 @@ -# DATE: 2017-02-20 CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. "Quantum-Accurate Molecular Dynamics Potential for Tungsten" arXiv:1702.07042 [physics.comp-ph] -# -# Definition of SNAP+ZBL potential. -variable zblcutinner equal 4 -variable zblcutouter equal 4.8 -variable zblz equal 74 - -# Specify hybrid with SNAP and ZBL - -pair_style hybrid/overlay & -zbl ${zblcutinner} ${zblcutouter} & -nn/snap -pair_coeff 1 1 zbl ${zblz} ${zblz} -pair_coeff * * nn/snap W_2940_2017_2.snapcoeff W_2940_2017_2.snapparam W - -#Nomenclature on the snap files are Element_DakotaID_Year_Month From f8e257d21967470b0e4c6e47bd3830a3192e871a Mon Sep 17 00:00:00 2001 From: athomps Date: Wed, 12 Jun 2019 17:04:05 -0600 Subject: [PATCH 282/311] Not part of this pull request --- src/SNAP/pair_nn_snap.cpp | 1824 ------------------------------------- 1 file changed, 1824 deletions(-) delete mode 100644 src/SNAP/pair_nn_snap.cpp diff --git a/src/SNAP/pair_nn_snap.cpp b/src/SNAP/pair_nn_snap.cpp deleted file mode 100644 index e90f6d6b1b..0000000000 --- a/src/SNAP/pair_nn_snap.cpp +++ /dev/null @@ -1,1824 +0,0 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - 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. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include "pair_nn_snap.h" -#include "atom.h" -#include "atom_vec.h" -#include "force.h" -#include "comm.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "sna.h" -#include "openmp_snap.h" -#include "domain.h" -#include "memory.h" -#include "error.h" - -#include - -using namespace LAMMPS_NS; - -#define MAXLINE 1024 -#define MAXWORD 3 - -// Outstanding issues with quadratic term -// 1. there seems to a problem with compute_optimized energy calc -// it does not match compute_regular, even when quadratic coeffs = 0 - -/* ---------------------------------------------------------------------- */ - -PairNNSNAP::PairNNSNAP(LAMMPS *lmp) : Pair(lmp) -{ - single_enable = 0; - restartinfo = 0; - one_coeff = 1; - manybody_flag = 1; - - nelements = 0; - elements = NULL; - radelem = NULL; - wjelem = NULL; - coeffelem = NULL; - - nmax = 0; - nthreads = 1; - - schedule_user = 0; - schedule_time_guided = -1; - schedule_time_dynamic = -1; - ncalls_neigh =-1; - - ilistmask_max = 0; - ilistmask = NULL; - ghostinum = 0; - ghostilist_max = 0; - ghostilist = NULL; - ghostnumneigh_max = 0; - ghostnumneigh = NULL; - ghostneighs = NULL; - ghostfirstneigh = NULL; - ghostneighs_total = 0; - ghostneighs_max = 0; - - i_max = 0; - i_neighmax = 0; - i_numpairs = 0; - i_rij = NULL; - i_inside = NULL; - i_wj = NULL; - i_rcutij = NULL; - i_ninside = NULL; - i_pairs = NULL; - i_uarraytot_r = NULL; - i_uarraytot_i = NULL; - i_zarray_r = NULL; - i_zarray_i = NULL; - - use_shared_arrays = 0; - -#ifdef TIMING_INFO - timers[0] = 0; - timers[1] = 0; - timers[2] = 0; - timers[3] = 0; -#endif - - // Need to set this because restart not handled by PairHybrid - - sna = NULL; - - beta_max = 0; -} - -/* ---------------------------------------------------------------------- */ - -PairNNSNAP::~PairNNSNAP() -{ - if (copymode) return; - - if (nelements) { - for (int i = 0; i < nelements; i++) - delete[] elements[i]; - delete[] elements; - memory->destroy(radelem); - memory->destroy(wjelem); - memory->destroy(coeffelem); - memory->destroy(beta); - } - - // Need to set this because restart not handled by PairHybrid - - if (sna) { - -#ifdef TIMING_INFO - double time[5]; - double timeave[5]; - double timeave_mpi[5]; - double timemax_mpi[5]; - - for (int i = 0; i < 5; i++) { - time[i] = 0; - timeave[i] = 0; - for (int tid = 0; tidtimers[i]>time[i]) - time[i] = sna[tid]->timers[i]; - timeave[i] += sna[tid]->timers[i]; - } - timeave[i] /= nthreads; - } - MPI_Reduce(timeave, timeave_mpi, 5, MPI_DOUBLE, MPI_SUM, 0, world); - MPI_Reduce(time, timemax_mpi, 5, MPI_DOUBLE, MPI_MAX, 0, world); -#endif - - for (int tid = 0; tiddestroy(setflag); - memory->destroy(cutsq); - memory->destroy(map); - } - -} - -void PairNNSNAP::compute(int eflag, int vflag) -{ -// if (use_optimized) -// compute_optimized(eflag, vflag); -// else - -// hard-code compute_regular() - - compute_regular(eflag, vflag); -} - -/* ---------------------------------------------------------------------- - This version is a straightforward implementation - ---------------------------------------------------------------------- */ - -void PairNNSNAP::compute_regular(int eflag, int vflag) -{ - int i,j,jnum,ninside; - double delx,dely,delz,evdwl,rsq; - double fij[3]; - int *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; - int newton_pair = force->newton_pair; - class SNA* snaptr = sna[0]; - - if (beta_max < list->inum) { - memory->grow(beta,list->inum,ncoeff,"PairNNSNAP:beta"); - beta_max = list->inum; - } - - // compute dE_i/dB_i = beta_i for all i in list - - compute_beta(); - - numneigh = list->numneigh; - firstneigh = list->firstneigh; - - for (int ii = 0; ii < list->inum; ii++) { - i = list->ilist[ii]; - - const double xtmp = x[i][0]; - const double ytmp = x[i][1]; - const double ztmp = x[i][2]; - const int itype = type[i]; - const int ielem = map[itype]; - const double radi = radelem[ielem]; - - jlist = firstneigh[i]; - jnum = numneigh[i]; - - // insure rij, inside, wj, and rcutij are of size jnum - - snaptr->grow_rij(jnum); - - // rij[][3] = displacements between atom I and those neighbors - // inside = indices of neighbors of I within cutoff - // wj = weights for neighbors of I within cutoff - // rcutij = cutoffs for neighbors of I within cutoff - // note Rij sign convention => dU/dRij = dU/dRj = -dU/dRi - - ninside = 0; - for (int jj = 0; jj < jnum; jj++) { - j = jlist[jj]; - j &= NEIGHMASK; - delx = x[j][0] - xtmp; - dely = x[j][1] - ytmp; - delz = x[j][2] - ztmp; - rsq = delx*delx + dely*dely + delz*delz; - int jtype = type[j]; - int jelem = map[jtype]; - - if (rsq < cutsq[itype][jtype]&&rsq>1e-20) { - snaptr->rij[ninside][0] = delx; - snaptr->rij[ninside][1] = dely; - snaptr->rij[ninside][2] = delz; - snaptr->inside[ninside] = j; - snaptr->wj[ninside] = wjelem[jelem]; - snaptr->rcutij[ninside] = (radi + radelem[jelem])*rcutfac; - ninside++; - } - } - - // compute Ui, Zi, and Bi for atom I - - snaptr->compute_ui(ninside); - snaptr->compute_zi(); - if (quadraticflag) { - snaptr->compute_bi(); - snaptr->copy_bi2bvec(); - } - - // for neighbors of I within cutoff: - // compute Fij = dEi/dRj = -dEi/dRi - // add to Fi, subtract from Fj - - // compute beta_i*Z_i = Y_i - - snaptr->compute_yi(beta[ii]); - - for (int jj = 0; jj < ninside; jj++) { - int j = snaptr->inside[jj]; - snaptr->compute_duidrj(snaptr->rij[jj], - snaptr->wj[jj],snaptr->rcutij[jj]); - -// // quadratic contributions - -// if (quadraticflag) { -// int k = ncoeff+1; -// for (int icoeff = 0; icoeff < ncoeff; icoeff++) { -// double bveci = snaptr->bvec[icoeff]; -// double fack = coeffi[k]*bveci; -// double* dbveci = snaptr->dbvec[icoeff]; -// fij[0] += fack*dbveci[0]; -// fij[1] += fack*dbveci[1]; -// fij[2] += fack*dbveci[2]; -// k++; -// for (int jcoeff = icoeff+1; jcoeff < ncoeff; jcoeff++) { -// double facki = coeffi[k]*bveci; -// double fackj = coeffi[k]*snaptr->bvec[jcoeff]; -// double* dbvecj = snaptr->dbvec[jcoeff]; - -// fij[0] += facki*dbvecj[0]+fackj*dbveci[0]; -// fij[1] += facki*dbvecj[1]+fackj*dbveci[1]; -// fij[2] += facki*dbvecj[2]+fackj*dbveci[2]; -// k++; -// } -// } -// } - - snaptr->compute_deidrj(fij); - - f[i][0] += fij[0]; - f[i][1] += fij[1]; - f[i][2] += fij[2]; - f[j][0] -= fij[0]; - f[j][1] -= fij[1]; - f[j][2] -= fij[2]; - - // tally per-atom virial contribution - - if (vflag) - ev_tally_xyz(i,j,nlocal,newton_pair,0.0,0.0, - fij[0],fij[1],fij[2], - -snaptr->rij[jj][0],-snaptr->rij[jj][1], - -snaptr->rij[jj][2]); - } - - // tally energy contribution - - if (eflag) { - - // evdwl = energy of atom I, sum over coeffs_k * Bi_k - - double* coeffi = coeffelem[ielem]; - evdwl = coeffi[0]; - if (!quadraticflag) { - snaptr->compute_bi(); - snaptr->copy_bi2bvec(); - } - - // E = beta.B + 0.5*B^t.alpha.B - // coeff[k] = beta[k-1] or - // coeff[k] = alpha_ii or - // coeff[k] = alpha_ij = alpha_ji, j != i - - // linear contributions - - for (int k = 1; k <= ncoeff; k++) - evdwl += coeffi[k]*snaptr->bvec[k-1]; - - // quadratic contributions - - if (quadraticflag) { - int k = ncoeff+1; - for (int icoeff = 0; icoeff < ncoeff; icoeff++) { - double bveci = snaptr->bvec[icoeff]; - evdwl += 0.5*coeffi[k++]*bveci*bveci; - for (int jcoeff = icoeff+1; jcoeff < ncoeff; jcoeff++) { - evdwl += coeffi[k++]*bveci*snaptr->bvec[jcoeff]; - } - } - } - ev_tally_full(i,2.0*evdwl,0.0,0.0,0.0,0.0,0.0); - } - - } - - if (vflag_fdotr) virial_fdotr_compute(); -} - - -/* ---------------------------------------------------------------------- - This version is optimized for threading, micro-load balancing - ---------------------------------------------------------------------- */ - -void PairNNSNAP::compute_optimized(int eflag, int vflag) -{ - // if reneighboring took place do load_balance if requested - if (do_load_balance > 0 && - (neighbor->ncalls != ncalls_neigh)) { - ghostinum = 0; - // reset local ghost neighbor lists - ncalls_neigh = neighbor->ncalls; - if (ilistmask_max < list->inum) { - memory->grow(ilistmask,list->inum,"PairSnap::ilistmask"); - ilistmask_max = list->inum; - } - for (int i = 0; i < list->inum; i++) - ilistmask[i] = 1; - - //multiple passes for loadbalancing - for (int i = 0; i < do_load_balance; i++) - load_balance(); - } - - int numpairs = 0; - for (int ii = 0; ii < list->inum; ii++) { - if ((do_load_balance <= 0) || ilistmask[ii]) { - int i = list->ilist[ii]; - int jnum = list->numneigh[i]; - numpairs += jnum; - } - } - - if (do_load_balance) - for (int ii = 0; ii < ghostinum; ii++) { - int i = ghostilist[ii]; - int jnum = ghostnumneigh[i]; - numpairs += jnum; - } - - // optimized schedule setting - - int time_dynamic = 0; - int time_guided = 0; - - if (schedule_user == 0) schedule_user = 4; - - switch (schedule_user) { - case 1: - omp_set_schedule(omp_sched_static,1); - break; - case 2: - omp_set_schedule(omp_sched_dynamic,1); - break; - case 3: - omp_set_schedule(omp_sched_guided,2); - break; - case 4: - omp_set_schedule(omp_sched_auto,0); - break; - case 5: - if (numpairs < 8*nthreads) omp_set_schedule(omp_sched_dynamic,1); - else if (schedule_time_guided < 0.0) { - omp_set_schedule(omp_sched_guided,2); - if (!eflag && !vflag) time_guided = 1; - } else if (schedule_time_dynamic<0.0) { - omp_set_schedule(omp_sched_dynamic,1); - if (!eflag && !vflag) time_dynamic = 1; - } else if (schedule_time_guidedcreate(pairs_tid_unique,numpairs,4,"numpairs"); - pairs = pairs_tid_unique; - } - - if (!use_shared_arrays) { - numpairs = 0; - for (int ii = 0; ii < list->inum; ii++) { - if ((do_load_balance <= 0) || ilistmask[ii]) { - int i = list->ilist[ii]; - int jnum = list->numneigh[i]; - for (int jj = 0; jjx; - double **f = atom->f; - int *type = atom->type; - int nlocal = atom->nlocal; - int newton_pair = force->newton_pair; - - numneigh = list->numneigh; - firstneigh = list->firstneigh; - -#ifdef TIMING_INFO - // only update micro timers after setup - static int count=0; - if (count<2) { - sna[tid]->timers[0] = 0; - sna[tid]->timers[1] = 0; - sna[tid]->timers[2] = 0; - sna[tid]->timers[3] = 0; - sna[tid]->timers[4] = 0; - } - count++; -#endif - - // did thread start working on interactions of new atom - int iold = -1; - - double starttime, endtime; - if (time_dynamic || time_guided) - starttime = MPI_Wtime(); - -#if defined(_OPENMP) -#pragma omp for schedule(runtime) -#endif - for (int iijj = 0; iijj < numpairs; iijj++) { - int i = 0; - if (use_shared_arrays) { - i = i_pairs[iijj][0]; - if (iold != i) { - set_sna_to_shared(tid,i_pairs[iijj][3]); - ielem = map[type[i]]; - } - iold = i; - } else { - i = pairs[iijj][0]; - if (iold != i) { - iold = i; - const double xtmp = x[i][0]; - const double ytmp = x[i][1]; - const double ztmp = x[i][2]; - const int itype = type[i]; - ielem = map[itype]; - const double radi = radelem[ielem]; - - if (i < nlocal) { - jlist = firstneigh[i]; - jnum = numneigh[i]; - } else { - jlist = ghostneighs+ghostfirstneigh[i]; - jnum = ghostnumneigh[i]; - } - - // insure rij, inside, wj, and rcutij are of size jnum - - sna[tid]->grow_rij(jnum); - - // rij[][3] = displacements between atom I and those neighbors - // inside = indices of neighbors of I within cutoff - // wj = weights of neighbors of I within cutoff - // rcutij = cutoffs of neighbors of I within cutoff - // note Rij sign convention => dU/dRij = dU/dRj = -dU/dRi - - ninside = 0; - for (jj = 0; jj < jnum; jj++) { - int j = jlist[jj]; - j &= NEIGHMASK; - delx = x[j][0] - xtmp; //unitialised - dely = x[j][1] - ytmp; - delz = x[j][2] - ztmp; - rsq = delx*delx + dely*dely + delz*delz; - jtype = type[j]; - int jelem = map[jtype]; - - if (rsq < cutsq[itype][jtype]&&rsq>1e-20) { //unitialised - sna[tid]->rij[ninside][0] = delx; - sna[tid]->rij[ninside][1] = dely; - sna[tid]->rij[ninside][2] = delz; - sna[tid]->inside[ninside] = j; - sna[tid]->wj[ninside] = wjelem[jelem]; - sna[tid]->rcutij[ninside] = (radi + radelem[jelem])*rcutfac; - ninside++; - - // update index list with inside index - pairs[iijj + (jj - pairs[iijj][1])][2] = - ninside-1; //unitialised - } - } - - // compute Ui and Zi for atom I - - sna[tid]->compute_ui(ninside); //unitialised - sna[tid]->compute_zi(); - } - } - if (quadraticflag) { - sna[tid]->compute_bi(); - sna[tid]->copy_bi2bvec(); - } - - // for neighbors of I within cutoff: - // compute dUi/drj and dBi/drj - // Fij = dEi/dRj = -dEi/dRi => add to Fi, subtract from Fj - - // entry into loop if inside index is set - - double* coeffi = coeffelem[ielem]; - - if (pairs[iijj][2] >= 0) { - jj = pairs[iijj][2]; - int j = sna[tid]->inside[jj]; - sna[tid]->compute_duidrj(sna[tid]->rij[jj], - sna[tid]->wj[jj],sna[tid]->rcutij[jj]); - - sna[tid]->compute_dbidrj(); - sna[tid]->copy_dbi2dbvec(); - - fij[0] = 0.0; - fij[1] = 0.0; - fij[2] = 0.0; - - // linear contributions - - for (k = 1; k <= ncoeff; k++) { - double bgb = coeffi[k]; - fij[0] += bgb*sna[tid]->dbvec[k-1][0]; - fij[1] += bgb*sna[tid]->dbvec[k-1][1]; - fij[2] += bgb*sna[tid]->dbvec[k-1][2]; - } - - // quadratic contributions - - if (quadraticflag) { - int k = ncoeff+1; - for (int icoeff = 0; icoeff < ncoeff; icoeff++) { - double bveci = sna[tid]->bvec[icoeff]; - double fack = coeffi[k]*bveci; - double* dbveci = sna[tid]->dbvec[icoeff]; - fij[0] += fack*sna[tid]->dbvec[icoeff][0]; - fij[1] += fack*sna[tid]->dbvec[icoeff][1]; - fij[2] += fack*sna[tid]->dbvec[icoeff][2]; - k++; - for (int jcoeff = icoeff+1; jcoeff < ncoeff; jcoeff++) { - double facki = coeffi[k]*bveci; - double fackj = coeffi[k]*sna[tid]->bvec[jcoeff]; - double* dbvecj = sna[tid]->dbvec[jcoeff]; - fij[0] += facki*dbvecj[0]+fackj*dbveci[0]; - fij[1] += facki*dbvecj[1]+fackj*dbveci[1]; - fij[2] += facki*dbvecj[2]+fackj*dbveci[2]; - k++; - } - } - } - -#if defined(_OPENMP) -#pragma omp critical -#endif - { - f[i][0] += fij[0]; - f[i][1] += fij[1]; - f[i][2] += fij[2]; - f[j][0] -= fij[0]; - f[j][1] -= fij[1]; - f[j][2] -= fij[2]; - - // tally per-atom virial contribution - - if (vflag) - ev_tally_xyz(i,j,nlocal,newton_pair,0.0,0.0, - fij[0],fij[1],fij[2], - -sna[tid]->rij[jj][0],-sna[tid]->rij[jj][1], - -sna[tid]->rij[jj][2]); - } - } - - // evdwl = energy of atom I, sum over coeffs_k * Bi_k - // only call this for first pair of each atom i - // if atom has no pairs, eatom=0, which is wrong - - if (eflag&&pairs[iijj][1] == 0) { - evdwl = coeffi[0]; - - if (!quadraticflag) { - sna[tid]->compute_bi(); - sna[tid]->copy_bi2bvec(); - } - - // E = beta.B + 0.5*B^t.alpha.B - // coeff[k] = beta[k-1] or - // coeff[k] = alpha_ii or - // coeff[k] = alpha_ij = alpha_ji, j != i - - // linear contributions - - for (int k = 1; k <= ncoeff; k++) - evdwl += coeffi[k]*sna[tid]->bvec[k-1]; - - // quadratic contributions - - if (quadraticflag) { - int k = ncoeff+1; - for (int icoeff = 0; icoeff < ncoeff; icoeff++) { - double bveci = sna[tid]->bvec[icoeff]; - evdwl += 0.5*coeffi[k++]*bveci*bveci; - for (int jcoeff = icoeff+1; jcoeff < ncoeff; jcoeff++) { - evdwl += coeffi[k++]*bveci*sna[tid]->bvec[jcoeff]; - } - } - } - -#if defined(_OPENMP) -#pragma omp critical -#endif - ev_tally_full(i,2.0*evdwl,0.0,0.0,0.0,0.0,0.0); - } - - } - if (time_dynamic || time_guided) - endtime = MPI_Wtime(); - if (time_dynamic) schedule_time_dynamic = endtime - starttime; - if (time_guided) schedule_time_guided = endtime - starttime; - if (!use_shared_arrays) memory->destroy(pairs); - - }// end of pragma omp parallel - - if (vflag_fdotr) virial_fdotr_compute(); - -} - -inline int PairNNSNAP::equal(double* x,double* y) -{ - double dist2 = - (x[0]-y[0])*(x[0]-y[0]) + - (x[1]-y[1])*(x[1]-y[1]) + - (x[2]-y[2])*(x[2]-y[2]); - if (dist2 < 1e-20) return 1; - return 0; -} - -inline double PairNNSNAP::dist2(double* x,double* y) -{ - return - (x[0]-y[0])*(x[0]-y[0]) + - (x[1]-y[1])*(x[1]-y[1]) + - (x[2]-y[2])*(x[2]-y[2]); -} - -// return extra communication cutoff -// extra_cutoff = max(subdomain_length) - -double PairNNSNAP::extra_cutoff() -{ - double sublo[3],subhi[3]; - - if (domain->triclinic == 0) { - for (int dim = 0 ; dim < 3 ; dim++) { - sublo[dim] = domain->sublo[dim]; - subhi[dim] = domain->subhi[dim]; - } - } else { - domain->lamda2x(domain->sublo_lamda,sublo); - domain->lamda2x(domain->subhi_lamda,subhi); - } - - double sub_size[3]; - for (int dim = 0; dim < 3; dim++) - sub_size[dim] = subhi[dim] - sublo[dim]; - - double max_sub_size = 0; - for (int dim = 0; dim < 3; dim++) - max_sub_size = MAX(max_sub_size,sub_size[dim]); - - // note: for triclinic, probably need something different - // see Comm::setup() - - return max_sub_size; -} - -// micro load_balancer: each MPI process will -// check with each of its 26 neighbors, -// whether an imbalance exists in the number -// of atoms to calculate forces for. -// If it does it will set ilistmask of one of -// its local atoms to zero, and send its Tag -// to the neighbor process. The neighboring process -// will check its ghost list for the -// ghost atom with the same Tag which is closest -// to its domain center, and build a -// neighborlist for this ghost atom. For this to work, -// the communication cutoff has to be -// as large as the neighbor cutoff + -// maximum subdomain length. - -// Note that at most one atom is exchanged per processor pair. - -// Also note that the local atom assignment -// doesn't change. This load balancer will cause -// some ghost atoms to have full neighborlists -// which are unique to PairNNSNAP. -// They are not part of the generally accessible neighborlist. -// At the same time corresponding local atoms on -// other MPI processes will not be -// included in the force computation since -// their ilistmask is 0. This does not effect -// any other classes which might -// access the same general neighborlist. -// Reverse communication (newton on) of forces is required. - -// Currently the load balancer does two passes, -// since its exchanging atoms upstream and downstream. - -void PairNNSNAP::load_balance() -{ - double sublo[3],subhi[3]; - if (domain->triclinic == 0) { - double* sublotmp = domain->sublo; - double* subhitmp = domain->subhi; - for (int dim = 0 ; dim<3 ; dim++) { - sublo[dim]=sublotmp[dim]; - subhi[dim]=subhitmp[dim]; - } - } else { - double* sublotmp = domain->sublo_lamda; - double* subhitmp = domain->subhi_lamda; - domain->lamda2x(sublotmp,sublo); - domain->lamda2x(subhitmp,subhi); - } - - //if (list->inum==0) list->grow(atom->nmax); - - int nlocal = ghostinum; - for (int i=0; i < list->inum; i++) - if (ilistmask[i]) nlocal++; - int ***grid2proc = comm->grid2proc; - int* procgrid = comm->procgrid; - - int nlocal_up,nlocal_down; - MPI_Request request; - - double sub_mid[3]; - for (int dim=0; dim<3; dim++) - sub_mid[dim] = (subhi[dim] + sublo[dim])/2; - - if (comm->cutghostuser < - neighbor->cutneighmax+extra_cutoff()) - error->all(FLERR,"Communication cutoff too small for SNAP micro load balancing"); - - int nrecv = ghostinum; - int totalsend = 0; - int nsend = 0; - int depth = 1; - - for (int dx = -depth; dx < depth+1; dx++) - for (int dy = -depth; dy < depth+1; dy++) - for (int dz = -depth; dz < depth+1; dz++) { - - if (dx == dy && dy == dz && dz == 0) continue; - - int sendloc[3] = {comm->myloc[0], - comm->myloc[1], comm->myloc[2] - }; - sendloc[0] += dx; - sendloc[1] += dy; - sendloc[2] += dz; - for (int dim = 0; dim < 3; dim++) - if (sendloc[dim] >= procgrid[dim]) - sendloc[dim] = sendloc[dim] - procgrid[dim]; - for (int dim = 0; dim < 3; dim++) - if (sendloc[dim] < 0) - sendloc[dim] = procgrid[dim] + sendloc[dim]; - int recvloc[3] = {comm->myloc[0], - comm->myloc[1], comm->myloc[2] - }; - recvloc[0] -= dx; - recvloc[1] -= dy; - recvloc[2] -= dz; - for (int dim = 0; dim < 3; dim++) - if (recvloc[dim] < 0) - recvloc[dim] = procgrid[dim] + recvloc[dim]; - for (int dim = 0; dim < 3; dim++) - if (recvloc[dim] >= procgrid[dim]) - recvloc[dim] = recvloc[dim] - procgrid[dim]; - - int sendproc = grid2proc[sendloc[0]][sendloc[1]][sendloc[2]]; - int recvproc = grid2proc[recvloc[0]][recvloc[1]][recvloc[2]]; - - // two stage process, first upstream movement, then downstream - - MPI_Sendrecv(&nlocal,1,MPI_INT,sendproc,0, - &nlocal_up,1,MPI_INT,recvproc,0,world,MPI_STATUS_IGNORE); - MPI_Sendrecv(&nlocal,1,MPI_INT,recvproc,0, - &nlocal_down,1,MPI_INT,sendproc,0,world,MPI_STATUS_IGNORE); - nsend = 0; - - // send upstream - - if (nlocal > nlocal_up+1) { - - int i = totalsend++; - while(i < list->inum && ilistmask[i] == 0) - i = totalsend++; - - if (i < list->inum) - MPI_Isend(&atom->tag[i],1,MPI_INT,recvproc,0,world,&request); - else { - int j = -1; - MPI_Isend(&j,1,MPI_INT,recvproc,0,world,&request); - } - - if (i < list->inum) { - for (int j = 0; j < list->inum; j++) - if (list->ilist[j] == i) - ilistmask[j] = 0; - nsend = 1; - } - } - - // recv downstream - - if (nlocal < nlocal_down-1) { - nlocal++; - int get_tag = -1; - MPI_Recv(&get_tag,1,MPI_INT,sendproc,0,world,MPI_STATUS_IGNORE); - - // if get_tag -1 the other process didnt have local atoms to send - - if (get_tag >= 0) { - if (ghostinum >= ghostilist_max) { - memory->grow(ghostilist,ghostinum+10, - "PairSnap::ghostilist"); - ghostilist_max = ghostinum+10; - } - if (atom->nlocal + atom->nghost >= ghostnumneigh_max) { - ghostnumneigh_max = atom->nlocal+atom->nghost+100; - memory->grow(ghostnumneigh,ghostnumneigh_max, - "PairSnap::ghostnumneigh"); - memory->grow(ghostfirstneigh,ghostnumneigh_max, - "PairSnap::ghostfirstneigh"); - } - - // find closest ghost image of the transfered particle - - double mindist = 1e200; - int closestghost = -1; - for (int j = 0; j < atom->nlocal + atom->nghost; j++) - if (atom->tag[j] == get_tag) - if (dist2(sub_mid, atom->x[j]) < mindist) { - closestghost = j; - mindist = dist2(sub_mid, atom->x[j]); - } - - // build neighborlist for this particular - // ghost atom, and add it to list->ilist - - if (ghostneighs_max - ghostneighs_total < - neighbor->oneatom) { - memory->grow(ghostneighs, - ghostneighs_total + neighbor->oneatom, - "PairSnap::ghostneighs"); - ghostneighs_max = ghostneighs_total + neighbor->oneatom; - } - - int j = closestghost; - - ghostilist[ghostinum] = j; - ghostnumneigh[j] = 0; - ghostfirstneigh[j] = ghostneighs_total; - - ghostinum++; - int* jlist = ghostneighs + ghostfirstneigh[j]; - - // find all neighbors by looping - // over all local and ghost atoms - - for (int k = 0; k < atom->nlocal + atom->nghost; k++) - if (dist2(atom->x[j],atom->x[k]) < - neighbor->cutneighmax*neighbor->cutneighmax) { - jlist[ghostnumneigh[j]] = k; - ghostnumneigh[j]++; - ghostneighs_total++; - } - } - - if (get_tag >= 0) nrecv++; - } - - // decrease nlocal later, so that it is the - // initial number both for receiving and sending - - if (nsend) nlocal--; - - // second pass through the grid - - MPI_Sendrecv(&nlocal,1,MPI_INT,sendproc,0, - &nlocal_up,1,MPI_INT,recvproc,0,world,MPI_STATUS_IGNORE); - MPI_Sendrecv(&nlocal,1,MPI_INT,recvproc,0, - &nlocal_down,1,MPI_INT,sendproc,0,world,MPI_STATUS_IGNORE); - - // send downstream - - nsend=0; - if (nlocal > nlocal_down+1) { - int i = totalsend++; - while(i < list->inum && ilistmask[i]==0) i = totalsend++; - - if (i < list->inum) - MPI_Isend(&atom->tag[i],1,MPI_INT,sendproc,0,world,&request); - else { - int j =- 1; - MPI_Isend(&j,1,MPI_INT,sendproc,0,world,&request); - } - - if (i < list->inum) { - for (int j=0; jinum; j++) - if (list->ilist[j] == i) ilistmask[j] = 0; - nsend = 1; - } - } - - // receive upstream - - if (nlocal < nlocal_up-1) { - nlocal++; - int get_tag = -1; - - MPI_Recv(&get_tag,1,MPI_INT,recvproc,0,world,MPI_STATUS_IGNORE); - - if (get_tag >= 0) { - if (ghostinum >= ghostilist_max) { - memory->grow(ghostilist,ghostinum+10, - "PairSnap::ghostilist"); - ghostilist_max = ghostinum+10; - } - if (atom->nlocal + atom->nghost >= ghostnumneigh_max) { - ghostnumneigh_max = atom->nlocal + atom->nghost + 100; - memory->grow(ghostnumneigh,ghostnumneigh_max, - "PairSnap::ghostnumneigh"); - memory->grow(ghostfirstneigh,ghostnumneigh_max, - "PairSnap::ghostfirstneigh"); - } - - // find closest ghost image of the transfered particle - - double mindist = 1e200; - int closestghost = -1; - for (int j = 0; j < atom->nlocal + atom->nghost; j++) - if (atom->tag[j] == get_tag) - if (dist2(sub_mid,atom->x[j])x[j]); - } - - // build neighborlist for this particular ghost atom - - if (ghostneighs_max-ghostneighs_total < neighbor->oneatom) { - memory->grow(ghostneighs,ghostneighs_total + neighbor->oneatom, - "PairSnap::ghostneighs"); - ghostneighs_max = ghostneighs_total + neighbor->oneatom; - } - - int j = closestghost; - - ghostilist[ghostinum] = j; - ghostnumneigh[j] = 0; - ghostfirstneigh[j] = ghostneighs_total; - - ghostinum++; - int* jlist = ghostneighs + ghostfirstneigh[j]; - - for (int k = 0; k < atom->nlocal + atom->nghost; k++) - if (dist2(atom->x[j],atom->x[k]) < - neighbor->cutneighmax*neighbor->cutneighmax) { - jlist[ghostnumneigh[j]] = k; - ghostnumneigh[j]++; - ghostneighs_total++; - } - } - - if (get_tag >= 0) nrecv++; - } - if (nsend) nlocal--; - } -} - -void PairNNSNAP::set_sna_to_shared(int snaid,int i) -{ - sna[snaid]->rij = i_rij[i]; - sna[snaid]->inside = i_inside[i]; - sna[snaid]->wj = i_wj[i]; - sna[snaid]->rcutij = i_rcutij[i]; - sna[snaid]->zarray_r = i_zarray_r[i]; - sna[snaid]->zarray_i = i_zarray_i[i]; - sna[snaid]->uarraytot_r = i_uarraytot_r[i]; - sna[snaid]->uarraytot_i = i_uarraytot_i[i]; -} - -void PairNNSNAP::build_per_atom_arrays() -{ - -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME,&starttime); -#endif - - int count = 0; - int neighmax = 0; - for (int ii = 0; ii < list->inum; ii++) - if ((do_load_balance <= 0) || ilistmask[ii]) { - neighmax=MAX(neighmax,list->numneigh[list->ilist[ii]]); - ++count; - } - for (int ii = 0; ii < ghostinum; ii++) { - neighmax=MAX(neighmax,ghostnumneigh[ghostilist[ii]]); - ++count; - } - - if (i_max < count || i_neighmax < neighmax) { - int i_maxt = MAX(count,i_max); - i_neighmax = MAX(neighmax,i_neighmax); - memory->destroy(i_rij); - memory->destroy(i_inside); - memory->destroy(i_wj); - memory->destroy(i_rcutij); - memory->destroy(i_ninside); - memory->destroy(i_pairs); - memory->create(i_rij,i_maxt,i_neighmax,3,"PairNNSNAP::i_rij"); - memory->create(i_inside,i_maxt,i_neighmax,"PairNNSNAP::i_inside"); - memory->create(i_wj,i_maxt,i_neighmax,"PairNNSNAP::i_wj"); - memory->create(i_rcutij,i_maxt,i_neighmax,"PairNNSNAP::i_rcutij"); - memory->create(i_ninside,i_maxt,"PairNNSNAP::i_ninside"); - memory->create(i_pairs,i_maxt*i_neighmax,4,"PairNNSNAP::i_pairs"); - } - - if (i_max < count) { - int jdim = sna[0]->twojmax+1; - memory->destroy(i_uarraytot_r); - memory->destroy(i_uarraytot_i); - memory->create(i_uarraytot_r,count,jdim,jdim,jdim, - "PairNNSNAP::i_uarraytot_r"); - memory->create(i_uarraytot_i,count,jdim,jdim,jdim, - "PairNNSNAP::i_uarraytot_i"); - if (i_zarray_r != NULL) - for (int i = 0; i < i_max; i++) { - memory->destroy(i_zarray_r[i]); - memory->destroy(i_zarray_i[i]); - } - - delete [] i_zarray_r; - delete [] i_zarray_i; - i_zarray_r = new double*****[count]; - i_zarray_i = new double*****[count]; - for (int i = 0; i < count; i++) { - memory->create(i_zarray_r[i],jdim,jdim,jdim,jdim,jdim, - "PairNNSNAP::i_zarray_r"); - memory->create(i_zarray_i[i],jdim,jdim,jdim,jdim,jdim, - "PairNNSNAP::i_zarray_i"); - } - } - - if (i_max < count) - i_max = count; - - count = 0; - i_numpairs = 0; - for (int ii = 0; ii < list->inum; ii++) { - if ((do_load_balance <= 0) || ilistmask[ii]) { - int i = list->ilist[ii]; - int jnum = list->numneigh[i]; - int* jlist = list->firstneigh[i]; - const double xtmp = atom->x[i][0]; - const double ytmp = atom->x[i][1]; - const double ztmp = atom->x[i][2]; - const int itype = atom->type[i]; - const int ielem = map[itype]; - const double radi = radelem[ielem]; - int ninside = 0; - for (int jj = 0; jj < jnum; jj++) { - int j = jlist[jj]; - j &= NEIGHMASK; - const double delx = atom->x[j][0] - xtmp; - const double dely = atom->x[j][1] - ytmp; - const double delz = atom->x[j][2] - ztmp; - const double rsq = delx*delx + dely*dely + delz*delz; - int jtype = atom->type[j]; - int jelem = map[jtype]; - - i_pairs[i_numpairs][0] = i; - i_pairs[i_numpairs][1] = jj; - i_pairs[i_numpairs][2] = -1; - i_pairs[i_numpairs][3] = count; - if (rsq < cutsq[itype][jtype]&&rsq>1e-20) { - i_rij[count][ninside][0] = delx; - i_rij[count][ninside][1] = dely; - i_rij[count][ninside][2] = delz; - i_inside[count][ninside] = j; - i_wj[count][ninside] = wjelem[jelem]; - i_rcutij[count][ninside] = (radi + radelem[jelem])*rcutfac; - - // update index list with inside index - i_pairs[i_numpairs][2] = ninside++; - } - i_numpairs++; - } - i_ninside[count] = ninside; - count++; - } - } - - for (int ii = 0; ii < ghostinum; ii++) { - int i = ghostilist[ii]; - int jnum = ghostnumneigh[i]; - int* jlist = ghostneighs+ghostfirstneigh[i]; - const double xtmp = atom->x[i][0]; - const double ytmp = atom->x[i][1]; - const double ztmp = atom->x[i][2]; - const int itype = atom->type[i]; - const int ielem = map[itype]; - const double radi = radelem[ielem]; - int ninside = 0; - - for (int jj = 0; jj < jnum; jj++) { - int j = jlist[jj]; - j &= NEIGHMASK; - const double delx = atom->x[j][0] - xtmp; - const double dely = atom->x[j][1] - ytmp; - const double delz = atom->x[j][2] - ztmp; - const double rsq = delx*delx + dely*dely + delz*delz; - int jtype = atom->type[j]; - int jelem = map[jtype]; - - i_pairs[i_numpairs][0] = i; - i_pairs[i_numpairs][1] = jj; - i_pairs[i_numpairs][2] = -1; - i_pairs[i_numpairs][3] = count; - if (rsq < cutsq[itype][jtype]&&rsq>1e-20) { - i_rij[count][ninside][0] = delx; - i_rij[count][ninside][1] = dely; - i_rij[count][ninside][2] = delz; - i_inside[count][ninside] = j; - i_wj[count][ninside] = wjelem[jelem]; - i_rcutij[count][ninside] = (radi + radelem[jelem])*rcutfac; - // update index list with inside index - i_pairs[i_numpairs][2] = ninside++; - } - i_numpairs++; - } - i_ninside[count] = ninside; - count++; - } -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME,&endtime); - timers[0]+=(endtime.tv_sec-starttime.tv_sec+1.0* - (endtime.tv_nsec-starttime.tv_nsec)/1000000000); -#endif -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME,&starttime); -#endif - -#if defined(_OPENMP) -#pragma omp parallel for shared(count) default(none) -#endif - for (int ii=0; ii < count; ii++) { - int tid = omp_get_thread_num(); - set_sna_to_shared(tid,ii); - //sna[tid]->compute_ui(i_ninside[ii]); -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME,&starttime); -#endif - sna[tid]->compute_ui_omp(i_ninside[ii],MAX(int(nthreads/count),1)); -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME,&endtime); - sna[tid]->timers[0]+=(endtime.tv_sec-starttime.tv_sec+1.0* - (endtime.tv_nsec-starttime.tv_nsec)/1000000000); -#endif - } - -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME,&starttime); -#endif - for (int ii=0; ii < count; ii++) { - int tid = 0;//omp_get_thread_num(); - set_sna_to_shared(tid,ii); - sna[tid]->compute_zi_omp(MAX(int(nthreads/count),1)); - } -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME,&endtime); - sna[0]->timers[1]+=(endtime.tv_sec-starttime.tv_sec+1.0* - (endtime.tv_nsec-starttime.tv_nsec)/1000000000); -#endif - -#ifdef TIMING_INFO - clock_gettime(CLOCK_REALTIME,&endtime); - timers[1]+=(endtime.tv_sec-starttime.tv_sec+1.0* - (endtime.tv_nsec-starttime.tv_nsec)/1000000000); -#endif -} - -/* ---------------------------------------------------------------------- - compute beta -------------------------------------------------------------------------- */ - -void PairNNSNAP::compute_beta() -{ - int i; - int *type = atom->type; - - for (int ii = 0; ii < list->inum; ii++) { - i = list->ilist[ii]; - const int itype = type[i]; - const int ielem = map[itype]; - double* coeffi = coeffelem[ielem]; - - for (int k = 1; k <= ncoeff; k++) - beta[ii][k-1] = coeffi[k]; - } -} - -/* ---------------------------------------------------------------------- - allocate all arrays -------------------------------------------------------------------------- */ - -void PairNNSNAP::allocate() -{ - allocated = 1; - int n = atom->ntypes; - - memory->create(setflag,n+1,n+1,"pair:setflag"); - memory->create(cutsq,n+1,n+1,"pair:cutsq"); - memory->create(map,n+1,"pair:map"); -} - -/* ---------------------------------------------------------------------- - global settings -------------------------------------------------------------------------- */ - -void PairNNSNAP::settings(int narg, char **arg) -{ - - // set default values for optional arguments - - nthreads = -1; - use_shared_arrays=-1; - do_load_balance = 0; - use_optimized = 1; - - // optional arguments - - for (int i=0; i < narg; i++) { - if (i+2>narg) error->all(FLERR,"Illegal pair_style command"); - if (strcmp(arg[i],"nthreads")==0) { - nthreads=force->inumeric(FLERR,arg[++i]); -#if defined(LMP_USER_OMP) - error->all(FLERR,"Must set number of threads via package omp command"); -#else - omp_set_num_threads(nthreads); - comm->nthreads=nthreads; -#endif - continue; - } - if (strcmp(arg[i],"optimized")==0) { - use_optimized=force->inumeric(FLERR,arg[++i]); - continue; - } - if (strcmp(arg[i],"shared")==0) { - use_shared_arrays=force->inumeric(FLERR,arg[++i]); - continue; - } - if (strcmp(arg[i],"loadbalance")==0) { - do_load_balance = force->inumeric(FLERR,arg[++i]); - if (do_load_balance) { - double mincutoff = extra_cutoff() + - rcutmax + neighbor->skin; - if (comm->cutghostuser < mincutoff) { - char buffer[255]; - - //apparently mincutoff is 0 after sprintf command ????? - - double tmp = mincutoff + 0.1; - sprintf(buffer, "Communication cutoff is too small " - "for SNAP micro load balancing, increased to %lf", - mincutoff+0.1); - if (comm->me==0) - error->warning(FLERR,buffer); - - comm->cutghostuser = tmp; - - } - } - continue; - } - if (strcmp(arg[i],"schedule")==0) { - i++; - if (strcmp(arg[i],"static")==0) - schedule_user = 1; - if (strcmp(arg[i],"dynamic")==0) - schedule_user = 2; - if (strcmp(arg[i],"guided")==0) - schedule_user = 3; - if (strcmp(arg[i],"auto")==0) - schedule_user = 4; - if (strcmp(arg[i],"determine")==0) - schedule_user = 5; - if (schedule_user == 0) - error->all(FLERR,"Illegal pair_style command"); - continue; - } - error->all(FLERR,"Illegal pair_style command"); - } - - if (nthreads < 0) - nthreads = comm->nthreads; - - if (use_shared_arrays < 0) { - if (nthreads > 1 && atom->nlocal <= 2*nthreads) - use_shared_arrays = 1; - else use_shared_arrays = 0; - } - - // check if running non-optimized code with - // optimization flags set - - if (!use_optimized) - if (nthreads > 1 || - use_shared_arrays || - do_load_balance || - schedule_user) - error->all(FLERR,"Illegal pair_style command"); -} - -/* ---------------------------------------------------------------------- - set coeffs for one or more type pairs -------------------------------------------------------------------------- */ - -void PairNNSNAP::coeff(int narg, char **arg) -{ - if (narg < 5) error->all(FLERR,"Incorrect args for pair coefficients"); - if (!allocated) allocate(); - - if (nelements) { - for (int i = 0; i < nelements; i++) - delete[] elements[i]; - delete[] elements; - memory->destroy(radelem); - memory->destroy(wjelem); - memory->destroy(coeffelem); - memory->destroy(beta); - } - - char* type1 = arg[0]; - char* type2 = arg[1]; - char* coefffilename = arg[2]; - char* paramfilename = arg[3]; - char** elemtypes = &arg[4]; - - // insure I,J args are * * - - if (strcmp(type1,"*") != 0 || strcmp(type2,"*") != 0) - error->all(FLERR,"Incorrect args for pair coefficients"); - - // read snapcoeff and snapparam files - - read_files(coefffilename,paramfilename); - - if (!quadraticflag) - ncoeff = ncoeffall - 1; - else { - - // ncoeffall should be (ncoeff+2)*(ncoeff+1)/2 - // so, ncoeff = floor(sqrt(2*ncoeffall))-1 - - ncoeff = sqrt(2*ncoeffall)-1; - ncoeffq = (ncoeff*(ncoeff+1))/2; - int ntmp = 1+ncoeff+ncoeffq; - if (ntmp != ncoeffall) { - printf("ncoeffall = %d ntmp = %d ncoeff = %d \n",ncoeffall,ntmp,ncoeff); - error->all(FLERR,"Incorrect SNAP coeff file"); - } - } - - // read args that map atom types to SNAP elements - // map[i] = which element the Ith atom type is, -1 if not mapped - // map[0] is not used - - for (int i = 1; i <= atom->ntypes; i++) { - char* elemname = elemtypes[i-1]; - int jelem; - for (jelem = 0; jelem < nelements; jelem++) - if (strcmp(elemname,elements[jelem]) == 0) - break; - - if (jelem < nelements) - map[i] = jelem; - else if (strcmp(elemname,"NULL") == 0) map[i] = -1; - else error->all(FLERR,"Incorrect args for pair coefficients"); - } - - // clear setflag since coeff() called once with I,J = * * - - int n = atom->ntypes; - for (int i = 1; i <= n; i++) - for (int j = i; j <= n; j++) - setflag[i][j] = 0; - - // set setflag i,j for type pairs where both are mapped to elements - - int count = 0; - for (int i = 1; i <= n; i++) - for (int j = i; j <= n; j++) - if (map[i] >= 0 && map[j] >= 0) { - setflag[i][j] = 1; - count++; - } - - if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); - - sna = new SNA*[nthreads]; - - // allocate memory for per OpenMP thread data which - // is wrapped into the sna class - -#if defined(_OPENMP) -#pragma omp parallel default(none) -#endif - { - int tid = omp_get_thread_num(); - sna[tid] = new SNA(lmp,rfac0,twojmax, - diagonalstyle,use_shared_arrays, - rmin0,switchflag,bzeroflag); - if (!use_shared_arrays) - sna[tid]->grow_rij(nmax); - } - - if (ncoeff != sna[0]->ncoeff) { - if (comm->me == 0) - printf("ncoeff = %d snancoeff = %d \n",ncoeff,sna[0]->ncoeff); - error->all(FLERR,"Incorrect SNAP parameter file"); - } - - // Calculate maximum cutoff for all elements - - rcutmax = 0.0; - for (int ielem = 0; ielem < nelements; ielem++) - rcutmax = MAX(2.0*radelem[ielem]*rcutfac,rcutmax); - -} - -/* ---------------------------------------------------------------------- - init specific to this pair style -------------------------------------------------------------------------- */ - -void PairNNSNAP::init_style() -{ - if (force->newton_pair == 0) - error->all(FLERR,"Pair style SNAP requires newton pair on"); - - // need a full neighbor list - - int irequest = neighbor->request(this,instance_me); - neighbor->requests[irequest]->half = 0; - neighbor->requests[irequest]->full = 1; - -#if defined(_OPENMP) -#pragma omp parallel default(none) -#endif - { - int tid = omp_get_thread_num(); - sna[tid]->init(); - } - -} - -/* ---------------------------------------------------------------------- - init for one type pair i,j and corresponding j,i -------------------------------------------------------------------------- */ - -double PairNNSNAP::init_one(int i, int j) -{ - if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set"); - return (radelem[map[i]] + - radelem[map[j]])*rcutfac; -} - -/* ---------------------------------------------------------------------- */ - -void PairNNSNAP::read_files(char *coefffilename, char *paramfilename) -{ - - // open SNAP coefficient file on proc 0 - - FILE *fpcoeff; - if (comm->me == 0) { - fpcoeff = force->open_potential(coefffilename); - if (fpcoeff == NULL) { - char str[128]; - snprintf(str,128,"Cannot open SNAP coefficient file %s",coefffilename); - error->one(FLERR,str); - } - } - - char line[MAXLINE],*ptr; - int eof = 0; - - int n; - int nwords = 0; - while (nwords == 0) { - if (comm->me == 0) { - ptr = fgets(line,MAXLINE,fpcoeff); - if (ptr == NULL) { - eof = 1; - fclose(fpcoeff); - } else n = strlen(line) + 1; - } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - - // strip comment, skip line if blank - - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); - } - if (nwords != 2) - error->all(FLERR,"Incorrect format in SNAP coefficient file"); - - // words = ptrs to all words in line - // strip single and double quotes from words - - char* words[MAXWORD]; - int iword = 0; - words[iword] = strtok(line,"' \t\n\r\f"); - iword = 1; - words[iword] = strtok(NULL,"' \t\n\r\f"); - - nelements = atoi(words[0]); - ncoeffall = atoi(words[1]); - - // set up element lists - - elements = new char*[nelements]; - memory->create(radelem,nelements,"pair:radelem"); - memory->create(wjelem,nelements,"pair:wjelem"); - memory->create(coeffelem,nelements,ncoeffall,"pair:coeffelem"); - - // Loop over nelements blocks in the SNAP coefficient file - - for (int ielem = 0; ielem < nelements; ielem++) { - - if (comm->me == 0) { - ptr = fgets(line,MAXLINE,fpcoeff); - if (ptr == NULL) { - eof = 1; - fclose(fpcoeff); - } else n = strlen(line) + 1; - } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) - error->all(FLERR,"Incorrect format in SNAP coefficient file"); - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - - nwords = atom->count_words(line); - if (nwords != 3) - error->all(FLERR,"Incorrect format in SNAP coefficient file"); - - iword = 0; - words[iword] = strtok(line,"' \t\n\r\f"); - iword = 1; - words[iword] = strtok(NULL,"' \t\n\r\f"); - iword = 2; - words[iword] = strtok(NULL,"' \t\n\r\f"); - - char* elemtmp = words[0]; - int n = strlen(elemtmp) + 1; - elements[ielem] = new char[n]; - strcpy(elements[ielem],elemtmp); - - radelem[ielem] = atof(words[1]); - wjelem[ielem] = atof(words[2]); - - - if (comm->me == 0) { - if (screen) fprintf(screen,"SNAP Element = %s, Radius %g, Weight %g \n", - elements[ielem], radelem[ielem], wjelem[ielem]); - if (logfile) fprintf(logfile,"SNAP Element = %s, Radius %g, Weight %g \n", - elements[ielem], radelem[ielem], wjelem[ielem]); - } - - for (int icoeff = 0; icoeff < ncoeffall; icoeff++) { - if (comm->me == 0) { - ptr = fgets(line,MAXLINE,fpcoeff); - if (ptr == NULL) { - eof = 1; - fclose(fpcoeff); - } else n = strlen(line) + 1; - } - - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) - error->all(FLERR,"Incorrect format in SNAP coefficient file"); - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - - nwords = atom->count_words(line); - if (nwords != 1) - error->all(FLERR,"Incorrect format in SNAP coefficient file"); - - iword = 0; - words[iword] = strtok(line,"' \t\n\r\f"); - - coeffelem[ielem][icoeff] = atof(words[0]); - - } - } - - // set flags for required keywords - - rcutfacflag = 0; - twojmaxflag = 0; - - // Set defaults for optional keywords - - rfac0 = 0.99363; - rmin0 = 0.0; - diagonalstyle = 3; - switchflag = 1; - bzeroflag = 1; - quadraticflag = 0; - - // open SNAP parameter file on proc 0 - - FILE *fpparam; - if (comm->me == 0) { - fpparam = force->open_potential(paramfilename); - if (fpparam == NULL) { - char str[128]; - snprintf(str,128,"Cannot open SNAP parameter file %s",paramfilename); - error->one(FLERR,str); - } - } - - eof = 0; - while (1) { - if (comm->me == 0) { - ptr = fgets(line,MAXLINE,fpparam); - if (ptr == NULL) { - eof = 1; - fclose(fpparam); - } else n = strlen(line) + 1; - } - MPI_Bcast(&eof,1,MPI_INT,0,world); - if (eof) break; - MPI_Bcast(&n,1,MPI_INT,0,world); - MPI_Bcast(line,n,MPI_CHAR,0,world); - - // strip comment, skip line if blank - - if ((ptr = strchr(line,'#'))) *ptr = '\0'; - nwords = atom->count_words(line); - if (nwords == 0) continue; - - if (nwords != 2) - error->all(FLERR,"Incorrect format in SNAP parameter file"); - - // words = ptrs to all words in line - // strip single and double quotes from words - - char* keywd = strtok(line,"' \t\n\r\f"); - char* keyval = strtok(NULL,"' \t\n\r\f"); - - if (comm->me == 0) { - if (screen) fprintf(screen,"SNAP keyword %s %s \n",keywd,keyval); - if (logfile) fprintf(logfile,"SNAP keyword %s %s \n",keywd,keyval); - } - - if (strcmp(keywd,"rcutfac") == 0) { - rcutfac = atof(keyval); - rcutfacflag = 1; - } else if (strcmp(keywd,"twojmax") == 0) { - twojmax = atoi(keyval); - twojmaxflag = 1; - } else if (strcmp(keywd,"rfac0") == 0) - rfac0 = atof(keyval); - else if (strcmp(keywd,"rmin0") == 0) - rmin0 = atof(keyval); - else if (strcmp(keywd,"diagonalstyle") == 0) - diagonalstyle = atoi(keyval); - else if (strcmp(keywd,"switchflag") == 0) - switchflag = atoi(keyval); - else if (strcmp(keywd,"bzeroflag") == 0) - bzeroflag = atoi(keyval); - else if (strcmp(keywd,"quadraticflag") == 0) - quadraticflag = atoi(keyval); - else - error->all(FLERR,"Incorrect SNAP parameter file"); - } - - if (rcutfacflag == 0 || twojmaxflag == 0) - error->all(FLERR,"Incorrect SNAP parameter file"); - -} - -/* ---------------------------------------------------------------------- - memory usage -------------------------------------------------------------------------- */ - -double PairNNSNAP::memory_usage() -{ - double bytes = Pair::memory_usage(); - int n = atom->ntypes+1; - bytes += n*n*sizeof(int); - bytes += n*n*sizeof(double); - bytes += 3*nmax*sizeof(double); - bytes += nmax*sizeof(int); - bytes += (2*ncoeffall)*sizeof(double); - bytes += (ncoeff*3)*sizeof(double); - bytes += sna[0]->memory_usage()*nthreads; - return bytes; -} - From be5d3d6a19345a7378e2df0eaea3b7ad6e1ac660 Mon Sep 17 00:00:00 2001 From: athomps Date: Wed, 12 Jun 2019 17:04:22 -0600 Subject: [PATCH 283/311] Not part of this pull request --- examples/snap/in.nnsnap | 45 ----------------------------------------- 1 file changed, 45 deletions(-) delete mode 100644 examples/snap/in.nnsnap diff --git a/examples/snap/in.nnsnap b/examples/snap/in.nnsnap deleted file mode 100644 index d575757d56..0000000000 --- a/examples/snap/in.nnsnap +++ /dev/null @@ -1,45 +0,0 @@ -# Demonstrate SNAP Ta potential - -# Initialize simulation - -variable nsteps index 100 -variable nrep equal 4 -variable a equal 3.1803 -units metal - -# generate the box and atom positions using a BCC lattice - -variable nx equal ${nrep} -variable ny equal ${nrep} -variable nz equal ${nrep} - -boundary p p p - -lattice bcc $a -region box block 0 ${nx} 0 ${ny} 0 ${nz} -create_box 1 box -create_atoms 1 box - -mass 1 183.84 - -# choose potential - -include W.nnsnap - -# Setup output - -thermo 10 -thermo_modify norm yes - -# Set up NVE run - -timestep 0.5e-3 -neighbor 1.0 bin -neigh_modify once no every 1 delay 0 check yes - -# Run MD - -velocity all create 300.0 4928459 -fix 1 all nve -run ${nsteps} - From c5c03230cb2a1a8649f902b2dce0983c5a309565 Mon Sep 17 00:00:00 2001 From: athomps Date: Wed, 12 Jun 2019 17:05:47 -0600 Subject: [PATCH 284/311] Not part of this pull request --- src/SNAP/pair_nn_snap.h | 184 ---------------------------------------- 1 file changed, 184 deletions(-) delete mode 100644 src/SNAP/pair_nn_snap.h diff --git a/src/SNAP/pair_nn_snap.h b/src/SNAP/pair_nn_snap.h deleted file mode 100644 index f77ddee207..0000000000 --- a/src/SNAP/pair_nn_snap.h +++ /dev/null @@ -1,184 +0,0 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - 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 - -PairStyle(nn/snap,PairNNSNAP) - -#else - -#ifndef LMP_PAIR_NN_SNAP_H -#define LMP_PAIR_NN_SNAP_H - -#include "pair.h" - -namespace LAMMPS_NS { - -class PairNNSNAP : public Pair { -public: - PairNNSNAP(class LAMMPS *); - ~PairNNSNAP(); - virtual void compute(int, int); - void compute_regular(int, int); - void compute_optimized(int, int); - void settings(int, char **); - virtual void coeff(int, char **); - virtual void init_style(); - virtual double init_one(int, int); - virtual double memory_usage(); - - double rcutfac, quadraticflag; // declared public to workaround gcc 4.9 - int ncoeff; // compiler bug, manifest in KOKKOS package - -protected: - int ncoeffq, ncoeffall; - double **bvec, ***dbvec; - class SNA** sna; - int nmax; - int nthreads; - virtual void allocate(); - void read_files(char *, char *); - inline int equal(double* x,double* y); - inline double dist2(double* x,double* y); - double extra_cutoff(); - void load_balance(); - void set_sna_to_shared(int snaid,int i); - void build_per_atom_arrays(); - - void compute_beta(); - - int schedule_user; - double schedule_time_guided; - double schedule_time_dynamic; - - int ncalls_neigh; - int do_load_balance; - int ilistmask_max; - int* ilistmask; - int ghostinum; - int ghostilist_max; - int* ghostilist; - int ghostnumneigh_max; - int* ghostnumneigh; - int* ghostneighs; - int* ghostfirstneigh; - int ghostneighs_total; - int ghostneighs_max; - - int use_optimized; - int use_shared_arrays; - - int i_max; - int i_neighmax; - int i_numpairs; - int **i_pairs; - double ***i_rij; - int **i_inside; - double **i_wj; - double **i_rcutij; - int *i_ninside; - double ****i_uarraytot_r, ****i_uarraytot_i; - double ******i_zarray_r, ******i_zarray_i; - -#ifdef TIMING_INFO - // timespec starttime, endtime; - double timers[4]; -#endif - - double rcutmax; // max cutoff for all elements - int nelements; // # of unique elements - char **elements; // names of unique elements - double *radelem; // element radii - double *wjelem; // elements weights - double **coeffelem; // element bispectrum coefficients - double** beta; // betas for all atoms in list - int *map; // mapping from atom types to elements - int twojmax, diagonalstyle, switchflag, bzeroflag; - double rfac0, rmin0, wj1, wj2; - int rcutfacflag, twojmaxflag; // flags for required parameters - int beta_max; // length of beta -}; - -} - -#endif -#endif - -/* ERROR/WARNING messages: - -E: Communication cutoff too small for SNAP micro load balancing - -This can happen if you change the neighbor skin after your pair_style -command or if your box dimensions grow during a run. You can set the -cutoff explicitly via the comm_modify cutoff command. - -E: Illegal ... command - -Self-explanatory. Check the input script syntax and compare to the -documentation for the command. You can use -echo screen as a -command-line option when running LAMMPS to see the offending line. - -E: Must set number of threads via package omp command - -Because you are using the USER-OMP package, set the number of threads -via its settings, not by the pair_style snap nthreads setting. - -W: Communication cutoff is too small for SNAP micro load balancing, increased to %lf - -Self-explanatory. - -E: Incorrect args for pair coefficients - -Self-explanatory. Check the input script or data file. - -E: Incorrect SNAP coeff file - -UNDOCUMENTED - -E: Incorrect SNAP parameter file - -The file cannot be parsed correctly, check its internal syntax. - -E: Pair style SNAP requires newton pair on - -See the newton command. This is a restriction to use the SNAP -potential. - -E: All pair coeffs are not set - -All pair coefficients must be set in the data file or by the -pair_coeff command before running a simulation. - -E: Cannot open SNAP coefficient file %s - -The specified SNAP coefficient file cannot be opened. Check that the -path and name are correct. - -E: Incorrect format in SNAP coefficient file - -Incorrect number of words per line in the coefficient file. - -E: Cannot open SNAP parameter file %s - -The specified SNAP parameter file cannot be opened. Check that the -path and name are correct. - -E: Incorrect format in SNAP parameter file - -Incorrect number of words per line in the parameter file. - -E: Did not find all elements in SNAP coefficient file. - -One or more elements listed in the pair_coeff command were not found in the coefficient file. - -*/ From 65b87fa2781c5f7dd9a4599193c026d8b37825ae Mon Sep 17 00:00:00 2001 From: "Aidan P. Thompson" Date: Thu, 13 Jun 2019 09:54:56 -0600 Subject: [PATCH 285/311] Updated SNAP in KOKKOS package so it compiles and runs --- src/KOKKOS/pair_snap_kokkos_impl.h | 18 +----- src/KOKKOS/sna_kokkos.h | 8 +-- src/KOKKOS/sna_kokkos_impl.h | 97 ++++++++++++------------------ src/SNAP/sna.cpp | 3 - 4 files changed, 39 insertions(+), 87 deletions(-) diff --git a/src/KOKKOS/pair_snap_kokkos_impl.h b/src/KOKKOS/pair_snap_kokkos_impl.h index bb2a5e9171..0ec4ed0995 100644 --- a/src/KOKKOS/pair_snap_kokkos_impl.h +++ b/src/KOKKOS/pair_snap_kokkos_impl.h @@ -85,9 +85,6 @@ void PairSNAPKokkos::init_style() if (force->newton_pair == 0) error->all(FLERR,"Pair style SNAP requires newton pair on"); - if (diagonalstyle != 3) - error->all(FLERR,"Must use diagonal style = 3 with pair snap/kk"); - // irequest = neigh request made by parent class neighflag = lmp->kokkos->neighflag; @@ -343,23 +340,12 @@ void PairSNAPKokkos::coeff(int narg, char **arg) Kokkos::deep_copy(d_coeffelem,h_coeffelem); Kokkos::deep_copy(d_map,h_map); - // deallocate non-kokkos sna - - if (sna) { - for (int tid = 0; tid(rfac0,twojmax, - diagonalstyle,use_shared_arrays, rmin0,switchflag,bzeroflag); - //if (!use_shared_arrays) - snaKK.grow_rij(nmax); + snaKK.grow_rij(0); snaKK.init(); } @@ -667,8 +653,6 @@ double PairSNAPKokkos::memory_usage() int n = atom->ntypes+1; bytes += n*n*sizeof(int); bytes += n*n*sizeof(double); - bytes += 3*nmax*sizeof(double); - bytes += nmax*sizeof(int); bytes += (2*ncoeffall)*sizeof(double); bytes += (ncoeff*3)*sizeof(double); bytes += snaKK.memory_usage(); diff --git a/src/KOKKOS/sna_kokkos.h b/src/KOKKOS/sna_kokkos.h index 7a80b262b7..40e5fe0ad4 100644 --- a/src/KOKKOS/sna_kokkos.h +++ b/src/KOKKOS/sna_kokkos.h @@ -48,7 +48,7 @@ inline SNAKokkos(const SNAKokkos& sna, const typename Kokkos::TeamPolicy::member_type& team); inline - SNAKokkos(double, int, int, int, double, int, int); + SNAKokkos(double, int, double, int, int); KOKKOS_INLINE_FUNCTION ~SNAKokkos(); @@ -178,12 +178,6 @@ inline double, double, double, // compute_duidrj double, double, double, double, double); - // if number of atoms are small use per atom arrays - // for twojmax arrays, rij, inside, bvec - // this will increase the memory footprint considerably, - // but allows parallel filling and reuse of these arrays - int use_shared_arrays; - // Sets the style for the switching function // 0 = none // 1 = cosine diff --git a/src/KOKKOS/sna_kokkos_impl.h b/src/KOKKOS/sna_kokkos_impl.h index 0f2a450a3d..c43003af97 100644 --- a/src/KOKKOS/sna_kokkos_impl.h +++ b/src/KOKKOS/sna_kokkos_impl.h @@ -27,19 +27,17 @@ static const double MY_PI = 3.14159265358979323846; // pi template inline SNAKokkos::SNAKokkos(double rfac0_in, - int twojmax_in, int diagonalstyle_in, int use_shared_arrays_in, + int twojmax_in, double rmin0_in, int switch_flag_in, int bzero_flag_in) { wself = 1.0; - use_shared_arrays = use_shared_arrays_in; rfac0 = rfac0_in; rmin0 = rmin0_in; switch_flag = switch_flag_in; bzero_flag = bzero_flag_in; twojmax = twojmax_in; - diagonalstyle = diagonalstyle_in; ncoeff = compute_ncoeff(); @@ -70,14 +68,12 @@ KOKKOS_INLINE_FUNCTION SNAKokkos::SNAKokkos(const SNAKokkos& sna, const typename Kokkos::TeamPolicy::member_type& team) { wself = sna.wself; - use_shared_arrays = sna.use_shared_arrays; rfac0 = sna.rfac0; rmin0 = sna.rmin0; switch_flag = sna.switch_flag; bzero_flag = sna.bzero_flag; twojmax = sna.twojmax; - diagonalstyle = sna.diagonalstyle; ncoeff = sna.ncoeff; nmax = sna.nmax; @@ -104,48 +100,45 @@ template inline void SNAKokkos::build_indexlist() { - if(diagonalstyle == 3) { - int idxj_count = 0; - int idxj_full_count = 0; + int idxj_count = 0; + int idxj_full_count = 0; - for(int j1 = 0; j1 <= twojmax; j1++) - for(int j2 = 0; j2 <= j1; j2++) - for(int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) { - if (j >= j1) idxj_count++; - idxj_full_count++; - } + for(int j1 = 0; j1 <= twojmax; j1++) + for(int j2 = 0; j2 <= j1; j2++) + for(int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) { + if (j >= j1) idxj_count++; + idxj_full_count++; + } - // indexList can be changed here + // indexList can be changed here - idxj = Kokkos::View("SNAKokkos::idxj",idxj_count); - idxj_full = Kokkos::View("SNAKokkos::idxj_full",idxj_full_count); - auto h_idxj = Kokkos::create_mirror_view(idxj); - auto h_idxj_full = Kokkos::create_mirror_view(idxj_full); + idxj = Kokkos::View("SNAKokkos::idxj",idxj_count); + idxj_full = Kokkos::View("SNAKokkos::idxj_full",idxj_full_count); + auto h_idxj = Kokkos::create_mirror_view(idxj); + auto h_idxj_full = Kokkos::create_mirror_view(idxj_full); - idxj_max = idxj_count; - idxj_full_max = idxj_full_count; + idxj_max = idxj_count; + idxj_full_max = idxj_full_count; - idxj_count = 0; - idxj_full_count = 0; + idxj_count = 0; + idxj_full_count = 0; - for(int j1 = 0; j1 <= twojmax; j1++) - for(int j2 = 0; j2 <= j1; j2++) - for(int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) { - if (j >= j1) { - h_idxj[idxj_count].j1 = j1; - h_idxj[idxj_count].j2 = j2; - h_idxj[idxj_count].j = j; - idxj_count++; - } - h_idxj_full[idxj_full_count].j1 = j1; - h_idxj_full[idxj_full_count].j2 = j2; - h_idxj_full[idxj_full_count].j = j; - idxj_full_count++; - } - Kokkos::deep_copy(idxj,h_idxj); - Kokkos::deep_copy(idxj_full,h_idxj_full); - - } + for(int j1 = 0; j1 <= twojmax; j1++) + for(int j2 = 0; j2 <= j1; j2++) + for(int j = abs(j1 - j2); j <= MIN(twojmax, j1 + j2); j += 2) { + if (j >= j1) { + h_idxj[idxj_count].j1 = j1; + h_idxj[idxj_count].j2 = j2; + h_idxj[idxj_count].j = j; + idxj_count++; + } + h_idxj_full[idxj_full_count].j1 = j1; + h_idxj_full[idxj_full_count].j2 = j2; + h_idxj_full[idxj_full_count].j = j; + idxj_full_count++; + } + Kokkos::deep_copy(idxj,h_idxj); + Kokkos::deep_copy(idxj_full,h_idxj_full); } /* ---------------------------------------------------------------------- */ @@ -1223,26 +1216,10 @@ int SNAKokkos::compute_ncoeff() ncount = 0; for (int j1 = 0; j1 <= twojmax; j1++) - if(diagonalstyle == 0) { - for (int j2 = 0; j2 <= j1; j2++) - for (int j = abs(j1 - j2); - j <= MIN(twojmax, j1 + j2); j += 2) - ncount++; - } else if(diagonalstyle == 1) { - int j2 = j1; - + for (int j2 = 0; j2 <= j1; j2++) for (int j = abs(j1 - j2); - j <= MIN(twojmax, j1 + j2); j += 2) - ncount++; - } else if(diagonalstyle == 2) { - ncount++; - } else if(diagonalstyle == 3) { - for (int j2 = 0; j2 <= j1; j2++) - for (int j = abs(j1 - j2); - j <= MIN(twojmax, j1 + j2); j += 2) - if (j >= j1) ncount++; - } - + j <= MIN(twojmax, j1 + j2); j += 2) + if (j >= j1) ncount++; return ncount; } diff --git a/src/SNAP/sna.cpp b/src/SNAP/sna.cpp index 75601b8e17..fd25d35677 100644 --- a/src/SNAP/sna.cpp +++ b/src/SNAP/sna.cpp @@ -1208,9 +1208,6 @@ double SNA::memory_usage() bytes += nmax * sizeof(double); // wj bytes += nmax * sizeof(double); // rcutij - printf("SNAP Z list Memory Usage %d\n",idxz_max * sizeof(double) * 2); - printf("SNAP CG list Memory Usage %d\n",idxcg_max * sizeof(double)); - return bytes; } /* ---------------------------------------------------------------------- */ From 67a1a63f5fec8a68f460e07d0c4768838cf83ce2 Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Thu, 13 Jun 2019 10:10:37 -0600 Subject: [PATCH 286/311] Removed old text --- doc/src/compute_sna_atom.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/doc/src/compute_sna_atom.txt b/doc/src/compute_sna_atom.txt index 10e68f5698..9dca6b1c6f 100644 --- a/doc/src/compute_sna_atom.txt +++ b/doc/src/compute_sna_atom.txt @@ -25,7 +25,6 @@ R_1, R_2,... = list of cutoff radii, one for each type (distance units) :l w_1, w_2,... = list of neighbor weights, one for each type :l zero or more keyword/value pairs may be appended :l keyword = {rmin0} or {switchflag} or {bzeroflag} or {quadraticflag} :l -// {3} = subset satisfying j2 <= j1 <= j {rmin0} value = parameter in distance to angle conversion (distance units) {switchflag} value = {0} or {1} {0} = do not use switching function From 5fb505ca8cbb7f0a8be96ae400eff1a0802eff98 Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Thu, 13 Jun 2019 10:24:18 -0600 Subject: [PATCH 287/311] Fixed typo --- doc/src/compute_sna_atom.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/compute_sna_atom.txt b/doc/src/compute_sna_atom.txt index 9dca6b1c6f..518d28aec9 100644 --- a/doc/src/compute_sna_atom.txt +++ b/doc/src/compute_sna_atom.txt @@ -200,7 +200,7 @@ for the number of bispectrum components was removed in 2019, since all potentials use the value of 3, corresponding to the above set of bispectrum components. -ompute {snad/atom} evaluates a per-atom array. The columns are +Compute {snad/atom} evaluates a per-atom array. The columns are arranged into {ntypes} blocks, listed in order of atom type {I}. Each block contains three sub-blocks corresponding to the {x}, {y}, and {z} components of the atom position. Each of these sub-blocks contains From c1550ba29be413c47472974c1caddd3c64f4da66 Mon Sep 17 00:00:00 2001 From: Evangelos Voyiatzis Date: Thu, 13 Jun 2019 22:23:01 +0200 Subject: [PATCH 288/311] implementation of inner/middle/outer for lj/class2 Implementation of inner/middle/outer functions in style lj/class2 to enable integration with respa --- src/CLASS2/pair_lj_class2.cpp | 1117 +++++++++++++++++++++------------ src/CLASS2/pair_lj_class2.h | 142 ++--- 2 files changed, 783 insertions(+), 476 deletions(-) diff --git a/src/CLASS2/pair_lj_class2.cpp b/src/CLASS2/pair_lj_class2.cpp index f2eef55290..dc34f39655 100644 --- a/src/CLASS2/pair_lj_class2.cpp +++ b/src/CLASS2/pair_lj_class2.cpp @@ -1,406 +1,711 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - 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. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_lj_class2.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "neigh_list.h" -#include "math_const.h" -#include "memory.h" -#include "error.h" - -using namespace LAMMPS_NS; -using namespace MathConst; - -/* ---------------------------------------------------------------------- */ - -PairLJClass2::PairLJClass2(LAMMPS *lmp) : Pair(lmp) -{ - writedata = 1; -} - -/* ---------------------------------------------------------------------- */ - -PairLJClass2::~PairLJClass2() -{ - if (copymode) return; - - if (allocated) { - memory->destroy(setflag); - memory->destroy(cutsq); - - memory->destroy(cut); - memory->destroy(epsilon); - memory->destroy(sigma); - memory->destroy(lj1); - memory->destroy(lj2); - memory->destroy(lj3); - memory->destroy(lj4); - memory->destroy(offset); - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJClass2::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,rinv,r2inv,r3inv,r6inv,forcelj,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]) { - r2inv = 1.0/rsq; - rinv = sqrt(r2inv); - r3inv = r2inv*rinv; - r6inv = r3inv*r3inv; - forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); - fpair = factor_lj*forcelj*r2inv; - - 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 = r6inv*(lj3[itype][jtype]*r3inv-lj4[itype][jtype]) - - offset[itype][jtype]; - evdwl *= factor_lj; - } - - 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 PairLJClass2::allocate() -{ - allocated = 1; - int n = atom->ntypes; - - memory->create(setflag,n+1,n+1,"pair:setflag"); - for (int i = 1; i <= n; i++) - for (int j = i; j <= n; j++) - setflag[i][j] = 0; - - memory->create(cutsq,n+1,n+1,"pair:cutsq"); - - memory->create(cut,n+1,n+1,"pair:cut"); - memory->create(epsilon,n+1,n+1,"pair:epsilon"); - memory->create(sigma,n+1,n+1,"pair:sigma"); - memory->create(lj1,n+1,n+1,"pair:lj1"); - memory->create(lj2,n+1,n+1,"pair:lj2"); - memory->create(lj3,n+1,n+1,"pair:lj3"); - memory->create(lj4,n+1,n+1,"pair:lj4"); - memory->create(offset,n+1,n+1,"pair:offset"); -} - -/* ---------------------------------------------------------------------- - global settings -------------------------------------------------------------------------- */ - -void PairLJClass2::settings(int narg, char **arg) -{ - if (narg != 1) error->all(FLERR,"Illegal pair_style command"); - - cut_global = force->numeric(FLERR,arg[0]); - - // reset cutoffs that have been explicitly set - - if (allocated) { - int i,j; - for (i = 1; i <= atom->ntypes; i++) - for (j = i; j <= atom->ntypes; j++) - if (setflag[i][j]) cut[i][j] = cut_global; - } -} - -/* ---------------------------------------------------------------------- - set coeffs for one or more type pairs -------------------------------------------------------------------------- */ - -void PairLJClass2::coeff(int narg, char **arg) -{ - if (narg < 4 || narg > 5) error->all(FLERR,"Incorrect args for pair coefficients"); - if (!allocated) allocate(); - - int ilo,ihi,jlo,jhi; - force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); - force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); - - double epsilon_one = force->numeric(FLERR,arg[2]); - double sigma_one = force->numeric(FLERR,arg[3]); - - double cut_one = cut_global; - if (narg == 5) cut_one = force->numeric(FLERR,arg[4]); - - int count = 0; - for (int i = ilo; i <= ihi; i++) { - for (int j = MAX(jlo,i); j <= jhi; j++) { - epsilon[i][j] = epsilon_one; - sigma[i][j] = sigma_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 PairLJClass2::init_one(int i, int j) -{ - // always mix epsilon,sigma via sixthpower rules - // mix distance via user-defined rule - - if (setflag[i][j] == 0) { - epsilon[i][j] = 2.0 * sqrt(epsilon[i][i]*epsilon[j][j]) * - pow(sigma[i][i],3.0) * pow(sigma[j][j],3.0) / - (pow(sigma[i][i],6.0) + pow(sigma[j][j],6.0)); - sigma[i][j] = - pow((0.5 * (pow(sigma[i][i],6.0) + pow(sigma[j][j],6.0))),1.0/6.0); - cut[i][j] = mix_distance(cut[i][i],cut[j][j]); - } - - lj1[i][j] = 18.0 * epsilon[i][j] * pow(sigma[i][j],9.0); - lj2[i][j] = 18.0 * epsilon[i][j] * pow(sigma[i][j],6.0); - lj3[i][j] = 2.0 * epsilon[i][j] * pow(sigma[i][j],9.0); - lj4[i][j] = 3.0 * epsilon[i][j] * pow(sigma[i][j],6.0); - - if (offset_flag && (cut[i][j] > 0.0)) { - double ratio = sigma[i][j] / cut[i][j]; - offset[i][j] = epsilon[i][j] * (2.0*pow(ratio,9.0) - 3.0*pow(ratio,6.0)); - } else offset[i][j] = 0.0; - - lj1[j][i] = lj1[i][j]; - lj2[j][i] = lj2[i][j]; - lj3[j][i] = lj3[i][j]; - lj4[j][i] = lj4[i][j]; - offset[j][i] = offset[i][j]; - - // compute I,J contribution to long-range tail correction - // count total # of atoms of type I and J via Allreduce - - if (tail_flag) { - int *type = atom->type; - int nlocal = atom->nlocal; - - double count[2],all[2]; - count[0] = count[1] = 0.0; - for (int k = 0; k < nlocal; k++) { - if (type[k] == i) count[0] += 1.0; - if (type[k] == j) count[1] += 1.0; - } - MPI_Allreduce(count,all,2,MPI_DOUBLE,MPI_SUM,world); - - double sig3 = sigma[i][j]*sigma[i][j]*sigma[i][j]; - double sig6 = sig3*sig3; - double rc3 = cut[i][j]*cut[i][j]*cut[i][j]; - double rc6 = rc3*rc3; - etail_ij = 2.0*MY_PI*all[0]*all[1]*epsilon[i][j] * - sig6 * (sig3 - 3.0*rc3) / (3.0*rc6); - ptail_ij = 2.0*MY_PI*all[0]*all[1]*epsilon[i][j] * - sig6 * (sig3 - 2.0*rc3) / rc6; - } - - return cut[i][j]; -} - -/* ---------------------------------------------------------------------- - proc 0 writes to restart file -------------------------------------------------------------------------- */ - -void PairLJClass2::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(&epsilon[i][j],sizeof(double),1,fp); - fwrite(&sigma[i][j],sizeof(double),1,fp); - fwrite(&cut[i][j],sizeof(double),1,fp); - } - } -} - -/* ---------------------------------------------------------------------- - proc 0 reads from restart file, bcasts -------------------------------------------------------------------------- */ - -void PairLJClass2::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) fread(&setflag[i][j],sizeof(int),1,fp); - MPI_Bcast(&setflag[i][j],1,MPI_INT,0,world); - if (setflag[i][j]) { - if (me == 0) { - fread(&epsilon[i][j],sizeof(double),1,fp); - fread(&sigma[i][j],sizeof(double),1,fp); - fread(&cut[i][j],sizeof(double),1,fp); - } - MPI_Bcast(&epsilon[i][j],1,MPI_DOUBLE,0,world); - MPI_Bcast(&sigma[i][j],1,MPI_DOUBLE,0,world); - MPI_Bcast(&cut[i][j],1,MPI_DOUBLE,0,world); - } - } -} - -/* ---------------------------------------------------------------------- - proc 0 writes to restart file -------------------------------------------------------------------------- */ - -void PairLJClass2::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); - fwrite(&tail_flag,sizeof(int),1,fp); -} - -/* ---------------------------------------------------------------------- - proc 0 reads from restart file, bcasts -------------------------------------------------------------------------- */ - -void PairLJClass2::read_restart_settings(FILE *fp) -{ - int me = comm->me; - if (me == 0) { - fread(&cut_global,sizeof(double),1,fp); - fread(&offset_flag,sizeof(int),1,fp); - fread(&mix_flag,sizeof(int),1,fp); - fread(&tail_flag,sizeof(int),1,fp); - } - 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); - MPI_Bcast(&tail_flag,1,MPI_INT,0,world); -} - - -/* ---------------------------------------------------------------------- - proc 0 writes to data file -------------------------------------------------------------------------- */ - -void PairLJClass2::write_data(FILE *fp) -{ - for (int i = 1; i <= atom->ntypes; i++) - fprintf(fp,"%d %g %g\n",i,epsilon[i][i],sigma[i][i]); -} - -/* ---------------------------------------------------------------------- - proc 0 writes all pairs to data file -------------------------------------------------------------------------- */ - -void PairLJClass2::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\n",i,j,epsilon[i][j],sigma[i][j],cut[i][j]); -} - -/* ---------------------------------------------------------------------- */ - -double PairLJClass2::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, - double /*factor_coul*/, double factor_lj, - double &fforce) -{ - double r2inv,rinv,r3inv,r6inv,forcelj,philj; - - r2inv = 1.0/rsq; - rinv = sqrt(r2inv); - r3inv = r2inv*rinv; - r6inv = r3inv*r3inv; - forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); - fforce = factor_lj*forcelj*r2inv; - - philj = r6inv*(lj3[itype][jtype]*r3inv-lj4[itype][jtype]) - - offset[itype][jtype]; - return factor_lj*philj; -} - -/* ---------------------------------------------------------------------- */ - -void *PairLJClass2::extract(const char *str, int &dim) -{ - dim = 2; - if (strcmp(str,"epsilon") == 0) return (void *) epsilon; - if (strcmp(str,"sigma") == 0) return (void *) sigma; - return NULL; -} +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + 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. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include "pair_lj_class2.h" +#include "atom.h" +#include "comm.h" +#include "force.h" +#include "neighbor.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "update.h" +#include "integrate.h" +#include "respa.h" +#include "math_const.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; +using namespace MathConst; + +/* ---------------------------------------------------------------------- */ + +PairLJClass2::PairLJClass2(LAMMPS *lmp) : Pair(lmp) +{ + respa_enable = 1; + writedata = 1; +} + +/* ---------------------------------------------------------------------- */ + +PairLJClass2::~PairLJClass2() +{ + if (copymode) return; + + if (allocated) { + memory->destroy(setflag); + memory->destroy(cutsq); + + memory->destroy(cut); + memory->destroy(epsilon); + memory->destroy(sigma); + memory->destroy(lj1); + memory->destroy(lj2); + memory->destroy(lj3); + memory->destroy(lj4); + memory->destroy(offset); + } +} + +/* ---------------------------------------------------------------------- */ + +void PairLJClass2::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,rinv,r2inv,r3inv,r6inv,forcelj,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]) { + r2inv = 1.0/rsq; + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); + fpair = factor_lj*forcelj*r2inv; + + 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 = r6inv*(lj3[itype][jtype]*r3inv-lj4[itype][jtype]) - + offset[itype][jtype]; + evdwl *= factor_lj; + } + + if (evflag) ev_tally(i,j,nlocal,newton_pair, + evdwl,0.0,fpair,delx,dely,delz); + } + } + } + + if (vflag_fdotr) virial_fdotr_compute(); +} + +/* ---------------------------------------------------------------------- +*/ + +void PairLJClass2::compute_inner() +{ + int i,j,ii,jj,inum,jnum,itype,jtype; + double xtmp,ytmp,ztmp,delx,dely,delz,fpair; + double rsq,rinv,r2inv,r3inv,r6inv,forcelj,factor_lj,rsw; + int *ilist,*jlist,*numneigh,**firstneigh; + + 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_inner; + ilist = list->ilist_inner; + numneigh = list->numneigh_inner; + firstneigh = list->firstneigh_inner; + + double cut_out_on = cut_respa[0]; + double cut_out_off = cut_respa[1]; + + double cut_out_diff = cut_out_off - cut_out_on; + double cut_out_on_sq = cut_out_on*cut_out_on; + double cut_out_off_sq = cut_out_off*cut_out_off; + + // 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; + + if (rsq < cut_out_off_sq) { + r2inv = 1.0/rsq; + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + jtype = type[j]; + forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); + fpair = factor_lj*forcelj*r2inv; + if (rsq > cut_out_on_sq) { + rsw = (sqrt(rsq) - cut_out_on)/cut_out_diff; + fpair *= 1.0 - rsw*rsw*(3.0 - 2.0*rsw); + } + + 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; + } + } + } + } +} + +/* ---------------------------------------------------------------------- */ + +void PairLJClass2::compute_middle() +{ + int i,j,ii,jj,inum,jnum,itype,jtype; + double xtmp,ytmp,ztmp,delx,dely,delz,fpair; + double rsq,rinv,r2inv,r3inv,r6inv,forcelj,factor_lj,rsw; + int *ilist,*jlist,*numneigh,**firstneigh; + + 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_middle; + ilist = list->ilist_middle; + numneigh = list->numneigh_middle; + firstneigh = list->firstneigh_middle; + + double cut_in_off = cut_respa[0]; + double cut_in_on = cut_respa[1]; + double cut_out_on = cut_respa[2]; + double cut_out_off = cut_respa[3]; + + double cut_in_diff = cut_in_on - cut_in_off; + double cut_out_diff = cut_out_off - cut_out_on; + double cut_in_off_sq = cut_in_off*cut_in_off; + double cut_in_on_sq = cut_in_on*cut_in_on; + double cut_out_on_sq = cut_out_on*cut_out_on; + double cut_out_off_sq = cut_out_off*cut_out_off; + + // 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; + + if (rsq < cut_out_off_sq && rsq > cut_in_off_sq) { + r2inv = 1.0/rsq; + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + jtype = type[j]; + forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); + fpair = factor_lj*forcelj*r2inv; + if (rsq < cut_in_on_sq) { + rsw = (sqrt(rsq) - cut_in_off)/cut_in_diff; + fpair *= rsw*rsw*(3.0 - 2.0*rsw); + } + if (rsq > cut_out_on_sq) { + rsw = (sqrt(rsq) - cut_out_on)/cut_out_diff; + fpair *= 1.0 + rsw*rsw*(2.0*rsw - 3.0); + } + + 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; + } + } + } + } +} + +/* ---------------------------------------------------------------------- */ + +void PairLJClass2::compute_outer(int eflag, int vflag) +{ + int i,j,ii,jj,inum,jnum,itype,jtype; + double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fpair; + double rsq,rinv,r2inv,r3inv,r6inv,forcelj,factor_lj,rsw; + 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; + + double cut_in_off = cut_respa[2]; + double cut_in_on = cut_respa[3]; + + double cut_in_diff = cut_in_on - cut_in_off; + double cut_in_off_sq = cut_in_off*cut_in_off; + double cut_in_on_sq = cut_in_on*cut_in_on; + + // 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]) { + if (rsq > cut_in_off_sq) { + r2inv = 1.0/rsq; + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); + fpair = factor_lj*forcelj*r2inv; + if (rsq < cut_in_on_sq) { + rsw = (sqrt(rsq) - cut_in_off)/cut_in_diff; + fpair *= rsw*rsw*(3.0 - 2.0*rsw); + } + + 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) { + r2inv = 1.0/rsq; + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + evdwl = r6inv*(lj3[itype][jtype]*r3inv-lj4[itype][jtype]) - + offset[itype][jtype]; + evdwl *= factor_lj; + } + + if (vflag) { + if (rsq <= cut_in_off_sq) { + r2inv = 1.0/rsq; + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); + fpair = factor_lj*forcelj*r2inv; + } else if (rsq < cut_in_on_sq) + fpair = factor_lj*forcelj*r2inv; + } + + if (evflag) ev_tally(i,j,nlocal,newton_pair, + evdwl,0.0,fpair,delx,dely,delz); + } + } + } +} +/* ---------------------------------------------------------------------- + allocate all arrays +------------------------------------------------------------------------- */ + +void PairLJClass2::allocate() +{ + allocated = 1; + int n = atom->ntypes; + + memory->create(setflag,n+1,n+1,"pair:setflag"); + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + setflag[i][j] = 0; + + memory->create(cutsq,n+1,n+1,"pair:cutsq"); + + memory->create(cut,n+1,n+1,"pair:cut"); + memory->create(epsilon,n+1,n+1,"pair:epsilon"); + memory->create(sigma,n+1,n+1,"pair:sigma"); + memory->create(lj1,n+1,n+1,"pair:lj1"); + memory->create(lj2,n+1,n+1,"pair:lj2"); + memory->create(lj3,n+1,n+1,"pair:lj3"); + memory->create(lj4,n+1,n+1,"pair:lj4"); + memory->create(offset,n+1,n+1,"pair:offset"); +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairLJClass2::settings(int narg, char **arg) +{ + if (narg != 1) error->all(FLERR,"Illegal pair_style command"); + + cut_global = force->numeric(FLERR,arg[0]); + + // reset cutoffs that have been explicitly set + + if (allocated) { + int i,j; + for (i = 1; i <= atom->ntypes; i++) + for (j = i; j <= atom->ntypes; j++) + if (setflag[i][j]) cut[i][j] = cut_global; + } +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more type pairs +------------------------------------------------------------------------- */ + +void PairLJClass2::coeff(int narg, char **arg) +{ + if (narg < 4 || narg > 5) error->all(FLERR,"Incorrect args for pair coefficients"); + if (!allocated) allocate(); + + int ilo,ihi,jlo,jhi; + force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); + force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); + + double epsilon_one = force->numeric(FLERR,arg[2]); + double sigma_one = force->numeric(FLERR,arg[3]); + + double cut_one = cut_global; + if (narg == 5) cut_one = force->numeric(FLERR,arg[4]); + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + for (int j = MAX(jlo,i); j <= jhi; j++) { + epsilon[i][j] = epsilon_one; + sigma[i][j] = sigma_one; + cut[i][j] = cut_one; + setflag[i][j] = 1; + count++; + } + } + + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); +} + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairLJClass2::init_style() +{ + // request regular or rRESPA neighbor list + + int irequest; + int respa = 0; + + if (update->whichflag == 1 && strstr(update->integrate_style,"respa")) { + if (((Respa *) update->integrate)->level_inner >= 0) respa = 1; + if (((Respa *) update->integrate)->level_middle >= 0) respa = 2; + } + + irequest = neighbor->request(this,instance_me); + + if (respa >= 1) { + neighbor->requests[irequest]->respaouter = 1; + neighbor->requests[irequest]->respainner = 1; + } + if (respa == 2) neighbor->requests[irequest]->respamiddle = 1; + + // set rRESPA cutoffs + + if (strstr(update->integrate_style,"respa") && + ((Respa *) update->integrate)->level_inner >= 0) + cut_respa = ((Respa *) update->integrate)->cutoff; + else cut_respa = NULL; +} + +/* ---------------------------------------------------------------------- + init for one type pair i,j and corresponding j,i +------------------------------------------------------------------------- */ + +double PairLJClass2::init_one(int i, int j) +{ + // always mix epsilon,sigma via sixthpower rules + // mix distance via user-defined rule + + if (setflag[i][j] == 0) { + epsilon[i][j] = 2.0 * sqrt(epsilon[i][i]*epsilon[j][j]) * + pow(sigma[i][i],3.0) * pow(sigma[j][j],3.0) / + (pow(sigma[i][i],6.0) + pow(sigma[j][j],6.0)); + sigma[i][j] = + pow((0.5 * (pow(sigma[i][i],6.0) + pow(sigma[j][j],6.0))),1.0/6.0); + cut[i][j] = mix_distance(cut[i][i],cut[j][j]); + } + + lj1[i][j] = 18.0 * epsilon[i][j] * pow(sigma[i][j],9.0); + lj2[i][j] = 18.0 * epsilon[i][j] * pow(sigma[i][j],6.0); + lj3[i][j] = 2.0 * epsilon[i][j] * pow(sigma[i][j],9.0); + lj4[i][j] = 3.0 * epsilon[i][j] * pow(sigma[i][j],6.0); + + if (offset_flag && (cut[i][j] > 0.0)) { + double ratio = sigma[i][j] / cut[i][j]; + offset[i][j] = epsilon[i][j] * (2.0*pow(ratio,9.0) - 3.0*pow(ratio,6.0)); + } else offset[i][j] = 0.0; + + lj1[j][i] = lj1[i][j]; + lj2[j][i] = lj2[i][j]; + lj3[j][i] = lj3[i][j]; + lj4[j][i] = lj4[i][j]; + offset[j][i] = offset[i][j]; + + // check interior rRESPA cutoff + + if (cut_respa && cut[i][j] < cut_respa[3]) + error->all(FLERR,"Pair cutoff < Respa interior cutoff"); + + // compute I,J contribution to long-range tail correction + // count total # of atoms of type I and J via Allreduce + + if (tail_flag) { + int *type = atom->type; + int nlocal = atom->nlocal; + + double count[2],all[2]; + count[0] = count[1] = 0.0; + for (int k = 0; k < nlocal; k++) { + if (type[k] == i) count[0] += 1.0; + if (type[k] == j) count[1] += 1.0; + } + MPI_Allreduce(count,all,2,MPI_DOUBLE,MPI_SUM,world); + + double sig3 = sigma[i][j]*sigma[i][j]*sigma[i][j]; + double sig6 = sig3*sig3; + double rc3 = cut[i][j]*cut[i][j]*cut[i][j]; + double rc6 = rc3*rc3; + etail_ij = 2.0*MY_PI*all[0]*all[1]*epsilon[i][j] * + sig6 * (sig3 - 3.0*rc3) / (3.0*rc6); + ptail_ij = 2.0*MY_PI*all[0]*all[1]*epsilon[i][j] * + sig6 * (sig3 - 2.0*rc3) / rc6; + } + + return cut[i][j]; +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairLJClass2::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(&epsilon[i][j],sizeof(double),1,fp); + fwrite(&sigma[i][j],sizeof(double),1,fp); + fwrite(&cut[i][j],sizeof(double),1,fp); + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairLJClass2::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) fread(&setflag[i][j],sizeof(int),1,fp); + MPI_Bcast(&setflag[i][j],1,MPI_INT,0,world); + if (setflag[i][j]) { + if (me == 0) { + fread(&epsilon[i][j],sizeof(double),1,fp); + fread(&sigma[i][j],sizeof(double),1,fp); + fread(&cut[i][j],sizeof(double),1,fp); + } + MPI_Bcast(&epsilon[i][j],1,MPI_DOUBLE,0,world); + MPI_Bcast(&sigma[i][j],1,MPI_DOUBLE,0,world); + MPI_Bcast(&cut[i][j],1,MPI_DOUBLE,0,world); + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairLJClass2::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); + fwrite(&tail_flag,sizeof(int),1,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairLJClass2::read_restart_settings(FILE *fp) +{ + int me = comm->me; + if (me == 0) { + fread(&cut_global,sizeof(double),1,fp); + fread(&offset_flag,sizeof(int),1,fp); + fread(&mix_flag,sizeof(int),1,fp); + fread(&tail_flag,sizeof(int),1,fp); + } + 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); + MPI_Bcast(&tail_flag,1,MPI_INT,0,world); +} + + +/* ---------------------------------------------------------------------- + proc 0 writes to data file +------------------------------------------------------------------------- */ + +void PairLJClass2::write_data(FILE *fp) +{ + for (int i = 1; i <= atom->ntypes; i++) + fprintf(fp,"%d %g %g\n",i,epsilon[i][i],sigma[i][i]); +} + +/* ---------------------------------------------------------------------- + proc 0 writes all pairs to data file +------------------------------------------------------------------------- */ + +void PairLJClass2::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\n",i,j,epsilon[i][j],sigma[i][j],cut[i][j]); +} + +/* ---------------------------------------------------------------------- */ + +double PairLJClass2::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_lj, + double &fforce) +{ + double r2inv,rinv,r3inv,r6inv,forcelj,philj; + + r2inv = 1.0/rsq; + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); + fforce = factor_lj*forcelj*r2inv; + + philj = r6inv*(lj3[itype][jtype]*r3inv-lj4[itype][jtype]) - + offset[itype][jtype]; + return factor_lj*philj; +} + +/* ---------------------------------------------------------------------- */ + +void *PairLJClass2::extract(const char *str, int &dim) +{ + dim = 2; + if (strcmp(str,"epsilon") == 0) return (void *) epsilon; + if (strcmp(str,"sigma") == 0) return (void *) sigma; + return NULL; +} \ No newline at end of file diff --git a/src/CLASS2/pair_lj_class2.h b/src/CLASS2/pair_lj_class2.h index 02a1f44ff7..47610c0d06 100644 --- a/src/CLASS2/pair_lj_class2.h +++ b/src/CLASS2/pair_lj_class2.h @@ -1,70 +1,72 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - - 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 - -PairStyle(lj/class2,PairLJClass2) - -#else - -#ifndef LMP_PAIR_LJ_CLASS2_H -#define LMP_PAIR_LJ_CLASS2_H - -#include "pair.h" - -namespace LAMMPS_NS { - -class PairLJClass2 : public Pair { - public: - PairLJClass2(class LAMMPS *); - virtual ~PairLJClass2(); - virtual void compute(int, int); - virtual void settings(int, char **); - void coeff(int, char **); - virtual double init_one(int, int); - void write_restart(FILE *); - void read_restart(FILE *); - void write_restart_settings(FILE *); - void read_restart_settings(FILE *); - void write_data(FILE *); - void write_data_all(FILE *); - double single(int, int, int, int, double, double, double, double &); - void *extract(const char *, int &); - - protected: - double cut_global; - double **cut; - double **epsilon,**sigma; - double **lj1,**lj2,**lj3,**lj4,**offset; - - virtual void allocate(); -}; - -} - -#endif -#endif - -/* ERROR/WARNING messages: - -E: Illegal ... command - -Self-explanatory. Check the input script syntax and compare to the -documentation for the command. You can use -echo screen as a -command-line option when running LAMMPS to see the offending line. - -E: Incorrect args for pair coefficients - -Self-explanatory. Check the input script or data file. - -*/ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + 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 + +PairStyle(lj/class2,PairLJClass2) + +#else + +#ifndef LMP_PAIR_LJ_CLASS2_H +#define LMP_PAIR_LJ_CLASS2_H + +#include "pair.h" + +namespace LAMMPS_NS { + +class PairLJClass2 : public Pair { + public: + PairLJClass2(class LAMMPS *); + virtual ~PairLJClass2(); + virtual void compute(int, int); + virtual void settings(int, char **); + void coeff(int, char **); + void init_style(); + virtual double init_one(int, int); + void write_restart(FILE *); + void read_restart(FILE *); + void write_restart_settings(FILE *); + void read_restart_settings(FILE *); + void write_data(FILE *); + void write_data_all(FILE *); + double single(int, int, int, int, double, double, double, double &); + void *extract(const char *, int &); + + void compute_inner(); + void compute_middle(); + void compute_outer(int, int); + + protected: + double cut_global; + double **cut; + double **epsilon,**sigma; + double **lj1,**lj2,**lj3,**lj4,**offset; + double *cut_respa; + + virtual void allocate(); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: +E: Illegal ... command +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. +E: Incorrect args for pair coefficients +Self-explanatory. Check the input script or data file. +E: Pair cutoff < Respa interior cutoff +One or more pairwise cutoffs are too short to use with the specified +rRESPA cutoffs. +*/ \ No newline at end of file From 4d7d3a5d530c7b847dd08ca62aa7d091a94e6139 Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Thu, 13 Jun 2019 15:56:18 -0600 Subject: [PATCH 289/311] Switched algorithm for compute_yi to one based on zlist ordering --- src/SNAP/sna.cpp | 155 +++++++++++++++++++++++------------------------ 1 file changed, 76 insertions(+), 79 deletions(-) diff --git a/src/SNAP/sna.cpp b/src/SNAP/sna.cpp index fd25d35677..ec545c51b2 100644 --- a/src/SNAP/sna.cpp +++ b/src/SNAP/sna.cpp @@ -398,13 +398,18 @@ void SNA::compute_zi() } /* ---------------------------------------------------------------------- - compute Yi from Ui without storing Zi, looping over ylist + compute Yi from Ui without storing Zi, looping over zlist indices ------------------------------------------------------------------------- */ void SNA::compute_yi(const double* beta) { + int j; + int jjz; + int jju; + double betaj; + for(int j = 0; j <= twojmax; j++) { - int jju = idxu_block[j]; + jju = idxu_block[j]; for(int mb = 0; 2*mb <= j; mb++) for(int ma = 0; ma <= j; ma++) { ylist_r[jju] = 0.0; @@ -413,93 +418,85 @@ void SNA::compute_yi(const double* beta) } // end loop over ma, mb } // end loop over j - for(int jjb = 0; jjb < idxb_max; jjb++) { - const int j1b = idxb[jjb].j1; - const int j2b = idxb[jjb].j2; - const int j3b = idxb[jjb].j; + int ma2, mb2; + for(int jjz = 0; jjz < idxz_max; jjz++) { + const int j1 = idxz[jjz].j1; + const int j2 = idxz[jjz].j2; + const int j = idxz[jjz].j; + const int ma1min = idxz[jjz].ma1min; + const int ma2max = idxz[jjz].ma2max; + const int na = idxz[jjz].na; + const int mb1min = idxz[jjz].mb1min; + const int mb2max = idxz[jjz].mb2max; + const int nb = idxz[jjz].nb; - compute_yterm(j1b,j2b,j3b,beta); - compute_yterm(j3b,j2b,j1b,beta); - compute_yterm(j3b,j1b,j2b,beta); + const double* cgblock = cglist + idxcg_block[j1][j2][j]; + int mb = (2 * (mb1min+mb2max) - j1 - j2 + j) / 2; + int ma = (2 * (ma1min+ma2max) - j1 - j2 + j) / 2; - } // end loop over jjb + double ztmp_r = 0.0; + double ztmp_i = 0.0; -} + int jju1 = idxu_block[j1] + (j1+1)*mb1min; + int jju2 = idxu_block[j2] + (j2+1)*mb2max; + int icgb = mb1min*(j2+1) + mb2max; + for(int ib = 0; ib < nb; ib++) { -void SNA::compute_yterm(int j1, int j2, int j, const double* beta) { - double betaj; + double suma1_r = 0.0; + double suma1_i = 0.0; - int jju = idxu_block[j]; - int jjz = idxz_block[j1][j2][j]; + const double* u1_r = &ulisttot_r[jju1]; + const double* u1_i = &ulisttot_i[jju1]; + const double* u2_r = &ulisttot_r[jju2]; + const double* u2_i = &ulisttot_i[jju2]; + + int ma1 = ma1min; + int ma2 = ma2max; + int icga = ma1min*(j2+1) + ma2max; + + for(int ia = 0; ia < na; ia++) { + suma1_r += cgblock[icga] * (u1_r[ma1] * u2_r[ma2] - u1_i[ma1] * u2_i[ma2]); + suma1_i += cgblock[icga] * (u1_r[ma1] * u2_i[ma2] + u1_i[ma1] * u2_r[ma2]); + ma1++; + ma2--; + icga += j2; + } // end loop over ia + + ztmp_r += cgblock[icgb] * suma1_r; + ztmp_i += cgblock[icgb] * suma1_i; + jju1 += j1+1; + jju2 -= j2+1; + icgb += j2; + } // end loop over ib + + // apply to z(j1,j2,j,ma,mb) to unique element of y(j) + // find right y_list[jju] and beta[jjb] entries + // multiply and divide by j+1 factors + // account for multiplicity of 1, 2, or 3 + + const int jju = idxz[jjz].jju; // pick out right beta value - if (j >= j1) { - const int jjb = idxb_block[j1][j2][j]; - betaj = beta[jjb]; - } else if (j >= j2) { - const int jjb = idxb_block[j][j2][j1]; - betaj = beta[jjb]*(j1+1)/(j+1.0); - } else { - const int jjb = idxb_block[j2][j][j1]; - betaj = beta[jjb]*(j1+1)/(j+1.0); - } + if (j >= j1) { + const int jjb = idxb_block[j1][j2][j]; + if (j1 == j) { + if (j2 == j) betaj = 3*beta[jjb]; + else betaj = 2*beta[jjb]; + } else betaj = beta[jjb]; + } else if (j >= j2) { + const int jjb = idxb_block[j][j2][j1]; + if (j2 == j) betaj = 2*beta[jjb]*(j1+1)/(j+1.0); + else betaj = beta[jjb]*(j1+1)/(j+1.0); + } else { + const int jjb = idxb_block[j2][j][j1]; + betaj = beta[jjb]*(j1+1)/(j+1.0); + } - // can replace this with a single loop over jjz + ylist_r[jju] += betaj*ztmp_r; + ylist_i[jju] += betaj*ztmp_i; - for (int mb = 0; 2*mb <= j; mb++) - for (int ma = 0; ma <= j; ma++) { - - const int ma1min = idxz[jjz].ma1min; - const int ma2max = idxz[jjz].ma2max; - const int na = idxz[jjz].na; - const int mb1min = idxz[jjz].mb1min; - const int mb2max = idxz[jjz].mb2max; - const int nb = idxz[jjz].nb; - - const double* cgblock = cglist + idxcg_block[j1][j2][j]; - - double ztmp_r = 0.0; - double ztmp_i = 0.0; - - int jju1 = idxu_block[j1] + (j1+1)*mb1min; - int jju2 = idxu_block[j2] + (j2+1)*mb2max; - int icgb = mb1min*(j2+1) + mb2max; - for(int ib = 0; ib < nb; ib++) { - - double suma1_r = 0.0; - double suma1_i = 0.0; - - const double* u1_r = &ulisttot_r[jju1]; - const double* u1_i = &ulisttot_i[jju1]; - const double* u2_r = &ulisttot_r[jju2]; - const double* u2_i = &ulisttot_i[jju2]; - - int ma1 = ma1min; - int ma2 = ma2max; - int icga = ma1min*(j2+1) + ma2max; - - for(int ia = 0; ia < na; ia++) { - suma1_r += cgblock[icga] * (u1_r[ma1] * u2_r[ma2] - u1_i[ma1] * u2_i[ma2]); - suma1_i += cgblock[icga] * (u1_r[ma1] * u2_i[ma2] + u1_i[ma1] * u2_r[ma2]); - ma1++; - ma2--; - icga += j2; - } // end loop over ia - - ztmp_r += cgblock[icgb] * suma1_r; - ztmp_i += cgblock[icgb] * suma1_i; - jju1 += j1+1; - jju2 -= j2+1; - icgb += j2; - } // end loop over ib - - // printf("jju betaj ztmp ylist %d %g %g %d %d %d %d %d\n",jju,betaj,ztmp_r,j1,j2,j,ma,mb); - ylist_r[jju] += betaj*ztmp_r; - ylist_i[jju] += betaj*ztmp_i; - jjz++; - jju++; - } // end loop over ma, mb + } // end loop over jjz } /* ---------------------------------------------------------------------- From e7116c8680934943ee8b8f513b70357a3e3a105c Mon Sep 17 00:00:00 2001 From: Evangelos Voyiatzis Date: Fri, 14 Jun 2019 09:04:03 +0200 Subject: [PATCH 290/311] Update pair_class2.txt Addition of a few lines in the documentation file --- doc/src/pair_class2.txt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/doc/src/pair_class2.txt b/doc/src/pair_class2.txt index 8d4aa48602..2d6b325fed 100644 --- a/doc/src/pair_class2.txt +++ b/doc/src/pair_class2.txt @@ -155,9 +155,12 @@ All of the lj/class2 pair styles write their information to "binary restart files"_restart.html, so pair_style and pair_coeff commands do not need to be specified in an input script that reads a restart file. -All of the lj/class2 pair styles can only be used via the {pair} -keyword of the "run_style respa"_run_style.html command. They do not -support the {inner}, {middle}, {outer} keywords. +Only the {lj/class2} pair style support the use of the +{inner}, {middle}, and {outer} keywords of the "run_style +respa"_run_style.html command, meaning the pairwise forces can be +partitioned by distance at different levels of the rRESPA hierarchy. +The other styles only support the {pair} keyword of run_style respa. +See the "run_style"_run_style.html command for details. [Restrictions:] From 43e3c1520b21578be3501bf6a168f552ed58af56 Mon Sep 17 00:00:00 2001 From: Evangelos Voyiatzis Date: Fri, 14 Jun 2019 11:50:56 +0200 Subject: [PATCH 291/311] cleaning pair_lj_class2.h of windows line endings removing DOS/Windows style CR/LF line endings --- src/CLASS2/pair_lj_class2.h | 145 ++++++++++++++++++------------------ 1 file changed, 73 insertions(+), 72 deletions(-) diff --git a/src/CLASS2/pair_lj_class2.h b/src/CLASS2/pair_lj_class2.h index 47610c0d06..5bb2a1f0d9 100644 --- a/src/CLASS2/pair_lj_class2.h +++ b/src/CLASS2/pair_lj_class2.h @@ -1,72 +1,73 @@ -/* -*- c++ -*- ---------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - 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 - -PairStyle(lj/class2,PairLJClass2) - -#else - -#ifndef LMP_PAIR_LJ_CLASS2_H -#define LMP_PAIR_LJ_CLASS2_H - -#include "pair.h" - -namespace LAMMPS_NS { - -class PairLJClass2 : public Pair { - public: - PairLJClass2(class LAMMPS *); - virtual ~PairLJClass2(); - virtual void compute(int, int); - virtual void settings(int, char **); - void coeff(int, char **); - void init_style(); - virtual double init_one(int, int); - void write_restart(FILE *); - void read_restart(FILE *); - void write_restart_settings(FILE *); - void read_restart_settings(FILE *); - void write_data(FILE *); - void write_data_all(FILE *); - double single(int, int, int, int, double, double, double, double &); - void *extract(const char *, int &); - - void compute_inner(); - void compute_middle(); - void compute_outer(int, int); - - protected: - double cut_global; - double **cut; - double **epsilon,**sigma; - double **lj1,**lj2,**lj3,**lj4,**offset; - double *cut_respa; - - virtual void allocate(); -}; - -} - -#endif -#endif - -/* ERROR/WARNING messages: -E: Illegal ... command -Self-explanatory. Check the input script syntax and compare to the -documentation for the command. You can use -echo screen as a -command-line option when running LAMMPS to see the offending line. -E: Incorrect args for pair coefficients -Self-explanatory. Check the input script or data file. -E: Pair cutoff < Respa interior cutoff -One or more pairwise cutoffs are too short to use with the specified -rRESPA cutoffs. -*/ \ No newline at end of file +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + 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 + +PairStyle(lj/class2,PairLJClass2) + +#else + +#ifndef LMP_PAIR_LJ_CLASS2_H +#define LMP_PAIR_LJ_CLASS2_H + +#include "pair.h" + +namespace LAMMPS_NS { + +class PairLJClass2 : public Pair { + public: + PairLJClass2(class LAMMPS *); + virtual ~PairLJClass2(); + virtual void compute(int, int); + virtual void settings(int, char **); + void coeff(int, char **); + void init_style(); + virtual double init_one(int, int); + void write_restart(FILE *); + void read_restart(FILE *); + void write_restart_settings(FILE *); + void read_restart_settings(FILE *); + void write_data(FILE *); + void write_data_all(FILE *); + double single(int, int, int, int, double, double, double, double &); + void *extract(const char *, int &); + + void compute_inner(); + void compute_middle(); + void compute_outer(int, int); + + protected: + double cut_global; + double **cut; + double **epsilon,**sigma; + double **lj1,**lj2,**lj3,**lj4,**offset; + double *cut_respa; + + virtual void allocate(); +}; + +} + +#endif +#endif + +/* ERROR/WARNING messages: +E: Illegal ... command +Self-explanatory. Check the input script syntax and compare to the +documentation for the command. You can use -echo screen as a +command-line option when running LAMMPS to see the offending line. +E: Incorrect args for pair coefficients +Self-explanatory. Check the input script or data file. +E: Pair cutoff < Respa interior cutoff +One or more pairwise cutoffs are too short to use with the specified +rRESPA cutoffs. +*/ + From ac57b41b4dd478c1354c7999641ee9d282ccbf75 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 14 Jun 2019 07:13:06 -0400 Subject: [PATCH 292/311] fix line endings and missing EOL at end --- src/CLASS2/pair_lj_class2.cpp | 1422 ++++++++++++++++----------------- src/CLASS2/pair_lj_class2.h | 1 - 2 files changed, 711 insertions(+), 712 deletions(-) diff --git a/src/CLASS2/pair_lj_class2.cpp b/src/CLASS2/pair_lj_class2.cpp index dc34f39655..60b988926a 100644 --- a/src/CLASS2/pair_lj_class2.cpp +++ b/src/CLASS2/pair_lj_class2.cpp @@ -1,711 +1,711 @@ -/* ---------------------------------------------------------------------- - LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator - http://lammps.sandia.gov, Sandia National Laboratories - Steve Plimpton, sjplimp@sandia.gov - 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. -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include "pair_lj_class2.h" -#include "atom.h" -#include "comm.h" -#include "force.h" -#include "neighbor.h" -#include "neigh_list.h" -#include "neigh_request.h" -#include "update.h" -#include "integrate.h" -#include "respa.h" -#include "math_const.h" -#include "memory.h" -#include "error.h" - -using namespace LAMMPS_NS; -using namespace MathConst; - -/* ---------------------------------------------------------------------- */ - -PairLJClass2::PairLJClass2(LAMMPS *lmp) : Pair(lmp) -{ - respa_enable = 1; - writedata = 1; -} - -/* ---------------------------------------------------------------------- */ - -PairLJClass2::~PairLJClass2() -{ - if (copymode) return; - - if (allocated) { - memory->destroy(setflag); - memory->destroy(cutsq); - - memory->destroy(cut); - memory->destroy(epsilon); - memory->destroy(sigma); - memory->destroy(lj1); - memory->destroy(lj2); - memory->destroy(lj3); - memory->destroy(lj4); - memory->destroy(offset); - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJClass2::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,rinv,r2inv,r3inv,r6inv,forcelj,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]) { - r2inv = 1.0/rsq; - rinv = sqrt(r2inv); - r3inv = r2inv*rinv; - r6inv = r3inv*r3inv; - forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); - fpair = factor_lj*forcelj*r2inv; - - 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 = r6inv*(lj3[itype][jtype]*r3inv-lj4[itype][jtype]) - - offset[itype][jtype]; - evdwl *= factor_lj; - } - - if (evflag) ev_tally(i,j,nlocal,newton_pair, - evdwl,0.0,fpair,delx,dely,delz); - } - } - } - - if (vflag_fdotr) virial_fdotr_compute(); -} - -/* ---------------------------------------------------------------------- -*/ - -void PairLJClass2::compute_inner() -{ - int i,j,ii,jj,inum,jnum,itype,jtype; - double xtmp,ytmp,ztmp,delx,dely,delz,fpair; - double rsq,rinv,r2inv,r3inv,r6inv,forcelj,factor_lj,rsw; - int *ilist,*jlist,*numneigh,**firstneigh; - - 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_inner; - ilist = list->ilist_inner; - numneigh = list->numneigh_inner; - firstneigh = list->firstneigh_inner; - - double cut_out_on = cut_respa[0]; - double cut_out_off = cut_respa[1]; - - double cut_out_diff = cut_out_off - cut_out_on; - double cut_out_on_sq = cut_out_on*cut_out_on; - double cut_out_off_sq = cut_out_off*cut_out_off; - - // 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; - - if (rsq < cut_out_off_sq) { - r2inv = 1.0/rsq; - rinv = sqrt(r2inv); - r3inv = r2inv*rinv; - r6inv = r3inv*r3inv; - jtype = type[j]; - forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); - fpair = factor_lj*forcelj*r2inv; - if (rsq > cut_out_on_sq) { - rsw = (sqrt(rsq) - cut_out_on)/cut_out_diff; - fpair *= 1.0 - rsw*rsw*(3.0 - 2.0*rsw); - } - - 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; - } - } - } - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJClass2::compute_middle() -{ - int i,j,ii,jj,inum,jnum,itype,jtype; - double xtmp,ytmp,ztmp,delx,dely,delz,fpair; - double rsq,rinv,r2inv,r3inv,r6inv,forcelj,factor_lj,rsw; - int *ilist,*jlist,*numneigh,**firstneigh; - - 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_middle; - ilist = list->ilist_middle; - numneigh = list->numneigh_middle; - firstneigh = list->firstneigh_middle; - - double cut_in_off = cut_respa[0]; - double cut_in_on = cut_respa[1]; - double cut_out_on = cut_respa[2]; - double cut_out_off = cut_respa[3]; - - double cut_in_diff = cut_in_on - cut_in_off; - double cut_out_diff = cut_out_off - cut_out_on; - double cut_in_off_sq = cut_in_off*cut_in_off; - double cut_in_on_sq = cut_in_on*cut_in_on; - double cut_out_on_sq = cut_out_on*cut_out_on; - double cut_out_off_sq = cut_out_off*cut_out_off; - - // 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; - - if (rsq < cut_out_off_sq && rsq > cut_in_off_sq) { - r2inv = 1.0/rsq; - rinv = sqrt(r2inv); - r3inv = r2inv*rinv; - r6inv = r3inv*r3inv; - jtype = type[j]; - forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); - fpair = factor_lj*forcelj*r2inv; - if (rsq < cut_in_on_sq) { - rsw = (sqrt(rsq) - cut_in_off)/cut_in_diff; - fpair *= rsw*rsw*(3.0 - 2.0*rsw); - } - if (rsq > cut_out_on_sq) { - rsw = (sqrt(rsq) - cut_out_on)/cut_out_diff; - fpair *= 1.0 + rsw*rsw*(2.0*rsw - 3.0); - } - - 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; - } - } - } - } -} - -/* ---------------------------------------------------------------------- */ - -void PairLJClass2::compute_outer(int eflag, int vflag) -{ - int i,j,ii,jj,inum,jnum,itype,jtype; - double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fpair; - double rsq,rinv,r2inv,r3inv,r6inv,forcelj,factor_lj,rsw; - 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; - - double cut_in_off = cut_respa[2]; - double cut_in_on = cut_respa[3]; - - double cut_in_diff = cut_in_on - cut_in_off; - double cut_in_off_sq = cut_in_off*cut_in_off; - double cut_in_on_sq = cut_in_on*cut_in_on; - - // 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]) { - if (rsq > cut_in_off_sq) { - r2inv = 1.0/rsq; - rinv = sqrt(r2inv); - r3inv = r2inv*rinv; - r6inv = r3inv*r3inv; - forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); - fpair = factor_lj*forcelj*r2inv; - if (rsq < cut_in_on_sq) { - rsw = (sqrt(rsq) - cut_in_off)/cut_in_diff; - fpair *= rsw*rsw*(3.0 - 2.0*rsw); - } - - 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) { - r2inv = 1.0/rsq; - rinv = sqrt(r2inv); - r3inv = r2inv*rinv; - r6inv = r3inv*r3inv; - evdwl = r6inv*(lj3[itype][jtype]*r3inv-lj4[itype][jtype]) - - offset[itype][jtype]; - evdwl *= factor_lj; - } - - if (vflag) { - if (rsq <= cut_in_off_sq) { - r2inv = 1.0/rsq; - rinv = sqrt(r2inv); - r3inv = r2inv*rinv; - r6inv = r3inv*r3inv; - forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); - fpair = factor_lj*forcelj*r2inv; - } else if (rsq < cut_in_on_sq) - fpair = factor_lj*forcelj*r2inv; - } - - if (evflag) ev_tally(i,j,nlocal,newton_pair, - evdwl,0.0,fpair,delx,dely,delz); - } - } - } -} -/* ---------------------------------------------------------------------- - allocate all arrays -------------------------------------------------------------------------- */ - -void PairLJClass2::allocate() -{ - allocated = 1; - int n = atom->ntypes; - - memory->create(setflag,n+1,n+1,"pair:setflag"); - for (int i = 1; i <= n; i++) - for (int j = i; j <= n; j++) - setflag[i][j] = 0; - - memory->create(cutsq,n+1,n+1,"pair:cutsq"); - - memory->create(cut,n+1,n+1,"pair:cut"); - memory->create(epsilon,n+1,n+1,"pair:epsilon"); - memory->create(sigma,n+1,n+1,"pair:sigma"); - memory->create(lj1,n+1,n+1,"pair:lj1"); - memory->create(lj2,n+1,n+1,"pair:lj2"); - memory->create(lj3,n+1,n+1,"pair:lj3"); - memory->create(lj4,n+1,n+1,"pair:lj4"); - memory->create(offset,n+1,n+1,"pair:offset"); -} - -/* ---------------------------------------------------------------------- - global settings -------------------------------------------------------------------------- */ - -void PairLJClass2::settings(int narg, char **arg) -{ - if (narg != 1) error->all(FLERR,"Illegal pair_style command"); - - cut_global = force->numeric(FLERR,arg[0]); - - // reset cutoffs that have been explicitly set - - if (allocated) { - int i,j; - for (i = 1; i <= atom->ntypes; i++) - for (j = i; j <= atom->ntypes; j++) - if (setflag[i][j]) cut[i][j] = cut_global; - } -} - -/* ---------------------------------------------------------------------- - set coeffs for one or more type pairs -------------------------------------------------------------------------- */ - -void PairLJClass2::coeff(int narg, char **arg) -{ - if (narg < 4 || narg > 5) error->all(FLERR,"Incorrect args for pair coefficients"); - if (!allocated) allocate(); - - int ilo,ihi,jlo,jhi; - force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); - force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); - - double epsilon_one = force->numeric(FLERR,arg[2]); - double sigma_one = force->numeric(FLERR,arg[3]); - - double cut_one = cut_global; - if (narg == 5) cut_one = force->numeric(FLERR,arg[4]); - - int count = 0; - for (int i = ilo; i <= ihi; i++) { - for (int j = MAX(jlo,i); j <= jhi; j++) { - epsilon[i][j] = epsilon_one; - sigma[i][j] = sigma_one; - cut[i][j] = cut_one; - setflag[i][j] = 1; - count++; - } - } - - if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); -} - -/* ---------------------------------------------------------------------- - init specific to this pair style -------------------------------------------------------------------------- */ - -void PairLJClass2::init_style() -{ - // request regular or rRESPA neighbor list - - int irequest; - int respa = 0; - - if (update->whichflag == 1 && strstr(update->integrate_style,"respa")) { - if (((Respa *) update->integrate)->level_inner >= 0) respa = 1; - if (((Respa *) update->integrate)->level_middle >= 0) respa = 2; - } - - irequest = neighbor->request(this,instance_me); - - if (respa >= 1) { - neighbor->requests[irequest]->respaouter = 1; - neighbor->requests[irequest]->respainner = 1; - } - if (respa == 2) neighbor->requests[irequest]->respamiddle = 1; - - // set rRESPA cutoffs - - if (strstr(update->integrate_style,"respa") && - ((Respa *) update->integrate)->level_inner >= 0) - cut_respa = ((Respa *) update->integrate)->cutoff; - else cut_respa = NULL; -} - -/* ---------------------------------------------------------------------- - init for one type pair i,j and corresponding j,i -------------------------------------------------------------------------- */ - -double PairLJClass2::init_one(int i, int j) -{ - // always mix epsilon,sigma via sixthpower rules - // mix distance via user-defined rule - - if (setflag[i][j] == 0) { - epsilon[i][j] = 2.0 * sqrt(epsilon[i][i]*epsilon[j][j]) * - pow(sigma[i][i],3.0) * pow(sigma[j][j],3.0) / - (pow(sigma[i][i],6.0) + pow(sigma[j][j],6.0)); - sigma[i][j] = - pow((0.5 * (pow(sigma[i][i],6.0) + pow(sigma[j][j],6.0))),1.0/6.0); - cut[i][j] = mix_distance(cut[i][i],cut[j][j]); - } - - lj1[i][j] = 18.0 * epsilon[i][j] * pow(sigma[i][j],9.0); - lj2[i][j] = 18.0 * epsilon[i][j] * pow(sigma[i][j],6.0); - lj3[i][j] = 2.0 * epsilon[i][j] * pow(sigma[i][j],9.0); - lj4[i][j] = 3.0 * epsilon[i][j] * pow(sigma[i][j],6.0); - - if (offset_flag && (cut[i][j] > 0.0)) { - double ratio = sigma[i][j] / cut[i][j]; - offset[i][j] = epsilon[i][j] * (2.0*pow(ratio,9.0) - 3.0*pow(ratio,6.0)); - } else offset[i][j] = 0.0; - - lj1[j][i] = lj1[i][j]; - lj2[j][i] = lj2[i][j]; - lj3[j][i] = lj3[i][j]; - lj4[j][i] = lj4[i][j]; - offset[j][i] = offset[i][j]; - - // check interior rRESPA cutoff - - if (cut_respa && cut[i][j] < cut_respa[3]) - error->all(FLERR,"Pair cutoff < Respa interior cutoff"); - - // compute I,J contribution to long-range tail correction - // count total # of atoms of type I and J via Allreduce - - if (tail_flag) { - int *type = atom->type; - int nlocal = atom->nlocal; - - double count[2],all[2]; - count[0] = count[1] = 0.0; - for (int k = 0; k < nlocal; k++) { - if (type[k] == i) count[0] += 1.0; - if (type[k] == j) count[1] += 1.0; - } - MPI_Allreduce(count,all,2,MPI_DOUBLE,MPI_SUM,world); - - double sig3 = sigma[i][j]*sigma[i][j]*sigma[i][j]; - double sig6 = sig3*sig3; - double rc3 = cut[i][j]*cut[i][j]*cut[i][j]; - double rc6 = rc3*rc3; - etail_ij = 2.0*MY_PI*all[0]*all[1]*epsilon[i][j] * - sig6 * (sig3 - 3.0*rc3) / (3.0*rc6); - ptail_ij = 2.0*MY_PI*all[0]*all[1]*epsilon[i][j] * - sig6 * (sig3 - 2.0*rc3) / rc6; - } - - return cut[i][j]; -} - -/* ---------------------------------------------------------------------- - proc 0 writes to restart file -------------------------------------------------------------------------- */ - -void PairLJClass2::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(&epsilon[i][j],sizeof(double),1,fp); - fwrite(&sigma[i][j],sizeof(double),1,fp); - fwrite(&cut[i][j],sizeof(double),1,fp); - } - } -} - -/* ---------------------------------------------------------------------- - proc 0 reads from restart file, bcasts -------------------------------------------------------------------------- */ - -void PairLJClass2::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) fread(&setflag[i][j],sizeof(int),1,fp); - MPI_Bcast(&setflag[i][j],1,MPI_INT,0,world); - if (setflag[i][j]) { - if (me == 0) { - fread(&epsilon[i][j],sizeof(double),1,fp); - fread(&sigma[i][j],sizeof(double),1,fp); - fread(&cut[i][j],sizeof(double),1,fp); - } - MPI_Bcast(&epsilon[i][j],1,MPI_DOUBLE,0,world); - MPI_Bcast(&sigma[i][j],1,MPI_DOUBLE,0,world); - MPI_Bcast(&cut[i][j],1,MPI_DOUBLE,0,world); - } - } -} - -/* ---------------------------------------------------------------------- - proc 0 writes to restart file -------------------------------------------------------------------------- */ - -void PairLJClass2::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); - fwrite(&tail_flag,sizeof(int),1,fp); -} - -/* ---------------------------------------------------------------------- - proc 0 reads from restart file, bcasts -------------------------------------------------------------------------- */ - -void PairLJClass2::read_restart_settings(FILE *fp) -{ - int me = comm->me; - if (me == 0) { - fread(&cut_global,sizeof(double),1,fp); - fread(&offset_flag,sizeof(int),1,fp); - fread(&mix_flag,sizeof(int),1,fp); - fread(&tail_flag,sizeof(int),1,fp); - } - 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); - MPI_Bcast(&tail_flag,1,MPI_INT,0,world); -} - - -/* ---------------------------------------------------------------------- - proc 0 writes to data file -------------------------------------------------------------------------- */ - -void PairLJClass2::write_data(FILE *fp) -{ - for (int i = 1; i <= atom->ntypes; i++) - fprintf(fp,"%d %g %g\n",i,epsilon[i][i],sigma[i][i]); -} - -/* ---------------------------------------------------------------------- - proc 0 writes all pairs to data file -------------------------------------------------------------------------- */ - -void PairLJClass2::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\n",i,j,epsilon[i][j],sigma[i][j],cut[i][j]); -} - -/* ---------------------------------------------------------------------- */ - -double PairLJClass2::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, - double /*factor_coul*/, double factor_lj, - double &fforce) -{ - double r2inv,rinv,r3inv,r6inv,forcelj,philj; - - r2inv = 1.0/rsq; - rinv = sqrt(r2inv); - r3inv = r2inv*rinv; - r6inv = r3inv*r3inv; - forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); - fforce = factor_lj*forcelj*r2inv; - - philj = r6inv*(lj3[itype][jtype]*r3inv-lj4[itype][jtype]) - - offset[itype][jtype]; - return factor_lj*philj; -} - -/* ---------------------------------------------------------------------- */ - -void *PairLJClass2::extract(const char *str, int &dim) -{ - dim = 2; - if (strcmp(str,"epsilon") == 0) return (void *) epsilon; - if (strcmp(str,"sigma") == 0) return (void *) sigma; - return NULL; -} \ No newline at end of file +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + http://lammps.sandia.gov, Sandia National Laboratories + Steve Plimpton, sjplimp@sandia.gov + 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. +------------------------------------------------------------------------- */ + +#include +#include +#include +#include +#include "pair_lj_class2.h" +#include "atom.h" +#include "comm.h" +#include "force.h" +#include "neighbor.h" +#include "neigh_list.h" +#include "neigh_request.h" +#include "update.h" +#include "integrate.h" +#include "respa.h" +#include "math_const.h" +#include "memory.h" +#include "error.h" + +using namespace LAMMPS_NS; +using namespace MathConst; + +/* ---------------------------------------------------------------------- */ + +PairLJClass2::PairLJClass2(LAMMPS *lmp) : Pair(lmp) +{ + respa_enable = 1; + writedata = 1; +} + +/* ---------------------------------------------------------------------- */ + +PairLJClass2::~PairLJClass2() +{ + if (copymode) return; + + if (allocated) { + memory->destroy(setflag); + memory->destroy(cutsq); + + memory->destroy(cut); + memory->destroy(epsilon); + memory->destroy(sigma); + memory->destroy(lj1); + memory->destroy(lj2); + memory->destroy(lj3); + memory->destroy(lj4); + memory->destroy(offset); + } +} + +/* ---------------------------------------------------------------------- */ + +void PairLJClass2::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,rinv,r2inv,r3inv,r6inv,forcelj,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]) { + r2inv = 1.0/rsq; + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); + fpair = factor_lj*forcelj*r2inv; + + 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 = r6inv*(lj3[itype][jtype]*r3inv-lj4[itype][jtype]) - + offset[itype][jtype]; + evdwl *= factor_lj; + } + + if (evflag) ev_tally(i,j,nlocal,newton_pair, + evdwl,0.0,fpair,delx,dely,delz); + } + } + } + + if (vflag_fdotr) virial_fdotr_compute(); +} + +/* ---------------------------------------------------------------------- +*/ + +void PairLJClass2::compute_inner() +{ + int i,j,ii,jj,inum,jnum,itype,jtype; + double xtmp,ytmp,ztmp,delx,dely,delz,fpair; + double rsq,rinv,r2inv,r3inv,r6inv,forcelj,factor_lj,rsw; + int *ilist,*jlist,*numneigh,**firstneigh; + + 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_inner; + ilist = list->ilist_inner; + numneigh = list->numneigh_inner; + firstneigh = list->firstneigh_inner; + + double cut_out_on = cut_respa[0]; + double cut_out_off = cut_respa[1]; + + double cut_out_diff = cut_out_off - cut_out_on; + double cut_out_on_sq = cut_out_on*cut_out_on; + double cut_out_off_sq = cut_out_off*cut_out_off; + + // 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; + + if (rsq < cut_out_off_sq) { + r2inv = 1.0/rsq; + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + jtype = type[j]; + forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); + fpair = factor_lj*forcelj*r2inv; + if (rsq > cut_out_on_sq) { + rsw = (sqrt(rsq) - cut_out_on)/cut_out_diff; + fpair *= 1.0 - rsw*rsw*(3.0 - 2.0*rsw); + } + + 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; + } + } + } + } +} + +/* ---------------------------------------------------------------------- */ + +void PairLJClass2::compute_middle() +{ + int i,j,ii,jj,inum,jnum,itype,jtype; + double xtmp,ytmp,ztmp,delx,dely,delz,fpair; + double rsq,rinv,r2inv,r3inv,r6inv,forcelj,factor_lj,rsw; + int *ilist,*jlist,*numneigh,**firstneigh; + + 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_middle; + ilist = list->ilist_middle; + numneigh = list->numneigh_middle; + firstneigh = list->firstneigh_middle; + + double cut_in_off = cut_respa[0]; + double cut_in_on = cut_respa[1]; + double cut_out_on = cut_respa[2]; + double cut_out_off = cut_respa[3]; + + double cut_in_diff = cut_in_on - cut_in_off; + double cut_out_diff = cut_out_off - cut_out_on; + double cut_in_off_sq = cut_in_off*cut_in_off; + double cut_in_on_sq = cut_in_on*cut_in_on; + double cut_out_on_sq = cut_out_on*cut_out_on; + double cut_out_off_sq = cut_out_off*cut_out_off; + + // 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; + + if (rsq < cut_out_off_sq && rsq > cut_in_off_sq) { + r2inv = 1.0/rsq; + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + jtype = type[j]; + forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); + fpair = factor_lj*forcelj*r2inv; + if (rsq < cut_in_on_sq) { + rsw = (sqrt(rsq) - cut_in_off)/cut_in_diff; + fpair *= rsw*rsw*(3.0 - 2.0*rsw); + } + if (rsq > cut_out_on_sq) { + rsw = (sqrt(rsq) - cut_out_on)/cut_out_diff; + fpair *= 1.0 + rsw*rsw*(2.0*rsw - 3.0); + } + + 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; + } + } + } + } +} + +/* ---------------------------------------------------------------------- */ + +void PairLJClass2::compute_outer(int eflag, int vflag) +{ + int i,j,ii,jj,inum,jnum,itype,jtype; + double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fpair; + double rsq,rinv,r2inv,r3inv,r6inv,forcelj,factor_lj,rsw; + 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; + + double cut_in_off = cut_respa[2]; + double cut_in_on = cut_respa[3]; + + double cut_in_diff = cut_in_on - cut_in_off; + double cut_in_off_sq = cut_in_off*cut_in_off; + double cut_in_on_sq = cut_in_on*cut_in_on; + + // 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]) { + if (rsq > cut_in_off_sq) { + r2inv = 1.0/rsq; + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); + fpair = factor_lj*forcelj*r2inv; + if (rsq < cut_in_on_sq) { + rsw = (sqrt(rsq) - cut_in_off)/cut_in_diff; + fpair *= rsw*rsw*(3.0 - 2.0*rsw); + } + + 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) { + r2inv = 1.0/rsq; + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + evdwl = r6inv*(lj3[itype][jtype]*r3inv-lj4[itype][jtype]) - + offset[itype][jtype]; + evdwl *= factor_lj; + } + + if (vflag) { + if (rsq <= cut_in_off_sq) { + r2inv = 1.0/rsq; + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); + fpair = factor_lj*forcelj*r2inv; + } else if (rsq < cut_in_on_sq) + fpair = factor_lj*forcelj*r2inv; + } + + if (evflag) ev_tally(i,j,nlocal,newton_pair, + evdwl,0.0,fpair,delx,dely,delz); + } + } + } +} +/* ---------------------------------------------------------------------- + allocate all arrays +------------------------------------------------------------------------- */ + +void PairLJClass2::allocate() +{ + allocated = 1; + int n = atom->ntypes; + + memory->create(setflag,n+1,n+1,"pair:setflag"); + for (int i = 1; i <= n; i++) + for (int j = i; j <= n; j++) + setflag[i][j] = 0; + + memory->create(cutsq,n+1,n+1,"pair:cutsq"); + + memory->create(cut,n+1,n+1,"pair:cut"); + memory->create(epsilon,n+1,n+1,"pair:epsilon"); + memory->create(sigma,n+1,n+1,"pair:sigma"); + memory->create(lj1,n+1,n+1,"pair:lj1"); + memory->create(lj2,n+1,n+1,"pair:lj2"); + memory->create(lj3,n+1,n+1,"pair:lj3"); + memory->create(lj4,n+1,n+1,"pair:lj4"); + memory->create(offset,n+1,n+1,"pair:offset"); +} + +/* ---------------------------------------------------------------------- + global settings +------------------------------------------------------------------------- */ + +void PairLJClass2::settings(int narg, char **arg) +{ + if (narg != 1) error->all(FLERR,"Illegal pair_style command"); + + cut_global = force->numeric(FLERR,arg[0]); + + // reset cutoffs that have been explicitly set + + if (allocated) { + int i,j; + for (i = 1; i <= atom->ntypes; i++) + for (j = i; j <= atom->ntypes; j++) + if (setflag[i][j]) cut[i][j] = cut_global; + } +} + +/* ---------------------------------------------------------------------- + set coeffs for one or more type pairs +------------------------------------------------------------------------- */ + +void PairLJClass2::coeff(int narg, char **arg) +{ + if (narg < 4 || narg > 5) error->all(FLERR,"Incorrect args for pair coefficients"); + if (!allocated) allocate(); + + int ilo,ihi,jlo,jhi; + force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi); + force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi); + + double epsilon_one = force->numeric(FLERR,arg[2]); + double sigma_one = force->numeric(FLERR,arg[3]); + + double cut_one = cut_global; + if (narg == 5) cut_one = force->numeric(FLERR,arg[4]); + + int count = 0; + for (int i = ilo; i <= ihi; i++) { + for (int j = MAX(jlo,i); j <= jhi; j++) { + epsilon[i][j] = epsilon_one; + sigma[i][j] = sigma_one; + cut[i][j] = cut_one; + setflag[i][j] = 1; + count++; + } + } + + if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients"); +} + +/* ---------------------------------------------------------------------- + init specific to this pair style +------------------------------------------------------------------------- */ + +void PairLJClass2::init_style() +{ + // request regular or rRESPA neighbor list + + int irequest; + int respa = 0; + + if (update->whichflag == 1 && strstr(update->integrate_style,"respa")) { + if (((Respa *) update->integrate)->level_inner >= 0) respa = 1; + if (((Respa *) update->integrate)->level_middle >= 0) respa = 2; + } + + irequest = neighbor->request(this,instance_me); + + if (respa >= 1) { + neighbor->requests[irequest]->respaouter = 1; + neighbor->requests[irequest]->respainner = 1; + } + if (respa == 2) neighbor->requests[irequest]->respamiddle = 1; + + // set rRESPA cutoffs + + if (strstr(update->integrate_style,"respa") && + ((Respa *) update->integrate)->level_inner >= 0) + cut_respa = ((Respa *) update->integrate)->cutoff; + else cut_respa = NULL; +} + +/* ---------------------------------------------------------------------- + init for one type pair i,j and corresponding j,i +------------------------------------------------------------------------- */ + +double PairLJClass2::init_one(int i, int j) +{ + // always mix epsilon,sigma via sixthpower rules + // mix distance via user-defined rule + + if (setflag[i][j] == 0) { + epsilon[i][j] = 2.0 * sqrt(epsilon[i][i]*epsilon[j][j]) * + pow(sigma[i][i],3.0) * pow(sigma[j][j],3.0) / + (pow(sigma[i][i],6.0) + pow(sigma[j][j],6.0)); + sigma[i][j] = + pow((0.5 * (pow(sigma[i][i],6.0) + pow(sigma[j][j],6.0))),1.0/6.0); + cut[i][j] = mix_distance(cut[i][i],cut[j][j]); + } + + lj1[i][j] = 18.0 * epsilon[i][j] * pow(sigma[i][j],9.0); + lj2[i][j] = 18.0 * epsilon[i][j] * pow(sigma[i][j],6.0); + lj3[i][j] = 2.0 * epsilon[i][j] * pow(sigma[i][j],9.0); + lj4[i][j] = 3.0 * epsilon[i][j] * pow(sigma[i][j],6.0); + + if (offset_flag && (cut[i][j] > 0.0)) { + double ratio = sigma[i][j] / cut[i][j]; + offset[i][j] = epsilon[i][j] * (2.0*pow(ratio,9.0) - 3.0*pow(ratio,6.0)); + } else offset[i][j] = 0.0; + + lj1[j][i] = lj1[i][j]; + lj2[j][i] = lj2[i][j]; + lj3[j][i] = lj3[i][j]; + lj4[j][i] = lj4[i][j]; + offset[j][i] = offset[i][j]; + + // check interior rRESPA cutoff + + if (cut_respa && cut[i][j] < cut_respa[3]) + error->all(FLERR,"Pair cutoff < Respa interior cutoff"); + + // compute I,J contribution to long-range tail correction + // count total # of atoms of type I and J via Allreduce + + if (tail_flag) { + int *type = atom->type; + int nlocal = atom->nlocal; + + double count[2],all[2]; + count[0] = count[1] = 0.0; + for (int k = 0; k < nlocal; k++) { + if (type[k] == i) count[0] += 1.0; + if (type[k] == j) count[1] += 1.0; + } + MPI_Allreduce(count,all,2,MPI_DOUBLE,MPI_SUM,world); + + double sig3 = sigma[i][j]*sigma[i][j]*sigma[i][j]; + double sig6 = sig3*sig3; + double rc3 = cut[i][j]*cut[i][j]*cut[i][j]; + double rc6 = rc3*rc3; + etail_ij = 2.0*MY_PI*all[0]*all[1]*epsilon[i][j] * + sig6 * (sig3 - 3.0*rc3) / (3.0*rc6); + ptail_ij = 2.0*MY_PI*all[0]*all[1]*epsilon[i][j] * + sig6 * (sig3 - 2.0*rc3) / rc6; + } + + return cut[i][j]; +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairLJClass2::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(&epsilon[i][j],sizeof(double),1,fp); + fwrite(&sigma[i][j],sizeof(double),1,fp); + fwrite(&cut[i][j],sizeof(double),1,fp); + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairLJClass2::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) fread(&setflag[i][j],sizeof(int),1,fp); + MPI_Bcast(&setflag[i][j],1,MPI_INT,0,world); + if (setflag[i][j]) { + if (me == 0) { + fread(&epsilon[i][j],sizeof(double),1,fp); + fread(&sigma[i][j],sizeof(double),1,fp); + fread(&cut[i][j],sizeof(double),1,fp); + } + MPI_Bcast(&epsilon[i][j],1,MPI_DOUBLE,0,world); + MPI_Bcast(&sigma[i][j],1,MPI_DOUBLE,0,world); + MPI_Bcast(&cut[i][j],1,MPI_DOUBLE,0,world); + } + } +} + +/* ---------------------------------------------------------------------- + proc 0 writes to restart file +------------------------------------------------------------------------- */ + +void PairLJClass2::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); + fwrite(&tail_flag,sizeof(int),1,fp); +} + +/* ---------------------------------------------------------------------- + proc 0 reads from restart file, bcasts +------------------------------------------------------------------------- */ + +void PairLJClass2::read_restart_settings(FILE *fp) +{ + int me = comm->me; + if (me == 0) { + fread(&cut_global,sizeof(double),1,fp); + fread(&offset_flag,sizeof(int),1,fp); + fread(&mix_flag,sizeof(int),1,fp); + fread(&tail_flag,sizeof(int),1,fp); + } + 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); + MPI_Bcast(&tail_flag,1,MPI_INT,0,world); +} + + +/* ---------------------------------------------------------------------- + proc 0 writes to data file +------------------------------------------------------------------------- */ + +void PairLJClass2::write_data(FILE *fp) +{ + for (int i = 1; i <= atom->ntypes; i++) + fprintf(fp,"%d %g %g\n",i,epsilon[i][i],sigma[i][i]); +} + +/* ---------------------------------------------------------------------- + proc 0 writes all pairs to data file +------------------------------------------------------------------------- */ + +void PairLJClass2::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\n",i,j,epsilon[i][j],sigma[i][j],cut[i][j]); +} + +/* ---------------------------------------------------------------------- */ + +double PairLJClass2::single(int /*i*/, int /*j*/, int itype, int jtype, double rsq, + double /*factor_coul*/, double factor_lj, + double &fforce) +{ + double r2inv,rinv,r3inv,r6inv,forcelj,philj; + + r2inv = 1.0/rsq; + rinv = sqrt(r2inv); + r3inv = r2inv*rinv; + r6inv = r3inv*r3inv; + forcelj = r6inv * (lj1[itype][jtype]*r3inv - lj2[itype][jtype]); + fforce = factor_lj*forcelj*r2inv; + + philj = r6inv*(lj3[itype][jtype]*r3inv-lj4[itype][jtype]) - + offset[itype][jtype]; + return factor_lj*philj; +} + +/* ---------------------------------------------------------------------- */ + +void *PairLJClass2::extract(const char *str, int &dim) +{ + dim = 2; + if (strcmp(str,"epsilon") == 0) return (void *) epsilon; + if (strcmp(str,"sigma") == 0) return (void *) sigma; + return NULL; +} diff --git a/src/CLASS2/pair_lj_class2.h b/src/CLASS2/pair_lj_class2.h index 5bb2a1f0d9..7680498a07 100644 --- a/src/CLASS2/pair_lj_class2.h +++ b/src/CLASS2/pair_lj_class2.h @@ -70,4 +70,3 @@ E: Pair cutoff < Respa interior cutoff One or more pairwise cutoffs are too short to use with the specified rRESPA cutoffs. */ - From e73b34a5b1fe9937b87e58b62dd20500d6a87a3e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 14 Jun 2019 15:46:28 -0400 Subject: [PATCH 293/311] do not run tally callback setup multiple times per time step --- src/USER-TALLY/README | 2 +- src/USER-TALLY/compute_force_tally.cpp | 5 +++++ src/USER-TALLY/compute_heat_flux_tally.cpp | 5 +++++ src/USER-TALLY/compute_pe_mol_tally.cpp | 5 +++++ src/USER-TALLY/compute_pe_tally.cpp | 5 +++++ src/USER-TALLY/compute_stress_tally.cpp | 5 +++++ 6 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/USER-TALLY/README b/src/USER-TALLY/README index 5f073b4d67..2167c72eb5 100644 --- a/src/USER-TALLY/README +++ b/src/USER-TALLY/README @@ -21,7 +21,7 @@ The person who created this package is Axel Kohlmeyer (akohlmey@gmail.com) at Temple University with a little help and inspiration from Loris Ercole (SISSA/ISAS Trieste), who contributed compute heat/flux/tally. -Additional contributed compute style for this package are welcome. +Additional contributed compute styles for this package are welcome. Please contact Axel, if you have questions about the implementation. diff --git a/src/USER-TALLY/compute_force_tally.cpp b/src/USER-TALLY/compute_force_tally.cpp index 0ec1d332a4..69f0db0b23 100644 --- a/src/USER-TALLY/compute_force_tally.cpp +++ b/src/USER-TALLY/compute_force_tally.cpp @@ -85,6 +85,11 @@ void ComputeForceTally::init() void ComputeForceTally::pair_setup_callback(int, int) { + // run setup only once per time step. + // we may be called from multiple pair styles + + if (did_setup == update->ntimestep) return; + const int ntotal = atom->nlocal + atom->nghost; // grow per-atom storage, if needed diff --git a/src/USER-TALLY/compute_heat_flux_tally.cpp b/src/USER-TALLY/compute_heat_flux_tally.cpp index f8db92a730..0f7979d7ed 100644 --- a/src/USER-TALLY/compute_heat_flux_tally.cpp +++ b/src/USER-TALLY/compute_heat_flux_tally.cpp @@ -87,6 +87,11 @@ void ComputeHeatFluxTally::init() /* ---------------------------------------------------------------------- */ void ComputeHeatFluxTally::pair_setup_callback(int, int) { + // run setup only once per time step. + // we may be called from multiple pair styles + + if (did_setup == update->ntimestep) return; + const int ntotal = atom->nlocal + atom->nghost; // grow per-atom storage, if needed diff --git a/src/USER-TALLY/compute_pe_mol_tally.cpp b/src/USER-TALLY/compute_pe_mol_tally.cpp index 264ddca270..bb0ff89b9e 100644 --- a/src/USER-TALLY/compute_pe_mol_tally.cpp +++ b/src/USER-TALLY/compute_pe_mol_tally.cpp @@ -82,6 +82,11 @@ void ComputePEMolTally::init() void ComputePEMolTally::pair_setup_callback(int, int) { + // run setup only once per time step. + // we may be called from multiple pair styles + + if (did_setup == update->ntimestep) return; + etotal[0] = etotal[1] = etotal[2] = etotal[3] = 0.0; did_setup = update->ntimestep; } diff --git a/src/USER-TALLY/compute_pe_tally.cpp b/src/USER-TALLY/compute_pe_tally.cpp index 3031915ebe..de678f59b8 100644 --- a/src/USER-TALLY/compute_pe_tally.cpp +++ b/src/USER-TALLY/compute_pe_tally.cpp @@ -84,6 +84,11 @@ void ComputePETally::init() void ComputePETally::pair_setup_callback(int, int) { + // run setup only once per time step. + // we may be called from multiple pair styles + + if (did_setup == update->ntimestep) return; + const int ntotal = atom->nlocal + atom->nghost; // grow per-atom storage, if needed diff --git a/src/USER-TALLY/compute_stress_tally.cpp b/src/USER-TALLY/compute_stress_tally.cpp index 8ed40ae8e2..d769b61d9a 100644 --- a/src/USER-TALLY/compute_stress_tally.cpp +++ b/src/USER-TALLY/compute_stress_tally.cpp @@ -87,6 +87,11 @@ void ComputeStressTally::init() void ComputeStressTally::pair_setup_callback(int, int) { + // run setup only once per time step. + // we may be called from multiple pair styles + + if (did_setup == update->ntimestep) return; + const int ntotal = atom->nlocal + atom->nghost; // grow per-atom storage, if needed From 98d9a9a4d2ae8f2cb78ebb069b299f9d3f152e12 Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Sun, 16 Jun 2019 16:09:32 +0100 Subject: [PATCH 294/311] Added call to PLUMED with setStopFlag so that PLUMED can stop LAMMPS if it needs to. This would be needed if you were computing committors for example --- src/USER-PLUMED/fix_plumed.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index 9921747b22..127c22964a 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -406,6 +406,8 @@ void FixPlumed::post_force(int /* vflag */) // pass all pointers to plumed: p->cmd("setStep",&step); + int plumedStopCondition=0; + p->cmd("setStopFlag",&plumedStopCondition); p->cmd("setPositions",&atom->x[0][0]); p->cmd("setBox",&box[0][0]); p->cmd("setForces",&atom->f[0][0]); @@ -478,6 +480,8 @@ void FixPlumed::post_force(int /* vflag */) // do the real calculation: p->cmd("performCalc"); + if(plumedStopCondition) error->all(FLERR,"received instruction from PLUMED to stop"); + // retransform virial to lammps representation and assign it to this // fix's virial. If the energy is biased, Plumed is giving back the full // virial and therefore we have to subtract the initial virial i.e. virial_lmp. From 75e2981bda5b424287bf2a1873f66ffea2151cea Mon Sep 17 00:00:00 2001 From: Gareth Tribello Date: Sun, 16 Jun 2019 17:52:20 +0100 Subject: [PATCH 295/311] Using force_timeout call instead of throwing error for plumed stop --- src/USER-PLUMED/fix_plumed.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/USER-PLUMED/fix_plumed.cpp b/src/USER-PLUMED/fix_plumed.cpp index 127c22964a..8bd0ecca05 100644 --- a/src/USER-PLUMED/fix_plumed.cpp +++ b/src/USER-PLUMED/fix_plumed.cpp @@ -34,6 +34,7 @@ #include "modify.h" #include "pair.h" #include "utils.h" +#include "timer.h" #include "plumed/wrapper/Plumed.h" @@ -480,7 +481,7 @@ void FixPlumed::post_force(int /* vflag */) // do the real calculation: p->cmd("performCalc"); - if(plumedStopCondition) error->all(FLERR,"received instruction from PLUMED to stop"); + if(plumedStopCondition) timer->force_timeout(); // retransform virial to lammps representation and assign it to this // fix's virial. If the energy is biased, Plumed is giving back the full From 4178c5167bac70bd89e4d6ae6d38dee3216ea24a Mon Sep 17 00:00:00 2001 From: jrgissing Date: Sun, 16 Jun 2019 14:47:07 -0600 Subject: [PATCH 296/311] clarify template error/warning message --- doc/src/Errors_messages.txt | 12 ++++++------ doc/src/Errors_warnings.txt | 10 +++++++--- src/USER-MISC/fix_bond_react.cpp | 23 +++++++++++++++-------- src/USER-MISC/fix_bond_react.h | 20 ++++++++------------ 4 files changed, 36 insertions(+), 29 deletions(-) diff --git a/doc/src/Errors_messages.txt b/doc/src/Errors_messages.txt index 7249bfddfd..3475af2226 100644 --- a/doc/src/Errors_messages.txt +++ b/doc/src/Errors_messages.txt @@ -636,12 +636,12 @@ Please ensure reaction map files are properly formatted. :dd {Bond/react: Atom affected by reaction too close to template edge} :dt -This means an atom which changes type during the reaction is too close -to an 'edge' atom defined in the superimpose file. This could cause -incorrect assignment of bonds, angle, etc. Generally, this means you -must include more atoms in your templates, such that there are at -least two atoms between each atom involved in the reaction and an edge -atom. :dd +This means an atom which changes type or connectivity during the +reaction is too close to an 'edge' atom defined in the superimpose +file. This could cause incorrect assignment of bonds, angle, etc. +Generally, this means you must include more atoms in your templates, +such that there are at least two atoms between each atom involved in +the reaction and an edge atom. :dd {Bond/react: Fix bond/react needs ghost atoms from farther away} :dt diff --git a/doc/src/Errors_warnings.txt b/doc/src/Errors_warnings.txt index 164a29e21d..1507d6b22c 100644 --- a/doc/src/Errors_warnings.txt +++ b/doc/src/Errors_warnings.txt @@ -82,10 +82,14 @@ bond/angle/dihedral. LAMMPS computes this by taking the maximum bond length, multiplying by the number of bonds in the interaction (e.g. 3 for a dihedral) and adding a small amount of stretch. :dd -{Bond/react: An atom in 'react #%d' changes bond connectivity but not atom type} :dt +{Bond/react: Atom affected by reaction too close to template edge} :dt -You may want to double-check that all atom types are properly assigned -in the post-reaction template. :dd +This means an atom which changes type or connectivity during the +reaction is too close to an 'edge' atom defined in the superimpose +file. This could cause incorrect assignment of bonds, angle, etc. +Generally, this means you must include more atoms in your templates, +such that there are at least two atoms between each atom involved in +the reaction and an edge atom. :dd {Both groups in compute group/group have a net charge; the Kspace boundary correction to energy will be non-zero} :dt diff --git a/src/USER-MISC/fix_bond_react.cpp b/src/USER-MISC/fix_bond_react.cpp index 7e2a228992..c641912db6 100644 --- a/src/USER-MISC/fix_bond_react.cpp +++ b/src/USER-MISC/fix_bond_react.cpp @@ -157,6 +157,7 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : // this looks excessive // the price of vectorization (all reactions in one command)? + memory->create(rxn_name,nreacts,MAXLINE,"bond/react:rxn_name"); memory->create(nevery,nreacts,"bond/react:nevery"); memory->create(cutsq,nreacts,2,"bond/react:cutsq"); memory->create(unreacted_mol,nreacts,"bond/react:unreacted_mol"); @@ -207,8 +208,7 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) : iarg++; - iarg++; // read in reaction name here - //for example, rxn_name[rxn] = ... + rxn_name[rxn] = arg[iarg++]; int igroup = group->find(arg[iarg++]); if (igroup == -1) error->all(FLERR,"Could not find fix group ID"); @@ -1720,8 +1720,11 @@ void FixBondReact::find_landlocked_atoms(int myrxn) // bad molecule templates check // if atoms change types, but aren't landlocked, that's bad for (int i = 0; i < twomol->natoms; i++) { - if (twomol->type[i] != onemol->type[equivalences[i][1][myrxn]-1] && landlocked_atoms[i][myrxn] == 0) - error->one(FLERR,"Bond/react: Atom affected by reaction too close to template edge"); + if (twomol->type[i] != onemol->type[equivalences[i][1][myrxn]-1] && landlocked_atoms[i][myrxn] == 0) { + char str[128]; + snprintf(str,128,"Bond/react: Atom affected by reaction %s too close to template edge",rxn_name[myrxn]); + error->all(FLERR,str); + } } // additionally, if a bond changes type, but neither involved atom is landlocked, bad @@ -1737,7 +1740,9 @@ void FixBondReact::find_landlocked_atoms(int myrxn) onemol_batom = onemol->bond_atom[onemol_atomi-1][m]; if (onemol_batom == equivalences[twomol_atomj-1][1][myrxn]) { if (twomol->bond_type[i][j] != onemol->bond_type[onemol_atomi-1][m]) { - error->one(FLERR,"Bond/react: Bond type affected by reaction too close to template edge"); + char str[128]; + snprintf(str,128,"Bond/react: Atom affected by reaction %s too close to template edge",rxn_name[myrxn]); + error->all(FLERR,str); } } } @@ -1747,7 +1752,9 @@ void FixBondReact::find_landlocked_atoms(int myrxn) onemol_batom = onemol->bond_atom[onemol_atomj-1][m]; if (onemol_batom == equivalences[i][1][myrxn]) { if (twomol->bond_type[i][j] != onemol->bond_type[onemol_atomj-1][m]) { - error->one(FLERR,"Bond/react: Bond type affected by reaction too close to template edge"); + char str[128]; + snprintf(str,128,"Bond/react: Atom affected by reaction %s too close to template edge",rxn_name[myrxn]); + error->all(FLERR,str); } } } @@ -1763,7 +1770,7 @@ void FixBondReact::find_landlocked_atoms(int myrxn) int ii = reverse_equiv[i][1][myrxn] - 1; for (int j = 0; j < twomol_nxspecial[ii][0]; j++) { if (delete_atoms[equivalences[twomol_xspecial[ii][j]-1][1][myrxn]-1][myrxn] == 0) { - error->one(FLERR,"Bond/react: A deleted atom cannot remain bonded to an atom that is not deleted"); + error->all(FLERR,"Bond/react: A deleted atom cannot remain bonded to an atom that is not deleted"); } } } @@ -1774,7 +1781,7 @@ void FixBondReact::find_landlocked_atoms(int myrxn) for (int i = 0; i < twomol->natoms; i++) { if (twomol_nxspecial[i][0] != onemol_nxspecial[equivalences[i][1][myrxn]-1][0] && landlocked_atoms[i][myrxn] == 0) { char str[128]; - sprintf(str,"Bond/react: An atom in 'react #%d' changes bond connectivity but not atom type",myrxn+1); + snprintf(str,128,"Bond/react: Atom affected by reaction %s too close to template edge",rxn_name[myrxn]); error->warning(FLERR,str); break; } diff --git a/src/USER-MISC/fix_bond_react.h b/src/USER-MISC/fix_bond_react.h index 36fc13ae21..1ac8d624a9 100644 --- a/src/USER-MISC/fix_bond_react.h +++ b/src/USER-MISC/fix_bond_react.h @@ -67,6 +67,7 @@ class FixBondReact : public Fix { int *groupbits; int rxnID; // integer ID for identifying current bond/react + char **rxn_name; // name of reaction int *reaction_count; int *reaction_count_total; int nmax; // max num local atoms @@ -213,14 +214,14 @@ E: Bond/react: Unknown section in map file Please ensure reaction map files are properly formatted. -E: Bond/react: Atom affected by reaction too close to template edge +E or W: Bond/react: Atom affected by reaction %s too close to template edge -This means an atom which changes type during the reaction is too close -to an 'edge' atom defined in the superimpose file. This could cause -incorrect assignment of bonds, angle, etc. Generally, this means you -must include more atoms in your templates, such that there are at -least two atoms between each atom involved in the reaction and an edge -atom. +This means an atom which changes type or connectivity during the +reaction is too close to an 'edge' atom defined in the superimpose +file. This could cause incorrect assignment of bonds, angle, etc. +Generally, this means you must include more atoms in your templates, +such that there are at least two atoms between each atom involved in +the reaction and an edge atom. E: Bond/react: Fix bond/react needs ghost atoms from farther away @@ -233,11 +234,6 @@ E: Bond/react: A deleted atom cannot remain bonded to an atom that is not delete Self-explanatory. -W: Bond/react: An atom in 'react #%d' changes bond connectivity but not atom type - -You may want to double-check that all atom types are properly assigned -in the post-reaction template. - E: Bond/react special bond generation overflow The number of special bonds per-atom created by a reaction exceeds the From fd93c27dcb2ddb01f86c03b2ea13e344e2e29585 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 17 Jun 2019 07:35:30 -0400 Subject: [PATCH 297/311] make valgrind happy by fully initializing line buffer for thermo output --- src/thermo.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/thermo.cpp b/src/thermo.cpp index 3e777edf82..f4ab7b0779 100644 --- a/src/thermo.cpp +++ b/src/thermo.cpp @@ -113,9 +113,11 @@ Thermo::Thermo(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) if (strcmp(style,"one") == 0) { line = new char[256+6*64]; + memset(line,0,256+6*64); strcpy(line,ONE); } else if (strcmp(style,"multi") == 0) { line = new char[256+12*64]; + memset(line,0,256+12*64); strcpy(line,MULTI); lineflag = MULTILINE; From 4c0cd0a019d4dbd0e8367cb02b3530ad97ace525 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 17 Jun 2019 07:36:03 -0400 Subject: [PATCH 298/311] remove memory leak by freeing custom MPI data types --- src/USER-LB/fix_lb_fluid.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/USER-LB/fix_lb_fluid.cpp b/src/USER-LB/fix_lb_fluid.cpp index 6f1dfc9982..9e6b9c72f1 100644 --- a/src/USER-LB/fix_lb_fluid.cpp +++ b/src/USER-LB/fix_lb_fluid.cpp @@ -547,6 +547,18 @@ FixLbFluid::~FixLbFluid() } else { delete [] NodeArea; } + MPI_Type_free(&passxf); + MPI_Type_free(&passyf); + MPI_Type_free(&passzf); + MPI_Type_free(&passxu); + MPI_Type_free(&passyu); + MPI_Type_free(&passzf); + MPI_Type_free(&passxrho); + MPI_Type_free(&passyrho); + MPI_Type_free(&passzrho); + MPI_Type_free(&passxtemp); + MPI_Type_free(&passytemp); + MPI_Type_free(&passztemp); } int FixLbFluid::setmask() From 92615bda3aa3e02f525648fb155684a433cc8a8e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 17 Jun 2019 07:38:11 -0400 Subject: [PATCH 299/311] update kolmogorov/crespi/full example input for recent change in REBO --- examples/USER/misc/kolmogorov_crespi_full/CH.rebo | 1 + examples/USER/misc/kolmogorov_crespi_full/in.bilayer-graphene | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 120000 examples/USER/misc/kolmogorov_crespi_full/CH.rebo diff --git a/examples/USER/misc/kolmogorov_crespi_full/CH.rebo b/examples/USER/misc/kolmogorov_crespi_full/CH.rebo new file mode 120000 index 0000000000..c5a6a40100 --- /dev/null +++ b/examples/USER/misc/kolmogorov_crespi_full/CH.rebo @@ -0,0 +1 @@ +../../../../potentials/CH.rebo \ No newline at end of file diff --git a/examples/USER/misc/kolmogorov_crespi_full/in.bilayer-graphene b/examples/USER/misc/kolmogorov_crespi_full/in.bilayer-graphene index 63ac92cb05..c3e59337de 100644 --- a/examples/USER/misc/kolmogorov_crespi_full/in.bilayer-graphene +++ b/examples/USER/misc/kolmogorov_crespi_full/in.bilayer-graphene @@ -18,7 +18,7 @@ group adsorbate type 2 ######################## Potential defition ######################## pair_style hybrid/overlay rebo kolmogorov/crespi/full 16.0 #################################################################### -pair_coeff * * rebo CH.airebo NULL C # chemical +pair_coeff * * rebo CH.rebo NULL C # chemical pair_coeff * * kolmogorov/crespi/full CC.KC-full C C # long range #################################################################### # Neighbor update settings From b1458ceebfe3c15fb827b20e9b81c179b0875b8f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 17 Jun 2019 07:42:18 -0400 Subject: [PATCH 300/311] fix typo --- src/USER-LB/fix_lb_fluid.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/USER-LB/fix_lb_fluid.cpp b/src/USER-LB/fix_lb_fluid.cpp index 9e6b9c72f1..31c54aee76 100644 --- a/src/USER-LB/fix_lb_fluid.cpp +++ b/src/USER-LB/fix_lb_fluid.cpp @@ -552,7 +552,7 @@ FixLbFluid::~FixLbFluid() MPI_Type_free(&passzf); MPI_Type_free(&passxu); MPI_Type_free(&passyu); - MPI_Type_free(&passzf); + MPI_Type_free(&passzu); MPI_Type_free(&passxrho); MPI_Type_free(&passyrho); MPI_Type_free(&passzrho); From 5fc3081a55eb0555a3bab32b11ea178f04616645 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 17 Jun 2019 14:23:30 -0400 Subject: [PATCH 301/311] make building tools (msi2lmp, chain.x) an option, which is off by default --- cmake/CMakeLists.txt | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 8f7ac9a6e7..67561c536b 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -106,6 +106,8 @@ if(BUILD_LIB) endif() endif() +option(BUILD_TOOLS "Build and install LAMMPS tools (msi2lmp, binary2txt, chain)" OFF) + if(NOT BUILD_EXE AND NOT BUILD_LIB) message(FATAL_ERROR "You need to at least enable one of two following options: BUILD_LIB or BUILD_EXE") endif() @@ -518,6 +520,18 @@ if(BUILD_EXE) install(TARGETS lmp DESTINATION ${CMAKE_INSTALL_BINDIR}) install(FILES ${LAMMPS_DOC_DIR}/lammps.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 RENAME ${LAMMPS_BINARY}.1) +if(BUILD_TOOLS) + add_executable(binary2txt ${LAMMPS_TOOLS_DIR}/binary2txt.cpp) + install(TARGETS binary2txt DESTINATION ${CMAKE_INSTALL_BINDIR}) + + # ninja-build currently does not support fortran. thus we skip building this tool + if(NOT CMAKE_GENERATOR STREQUAL "Ninja") + message(STATUS "Skipping building 'chain.x' with Ninja build tool due to lack of Fortran support") + enable_language(Fortran) + add_executable(chain.x ${LAMMPS_TOOLS_DIR}/chain.f) + target_link_libraries(chain.x ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES}) + endif() + enable_language(C) get_filename_component(MSI2LMP_SOURCE_DIR ${LAMMPS_TOOLS_DIR}/msi2lmp/src ABSOLUTE) file(GLOB MSI2LMP_SOURCES ${MSI2LMP_SOURCE_DIR}/[^.]*.c) @@ -525,7 +539,6 @@ if(BUILD_EXE) target_link_libraries(msi2lmp m) install(TARGETS msi2lmp DESTINATION ${CMAKE_INSTALL_BINDIR}) install(FILES ${LAMMPS_DOC_DIR}/msi2lmp.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) - endif() include(Documentation) From f4f4a7c85013b037947e9617e237f5a67c757273 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 17 Jun 2019 14:24:51 -0400 Subject: [PATCH 302/311] adapt for Ninja build tool, which cannot handle sub-builds and fortran so builds of downloaded libraries are not supported right now --- cmake/CMakeLists.txt | 4 ++++ cmake/Modules/Packages/KIM.cmake | 3 +++ cmake/Modules/Packages/LATTE.cmake | 3 +++ cmake/Modules/Packages/USER-PLUMED.cmake | 3 +++ cmake/Modules/Packages/VORONOI.cmake | 3 +++ 5 files changed, 16 insertions(+) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 67561c536b..7f212ac48e 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -224,6 +224,9 @@ if(PKG_MSCG OR PKG_USER-ATC OR PKG_USER-AWPMD OR PKG_USER-PLUMED OR PKG_USER-QUI find_package(LAPACK) find_package(BLAS) if(NOT LAPACK_FOUND OR NOT BLAS_FOUND) + if(CMAKE_GENERATOR STREQUAL "Ninja") + status(FATAL_ERROR "Cannot build internal linear algebra library with Ninja build tool due to lack for Fortran support") + endif() enable_language(Fortran) file(GLOB LAPACK_SOURCES ${LAMMPS_LIB_SOURCE_DIR}/linalg/[^.]*.[fF]) add_library(linalg STATIC ${LAPACK_SOURCES}) @@ -519,6 +522,7 @@ if(BUILD_EXE) set_target_properties(lmp PROPERTIES OUTPUT_NAME ${LAMMPS_BINARY}) install(TARGETS lmp DESTINATION ${CMAKE_INSTALL_BINDIR}) install(FILES ${LAMMPS_DOC_DIR}/lammps.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 RENAME ${LAMMPS_BINARY}.1) +endif() if(BUILD_TOOLS) add_executable(binary2txt ${LAMMPS_TOOLS_DIR}/binary2txt.cpp) diff --git a/cmake/Modules/Packages/KIM.cmake b/cmake/Modules/Packages/KIM.cmake index 21ebd0f8e0..8815f73881 100644 --- a/cmake/Modules/Packages/KIM.cmake +++ b/cmake/Modules/Packages/KIM.cmake @@ -13,6 +13,9 @@ if(PKG_KIM) endif() option(DOWNLOAD_KIM "Download KIM-API from OpenKIM instead of using an already installed one" ${DOWNLOAD_KIM_DEFAULT}) if(DOWNLOAD_KIM) + if(CMAKE_GENERATOR STREQUAL "Ninja") + message(FATAL_ERROR "Cannot build downloaded KIM-API library with Ninja build tool") + endif() message(STATUS "KIM-API download requested - we will build our own") enable_language(C) enable_language(Fortran) diff --git a/cmake/Modules/Packages/LATTE.cmake b/cmake/Modules/Packages/LATTE.cmake index a709561562..de7116780b 100644 --- a/cmake/Modules/Packages/LATTE.cmake +++ b/cmake/Modules/Packages/LATTE.cmake @@ -11,6 +11,9 @@ if(PKG_LATTE) if (CMAKE_VERSION VERSION_LESS "3.7") # due to SOURCE_SUBDIR message(FATAL_ERROR "For downlading LATTE you need at least cmake-3.7") endif() + if(CMAKE_GENERATOR STREQUAL "Ninja") + message(FATAL_ERROR "Cannot build downloaded LATTE library with Ninja build tool") + endif() message(STATUS "LATTE download requested - we will build our own") include(ExternalProject) ExternalProject_Add(latte_build diff --git a/cmake/Modules/Packages/USER-PLUMED.cmake b/cmake/Modules/Packages/USER-PLUMED.cmake index 422527dd06..500558fc72 100644 --- a/cmake/Modules/Packages/USER-PLUMED.cmake +++ b/cmake/Modules/Packages/USER-PLUMED.cmake @@ -17,6 +17,9 @@ if(PKG_USER-PLUMED) option(DOWNLOAD_PLUMED "Download Plumed package instead of using an already installed one" ${DOWNLOAD_PLUMED_DEFAULT}) if(DOWNLOAD_PLUMED) + if(CMAKE_GENERATOR STREQUAL "Ninja") + message(FATAL_ERROR "Cannot build downloaded Plumed library with Ninja build tool") + endif() if(BUILD_MPI) set(PLUMED_CONFIG_MPI "--enable-mpi") set(PLUMED_CONFIG_CC ${CMAKE_MPI_C_COMPILER}) diff --git a/cmake/Modules/Packages/VORONOI.cmake b/cmake/Modules/Packages/VORONOI.cmake index df4551b6e7..5ce974a7ae 100644 --- a/cmake/Modules/Packages/VORONOI.cmake +++ b/cmake/Modules/Packages/VORONOI.cmake @@ -7,6 +7,9 @@ if(PKG_VORONOI) endif() option(DOWNLOAD_VORO "Download and compile the Voro++ library instead of using an already installed one" ${DOWNLOAD_VORO_DEFAULT}) if(DOWNLOAD_VORO) + if(CMAKE_GENERATOR STREQUAL "Ninja") + message(FATAL_ERROR "Cannot build downloaded Voro++ library with Ninja build tool") + endif() message(STATUS "Voro++ download requested - we will build our own") include(ExternalProject) From e9666f585f1924142e2c044c53d765806d35076d Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 17 Jun 2019 15:46:54 -0400 Subject: [PATCH 303/311] update log files for kolmogorov/crespi/full potential --- ...++.1 => log.5Jun19.bilayer-graphene.g++.1} | 51 ++++++++++--------- ...++.4 => log.5Jun19.bilayer-graphene.g++.4} | 51 ++++++++++--------- 2 files changed, 54 insertions(+), 48 deletions(-) rename examples/USER/misc/kolmogorov_crespi_full/{log.16Mar18.bilayer-graphene.g++.1 => log.5Jun19.bilayer-graphene.g++.1} (59%) rename examples/USER/misc/kolmogorov_crespi_full/{log.16Mar18.bilayer-graphene.g++.4 => log.5Jun19.bilayer-graphene.g++.4} (59%) diff --git a/examples/USER/misc/kolmogorov_crespi_full/log.16Mar18.bilayer-graphene.g++.1 b/examples/USER/misc/kolmogorov_crespi_full/log.5Jun19.bilayer-graphene.g++.1 similarity index 59% rename from examples/USER/misc/kolmogorov_crespi_full/log.16Mar18.bilayer-graphene.g++.1 rename to examples/USER/misc/kolmogorov_crespi_full/log.5Jun19.bilayer-graphene.g++.1 index a06b3effdd..c74f9956a2 100644 --- a/examples/USER/misc/kolmogorov_crespi_full/log.16Mar18.bilayer-graphene.g++.1 +++ b/examples/USER/misc/kolmogorov_crespi_full/log.5Jun19.bilayer-graphene.g++.1 @@ -1,4 +1,5 @@ -LAMMPS (8 Mar 2018) +LAMMPS (5 Jun 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) using 1 OpenMP thread(s) per MPI task # Initialization units metal @@ -21,6 +22,8 @@ read_data Bi_gr_AB_stack_2L_noH_300K.data 0 = max # of 1-3 neighbors 0 = max # of 1-4 neighbors 1 = max # of special neighbors + special bonds CPU = 0.000353813 secs + read_data CPU = 0.0043292 secs mass 1 12.0107 # carbon mass (g/mole) | membrane mass 2 12.0107 # carbon mass (g/mole) | adsorbate # Separate atom groups @@ -32,8 +35,8 @@ group adsorbate type 2 ######################## Potential defition ######################## pair_style hybrid/overlay rebo kolmogorov/crespi/full 16.0 #################################################################### -pair_coeff * * rebo CH.airebo NULL C # chemical -Reading potential file CH.airebo with DATE: 2011-10-25 +pair_coeff * * rebo CH.rebo NULL C # chemical +Reading potential file CH.rebo with DATE: 2018-7-3 pair_coeff * * kolmogorov/crespi/full CC.KC-full C C # long range #################################################################### # Neighbor update settings @@ -92,32 +95,32 @@ Neighbor list info ... bin: standard Per MPI rank memory allocation (min/avg/max) = 16.96 | 16.96 | 16.96 Mbytes Step TotEng PotEng KinEng v_REBO v_KC Temp v_adsxcom v_adsycom v_adszcom v_adsvxcom v_adsvycom v_adsvzcom - 0 -5025.3867722725 -5040.0767391239 14.6899668514 -5011.2636297759 -28.8131093480 83.6251135127 22.0155657205 20.2812150219 3.4623630945 0.0282287195 0.0535565745 0.2193320108 - 100 -5025.3962433293 -5041.3829775585 15.9867342292 -5012.5109377234 -28.8720398351 91.0071804888 22.0181858078 20.2867731676 3.4456714402 0.0241525932 0.0573807336 -0.5235069014 - 200 -5025.3942568861 -5041.9638220670 16.5695651809 -5012.7804299195 -29.1833921475 94.3250439654 22.0203529515 20.2926376511 3.3740502908 0.0186420748 0.0595018114 -0.7867265577 - 300 -5025.3919463074 -5040.9705419367 15.5785956293 -5012.0510295102 -28.9195124265 88.6837826830 22.0218424095 20.2984380400 3.3199036613 0.0106250874 0.0544668352 -0.1513745908 - 400 -5025.3965376948 -5041.6929964127 16.2964587179 -5012.6418090677 -29.0511873450 92.7703393702 22.0224243957 20.3034636122 3.3515794172 0.0006844935 0.0458598502 0.6967704496 - 500 -5025.4050172900 -5042.1712310053 16.7662137153 -5013.1850218645 -28.9862091408 95.4444989087 22.0220673443 20.3074634962 3.4286173278 -0.0078273439 0.0340764532 0.6845095066 - 600 -5025.3985715734 -5041.2158947893 15.8173232159 -5012.4875319345 -28.7283628548 90.0427797270 22.0209262700 20.3103065099 3.4653840648 -0.0141442608 0.0229602847 0.0009001093 - 700 -5025.3997561572 -5041.6276721306 16.2279159734 -5012.7093581188 -28.9183140118 92.3801482386 22.0191651506 20.3120184840 3.4291788224 -0.0208485646 0.0104216414 -0.6668311564 - 800 -5025.3967603736 -5042.3401685987 16.9434082251 -5013.3044877099 -29.0356808888 96.4532085367 22.0167259920 20.3122737443 3.3535033285 -0.0279747378 -0.0060833621 -0.7003492925 - 900 -5025.3984542801 -5042.2820667481 16.8836124680 -5013.4066841442 -28.8753826039 96.1128111061 22.0136711877 20.3107854823 3.3206430872 -0.0331979094 -0.0237440547 0.1335648638 - 1000 -5025.3988185618 -5041.9160822433 16.5172636815 -5012.8147737982 -29.1013084450 94.0273088606 22.0102627032 20.3075977018 3.3736867454 -0.0340065996 -0.0390649991 0.7872380119 -Loop time of 156.142 on 1 procs for 1000 steps with 1360 atoms + 0 -5025.3867727863 -5040.0767396377 14.6899668514 -5011.2636302897 -28.8131093480 83.6251135127 22.0155657205 20.2812150219 3.4623630945 0.0282287195 0.0535565745 0.2193320108 + 100 -5025.3962438431 -5041.3829780735 15.9867342304 -5012.5109382383 -28.8720398352 91.0071804956 22.0181858078 20.2867731676 3.4456714402 0.0241525932 0.0573807336 -0.5235069015 + 200 -5025.3942574000 -5041.9638225847 16.5695651847 -5012.7804304371 -29.1833921476 94.3250439874 22.0203529515 20.2926376511 3.3740502908 0.0186420748 0.0595018114 -0.7867265578 + 300 -5025.3919468212 -5040.9705424499 15.5785956286 -5012.0510300232 -28.9195124266 88.6837826792 22.0218424095 20.2984380400 3.3199036613 0.0106250874 0.0544668352 -0.1513745907 + 400 -5025.3965382086 -5041.6929969192 16.2964587107 -5012.6418095739 -29.0511873454 92.7703393292 22.0224243957 20.3034636122 3.3515794172 0.0006844935 0.0458598502 0.6967704497 + 500 -5025.4050178038 -5042.1712315208 16.7662137170 -5013.1850223792 -28.9862091417 95.4444989189 22.0220673443 20.3074634962 3.4286173278 -0.0078273439 0.0340764532 0.6845095066 + 600 -5025.3985720873 -5041.2158953052 15.8173232179 -5012.4875324499 -28.7283628553 90.0427797386 22.0209262700 20.3103065099 3.4653840648 -0.0141442608 0.0229602847 0.0009001092 + 700 -5025.3997566711 -5041.6276726420 16.2279159709 -5012.7093586298 -28.9183140122 92.3801482242 22.0191651506 20.3120184840 3.4291788224 -0.0208485646 0.0104216414 -0.6668311565 + 800 -5025.3967608874 -5042.3401691104 16.9434082230 -5013.3044882226 -29.0356808878 96.4532085250 22.0167259920 20.3122737443 3.3535033285 -0.0279747378 -0.0060833621 -0.7003492926 + 900 -5025.3984547937 -5042.2820672614 16.8836124676 -5013.4066846579 -28.8753826035 96.1128111040 22.0136711877 20.3107854823 3.3206430872 -0.0331979094 -0.0237440547 0.1335648640 + 1000 -5025.3988190757 -5041.9160827657 16.5172636900 -5012.8147743212 -29.1013084444 94.0273089090 22.0102627032 20.3075977018 3.3736867454 -0.0340065996 -0.0390649991 0.7872380119 +Loop time of 103.724 on 1 procs for 1000 steps with 1360 atoms -Performance: 0.553 ns/day, 43.373 hours/ns, 6.404 timesteps/s -99.6% CPU use with 1 MPI tasks x 1 OpenMP threads +Performance: 0.833 ns/day, 28.812 hours/ns, 9.641 timesteps/s +99.9% CPU use with 1 MPI tasks x 1 OpenMP threads MPI task timing breakdown: Section | min time | avg time | max time |%varavg| %total --------------------------------------------------------------- -Pair | 155.99 | 155.99 | 155.99 | 0.0 | 99.90 -Bond | 0.00075769 | 0.00075769 | 0.00075769 | 0.0 | 0.00 +Pair | 103.59 | 103.59 | 103.59 | 0.0 | 99.87 +Bond | 0.00022388 | 0.00022388 | 0.00022388 | 0.0 | 0.00 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.084217 | 0.084217 | 0.084217 | 0.0 | 0.05 -Output | 0.0016122 | 0.0016122 | 0.0016122 | 0.0 | 0.00 -Modify | 0.034797 | 0.034797 | 0.034797 | 0.0 | 0.02 -Other | | 0.02838 | | | 0.02 +Comm | 0.082476 | 0.082476 | 0.082476 | 0.0 | 0.08 +Output | 0.0010884 | 0.0010884 | 0.0010884 | 0.0 | 0.00 +Modify | 0.032938 | 0.032938 | 0.032938 | 0.0 | 0.03 +Other | | 0.01749 | | | 0.02 Nlocal: 1360 ave 1360 max 1360 min Histogram: 1 0 0 0 0 0 0 0 0 0 @@ -133,4 +136,4 @@ Ave neighs/atom = 195.004 Ave special neighs/atom = 0 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:02:36 +Total wall time: 0:01:43 diff --git a/examples/USER/misc/kolmogorov_crespi_full/log.16Mar18.bilayer-graphene.g++.4 b/examples/USER/misc/kolmogorov_crespi_full/log.5Jun19.bilayer-graphene.g++.4 similarity index 59% rename from examples/USER/misc/kolmogorov_crespi_full/log.16Mar18.bilayer-graphene.g++.4 rename to examples/USER/misc/kolmogorov_crespi_full/log.5Jun19.bilayer-graphene.g++.4 index 58322f9ce0..b90ee7ee2e 100644 --- a/examples/USER/misc/kolmogorov_crespi_full/log.16Mar18.bilayer-graphene.g++.4 +++ b/examples/USER/misc/kolmogorov_crespi_full/log.5Jun19.bilayer-graphene.g++.4 @@ -1,4 +1,5 @@ -LAMMPS (8 Mar 2018) +LAMMPS (5 Jun 2019) +OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:88) using 1 OpenMP thread(s) per MPI task # Initialization units metal @@ -21,6 +22,8 @@ read_data Bi_gr_AB_stack_2L_noH_300K.data 0 = max # of 1-3 neighbors 0 = max # of 1-4 neighbors 1 = max # of special neighbors + special bonds CPU = 0.000187874 secs + read_data CPU = 0.00234103 secs mass 1 12.0107 # carbon mass (g/mole) | membrane mass 2 12.0107 # carbon mass (g/mole) | adsorbate # Separate atom groups @@ -32,8 +35,8 @@ group adsorbate type 2 ######################## Potential defition ######################## pair_style hybrid/overlay rebo kolmogorov/crespi/full 16.0 #################################################################### -pair_coeff * * rebo CH.airebo NULL C # chemical -Reading potential file CH.airebo with DATE: 2011-10-25 +pair_coeff * * rebo CH.rebo NULL C # chemical +Reading potential file CH.rebo with DATE: 2018-7-3 pair_coeff * * kolmogorov/crespi/full CC.KC-full C C # long range #################################################################### # Neighbor update settings @@ -92,32 +95,32 @@ Neighbor list info ... bin: standard Per MPI rank memory allocation (min/avg/max) = 11.13 | 11.13 | 11.13 Mbytes Step TotEng PotEng KinEng v_REBO v_KC Temp v_adsxcom v_adsycom v_adszcom v_adsvxcom v_adsvycom v_adsvzcom - 0 -5025.3867722725 -5040.0767391239 14.6899668514 -5011.2636297759 -28.8131093480 83.6251135127 22.0155657205 20.2812150219 3.4623630945 0.0282287195 0.0535565745 0.2193320108 - 100 -5025.3962433293 -5041.3829775585 15.9867342292 -5012.5109377234 -28.8720398351 91.0071804888 22.0181858078 20.2867731676 3.4456714402 0.0241525932 0.0573807336 -0.5235069014 - 200 -5025.3942568861 -5041.9638220670 16.5695651809 -5012.7804299195 -29.1833921475 94.3250439654 22.0203529515 20.2926376511 3.3740502908 0.0186420748 0.0595018114 -0.7867265577 - 300 -5025.3919463074 -5040.9705419367 15.5785956293 -5012.0510295103 -28.9195124265 88.6837826830 22.0218424095 20.2984380400 3.3199036613 0.0106250874 0.0544668352 -0.1513745908 - 400 -5025.3965376948 -5041.6929964127 16.2964587179 -5012.6418090677 -29.0511873450 92.7703393702 22.0224243957 20.3034636122 3.3515794172 0.0006844935 0.0458598502 0.6967704496 - 500 -5025.4050172900 -5042.1712310053 16.7662137153 -5013.1850218645 -28.9862091408 95.4444989088 22.0220673443 20.3074634962 3.4286173278 -0.0078273439 0.0340764532 0.6845095066 - 600 -5025.3985715734 -5041.2158947893 15.8173232159 -5012.4875319345 -28.7283628548 90.0427797270 22.0209262700 20.3103065099 3.4653840648 -0.0141442608 0.0229602847 0.0009001093 - 700 -5025.3997561572 -5041.6276721306 16.2279159734 -5012.7093581188 -28.9183140118 92.3801482386 22.0191651506 20.3120184840 3.4291788224 -0.0208485646 0.0104216414 -0.6668311564 - 800 -5025.3967603736 -5042.3401685987 16.9434082251 -5013.3044877099 -29.0356808888 96.4532085367 22.0167259920 20.3122737443 3.3535033285 -0.0279747378 -0.0060833621 -0.7003492925 - 900 -5025.3984542801 -5042.2820667481 16.8836124680 -5013.4066841442 -28.8753826039 96.1128111061 22.0136711877 20.3107854823 3.3206430872 -0.0331979094 -0.0237440547 0.1335648638 - 1000 -5025.3988185618 -5041.9160822433 16.5172636815 -5012.8147737983 -29.1013084450 94.0273088606 22.0102627032 20.3075977018 3.3736867454 -0.0340065996 -0.0390649991 0.7872380119 -Loop time of 42.5422 on 4 procs for 1000 steps with 1360 atoms + 0 -5025.3867727863 -5040.0767396377 14.6899668514 -5011.2636302897 -28.8131093480 83.6251135127 22.0155657205 20.2812150219 3.4623630945 0.0282287195 0.0535565745 0.2193320108 + 100 -5025.3962438431 -5041.3829780735 15.9867342304 -5012.5109382383 -28.8720398352 91.0071804956 22.0181858078 20.2867731676 3.4456714402 0.0241525932 0.0573807336 -0.5235069015 + 200 -5025.3942574000 -5041.9638225847 16.5695651847 -5012.7804304371 -29.1833921476 94.3250439874 22.0203529515 20.2926376511 3.3740502908 0.0186420748 0.0595018114 -0.7867265578 + 300 -5025.3919468212 -5040.9705424499 15.5785956286 -5012.0510300232 -28.9195124266 88.6837826792 22.0218424095 20.2984380400 3.3199036613 0.0106250874 0.0544668352 -0.1513745907 + 400 -5025.3965382086 -5041.6929969192 16.2964587107 -5012.6418095739 -29.0511873454 92.7703393291 22.0224243957 20.3034636122 3.3515794172 0.0006844935 0.0458598502 0.6967704497 + 500 -5025.4050178038 -5042.1712315208 16.7662137170 -5013.1850223792 -28.9862091417 95.4444989189 22.0220673443 20.3074634962 3.4286173278 -0.0078273439 0.0340764532 0.6845095066 + 600 -5025.3985720873 -5041.2158953052 15.8173232179 -5012.4875324499 -28.7283628553 90.0427797386 22.0209262700 20.3103065099 3.4653840648 -0.0141442608 0.0229602847 0.0009001092 + 700 -5025.3997566711 -5041.6276726420 16.2279159709 -5012.7093586298 -28.9183140122 92.3801482242 22.0191651506 20.3120184840 3.4291788224 -0.0208485646 0.0104216414 -0.6668311565 + 800 -5025.3967608874 -5042.3401691104 16.9434082230 -5013.3044882226 -29.0356808878 96.4532085250 22.0167259920 20.3122737443 3.3535033285 -0.0279747378 -0.0060833621 -0.7003492926 + 900 -5025.3984547938 -5042.2820672614 16.8836124676 -5013.4066846579 -28.8753826035 96.1128111040 22.0136711877 20.3107854823 3.3206430872 -0.0331979094 -0.0237440547 0.1335648640 + 1000 -5025.3988190757 -5041.9160827657 16.5172636900 -5012.8147743212 -29.1013084444 94.0273089090 22.0102627032 20.3075977018 3.3736867454 -0.0340065996 -0.0390649991 0.7872380119 +Loop time of 33.7338 on 4 procs for 1000 steps with 1360 atoms -Performance: 2.031 ns/day, 11.817 hours/ns, 23.506 timesteps/s -98.9% CPU use with 4 MPI tasks x 1 OpenMP threads +Performance: 2.561 ns/day, 9.370 hours/ns, 29.644 timesteps/s +94.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 | 39.928 | 40.992 | 42.377 | 15.8 | 96.36 -Bond | 0.0003643 | 0.00043392 | 0.00048113 | 0.0 | 0.00 +Pair | 30.833 | 31.356 | 32.18 | 9.1 | 92.95 +Bond | 0.00026059 | 0.00029182 | 0.00031185 | 0.0 | 0.00 Neigh | 0 | 0 | 0 | 0.0 | 0.00 -Comm | 0.12253 | 1.5076 | 2.5698 | 82.1 | 3.54 -Output | 0.0012577 | 0.0013637 | 0.0016453 | 0.4 | 0.00 -Modify | 0.010833 | 0.012247 | 0.013317 | 0.9 | 0.03 -Other | | 0.02864 | | | 0.07 +Comm | 1.443 | 2.2722 | 2.8091 | 34.3 | 6.74 +Output | 0.00068855 | 0.00095087 | 0.0017185 | 0.0 | 0.00 +Modify | 0.010187 | 0.011709 | 0.015284 | 1.9 | 0.03 +Other | | 0.09241 | | | 0.27 Nlocal: 340 ave 344 max 334 min Histogram: 1 0 0 0 0 0 1 0 1 1 @@ -133,4 +136,4 @@ Ave neighs/atom = 195.004 Ave special neighs/atom = 0 Neighbor list builds = 0 Dangerous builds = 0 -Total wall time: 0:00:42 +Total wall time: 0:00:33 From 995b6b31a240a3f1315c4641764727c53858afdd Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 17 Jun 2019 16:05:54 -0400 Subject: [PATCH 304/311] flag a couple more packages that contain sub-builds of downloaded code --- cmake/Modules/Packages/MSCG.cmake | 3 +++ cmake/Modules/Packages/USER-SCAFACOS.cmake | 3 +++ 2 files changed, 6 insertions(+) diff --git a/cmake/Modules/Packages/MSCG.cmake b/cmake/Modules/Packages/MSCG.cmake index e8744bc192..b442580583 100644 --- a/cmake/Modules/Packages/MSCG.cmake +++ b/cmake/Modules/Packages/MSCG.cmake @@ -11,6 +11,9 @@ if(PKG_MSCG) if (CMAKE_VERSION VERSION_LESS "3.7") # due to SOURCE_SUBDIR message(FATAL_ERROR "For downlading MSCG you need at least cmake-3.7") endif() + if(CMAKE_GENERATOR STREQUAL "Ninja") + message(FATAL_ERROR "Cannot build downloaded MSCG library with Ninja build tool") + endif() include(ExternalProject) if(NOT LAPACK_FOUND) set(EXTRA_MSCG_OPTS "-DLAPACK_LIBRARIES=${CMAKE_CURRENT_BINARY_DIR}/liblinalg.a") diff --git a/cmake/Modules/Packages/USER-SCAFACOS.cmake b/cmake/Modules/Packages/USER-SCAFACOS.cmake index adb002081f..475f2585c8 100644 --- a/cmake/Modules/Packages/USER-SCAFACOS.cmake +++ b/cmake/Modules/Packages/USER-SCAFACOS.cmake @@ -13,6 +13,9 @@ if(PKG_USER-SCAFACOS) endif() option(DOWNLOAD_SCAFACOS "Download ScaFaCoS library instead of using an already installed one" ${DOWNLOAD_SCAFACOS_DEFAULT}) if(DOWNLOAD_SCAFACOS) + if(CMAKE_GENERATOR STREQUAL "Ninja") + message(FATAL_ERROR "Cannot build downloaded ScaFaCoS library with Ninja build tool") + endif() message(STATUS "ScaFaCoS download requested - we will build our own") include(ExternalProject) ExternalProject_Add(scafacos_build From 81cdce9b04fe4d50fe2d568baed3afccb40da2d1 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 18 Jun 2019 00:14:48 -0400 Subject: [PATCH 305/311] flag and document that USER-TALLY computes are not compatible with dynamic groups --- doc/src/compute_tally.txt | 2 ++ src/USER-TALLY/compute_force_tally.cpp | 1 + src/USER-TALLY/compute_heat_flux_tally.cpp | 1 + src/USER-TALLY/compute_pe_mol_tally.cpp | 1 + src/USER-TALLY/compute_pe_tally.cpp | 1 + src/USER-TALLY/compute_stress_tally.cpp | 1 + 6 files changed, 7 insertions(+) diff --git a/doc/src/compute_tally.txt b/doc/src/compute_tally.txt index 6401be54e9..125eba1302 100644 --- a/doc/src/compute_tally.txt +++ b/doc/src/compute_tally.txt @@ -88,6 +88,8 @@ potentials only include the pair potential portion of the EAM interaction when used by this compute, not the embedding term. Also bonded or Kspace interactions do not contribute to this compute. +The computes in this package are not compatible with dynamic groups. + [Related commands:] {compute group/group}_compute_group_group.html, {compute diff --git a/src/USER-TALLY/compute_force_tally.cpp b/src/USER-TALLY/compute_force_tally.cpp index 0ec1d332a4..ba155db586 100644 --- a/src/USER-TALLY/compute_force_tally.cpp +++ b/src/USER-TALLY/compute_force_tally.cpp @@ -41,6 +41,7 @@ ComputeForceTally::ComputeForceTally(LAMMPS *lmp, int narg, char **arg) : vector_flag = 0; peratom_flag = 1; timeflag = 1; + dynamic_group_allow = 0; comm_reverse = size_peratom_cols = 3; extscalar = 1; diff --git a/src/USER-TALLY/compute_heat_flux_tally.cpp b/src/USER-TALLY/compute_heat_flux_tally.cpp index f8db92a730..4aff25d952 100644 --- a/src/USER-TALLY/compute_heat_flux_tally.cpp +++ b/src/USER-TALLY/compute_heat_flux_tally.cpp @@ -38,6 +38,7 @@ ComputeHeatFluxTally::ComputeHeatFluxTally(LAMMPS *lmp, int narg, char **arg) : vector_flag = 1; timeflag = 1; + dynamic_group_allow = 0; comm_reverse = 7; extvector = 1; diff --git a/src/USER-TALLY/compute_pe_mol_tally.cpp b/src/USER-TALLY/compute_pe_mol_tally.cpp index 264ddca270..08b3ae4d73 100644 --- a/src/USER-TALLY/compute_pe_mol_tally.cpp +++ b/src/USER-TALLY/compute_pe_mol_tally.cpp @@ -39,6 +39,7 @@ ComputePEMolTally::ComputePEMolTally(LAMMPS *lmp, int narg, char **arg) : vector_flag = 1; size_vector = 4; timeflag = 1; + dynamic_group_allow = 0; extvector = 1; peflag = 1; // we need Pair::ev_tally() to be run diff --git a/src/USER-TALLY/compute_pe_tally.cpp b/src/USER-TALLY/compute_pe_tally.cpp index 3031915ebe..7b920d903d 100644 --- a/src/USER-TALLY/compute_pe_tally.cpp +++ b/src/USER-TALLY/compute_pe_tally.cpp @@ -40,6 +40,7 @@ ComputePETally::ComputePETally(LAMMPS *lmp, int narg, char **arg) : vector_flag = 0; peratom_flag = 1; timeflag = 1; + dynamic_group_allow = 0; comm_reverse = size_peratom_cols = 2; extscalar = 1; diff --git a/src/USER-TALLY/compute_stress_tally.cpp b/src/USER-TALLY/compute_stress_tally.cpp index 8ed40ae8e2..f61f498f43 100644 --- a/src/USER-TALLY/compute_stress_tally.cpp +++ b/src/USER-TALLY/compute_stress_tally.cpp @@ -41,6 +41,7 @@ ComputeStressTally::ComputeStressTally(LAMMPS *lmp, int narg, char **arg) : vector_flag = 0; peratom_flag = 1; timeflag = 1; + dynamic_group_allow = 0; comm_reverse = size_peratom_cols = 6; extscalar = 0; From 961dcfc2619d8d3b5ebc3a4e9b424e776d239e81 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 18 Jun 2019 11:50:06 -0400 Subject: [PATCH 306/311] mention alternate build environment generators for cmake --- doc/src/Build_cmake.txt | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/doc/src/Build_cmake.txt b/doc/src/Build_cmake.txt index 265c16e3d4..a16ba995a8 100644 --- a/doc/src/Build_cmake.txt +++ b/doc/src/Build_cmake.txt @@ -32,10 +32,18 @@ cmake \[options ...\] ../cmake # configuration with (command-line) cmake make # compilation :pre The cmake command will detect available features, enable selected -packages and options, and will generate the build environment. The make -command will then compile and link LAMMPS, producing (by default) an -executable called "lmp" and a library called "liblammps.a" in the -"build" folder. +packages and options, and will generate the build environment. By default +this build environment will be created for "Unix Makefiles" on most +platforms and particularly on Linux. However, alternate build tools +(e.g. Ninja) and support files for Integrated Development Environments +(IDE) like Eclipse, CodeBlocks, or Kate can be generated, too. This is +selected via the "-G" command line flag. For the rest of the documentation +we will assume that the build environment is generated for makefiles +and thus the make command will be used to compile and link LAMMPS as +indicated above, producing (by default) an executable called "lmp" and +a library called "liblammps.a" in the "build" folder. When generating +a build environment for the "Ninja" build tool, the build command would +be "ninja" instead of "make". If your machine has multiple CPU cores (most do these days), using a command like "make -jN" (with N being the number of available local From d98c105d3433655fc4f0e6aeb0085f71e3f49668 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 18 Jun 2019 11:52:09 -0400 Subject: [PATCH 307/311] step version string to 18 June 2019 --- doc/lammps.1 | 2 +- doc/src/Manual.txt | 4 ++-- src/version.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/lammps.1 b/doc/lammps.1 index f4a801779a..7ba31bfd06 100644 --- a/doc/lammps.1 +++ b/doc/lammps.1 @@ -1,4 +1,4 @@ -.TH LAMMPS "5 June 2019" "2019-06-05" +.TH LAMMPS "18 June 2019" "2019-06-18" .SH NAME .B LAMMPS \- Molecular Dynamics Simulator. diff --git a/doc/src/Manual.txt b/doc/src/Manual.txt index 2fa9623f36..ba6ab8aac7 100644 --- a/doc/src/Manual.txt +++ b/doc/src/Manual.txt @@ -1,7 +1,7 @@ LAMMPS Users Manual - + @@ -21,7 +21,7 @@ :line LAMMPS Documentation :c,h1 -5 Jun 2019 version :c,h2 +18 Jun 2019 version :c,h2 "What is a LAMMPS version?"_Manual_version.html diff --git a/src/version.h b/src/version.h index 06ee8ab8f4..c2f6fcaf92 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define LAMMPS_VERSION "5 Jun 2019" +#define LAMMPS_VERSION "18 Jun 2019" From 98fbaef406c77e138733419e54a7834ce6fcf89f Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 18 Jun 2019 15:00:27 -0400 Subject: [PATCH 308/311] workaround for ICE issue with gcc 4.8.x --- src/lmptype.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lmptype.h b/src/lmptype.h index 20d29880ed..12fa6cc4fb 100644 --- a/src/lmptype.h +++ b/src/lmptype.h @@ -211,7 +211,7 @@ typedef int bigint; #elif defined(__INTEL_COMPILER) # define _noopt #elif defined(__GNUC__) -# if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) +# if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 9)) # define _noopt __attribute__((optimize("O0","no-var-tracking-assignments"))) # else # define _noopt __attribute__((optimize("O0"))) From c9fc83ef6fefbbb5dd8b94de535fe820750b1dca Mon Sep 17 00:00:00 2001 From: Anne Gunn Date: Thu, 20 Jun 2019 08:16:20 -0600 Subject: [PATCH 309/311] Move two non-equation images from Eqs folder to JPG folder --- doc/src/{Eqs => JPG}/dreiding_hbond.jpg | Bin doc/src/{Eqs => JPG}/umbrella.jpg | Bin doc/src/improper_fourier.txt | 2 +- doc/src/improper_inversion_harmonic.txt | 2 +- doc/src/improper_umbrella.txt | 2 +- doc/src/pair_hbond_dreiding.txt | 2 +- 6 files changed, 4 insertions(+), 4 deletions(-) rename doc/src/{Eqs => JPG}/dreiding_hbond.jpg (100%) rename doc/src/{Eqs => JPG}/umbrella.jpg (100%) diff --git a/doc/src/Eqs/dreiding_hbond.jpg b/doc/src/JPG/dreiding_hbond.jpg similarity index 100% rename from doc/src/Eqs/dreiding_hbond.jpg rename to doc/src/JPG/dreiding_hbond.jpg diff --git a/doc/src/Eqs/umbrella.jpg b/doc/src/JPG/umbrella.jpg similarity index 100% rename from doc/src/Eqs/umbrella.jpg rename to doc/src/JPG/umbrella.jpg diff --git a/doc/src/improper_fourier.txt b/doc/src/improper_fourier.txt index 8b2021dccd..1b569b3894 100644 --- a/doc/src/improper_fourier.txt +++ b/doc/src/improper_fourier.txt @@ -27,7 +27,7 @@ The {fourier} improper style uses the following potential: where K is the force constant and omega is the angle between the IL axis and the IJK plane: -:c,image(Eqs/umbrella.jpg) +:c,image(JPG/umbrella.jpg) If all parameter (see bellow) is not zero, the all the three possible angles will taken in account. diff --git a/doc/src/improper_inversion_harmonic.txt b/doc/src/improper_inversion_harmonic.txt index 857eaecc5f..bf114daeb0 100644 --- a/doc/src/improper_inversion_harmonic.txt +++ b/doc/src/improper_inversion_harmonic.txt @@ -28,7 +28,7 @@ where K is the force constant and omega is the angle evaluated for all three axis-plane combinations centered around the atom I. For the IL axis and the IJK plane omega looks as follows: -:c,image(Eqs/umbrella.jpg) +:c,image(JPG/umbrella.jpg) Note that the {inversion/harmonic} angle term evaluation differs to the "improper_umbrella"_improper_umbrella.html due to the cyclic diff --git a/doc/src/improper_umbrella.txt b/doc/src/improper_umbrella.txt index 6c29ec7ac5..9fe6ac07e1 100644 --- a/doc/src/improper_umbrella.txt +++ b/doc/src/improper_umbrella.txt @@ -29,7 +29,7 @@ commonly referred to as a classic inversion and used in the where K is the force constant and omega is the angle between the IL axis and the IJK plane: -:c,image(Eqs/umbrella.jpg) +:c,image(JPG/umbrella.jpg) If omega0 = 0 the potential term has a minimum for the planar structure. Otherwise it has two minima at +/- omega0, with a barrier diff --git a/doc/src/pair_hbond_dreiding.txt b/doc/src/pair_hbond_dreiding.txt index 9dd0bed87f..ec470f601f 100644 --- a/doc/src/pair_hbond_dreiding.txt +++ b/doc/src/pair_hbond_dreiding.txt @@ -46,7 +46,7 @@ Here, {r} is the radial distance between the donor (D) and acceptor (A) atoms and {theta} is the bond angle between the acceptor, the hydrogen (H) and the donor atoms: -:c,image(Eqs/dreiding_hbond.jpg) +:c,image(JPG/dreiding_hbond.jpg) These 3-body interactions can be defined for pairs of acceptor and donor atoms, based on atom types. For each donor/acceptor atom pair, From bc224bc66ed6e9fdf5a90ea7c2120600c31cbb18 Mon Sep 17 00:00:00 2001 From: Anne Gunn Date: Thu, 20 Jun 2019 09:15:40 -0600 Subject: [PATCH 310/311] Eliminate a doc build warning. pair_spin_dipole.txt was recently edited. Much content was removed and it no longer contained any internal reference links. But it still had a link anchor at the bottom. This was generating a build warning. I've removed the unused link anchor and an unneeded line separator. --- doc/src/pair_spin_dipole.txt | 6 ------ 1 file changed, 6 deletions(-) diff --git a/doc/src/pair_spin_dipole.txt b/doc/src/pair_spin_dipole.txt index 2f27f91d08..0d6471e07f 100644 --- a/doc/src/pair_spin_dipole.txt +++ b/doc/src/pair_spin_dipole.txt @@ -81,9 +81,3 @@ currently supported. "fix nve/spin"_fix_nve_spin.html [Default:] none - -:line - -:link(Allen2) -[(Allen)] Allen and Tildesley, Computer Simulation of Liquids, -Clarendon Press, Oxford, 1987. From c460d05bc628de96374bdbcf9ae81dabb0c15ac2 Mon Sep 17 00:00:00 2001 From: Aidan Thompson Date: Fri, 21 Jun 2019 00:26:44 -0600 Subject: [PATCH 311/311] Added NULL initialization for snaptr --- src/SNAP/pair_snap.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/SNAP/pair_snap.cpp b/src/SNAP/pair_snap.cpp index 6eb05f85a4..f9ba8922a0 100644 --- a/src/SNAP/pair_snap.cpp +++ b/src/SNAP/pair_snap.cpp @@ -52,6 +52,7 @@ PairSNAP::PairSNAP(LAMMPS *lmp) : Pair(lmp) beta_max = 0; beta = NULL; bispectrum = NULL; + snaptr = NULL; } /* ---------------------------------------------------------------------- */

ehX04CqfOg*z8dawO!6j%Oj%AeDg&U`$Wu}%5a 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Ν>%KT&V;OMwGyUIDARVHac?qV1?k~Ssd=rTHB#;a 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∈loOio#+@0lmg8n!*c){k0O`If3z- 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�lg1HqNR)OaZW zRNMXnO!VIW%9LnK%~Y#xSktEO+U$3L+^y|PLRm}knR!Y3Dy>@tBzlSE_xx&x_;ssf zDS3KWf8(|1Ef55Eclu&c$i7u@L~YyvJUgIo83wUH3xjUoIA*^@%gj3u z3T-w`&|E3>F>=gM93ou7@WNnpNNlQN-|&JT5KC|a^7myY4GwbwCmYw}e$#yD4T@Ky zr;;uyry4E_jGjH>j|M=}0>lH^`&rwdN7T>$OphduWOCI?-%+F8JP#+l3Ys>7dl81C zUlF$PK`S7*h8r9XQH8)6>K`1E>9)`yb&x$d`QufDHfqAS|;!IfGJ;d&<JRNIVE-n$7l_xx^ubo9G&hsCMM(Z^a~>5jw_wnjH6IX@0Zg)SmE6-_>Yr zvDOpzXMcO+wQxlJ&TqukuI=H;+x*5l_08ImY;T{C@V52Ps{3Q}+mVDrF^bx_^kjc_ z@1Mg3@=g5Dcn++n&7n0~wv($J8LPLT#G#Kub-u<|2>HuGbyq|F}@x&vgl?N4gaf$-Kbp=HWAOCN8SI-IJpaNzYlB^`xxT;4KoqqiqcjyIvO?t zbfHj+P!!Z(Hf78&)OF#RP3e9Ljs9K;ddmV^;{6PeQ;c*7&xBb)1>7{?nU9$V+Jp8X zDS-hm4QMTc=mfh&O+X7a3-(MyhyH@s74p`slg9zh#A{F>*3!jUlj@x2is6}wwVm02+4=7dSShH z0PFG>{a3@i8(}ZkP~?!bX%RNp@cAY8NAC=8d;DGD%U%>^U0gZX`MpY@3--6i4#~Fk zQf1C2hlBWO8=RZP7+dtPs+@5x5qk^&sUhl&Fhg`V{!xOEihYGXl|#2LD6&1IwA2KV z0Z#UyK!zZRPi`@zI$^r|pT&3}ayB&AItB3wQgj(9kb3SWPfmm?7gv8DGp%TNq0_J2 z+HUsDlSh80lkNlZ=s*a*isodInfANRQ(L*czKU`eau*bmf%||?Puvn(f-i<}ZdjvI zlmsFFB3AMm1#P^8(0uZ@pjJkmAy@Qw@+l|olStO;yRTr74$JSTzDGlz-}IC)?TGu- zU!u6!gKye%#NUW5X+S7gArIEA|5`*M@tcZZX*iHAKpX^z{gC@-ggAXwdXFJvUVdu^ z&0^k%qMHu^X&hRGs2AD;OuCReZL>KAwrqZnR$3Z_2P5W~ayf)~RyLlB{T+cQ7cXY) zcj`8`^cELhVCYU$jDO}QMD#%{K4cshRONx5g_RdtFUZWx*TeTb&ygiCl0UqvF%y;f z1tf$3K=Xw*|9yk~Gj$IyI%fE@3z<_N8Q)iduLTKto8g4H-Ax`CmxHiAh)LT3p%6wN zVG9Tdn^OmG4cD&bz#Ickd+vLrKG8f zY(~G-(Z?3+;c1IOh6vQEv7Z=WN+H+)s=vGTefiO`)$W5g=sL&q`flBLIeJnP+$f^u z84(~g-BicK{+;;s_!~}Ek{{`uEz2v5n&CdafSV59bOOV|gD$(nFfR*~@?=C~zvi>vBy~rZN)&=-1Yu;% zU=sUXU0{#%{!J-7mbzCgxr-o_E|I+AGz_V7K|_7?QJ{;w_ILx+@5_==3KB~L z?e@RvKpdfopVCkoJSYa)@DZVoChE*xCThl8!S;D%G%aSZuYBgR?Gf ztZA_}_cL&u>{79ycy;PhO;9n}?TjkFM$MP#N>9K*+O={BK*!m_?27Q26*4HI*(d_u z$80rLIl(xOcJ{m;KO>f%eQ;d1p)jhm0(E}dj!U|PtSlmB$Iou1XK41zXQ#E^ryF$J zN`Br%j~qpvqydRDe+0Tak-H`?{pMHyAa|b8gkSoBp-B2)wl1x&ms&gVx}q+eAo)Bx z*ZQN7jMyzYHz&NiLofU&wl+{i=8rECC@wuPLV350w$42QGiUx-DJ_%iT>`H2RoeVv zy85q_2N?O#Yzi?%Opo&+FFsU|*u-*c_Ve;Y)K^i&2gktw-LB*AVdm!H<7Q=z%)`kA O1aKnL(MhRDBmXz2ri8-) delta 238450 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